For system integrators

One config file. One deploy. One verdict.

The stack you install at 4 p.m. is the stack that pages you at 2 a.m., so it tells you what it thinks of itself before you leave: pre-checks, a health verdict, and a rollback that does not need you to remember what you changed.

$ ./deploy.sh --docker qnap --version v1.0.0-beta1 --verify-only==> Local pre-checks (v1.0.0-beta1 -> QNAP) config ok 10 cameras declared, 8 reachable storage ok recording and archive tiers mounted, space verified tls ok pinned leaf present, not near expiry detector warn no NVIDIA provider — falling back to OpenVINO==> Verdict HEALTHY, 1 warning rollback : previous image stays loaded; rerun with the old tag if needed
Illustrative — typed for this page, not a captured session. The flags, the pre-check → verdict flow, the 10-declared/8-live fleet and the rollback line are the real deploy driver's.

One config file

Cameras, storage tiers, retention, detector, alarms. Declared once, versioned like anything else, diffable between sites.

systemd and journald

Ordinary units, ordinary logs. Every line follows a documented envelope, so your log pipeline parses it without a custom shipper.

A watchdog with rules

Alarm conditions are configuration, not code. A camera that stops reporting is an event, so the quiet failure is the one you hear about.

Rollback

The deploy keeps a rollback point and the pre-checks run against it, so an upgrade you do not like is one command away from undone.

The bus, rendered for humans

cctv_console attaches to the running system and prints what is crossing the bus. It is the first thing to open on a support call.

Your existing camera stock

Octosec does not speak ONVIF. Cameras are reached through a driver built against a stable C ABI, and Reolink is the driver that ships today. A complete driver is about 200 lines of C and needs neither our language nor our build system — so support for a make you already install is a driver question, and a short one.

Hardware sizing

Eight cameras and sixteen streams cost about 5% of a 20-core NAS. The recommended and honest-minimum boxes are published with the install story.

SLOT · PENDING D5

The fleet status screen: per-camera health, storage and detector state as the operator sees it. A design render.
Fleet status as the operator sees it · design render