Own Your Security.
Bring Your Own AI.
For organizations that can't put their cameras — or the AI that watches them — in a vendor's cloud. OpenNVR keeps every frame and every inference on hardware you own, isolates cameras on a network they can't escape, and turns any AI model into a first-class, governed detector. Then you can just ask it what it sees.
Built on a peer-reviewed offline-first security architecture.Read the paper →
git clone https://github.com/open-nvr/open-nvr.git && cd open-nvr && ./start.shPre-built images · runs on a Pi 5, a laptop, or a server · no cloud account, no API keys.
- 8
- detectors out of the box
- YOLO · BLIP · InsightFace · LPR · more
- ~30
- lines of Python per adapter
- Apache-2.0 SDK · any model, any licence
- 11
- one-click app-store apps
- digest-pinned · manifest-driven UI
- 100%
- offline-first by default
- no cloud, no API keys, no per-camera fees
- AGPLv3 core
- Apache-2.0 SDKs
- ONVIF · RTSP
- Peer-reviewed architecture
- Self-hosted forever
Just ask your cameras.
Say it out loud — "is there a person at the front door?" — and a local LLM answers, grounded in a live frame from that camera, spoken back to you. No cloud. No API keys. No subscription. Running on the same box that records your footage.

How it works — entirely on your hardware
- 1
You speak. Silero voice-activity detection catches the turn; Whisper transcribes it locally.
- 2
A local LLM reasons. An Ollama-hosted model with tool-calling decides which adapter to call — BLIP for a scene caption, YOLOv8 for detection, InsightFace for a face, or the recent-events feed.
- 3
It answers, grounded in a live frame — then Piper speaks the reply. The whole loop runs offline, on the box that records your cameras.
This is the first OpenNVR example where the cameras have agency — not just data.
See it in the docsOne feed of alarms, watches, and app alerts. Click one and the camera opens at that timestamp — not just live.
Critical sirens that latch until silenced, urgent pulses that stand down, doorbell chimes, silent logs — defaults per target, per site.
Per-camera screens play the same WebRTC stream as the NVR, with scrub-back review and recorded playback inline.
Signs in with your OpenNVR account. Viewers look, operators arm, admins govern — even the agent's chat tools obey the tier.
Secure by design,
open at the core.
We didn't just build an NVR. We built the secure substrate underneath it — network isolation, encrypted transport, and a full audit trail — with the video as the easy part.
Network Isolation by Design
Cameras live on isolated, non-routable networks with no path to the internet. A hardened middleware gateway is the only edge operators and analytics ever touch — the camera vendor's flaws stop at the camera.
Offline-First Edge AI
Run YOLOv8 detection, open-vocabulary detection, InsightFace recognition, ByteTrack tracking, scene captioning, and more entirely on your own hardware. No cloud round-trip, no per-camera fees, no model that disappears when a vendor sunsets it.
End-to-End Audit Trail
Every inference carries a correlation ID joining the alert that fired to the model that ran. Model weights are fingerprinted with sha256 and polled for drift, and it all lands in an append-only log you can hand to a regulator.
TLS on Every Viewer Transport
Streams are served over RTSPS, HLS-over-TLS, and WebRTC through MediaMTX, with plaintext refused on operator-facing transports. JWT-gated, with automatic token rotation.
Granular RBAC + MFA
Role-based access control down to the per-camera level, with multi-factor authentication, audit logging, and automated JWT rotation. No default credentials ship in the image.
Decoupled AI Architecture
The video server and the AI engine run in separate, isolated processes. If an experimental model fails, your cameras keep recording — the analytics layer can never take the NVR down with it.
One-Click App Store
Ten detection apps install from a curated, digest-pinned index — each with its own page, live dashboard, zone-drawing config, and operator actions. Declare a manifest and the UI builds itself; the Apache-2.0 SDK means your own apps ship under any license.
Decision-Grade AI Monitoring
Every adapter is scraped for latency percentiles, outcomes, saturation, optional CPU/GPU gauges, and model-fingerprint drift — rendered as a fleet strip and per-adapter trend sparklines, each metric captioned with the decision it drives.
A real product, not a demo repo.
Dashboard, live view, recordings, RBAC, BYO-AI, audit logs, and compliance reporting — all self-hosted, all yours.





