Skip to main content

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.

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.