A cross-platform desktop video wall for RTSP cameras. It keeps streams online, runs local YOLOv8n object detection on the live video, measures how far behind real time each stream is, and can trigger the camera's own siren on an alert.
Built with Avalonia on .NET 10, video by libmpv, inference by ONNX Runtime (CPU or CUDA). Everything runs locally: no cloud, no Python at runtime.
curl -fsSL https://github.com/00F100/camera-sentinel/releases/latest/download/camera-sentinel_amd64.deb -o /tmp/camera-sentinel.deb && sudo dpkg -i /tmp/camera-sentinel.debThe pipeline publishes each .deb as a GitHub Release (vX.Y.Z). Local builds show development in Settings → About.
# Build a self-contained package (via Docker)
./scripts/dev.sh publish-linux
# Run it (uses repo config/ for your local JSON; bundled Demo always loads)
./scripts/dev.sh runDocker is used only to build and package. The application itself runs from the published binary in dist/. User cameras, settings and layouts are stored outside the install directory (Linux: ~/.config/camera-sentinel; logs: /var/log/camera-sentinel). See configuration.
Full documentation lives in docs/. Each docs page is English first, then Portuguese below a --- divider.
| Overview | What the app does, architecture, scope |
| Configuration | User config/log directories, merge with bundled Demo defaults |
| Cameras | Catalog, RTSP, stream profiles, discovery |
| Layouts and UI | Tiles, drag, resize, grid, saving |
| Layout carousel | Rotating through layouts |
| Streaming and watchdog | Reconnect, freeze detection, idle disconnect |
| Recognition | YOLOv8n, classes, motion gate, on-demand loading |
| Tracking and dwell | Track IDs, trails, dwell time |
| Sync buffer | Keeping overlays aligned with the video |
| Alerts | Confirmation, cooldown, title flash, alert log |
| Siren and ONVIF | Capability probe, ONVIF relay, DVRIP audio |
| Delay via OCR | Reading the OSD clock to measure stream delay |
| Image filters | Sharpen, contrast, brightness, gamma, denoise |
| Schedules | Time windows and weekdays |
| Audio | Master and per-camera volume, output device |
| Localization | Languages and locale files |
| Demo layout | Built-in offline demo (always merged from the bundle) |
| GPU and CUDA | GPU inference and bundled redistributables |
| Development | Docker workflow and dev.sh |
| Distribution | Self-contained builds, deb/rpm/MSI |
| Models | YOLO and OCR model files |
| Testing | Unit tests and packaging smoke tests |
Identifiers, comments and log messages are written in English. This README and every page in docs/ are English first, then Portuguese below a line that contains only ---. Spanish exists only as user-facing UI translations in src/CameraSentinel/i18n/.
cameras.json in the user config directory contains camera credentials and is gitignored. Never commit it, and keep example files free of real secrets.
Um mural de vídeo desktop multiplataforma para câmeras RTSP. Mantém os streams online, corre detecção local YOLOv8n no vídeo ao vivo, mede o atraso de cada stream e pode acionar a sirene da própria câmera num alerta.
Feito com Avalonia em .NET 10, vídeo por libmpv, inferência por ONNX Runtime (CPU ou CUDA). Tudo corre localmente: sem nuvem, sem Python em tempo de execução.
curl -fsSL https://github.com/00F100/camera-sentinel/releases/latest/download/camera-sentinel_amd64.deb -o /tmp/camera-sentinel.deb && sudo dpkg -i /tmp/camera-sentinel.debO pipeline publica cada .deb numa GitHub Release (vX.Y.Z). Builds locais mostram development em Definições → Sobre.
# Gerar um pacote autocontido (via Docker)
./scripts/dev.sh publish-linux
# Executar (usa config/ do repo para os JSON locais; o Demo do pacote carrega sempre)
./scripts/dev.sh runO Docker serve só para compilar e empacotar. A aplicação corre a partir do binário em dist/. Câmeras, definições e layouts do utilizador ficam fora do diretório de instalação (Linux: ~/.config/camera-sentinel; logs: /var/log/camera-sentinel). Ver configuração.
A documentação completa está em docs/. Cada página começa em inglês e, abaixo de uma linha com apenas ---, traz a tradução em português.
| Visão geral | O que o app faz, arquitetura e escopo |
| Configuração | Diretórios de config/logs, merge com os defaults Demo |
| Câmeras | Catálogo, RTSP, perfis de stream, descoberta |
| Layouts e interface | Tiles, arrastar, redimensionar, grade, salvar |
| Carrossel de layouts | Alternância automática entre layouts |
| Streaming e watchdog | Reconexão, detecção de travamento, desconexão ociosa |
| Reconhecimento | YOLOv8n, classes, filtro de movimento, carga sob demanda |
| Rastreamento e permanência | IDs de rastreio, trajetos, tempo de permanência |
| Buffer sincronizado | Manter o overlay alinhado com o vídeo |
| Alertas | Confirmação, cooldown, piscar do título, log de alertas |
| Sirene e ONVIF | Sonda de capacidades, relay ONVIF, áudio DVRIP |
| Atraso via OCR | Ler o relógio do OSD para medir o atraso |
| Filtros de imagem | Nitidez, contraste, brilho, gama, redução de ruído |
| Horários | Faixas de horário e dias da semana |
| Áudio | Volume geral e por câmera, dispositivo de saída |
| Localização | Idiomas e arquivos de tradução |
| Layout de demonstração | Demonstração offline embutida (sempre fundida a partir do pacote) |
| GPU e CUDA | Inferência em GPU e bibliotecas redistribuíveis |
| Desenvolvimento | Fluxo com Docker e dev.sh |
| Distribuição | Builds autocontidos, deb/rpm/MSI |
| Modelos | Arquivos de modelo YOLO e OCR |
| Testes | Testes unitários e smoke de empacotamento |
Identificadores, comentários e mensagens de log estão em inglês. Este README e cada página em docs/ começam em inglês e, abaixo de uma linha com apenas ---, trazem português. Espanhol existe só nas traduções da interface em src/CameraSentinel/i18n/.
O cameras.json no diretório de configuração do utilizador contém credenciais e está no .gitignore. Nunca faça commit desse ficheiro, e mantenha os exemplos livres de segredos reais.
