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-watch

opennvr-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-detection

The 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 agree

Reference

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.