Architecture
EverNVR runs on a local Linux recorder. Node.js handles the web application, authentication, camera connections, recording supervision, event processing, and SQLite. FFmpeg handles media ingestion and playback. A supervised Python process owns the inference device.
Detection receives frames from the camera stream the recorder already has open. It does not open another RTSP connection of its own. Recording generally copies the source video packets rather than re-encoding them.
Events and search
A visit identifies a particular appearance of an object. Zone stays belong to that visit. Separate visit identifiers prevent reconnects and detector restarts from being mistaken for the same continuous appearance.
Recordings, events, thumbnails, and track data have related but distinct lifetimes. Retention can remove footage while event history remains. Incident holds deliberately preserve selected footage.
Appearance search uses local semantic assets when installed, with a visible label-and-color fallback otherwise. The optional external AI agent is configured separately from the local detector and search pipeline.
Host services
The appliance runs as root: it owns the box, reaches any recording folder an
operator selects, and performs Hailo installation and NAS setup itself using
fixed installed scripts. Updates are installed by the host tool
evernvr-update in a transient unit of their own, after the installed release
has verified the file against the keys the recorder trusts. The unit keeps the
protections that do not depend on the account, and the evernvr account
remains only as the unprivileged identity the detector build runs under.
Persistent data defaults to /var/lib/evernvr; each release lives in
/opt/evernvr/releases, with /opt/evernvr/current pointing at the running
one. Keep configuration backups and media backups
for recovery. See security for the access boundaries.