Any model.
One open contract.
The AI Adapter Contract is what makes OpenNVR a platform, not a product. Any model behind a REST or WebSocket endpoint becomes a first-class detector — object detection, open-vocabulary detection, license-plate OCR, face recognition, scene captioning, tracking, speech, and more. The SDK to wrap your own is Apache-2.0 and runs around thirty lines of Python.
Everything runs on your hardware by default. Cloud providers like Hugging Face are an explicit opt-in — under the default local_only sovereignty policy, any adapter that tries to reach the network is refused registration. You decide what, if anything, leaves the building.
- Bring your own model via ONNX, PyTorch, or any runtime
- Ship adapters under any licence — including proprietary or classified
- Audit chain, fingerprint drift detection, and fair-queuing for free
- Fleet monitoring built in — latency, load, hardware, and drift per adapter, over time
AdapterApp, AdapterService, BodyShape,
BODY_BYTES_KEY, InferResponse,
)
service=FireDetector(),
name="fire-detector", version="1.0.0",
vendor="me", license="MIT",
tasks_advertised=["fire_detection"],
body_shape=BodyShape.IMAGE,
).fastapi_app
Built for people who can't outsource trust.
From an air-gapped government site to a homelab doorbell — one architecture, entirely on your hardware.
Government & defence
Air-gapped sites that legally cannot use covered-vendor or cloud cameras. §889-clean, sovereign, auditable.
Critical infrastructure
Utilities, ports, transport — surveillance that stays inside the perimeter, with an audit trail for the regulator.
Regulated: health, finance, education
Where footage was never allowed to leave the building. Local recording, local AI, RBAC, retention you control.
Homelab & prosumer
A doorbell that never phones home, spun up on a Pi or an old laptop in minutes. No account, no subscription.
Not just examples.
An App Store.
Ten apps install with one click from a curated, digest-pinned index. Each one gets a full page in the shell — a live dashboard, config forms with zone-drawing on your camera's own frame, operator actions — and registers itself as a skill the voice agent can answer from. Declare a manifest, and the UI builds itself.
Intrusion detection
Draw the restricted zone on your camera's own frame, set the hours, and it alerts on entry — with an armed-right-now dashboard on its app page.
Loitering detection
Someone lingering longer than they should. Live dwell dashboard shows every object accruing time and which ones have fired.
Occupancy counting
Live per-zone gauges against your limit — green to red as the room fills. Alerts on over, under, and back-to-normal.
Line crossing / tripwire
Draw a directional tripwire per camera; live tallies and a recent-crossings feed on the app's page. Fences, one-way doors, gates.
Abandoned object
Unattended-bag detection with owner-proximity suppression, and a settling-now table showing every candidate and its dwell.
Footage search
Ask "every red truck at the dock yesterday" — from the app's own page, or by voice through the agent. Fully on your hardware.
License-plate recognition
YOLOv8 finds the plate, fast-plate-ocr reads it. Edit the allow/deny watchlists in the UI and they apply live — no restart.
Smart doorbell
Family vs. stranger with InsightFace — and a face-enrollment form right on the app's page: name, photo, done.
Package delivery
Arrival, linger, and pickup per package, with an on-the-porch dashboard. Turn it inside out and it's porch-pirate detection.
Camera agent
The voice assistant is a full product: events that click to the moment, leveled alarms, real-time WebRTC per-camera screens, RBAC sign-in.
Home Assistant relay
Bridge OpenNVR alerts into Home Assistant via MQTT discovery, with live forwarded/failed counters on its dashboard.
…or build your own
The app SDK is Apache-2.0 — your app ships under any license, even proprietary. Declare params, state, and actions in a manifest and the platform renders the config forms, live dashboard, and agent skill for free. Sell it privately or PR it into the store.
Browse the examplesFrequently asked questions
Everything people ask before they try OpenNVR.
Is OpenNVR free and open source?
Yes. OpenNVR is fully open source under the AGPLv3 licence, and the AI adapter SDK is Apache-2.0. There are no per-camera fees, no per-seat licences, and no cloud subscription — you run it on your own hardware.
What is an open-source NVR?
An NVR (network video recorder) ingests, records, and serves video from IP cameras. An open-source NVR is one whose code you can read, audit, self-host, and modify — so your footage and analytics stay on hardware you control instead of a vendor's cloud. OpenNVR is an offline-first open-source NVR with an open AI platform on top.
How is OpenNVR different from Frigate, ZoneMinder, or Verkada?
OpenNVR adds a published open AI adapter contract (any model becomes a detector under any licence), an end-to-end audit chain with model-fingerprint drift detection, two default-deny sovereignty gates, a peer-reviewed architecture paper, and a voice agent you can talk to. See the full side-by-side on the OpenNVR vs Frigate, ZoneMinder and Shinobi comparison.
Can OpenNVR run completely offline?
Yes — offline-first is the default. Cameras sit on an isolated network with no route to the internet, recording and AI run locally, and cloud connectivity is off unless you explicitly enable it (and that opt-in is audit-logged).
Can I run my own AI models on my cameras?
Yes. Bring Your Own Model (BYOM): wrap any model — ONNX, PyTorch, a fine-tuned model, or a cloud endpoint — in about thirty lines of Python with the Apache-2.0 SDK, and OpenNVR treats it as a first-class detector. Eight adapters ship out of the box, including an open-vocabulary detector you can query with free text like "red truck".
Can I search my recorded footage in plain language?
Yes. The footage-search example indexes your recorded inference (object labels plus scene captions) and lets you ask "show me every red truck at the dock yesterday" — object classes come from the detector, attributes like colour from the captioner or the open-vocabulary adapter. Fully on your hardware, no cloud, no API keys.
Can I really talk to my cameras?
Yes. The camera-agent example lets you ask a question out loud — "is there a person at the front door?" or "did a red truck come by the dock earlier?" — and a local LLM answers, grounded in a live frame or your recorded-footage index, spoken back to you. Whisper, an Ollama LLM with tool-calling, and Piper, all running on your hardware. No cloud, no API keys.
Who needs the OpenNVR Commercial License?
Businesses doing what the AGPL doesn't allow: selling hardware with OpenNVR pre-installed under their own brand (with proprietary changes or locked firmware), embedding OpenNVR inside proprietary software, or hosting a modified OpenNVR as a closed service. Self-hosting is free forever on any hardware. It's the Qt/Linphone dual-licensing model — see the license matrix.
Can the apps and adapters I build be proprietary?
Yes — deliberately. The app SDK and the AI adapter SDK are Apache-2.0, so anything you build on them ships under any license you choose, including closed source. Only the platform core is AGPL. Building on OpenNVR never requires a lawyer.
What is "Powered by OpenNVR"?
The trademark badge. Anyone shipping substantially unmodified OpenNVR under the AGPL may use it for free; commercial licensees are required to display it (unless they purchase the white-label tier). The code license and the trademark are separate on purpose — the code stays genuinely open while the name stays trustworthy.
What cameras does OpenNVR work with?
Any camera that speaks ONVIF or RTSP — which covers virtually all modern IP cameras (Hikvision, Dahua, Axis, Reolink, and generic ONVIF/RTSP). No proprietary hardware to buy; reuse the cameras you already own.
Run it in five minutes. Build on it for good.
Pull the pre-built images, point it at a camera, and watch detections appear. Then write an adapter, fork an example, and make it solve your problem — the contract is the front door, and it's open.
Free and open forever under AGPLv3 — self-host it, fork it,write an adapter, oropen a PR.
Deploying for a government, critical-infrastructure, or regulated environment?Talk to us about a pilot or security assessment →