opennvr-app-sdk
The SDK for building vision apps on OpenNVR, the self-hosted AI video platform. Cameras, Tier-0 detections, pluggable inference, an event bus, recordings, an operator alert inbox, users and per-camera permissions, and a catalog every deployment opens — all already running. You write the rule, the model or the workflow; this package is the only import you need.
Apache-2.0 — ship your app under any licence, closed included.
pip install opennvr-app-sdk
A detector in one method
from opennvr_app_sdk import Alert, AppManifest, Detector, Param, app
class Loitering(Detector):
manifest = AppManifest(
id="loitering", name="Loitering", version="1.0.0", category="perimeter",
requires_tasks=["object_detection"],
params=[Param("dwell_s", float, default=30.0)],
)
def setup(self):
self.present = self.keyed_state(ttl=10.0) # forgets a camera 10 s after the last person
def on_detections(self, camera_id, detections, event):
people = [d for d in detections if d.get("label") == "person"]
if not people:
return
rec = self.present.touch(camera_id)
if rec.age >= self.cfg.dwell_s and not rec.alerted:
rec.alerted = True
yield Alert(title="Loitering", description=f"{len(people)} person(s) for {rec.age:.0f}s",
camera_id=camera_id, severity="medium")
if __name__ == "__main__":
raise SystemExit(app(Loitering).run())
That app subscribes to the platform's detections, serves the registry
contract (/health, /state, /manifest, config form, actions),
registers itself in the App Catalog, is issued its own credential, and
fires alerts that reach the operator inbox — none of which you wrote.
The platform, from an app
from opennvr_app_sdk import OpenNVR # or opennvr_app_sdk.aio.AsyncOpenNVR
nvr = OpenNVR() # OPENNVR_URL + the app's key
for cam in nvr.cameras(): # only cameras assigned to this app
jpeg = nvr.snapshot(cam)
det = nvr.ai.infer("yolov8", jpeg, task="object_detection", camera_id=cam.handle)
nvr.state.set("last_seen", {"cam1": 12.5}) # durable, survives restarts
clips = nvr.recordings("cam1").list(start="2026-09-05T00:00:00Z")
mine = nvr.alerts.inbox(unacked=True)
Where to go next
- Developer program — the deal: no fee, your licence, the compatibility promise.
- Your first detector — scaffold, run against a stack, list in the catalog.
- SDK reference — every public name, by task.
- Platform client, app surfaces, credentials, event contracts.
- Example apps — thirteen first-party apps built on this SDK.
Compatibility: the app-registry contract is versioned (api_version)
and tested in the OpenNVR repository on every change; min_sdk_version
only moves when an older SDK would misbehave. Issues tagged sdk at
open-nvr/open-nvr.
Metadata
Release files for opennvr-app-sdk 0.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| opennvr_app_sdk-0.5.0.tar.gz | 132.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| opennvr_app_sdk-0.5.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 259.9 kB
Release files / opennvr_app_sdk-0.5.0.tar.gz
| Download URL | opennvr_app_sdk-0.5.0.tar.gz |
|---|---|
| Size | 132.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
87365c526c3c80434f5f9b9b6602c4a60e3b4d36bed1f810b2ad49523dcee902
|
|
BLAKE2b-256 checksum How to use checksums |
d8c967a37a5289efa25430fabe6f797e4a6b3e46714aba73fe003b3e38e1b967
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.
Transparency logRelease files / opennvr_app_sdk-0.5.0-py3-none-any.whl
| Download URL | opennvr_app_sdk-0.5.0-py3-none-any.whl |
|---|---|
| Size | 127.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5950a67a8c880e667a6db2bd6cf83384963e3d74d2bfd701722c95093e9c4e6f
|
|
BLAKE2b-256 checksum How to use checksums |
b6693c830145f0bc51e2033331586d7c190883e7fcc1a10b1ba3cfc8047a163c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.
Transparency log