AI Engine
The AI Engine (titled Anomaly AI Engine in the app) is where you turn on AI-powered motion and object detection, tune sensitivity, set active schedules, and decide what happens when something is detected. You’ll find it under AI & Detections → AI Engine in the sidebar.
[!NOTE] Viewing the AI Engine requires the
ai.viewpermission. Changing any setting is superuser-only — non-admins see a read-only banner (“You have read-only access. Only administrators can modify AI settings.”) and every control is disabled.
[!WARNING] The server-side AI pipeline for this tab is not wired up yet. The page shows a blue banner: “Backend endpoints for AI are not wired yet. Settings are stored in your browser until the server API is available.” Everything you save here is persisted in your browser (localStorage) on this device only, until the backend API ships. To run models against live cameras or recordings today, use AI Models (BYOM).

What you can do here
- Turn the whole engine on/off and pick a CPU or GPU provider.
- Configure Motion detection (sensitivity, minimum area, debounce).
- Configure Object detection (model, confidence, NMS, max FPS, input scale, and the classes to detect).
- Define Schedules — day/time windows when detection is active.
- Wire up Events & Webhooks — create alerts/incidents and POST detection JSON to a webhook.
- Set Per-camera overrides so individual cameras can differ from the global config.
- Export / Import the whole configuration as JSON under Advanced.
Use the Save button (top-right) to persist changes and Reset to restore defaults (asks for confirmation first).
Enable the engine
- In the Engine section, tick Enabled.
- Choose a Provider —
CPUorGPU. - Set Max concurrency (1–16) — how many video streams are analyzed in parallel.
- Click Save.
Fields
| Field | Required | Example | Notes |
|---|---|---|---|
| Enabled | — | (checkbox) | Master on/off for the engine |
| Provider | ✓ | CPU |
CPU or GPU |
| Max concurrency | ✓ | 2 |
1–16; parallel streams analyzed |
Configure motion detection
- In the Motion detection section, tick Enable motion detection.
- Drag Sensitivity (0–1) to trade noise against catching true motion.
- Set Min area (px) — the smallest change, in pixels, that counts as motion.
- Set Debounce (ms) — how long to wait before firing another motion event.
Fields
| Field | Required | Example | Notes |
|---|---|---|---|
| Enable motion detection | — | (checkbox) | On by default |
| Sensitivity | — | 0.6 |
Slider, 0–1 (step 0.05) |
| Min area (px) | — | 600 |
Ignore changes smaller than this |
| Debounce (ms) | — | 2000 |
Gap between motion events |
Configure object detection
- In the Object detection section, tick Enable object detection.
- Pick a Model from the dropdown:
YOLO,MobileNet, orCustom. - Drag Confidence (0–1) — the minimum score to keep a detection.
- Drag NMS (0–1) — non-maximum-suppression overlap threshold.
- Optionally set Max FPS to cap inference rate, and Scale (w×h) to resize frames before inference.
- In Detect classes, type a comma-separated list of labels.
Fields
| Field | Required | Example | Notes |
|---|---|---|---|
| Enable object detection | — | (checkbox) | Off by default |
| Model | — | YOLO |
YOLO, MobileNet, or Custom |
| Confidence | — | 0.5 |
Slider, 0–1 (step 0.01) |
| NMS | — | 0.45 |
Slider, 0–1 (step 0.01) |
| Max FPS | — | Leave blank for unlimited | |
| Scale (w×h) | — | Blank keeps native resolution | |
| Detect classes | — | person, car, dog |
Comma-separated labels |
[!TIP] The Detect classes field placeholder is
comma-separated e.g. person, car, dog. The default classes arepersonandcar.
Set detection schedules
- In the Schedules section, tick Enable schedules.
- Each window has three fields: days (comma-separated), a start time, and an end time.
- Edit the day list — valid values are
Mon, Tue, Wed, Thu, Fri, Sat, Sun. - Click Add window to add another row, or Remove to delete one.
The default window is Mon,Tue,Wed,Thu,Fri from 08:00 to 18:00. Add window creates a Sat,Sun window covering 00:00–23:59.
Events & webhooks
- In the Events & Webhooks section, tick Create Alerts/Incidents for detections to raise incidents from detections.
- Tick Send webhook to enable the webhook.
- Enter a Webhook URL — it receives JSON payloads for motion/object detections. (The field is disabled until Send webhook is ticked.)
Fields
| Field | Required | Example | Notes |
|---|---|---|---|
| Create Alerts/Incidents for detections | — | (checkbox) | On by default |
| Send webhook | — | (checkbox) | Off by default |
| Webhook URL | — | https://api.example.com/hook |
JSON POST target; enabled only when Send webhook is on |
Per-camera overrides
Use this to make a single camera behave differently from the global config.
- In the Per-camera overrides section, pick a camera from the Camera dropdown (shown as name · IP address).
- Override Motion detection — tick Override enable, then adjust Sensitivity and Min area.
- Override Object detection — tick Override enable, then adjust Confidence and Classes.
- Click Save override, or Clear override to remove this camera’s customization.
[!NOTE] Overrides fall back to the global values wherever you don’t set them — the sliders start at the global config for that camera.
Advanced: export & import
The Advanced section holds JSON export/import for the whole configuration.
- Export downloads the current config (global + overrides) as
ai-config.json. - Import loads a previously exported
ai-config.jsonfile. - Test pipeline is a placeholder — it currently reports “Test pipeline not implemented yet.”
📸 Screenshots to capture
Save these to opennvr-site/public/screenshots/ with the exact filenames below:
ai-engine-overview.png— the top of the AI Engine tab showing the Anomaly AI Engine header with Save/Reset, the Engine section, and the Motion/Object detection cards.ai-engine-object-detection.png— the Object detection card with a model chosen andperson, car, dogin Detect classes.ai-engine-schedules-events.png— the Schedules and Events & Webhooks cards side by side, with a webhook URL filled in.ai-engine-camera-overrides.png— the Per-camera overrides section with a camera selected and an override set.