VibeNVR или как запустить локальное видеонаблюдение без облаков и страданий

16 авг 2026
364
27
3
3 недели

VibeNVR Logo

Каждый, кто пытался организовать домашнее видеонаблюдение на своих серверах, знает эту боль. Старый добрый ZoneMinder выглядит как привет из конца девяностых. Shinobi периодически чудит с утечками памяти. Frigate крут и производителен, но ручная правка километровых YAML-конфигов ради добавления одной камеры быстро утомляет. Про облачные решения вендоров вроде Tuya или Xiaomi и говорить нечего: абонентская плата за хранение архива и риск остаться без записей при отключении интернета энтузиастов редко радуют.

Недавно наткнулся на интересный проект VibeNVR. Это модульный локальный видеорегистратор (NVR), который упакован в Docker и нацелен на баланс между удобным графическим интерфейсом и адекватным потреблением ресурсов.

VibeNVR Demo

Что под капотом

Архитектурно система разделена на четыре понятных микросервиса:

Реклама
  • Frontend: SPA на React и Vite с чистым интерфейсом и поддержкой мобильных устройств.
  • Backend: сервис на FastAPI, который берет на себя авторизацию, выдачу токенов, аудит и раздачу медиапотоков через защищенные cookie.
  • VibeEngine: собственный движок обработки видео на Python. Он использует PyAV и FFmpeg для забора RTSP-потоков, OpenCV для детекции движения и TFLite или YOLOv8 для распознавания объектов.
  • Database: стандартный PostgreSQL для хранения событий, логов и настроек камер.

Разработчик честно пишет в README, что это проект формата vibe coding, однако кодовая база выглядит аккуратно, а функционал закрывает практически все бытовые потребности.

Чем проект интересен на практике

Трехступенчатый стриминг с низкой задержкой

Большинство веб-интерфейсов видеонаблюдения либо отдают тяжелый MJPEG, либо заставляют ждать буферизацию HLS по несколько секунд. Здесь инженеры пошли по пути адаптивного переключения:

  1. WebCodecs (WebSocket + H.264). Основной режим при работе через HTTPS или на localhost. Видео декодируется напрямую аппаратными средствами браузера с задержкой менее 200 миллисекунд.
  2. MSE через JMuxer. Если вы открыли панель по прямому локальному IP-адресу без SSL-сертификатов, система переключается на Media Source Extensions. Задержка возрастает примерно до полутора секунд, но картинка остается плавной с частотой 30 кадров в секунду.
  3. MJPEG Polling. Аварийный вариант для старых браузеров или каналов с жесткими потерями пакетов.

Запись без перекодирования

Если камера уже отдает поток в H.264 или H.265, пережимать его на процессоре сервера нет никакого смысла. Движок VibeNVR умеет сбрасывать входящий RTSP-поток напрямую на диск (Direct Stream Copy). За счет этого процессор домашнего микросервера или NAS почти не нагружается.

При этом поддерживается работа с двумя потоками одновременно. На сетку мониторинга выводится легкий субпоток низкого разрешения, а в архив пишется основной поток максимального качества.

Гибкая детекция и нейросети

Обработку движения можно настроить под имеющееся железо. Есть три варианта:

  • классический OpenCV по изменению пикселей в кадре с возможностью задать маски исключения;
  • ONVIF Edge, когда анализ делает сама камера и шлет сигнал на сервер;
  • ИИ-детекторы YOLOv8 или MobileNet SSD v2 с фильтрацией людей, машин и животных.

Если подключить ускоритель Google Coral Edge TPU, распознавание объектов происходит почти мгновенно без нагрева CPU. При этом в настройках есть общий рубильник: если отключить ИИ целиком, тяжелые модели просто выгружаются из оперативной памяти.

Dashboard

Интерфейс и возможности интеграции

Внутри веб-панели есть все, к чему привыкли пользователи современных систем: таймлайн событий с фильтрацией по типам распознанных объектов, поиск камер в локальной сети через ONVIF, управление поворотными камерами (PTZ) и настройка зон приватности.

| Экран входа | Просмотр архива | |:---:|:---:| | Login | Video Playback |

| Сетка камер | Таймлайн событий | |:---:|:---:| | Live View | Timeline |

Для умного дома предусмотрен встроенный MQTT-клиент с поддержкой автообнаружения в Home Assistant. Статусы камер, детекция движения и распознанные метки объектов сразу улетают в топики брокера.

| Сканер сети | Группы камер | |:---:|:---:| | Scanner | Groups |

Как развернуть

Поднимается комплекс стандартно через Docker Compose.

Сначала скачиваем конфигурационный файл:

git clone https://github.com/spupuz/VibeNVR.git
cd VibeNVR

Копируем файл окружения и задаем надежные ключи:

cp .env.example .env

В файле .env обязательно нужно заполнить SECRET_KEY и WEBHOOK_SECRET строками длиной не менее 32 символов, иначе приложение откажется запускаться в целях безопасности. Также тут можно выбрать тип аппаратного ускорения (HW_ACCEL_TYPE=intel, nvidia или amd).

Запуск выполняется одной командой:

docker compose -f docker-compose.prod.yml up -d

Интерфейс по умолчанию будет доступен на порту 8080. Для нормальной работы WebCodecs и минимальной задержки видео разработчики рекомендуют закрыть сервис обратным прокси-сервером (например, Nginx Proxy Manager) и выпустить SSL-сертификат.

| Общие настройки камеры | Настройка детекции движения | |:---:|:---:| | Config General | Config Motion |

| Системные параметры | Каналы уведомлений | |:---:|:---:| | System Settings | Notifications |

Тонкости при установке на NAS и Proxmox

В документации отдельно описана частая проблема с правами на ядрах Proxmox (pve-kernel), системах OpenMediaVault, Synology и QNAP. Из-за ограничений AppArmor и seccomp контейнеры PostgreSQL или backend могут падать с ошибкой PermissionError: [Errno 13].

Лечится это добавлением параметров безопасности в docker-compose.yml:

security_opt:
  - seccomp:unconfined
  - apparmor:unconfined

В крайнем случае можно выставить privileged: true, но для изолированных систем первого варианта обычно достаточно.

Мобильный интерфейс

Веб-приложение адаптировано под экраны смартфонов. Отдельное нативное приложение ставить не требуется: интерфейс корректно масштабирует сетку камер, карточки аналитики и полосу таймлайна.

| Дашборд на телефоне | Мобильный Live View | Мобильный таймлайн | |:---:|:---:|:---:| | Mobile Dashboard | Mobile Live View | Mobile Timeline |

Кому подойдет проект

VibeNVR отлично впишется в домашний сервер или небольшой офис, где нужно подключить от 2 до 15 IP-камер без лишних затрат. Если вам надоело вручную прописывать потоки в текстовых файлах Frigate и хочется удобной веб-панели с человеческим поиском записей, проект определенно стоит пощупать. Лицензия MIT дает полную свободу для экспериментов.

Исходный код и инструкции по настройке доступны в репозитории проекта на GitHub.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.