Apache-2.0 SDKs · your licence · no revenue share
Build on OpenNVR
Cameras, always-on detection, pluggable inference, an event bus, recordings, an operator alert inbox, users with per-camera permissions, and a catalog every deployment opens — all already running. You write the rule, the model or the workflow.
Two SDKs, and which one you want depends on a single question.
opennvr-app-sdk
I want to ship an app
A rule, an analytic, a workflow, an integration. You get detections off the bus, a settings form generated from your parameters, zones the operator draws on a camera still, and alerts that land in their inbox — without writing any of it.
- Nine lines is a complete, catalog-listed app
- Declare a task; any adapter serving it satisfies you
- Recordings, timeline search and evidence photos by API
pip install opennvr-app-sdk
opennvr-app new driveway-watchopennvr-adapter-sdk
I want to publish a model
A detector, a captioner, an ASR model, anything that takes a frame or a clip and answers. Declare the tasks it serves and the SDK gives you the six contract endpoints, auth, metrics, the failure envelope and the streaming protocol.
- A conformance kit you run before anyone else does
- OpenAPI and AsyncAPI documents generated, not maintained
- Weights fingerprinted, so tampering is detectable
pip install opennvr-adapter-sdk
opennvr-adapter new fall-detectionThe one idea that governs both
An app asks for a task, never for an adapter by name. An app declaring requires_tasks: [license_plate_recognition] is satisfied by any adapter advertising that task — so a better plate reader is a drop-in, and an app written today works with a model published next year.
It cuts both ways. Invent a task name nobody asks for and your adapter installs, reports healthy and receives no work — a failure that is completely silent. Both SDKs check this for you, and the catalog index validator fails CI over it.
the handshake
# the app says what it needs
requires_tasks: [object_detection]
# the adapter says what it serves
tasks_advertised: [object_detection]
# nothing else has to agreeReference
- App SDK referenceopennvr-app-sdk — rules, platform client, surfaces, events. Generated from the docstrings.
- Adapter SDK referenceopennvr-adapter-sdk — the contract, streaming, errors, conformance. Generated from the docstrings.
- Operator APICameras, recordings, events, users, apps — the server's own OpenAPI document, rendered.
- ArchitectureWhere your code sits relative to ingest, Tier-0 and recording.
- App Catalog13 apps, each with the tasks it needs.
- Adapter registry9 shipped, plus experimental and wanted — each with the tasks it serves.
- Developer programListing, versioning and what OpenNVR commits to.
- Getting an adapter listedThe index entry, and the validator that checks it.
Your code stays yours
Both SDKs are Apache-2.0. Ship under any licence, closed included, even though the platform core is AGPL.
No fee, no cut
OpenNVR takes nothing on app or model sales. You get the licence hook; the platform stays out of the transaction.
Distribution included
Every deployment opens the same catalog. Listing is a pull request against a public index.