Introduction
OpenNVR is a self-hosted network video recorder with operator-controlled AI. Cameras stay on an isolated network, every frame and inference stays on your hardware, and you choose which models run.
On this page
Introduction
OpenNVR records your IP cameras and runs AI over the footage, on hardware you own. No cloud account, no per-camera licence, no vendor holding your video.
It is a normal NVR first — discovery, recording, retention, live view, playback, users and permissions — with three things a normal NVR does not have.
The three things
Cameras cannot reach the internet
Cameras are the weakest device on most networks: default credentials, firmware nobody updates, and a manufacturer’s cloud they phone home to. OpenNVR assumes that and puts them behind it.
On a dual-NIC host the cameras sit on their own subnet with no route out. The recorder reaches them; they reach nothing. Apps you install run on a third network with no route to the cameras or the internet, and any host an app wants to reach is a grant you make explicitly and can see in the audit log.
You choose the models, and they stay yours
Inference is decoupled from recording. A small always-on detector — Tier-0 — runs motion, region selection, detection and tracking on every camera, and anything heavier is an adapter: a container that advertises what it can do and answers when asked.
That means you can run YOLOv8 on a CPU offline, swap in a better plate reader next month, or point at a cloud provider if you decide the trade is worth it. Reaching a cloud model is off unless you turn it on, and audited when you do. Model weights are fingerprinted, so a model swapped underneath a deployment is detectable rather than silent.
It answers questions
The OpenNVR Agent turns the estate into something you can ask. What’s at the back gate right now? runs a real inference on a live frame and answers from what it saw — locally, with the tool calls and their timings visible, so you can tell the difference between an answer and a guess.
What you actually get
| Recording | Continuous and event-based, per-camera retention, seek-to-time playback |
| Live video | WebRTC in the browser, multi-camera wall, substreams for low bandwidth |
| Detection | Always-on tracking on every camera with no adapter required |
| AI | Any conformant adapter — detection, pose, plates, faces, captions, speech |
| Apps | A one-click catalog, each app declaring what it needs and what it can reach |
| Governance | Per-camera permissions, MFA, an encrypted credential vault, your own TLS keys, audit trail |
| Integration | REST, WebRTC, ONVIF, RTSP, MQTT, webhooks, a NATS event bus |
Everything runs in Docker. The same images run on a Raspberry Pi 5, a laptop or a rack server; the difference is how many cameras and how heavy a model.
Where to go next
To run it — Docker setup is the ten-minute path, then first-time setup for the admin account and MFA.
To understand it — Architecture overview shows where each piece sits, and Platform features is the full capability list.
To build on it — the developer corner covers both SDKs: one for apps, one for publishing a model. An app is nine lines, and the platform gives it detections, a settings form, zones the operator draws, and the alert inbox. The three references are generated from the code: the App SDK, the Adapter SDK, and the operator API.
To evaluate it — OpenNVR compared against Frigate, ZoneMinder, Shinobi and Verkada, and the §889 assessment for procurement.
The licence, briefly
The platform is AGPL-3.0. Both SDKs are Apache-2.0, so an app or adapter you write is yours under any licence you choose, closed included, and OpenNVR takes no fee on what you sell. The architecture is documented in a peer-reviewed paper.