Motion & events
NVR indexes the smart events your cameras already detect and makes them searchable — then jumps you straight into playback at that moment.
Camera smart events#
Hikvision and Dahua cameras emit detection events over their control channel — NVR ingests them automatically, no extra config:
- Motion
- Line crossing
- Intrusion
- Tamper
- Video loss
Events land in the index alongside your recordings, so they’re searchable by camera, time range, and type. This costs nothing in CPU — the camera does the detecting; NVR just listens.
The Events browser#
Open Events in the web app, pick a camera, a time range, and optionally an event type. Every result links directly into playback at that instant, so “show me every line-crossing at the gate last night” is a two-click answer.
The browser only lists cameras that report activity events. DVR and analog channels typically record fine but emit no events — that’s what local motion detection below is for.
Local motion detection for DVR channels#
For analog/DVR channels whose vendor emits no useful events, NVR can detect motion itself. It samples the channel’s main stream on an interval and writes an evidence card only after meaningful pixel change — deliberately conservative, and opt-in per camera:
detection:
local_motion:
enabled: true
cameras: [dvr-ch01, dvr-ch02]
interval_seconds: 2 # sampling cadence
workers: 2 # decoder pool, max 4
min_changed_fraction: 0.10 # fraction of pixels that must change
debounce_seconds: 15 # at most one event per camera per interval Prefer native camera events where they exist — they’re smarter (person/vehicle classification on newer firmware) and free. Use local motion only where the camera gives you nothing.
Offline alerts by email#
NVR watches every camera’s liveness. When a camera goes dark — and when it recovers — an event is recorded, and optionally an email goes out with the last live snapshot attached:
notifications:
resend_api_key_path: "/etc/nvrd/resend.key" # keep the key out of config history
from: "NVR <alerts@yourdomain.tld>"
to: ["you@example.com"]
offline_after: 5m # how long a camera must be down before alerting Email delivery uses Resend. Leave the key empty and offline/online events still appear in the Events browser — just no email.