npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

scrypted-camera-grid

v0.0.2

Published

Grade multi-câmera ao vivo dentro do Scrypted, via WebRTC nativo.

Readme

Camera Grid — plugin do Scrypted

Parede multi-câmera ao vivo dentro do Scrypted. Mantém tudo que o Scrypted já faz e soma uma página de grade, de graça. Sem RTSP/go2rtc próprio: usa o WebRTC nativo do Scrypted (startRTCSignalingSession), então herda a negociação de stream já pronta de cada câmera — inclusive transcode quando a câmera precisa.

Por que existe: o console grátis do Scrypted mostra uma câmera por vez; a parede de várias só vem no NVR pago. Este plugin dá a grade sem NVR e sem um segundo processo puxando RTSP (o que estoura o limite de sessões de câmeras baratas, tipo Tapo).

Recursos

  • Grade de todas as câmeras com RTCSignalingChannel (qualquer câmera WebRTC do Scrypted).
  • Seleção e layout por navegador: escolha quais câmeras aparecem (⚙) e o nº de colunas; fica salvo no localStorage.
  • PTZ: câmeras com PanTiltZoom ganham um pad de setas (usa ptzCommand nativo — o plugin da câmera executa o movimento; nenhum código de protocolo aqui).
  • Tela cheia (duplo-clique ou ⛶): reconecta o stream pra renegociar numa resolução maior.
  • Auto-reconexão: se o WebRTC cai (ICE failed/disconnected), reconecta sozinho com backoff.
  • Atalho no painel: aparece como app clicável na home do Scrypted (LauncherApplication).

Instalação

Pelo store do Scrypted (recomendado): Plugins → Install → procure por camera grid.

Por npm:

npm install -g scrypted-camera-grid   # ou instale pelo próprio Scrypted

Depois abra: home do Scrypted → Camera Grid, ou direto em https://<host>:10443/endpoint/scrypted-camera-grid/public/. Precisa estar logado no Scrypted (a página reusa a sessão).

Como funciona

browser (/endpoint/scrypted-camera-grid/public/)
  app.js  ──@scrypted/client (mesma origem, sessão logada)──> systemManager
          ──startRTCSignalingSession──> cada câmera ──WebRTC──> <video>
  • src/main.ts — servidor: HttpRequestHandler serve a página (/) e o bundle (/app.js). Não toca em vídeo. Implementa LauncherApplication.
  • src/web/app.ts — browser: conecta via @scrypted/client, lista as câmeras, renderiza cada uma num <video> por WebRTC nativo; seleção/colunas persistidas; auto-reconexão.
  • src/web/vendor/ — BrowserSignalingSession + Deferred vendorizados de koush/scrypted (MIT), pra não depender da versão publicada de @scrypted/common.
  • build-web.mjs — esbuild empacota o app de browser e grava src/generated/assets.ts (strings), servido inline pelo servidor (não depende do FS do plugin em runtime).

Desenvolvimento

npm install
npx scrypted login 127.0.0.1        # 1ª vez
npm run scrypted-deploy 127.0.0.1   # empacota + envia
npm run dev                         # watch: redeploy a cada save

Limites

  • Só lista câmeras que o Scrypted expõe como WebRTC (RTCSignalingChannel). Configure a câmera no Scrypted primeiro.
  • A seleção/colunas é por navegador (localStorage), não compartilhada entre dispositivos.
  • Câmeras com GOP longo em 2K podem demorar/engasgar em tela cheia — é da câmera, não do grid.

Licença

MIT. Ver LICENSE e src/web/vendor/NOTICE.md.