Detection and recording

Presence is not an event.

A car parked in the driveway is visible for nine hours. It is not nine hours of events. A novelty tracker decides what is new, so the record stays something a person can read at the end of a day.

What gets recorded

Event clips, not a wall of tape

Recording is motion-gated. Each clip is preroll, then the episode, then postroll — written contiguously, so the seconds before the thing you care about are in the file.

100% contiguous

One searchable record

Every event is a line in events.jsonl — camera, class, time, confidence, clip. The app reads it; so can grep.

detect.person · vehicle · animal

A daily lifecycle pass

Once a day: purge, then compact, then archive, across two storage tiers. Retention is a number you set, not a plan you buy.

Purge → compact → archive

The model runs on your hardware

Object detection — person, vehicle, animal — over ONNX Runtime, with a provider ladder that takes the best accelerator present and falls back without a config change. No frame is uploaded anywhere to be classified.

Detection is optional and it is local. Turn it off and Octosec is a motion-gated recorder that still writes contiguous clips.
per-inference · yolo11s @ 640 · dev box
NVIDIA · RTX 5090 (CUDA) 2.05 ms
Intel · OpenVINO on CPU 8.95 ms
CPU execution provider 25.85 ms

Measured on our dev box, not the NAS. Ratios travel; absolutes do not.

One day of events on a live eight-camera fleet, as the Events screen shows it. A design render.
One day of events on a live eight-camera fleet · design render

A camera going dark is an event

Silence is the failure mode every recorder shares: nothing arrives, and nothing says so. Here, a camera that stops reporting raises an event like any other, the watchdog has rules about it, and the app shows it on the same screen as the footage.