VibeNVR, ovvero Come Configurare la Videosorveglianza Locale Senza Cloud e Sofferenza
Chiunque abbia provato a configurare la videosorveglianza domestica sui propri server conosce questo dolore. Il buon vecchio ZoneMinder sembra un relitto della fine degli anni novanta. Shinobi ogni tanto combina casini con memory leak. Frigate è figo e performante, ma modificare file YAML lunghi un chilometro solo per aggiungere una telecamera stanca. Le soluzioni cloud come Tuya o Xiaomi sono ancora peggio: costi di abbonamento per l'archiviazione degli archivi e il rischio di perdere le registrazioni quando internet va giù raramente attirano gli appassionati.
Di recente mi sono imbattuto in un progetto interessante chiamato VibeNVR. È un NVR locale modulare in container Docker, progettato per bilanciare un'interfaccia user-friendly con un utilizzo ragionevole delle risorse.
Sotto il Cofano
L'architettura è nettamente suddivisa in quattro microservizi:
- Frontend: SPA costruita con React e Vite, con un'interfaccia pulita e supporto mobile.
- Backend: servizio FastAPI che gestisce autorizzazione, emissione di token, audit logging e streaming multimediale tramite cookie sicuri.
- VibeEngine: motore personalizzato Python per l'elaborazione video. Utilizza PyAV e FFmpeg per l'ingestione di stream RTSP, OpenCV per il rilevamento del movimento e TFLite o YOLOv8 per il riconoscimento degli oggetti.
- Database: PostgreSQL standard per memorizzare eventi, log e impostazioni delle telecamere.
Lo sviluppatore ammette onestamente nel README che questo è un progetto vibe coding, tuttavia il codice appare ordinato e le funzionalità coprono praticamente tutte le esigenze quotidiane.
Cosa Rende Questo Progetto Interessante in Pratica
Streaming Adattivo a Tre Livelli a Bassa Latenza
La maggior parte delle interfacce web di sorveglianza o serve MJPEG pesanti o ti costringe ad aspettare diversi secondi per il buffering HLS. Qui gli ingegneri hanno optato per il cambio adattivo:
- WebCodecs (WebSocket + H.264). Modalità primaria quando si lavora su HTTPS o su localhost. Il video viene decodificato direttamente dall'hardware del browser con meno di 200 millisecondi di latenza.
- MSE tramite JMuxer. Se hai aperto il pannello tramite un indirizzo IP locale diretto senza certificati SSL, il sistema passa a Media Source Extensions. La latenza aumenta a circa un secondo e mezzo, ma l'immagine rimane fluida a 30 frame al secondo.
- Polling MJPEG. Opzione di fallback per browser legacy o canali con gravi perdite di pacchetti.
Registrazione Senza Transcodifica
Se la tua telecamera già trasmette in H.264 o H.265, non ha senso ricodificarla sulla CPU del server. Il motore VibeNVR può salvare lo stream RTSP in entrata direttamente su disco (Direct Stream Copy). Questo mantiene la CPU di un microserver domestico o NAS quasi inattiva.
Allo stesso tempo, supporta il lavoro con due stream simultaneamente. La griglia di monitoraggio mostra un substream leggero a bassa risoluzione, mentre l'archivio registra lo stream principale alla massima qualità.
Rilevamento Flessibile e Reti Neurali
L'elaborazione del movimento può essere configurata per il tuo hardware esistente. Ci sono tre opzioni:
- Classico OpenCV basato sui cambiamenti di pixel nel frame, con la possibilità di impostare maschere di esclusione;
- ONVIF Edge, quando la telecamera stessa esegue l'analisi e invia un segnale al server;
- Rilevatori AI YOLOv8 o MobileNet SSD v2 con filtro per persone, veicoli e animali.
Se colleghi un acceleratore Google Coral Edge TPU, il riconoscimento degli oggetti avviene quasi istantaneamente senza far scaldare la CPU. C'è un interruttore master nelle impostazioni: se disabiliti completamente l'IA, i modelli pesanti vengono semplicemente scaricati dalla RAM.
Interfaccia e Capacità di Integrazione
Il pannello web ha tutto ciò che gli utenti dei sistemi moderni si aspettano: una timeline degli eventi con filtraggio per tipi di oggetti riconosciuti, scoperta delle telecamere sulla rete locale tramite ONVIF, controllo delle telecamere PTZ e configurazione delle zone di privacy.
| Schermata di Login | Riproduzione Archivio |
|:---:|:---:|
|
|
|
| Griglia Telecamere | Timeline Eventi |
|:---:|:---:|
|
|
|
Per gli appassionati di smart home, c'è un client MQTT integrato con supporto per l'auto-discovery di Home Assistant. Gli stati delle telecamere, gli eventi di rilevamento movimento e le etichette degli oggetti riconosciuti vengono pubblicati immediatamente sui topic del broker.
| Scanner di Rete | Gruppi Telecamere |
|:---:|:---:|
|
|
|
Come Distribuire
Lo stack viene distribuito nel modo standard tramite Docker Compose.
Prima, scarica il file di configurazione:
git clone https://github.com/spupuz/VibeNVR.git
cd VibeNVR
Copia il file delle variabili d'ambiente e imposta chiavi sicure:
cp .env.example .env
Nel file .env devi inserire SECRET_KEY e WEBHOOK_SECRET con stringhe di almeno 32 caratteri, altrimenti l'applicazione rifiuterà di avviarsi per ragioni di sicurezza. Puoi anche selezionare il tipo di accelerazione hardware qui (HW_ACCEL_TYPE=intel, nvidia o amd).
L'avvio viene eseguito con un singolo comando:
docker compose -f docker-compose.prod.yml up -d
Di default, l'interfaccia sarà disponibile sulla porta 80. Per il corretto funzionamento di WebCodecs e la latenza video minima, gli sviluppatori consigliano di proteggere il servizio con un reverse proxy (come Nginx Proxy Manager) e di emettere un certificato SSL.
| Impostazioni Generali Telecamera | Impostazioni Rilevamento Movimento |
|:---:|:---:|
|
|
|
| Parametri di Sistema | Canali di Notifica |
|:---:|:---:|
|
|
|
Sfumature di Installazione per NAS e Proxmox
La documentazione affronta specificamente un problema comune con i permessi sui kernel Proxmox (pve-kernel), OpenMediaVault, Synology e QNAP. A causa delle restrizioni AppArmor e seccomp, i container PostgreSQL o backend potrebbero crashare con exit code PermissionError: [Errno 13].
Questo viene risolto aggiungendo parametri di sicurezza a docker-compose.yml:
security_opt:
- seccomp:unconfined
- apparmor:unconfined
Come ultima risorsa, puoi impostare privileged: true, ma per i sistemi isolati di solito è sufficiente la prima opzione.
Interfaccia Mobile
La web app è adattata per gli schermi degli smartphone. Non è necessaria nessuna app nativa separata: l'interfaccia scala correttamente la griglia delle telecamere, le schede di analisi e la striscia della timeline.
| Dashboard Telefono | Live View Mobile | Timeline Mobile |
|:---:|:---:|:---:|
|
|
|
|
Per Chi È Questo Progetto
VibeNVR si adatta perfettamente a un server domestico o a un piccolo ufficio che ha bisogno di collegare da 2 a 15 telecamere IP senza costi eccessivi. Se sei stanco di configurare manualmente gli stream nei file di testo di Frigate e vuoi un comodo pannello web con una ricerca delle registrazioni intuitiva, questo progetto vale sicuramente la pena di provare. La licenza MIT ti dà piena libertà di sperimentare.
Il codice sorgente e le istruzioni di configurazione sono disponibili nel repository del progetto su GitHub.
Progetti correlati