Files
frigate/docs/src/components/FrigateConfigMock/manifest.json
T

5141 lines
172 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"generatedFrom": "web/e2e/fixtures/mock-data/config-schema.json",
"detectorTypes": {
"axengine": {
"label": "AXEngine NPU",
"description": "AXERA AX650N/AX8850N NPU detector running compiled .axmodel files via the AXEngine runtime.",
"fields": {}
},
"cpu": {
"label": "CPU",
"description": "CPU TFLite detector that runs TensorFlow Lite models on the host CPU without hardware acceleration. Not recommended.",
"fields": {
"num_threads": {
"label": "Number of detection threads",
"description": "The number of threads used for CPU-based inference."
}
}
},
"deepstack": {
"label": "DeepStack",
"description": "DeepStack/CodeProject.AI detector that sends images to a remote DeepStack HTTP API for inference. Not recommended.",
"fields": {
"api_url": {
"label": "DeepStack API URL",
"description": "The URL of the DeepStack API."
},
"api_timeout": {
"label": "DeepStack API timeout (in seconds)",
"description": "Maximum time allowed for a DeepStack API request."
},
"api_key": {
"label": "DeepStack API key (if required)",
"description": "Optional API key for authenticated DeepStack services."
}
}
},
"degirum": {
"label": "DeGirum",
"description": "DeGirum detector for running models via DeGirum cloud or local inference services.",
"fields": {
"location": {
"label": "Inference Location",
"description": "Location of the DeGirim inference engine (e.g. '@cloud', '127.0.0.1')."
},
"zoo": {
"label": "Model Zoo",
"description": "Path or URL to the DeGirum model zoo."
},
"token": {
"label": "DeGirum Cloud Token",
"description": "Token for DeGirum Cloud access."
}
}
},
"edgetpu": {
"label": "EdgeTPU",
"description": "EdgeTPU detector that runs TensorFlow Lite models compiled for Coral EdgeTPU using the EdgeTPU delegate.",
"fields": {
"device": {
"label": "Device Type",
"description": "The device to use for EdgeTPU inference (e.g. 'usb', 'pci')."
}
}
},
"hailo8l": {
"label": "Hailo-8/Hailo-8L",
"description": "Hailo-8/Hailo-8L detector using HEF models and the HailoRT SDK for inference on Hailo hardware.",
"fields": {
"device": {
"label": "Device Type",
"description": "The device to use for Hailo inference (e.g. 'PCIe', 'M.2')."
}
}
},
"memryx": {
"label": "MemryX",
"description": "MemryX MX3 detector that runs compiled DFP models on MemryX accelerators.",
"fields": {
"device": {
"label": "Device Path",
"description": "The device to use for MemryX inference (e.g. 'PCIe')."
}
}
},
"onnx": {
"label": "ONNX",
"description": "ONNX detector for running ONNX models; will use available acceleration backends (CUDA/ROCm/OpenVINO) when available.",
"fields": {
"device": {
"label": "Device Type",
"description": "The device to use for ONNX inference (e.g. 'AUTO', 'CPU', 'GPU')."
}
}
},
"openvino": {
"label": "OpenVINO",
"description": "OpenVINO detector for AMD and Intel CPUs, Intel GPUs and Intel VPU hardware.",
"fields": {
"device": {
"label": "Device Type",
"description": "The device to use for OpenVINO inference (e.g. 'CPU', 'GPU', 'NPU')."
}
}
},
"rknn": {
"label": "RKNN",
"description": "RKNN detector for Rockchip NPUs; runs compiled RKNN models on Rockchip hardware.",
"fields": {
"num_cores": {
"label": "Number of NPU cores to use.",
"description": "The number of NPU cores to use (0 for auto)."
}
}
},
"synaptics": {
"label": "Synaptics",
"description": "Synaptics NPU detector for models in .synap format using the Synap SDK on Synaptics hardware.",
"fields": {}
},
"teflon_tfl": {
"label": "Teflon",
"description": "Teflon delegate detector for TFLite using Mesa Teflon delegate library to accelerate inference on supported GPUs.",
"fields": {}
},
"tensorrt": {
"label": "TensorRT",
"description": "TensorRT detector for Nvidia Jetson devices using serialized TensorRT engines for accelerated inference.",
"fields": {
"device": {
"label": "GPU Device Index",
"description": "The GPU device index to use."
}
}
},
"zmq": {
"label": "ZMQ IPC",
"description": "ZMQ IPC detector that offloads inference to an external process via a ZeroMQ IPC endpoint.",
"fields": {
"endpoint": {
"label": "ZMQ IPC endpoint",
"description": "The ZMQ endpoint to connect to."
},
"request_timeout_ms": {
"label": "ZMQ request timeout in milliseconds",
"description": "Timeout for ZMQ requests in milliseconds."
},
"linger_ms": {
"label": "ZMQ socket linger in milliseconds",
"description": "Socket linger period in milliseconds."
}
}
}
},
"levels": {
"global": {
"logger": {
"label": "Logging",
"description": "Controls default log verbosity and per-component log level overrides.",
"order": [
"default",
"logs"
],
"groups": [],
"docs": "/configuration/advanced/system#frigate-logger",
"fields": {
"default": {
"label": "Logging level",
"description": "Default global log verbosity (debug, info, warning, error).",
"widget": "select",
"default": "info",
"enum": [
"debug",
"info",
"warning",
"error",
"critical"
],
"minimum": null,
"maximum": null,
"advanced": false
},
"logs": {
"label": "Per-process log level",
"description": "Per-component log level overrides to increase or decrease verbosity for specific modules.",
"widget": "object",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
}
}
},
"auth": {
"label": "Authentication",
"description": "Authentication and session-related settings including cookie and rate limit options.",
"order": [
"enabled",
"reset_admin_password",
"cookie_name",
"cookie_secure",
"session_length",
"refresh_time",
"native_oauth_url",
"failed_login_rate_limit",
"trusted_proxies",
"hash_iterations",
"roles"
],
"groups": [],
"docs": "/configuration/authentication",
"fields": {
"enabled": {
"label": "Enable authentication",
"description": "Enable native authentication for the Frigate UI.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"reset_admin_password": {
"label": "Reset admin password",
"description": "If true, reset the admin user's password on startup and print the new password in logs.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"cookie_name": {
"label": "JWT cookie name",
"description": "Name of the cookie used to store the JWT token for native authentication.",
"widget": "text",
"default": "frigate_token",
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"cookie_secure": {
"label": "Secure cookie flag",
"description": "Set the secure flag on the auth cookie; should be true when using TLS.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"session_length": {
"label": "Session length",
"description": "Session duration in seconds for JWT-based sessions.",
"widget": "number",
"default": 86400,
"enum": null,
"minimum": 60,
"maximum": null,
"advanced": true
},
"refresh_time": {
"label": "Session refresh window",
"description": "When a session is within this many seconds of expiring, refresh it back to full length.",
"widget": "number",
"default": 1800,
"enum": null,
"minimum": 30,
"maximum": null,
"advanced": true
},
"failed_login_rate_limit": {
"label": "Failed login limits",
"description": "Rate limiting rules for failed login attempts to reduce brute-force attacks.",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"trusted_proxies": {
"label": "Trusted proxies",
"description": "List of trusted proxy IPs used when determining client IP for rate limiting.",
"widget": "tags",
"default": [],
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"hash_iterations": {
"label": "Hash iterations",
"description": "Number of PBKDF2-SHA256 iterations to use when hashing user passwords.",
"widget": "number",
"default": 600000,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
}
}
},
"database": {
"label": "Database",
"description": "Settings for the SQLite database used by Frigate to store tracked object and recording metadata.",
"order": [
"path"
],
"groups": [],
"docs": "/configuration/advanced/system#database",
"fields": {
"path": {
"label": "Database path",
"description": "Filesystem path where the Frigate SQLite database file will be stored.",
"widget": "text",
"default": "/config/frigate.db",
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
}
}
},
"go2rtc": {
"label": "go2rtc",
"description": "Settings for the integrated go2rtc restreaming service used for live stream relaying and translation.",
"order": [],
"groups": [],
"docs": null,
"fields": {}
},
"mqtt": {
"label": "MQTT",
"description": "Settings for connecting and publishing telemetry, snapshots, and event details to an MQTT broker.",
"order": [
"enabled",
"host",
"port",
"user",
"password",
"topic_prefix",
"client_id",
"stats_interval",
"qos",
"tls_ca_certs",
"tls_client_cert",
"tls_client_key",
"tls_insecure"
],
"groups": [],
"docs": "/integrations/mqtt",
"fields": {
"enabled": {
"label": "Enable MQTT",
"description": "Enable or disable MQTT integration for state, events, and snapshots.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"host": {
"label": "MQTT host",
"description": "Hostname or IP address of the MQTT broker.",
"widget": "text",
"default": "",
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"port": {
"label": "MQTT port",
"description": "Port of the MQTT broker (usually 1883 for plain MQTT).",
"widget": "number",
"default": 1883,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"topic_prefix": {
"label": "Topic prefix",
"description": "MQTT topic prefix for all Frigate topics; must be unique if running multiple instances.",
"widget": "text",
"default": "frigate",
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"client_id": {
"label": "Client ID",
"description": "Client identifier used when connecting to the MQTT broker; should be unique per instance.",
"widget": "text",
"default": "frigate",
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"stats_interval": {
"label": "Stats interval",
"description": "Interval in seconds for publishing system and camera stats to MQTT.",
"widget": "number",
"default": 60,
"enum": null,
"minimum": 15,
"maximum": null,
"advanced": true
},
"user": {
"label": "MQTT username",
"description": "Optional MQTT username; can be provided via environment variables or secrets.",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"password": {
"label": "MQTT password",
"description": "Optional MQTT password; can be provided via environment variables or secrets.",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"tls_ca_certs": {
"label": "TLS CA certs",
"description": "Path to CA certificate for TLS connections to the broker (for self-signed certs).",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"tls_client_cert": {
"label": "Client cert",
"description": "Client certificate path for TLS mutual authentication; do not set user/password when using client certs.",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"tls_client_key": {
"label": "Client key",
"description": "Private key path for the client certificate.",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"tls_insecure": {
"label": "TLS insecure",
"description": "Allow insecure TLS connections by skipping hostname verification (not recommended).",
"widget": "switch",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"qos": {
"label": "MQTT QoS",
"description": "Quality of Service level for MQTT publishes/subscriptions (0, 1, or 2).",
"widget": "number",
"default": 0,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
}
}
},
"notifications": {
"label": "Notifications",
"description": "Settings to enable and control notifications for all cameras; can be overridden per-camera.",
"order": [
"enabled",
"email"
],
"groups": [],
"docs": "/configuration/notifications",
"fields": {
"enabled": {
"label": "Enable notifications",
"description": "Enable or disable notifications for all cameras; can be overridden per-camera.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"email": {
"label": "Notification email",
"description": "Email address used for push notifications or required by certain notification providers.",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"cooldown": {
"label": "Cooldown period",
"description": "Cooldown (seconds) between notifications to avoid spamming recipients.",
"widget": "number",
"default": 0,
"enum": null,
"minimum": 0,
"maximum": null,
"advanced": false
}
}
},
"networking": {
"label": "Networking",
"description": "Network-related settings such as IPv6 enablement for Frigate endpoints.",
"order": [],
"groups": [],
"docs": "/configuration/advanced/system#network-configuration",
"fields": {
"ipv6.enabled": {
"label": "Enable IPv6",
"description": "Enable IPv6 support for Frigate services (API and UI) where applicable.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"listen.internal": {
"label": "Internal port",
"description": "Internal listening port for Frigate (default 5000).",
"widget": "number",
"default": 5000,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"listen.external": {
"label": "External port",
"description": "External listening port for Frigate (default 8971).",
"widget": "number",
"default": 8971,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
}
}
},
"proxy": {
"label": "Proxy",
"description": "Settings for integrating Frigate behind a reverse proxy that passes authenticated user headers.",
"order": [
"header_map",
"logout_url",
"auth_secret",
"default_role",
"separator"
],
"groups": [],
"docs": "/configuration/authentication#proxy",
"fields": {
"header_map.user": {
"label": "User header",
"description": "Header containing the authenticated username provided by the upstream proxy.",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"header_map.role": {
"label": "Role header",
"description": "Header containing the authenticated user's role or groups from the upstream proxy.",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"header_map.role_map": {
"label": "Role mapping",
"description": "Map upstream group values to Frigate roles (for example map admin groups to the admin role).",
"widget": "object",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"logout_url": {
"label": "Logout URL",
"description": "URL to redirect users to when logging out via the proxy.",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"auth_secret": {
"label": "Proxy secret",
"description": "Optional secret checked against the X-Proxy-Secret header to verify trusted proxies.",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"default_role": {
"label": "Default role",
"description": "Default role assigned to proxy-authenticated users when no role mapping applies.",
"widget": "text",
"default": "viewer",
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"separator": {
"label": "Separator character",
"description": "Character used to split multiple values provided in proxy headers.",
"widget": "text",
"default": ",",
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
}
}
},
"telemetry": {
"label": "Telemetry",
"description": "System telemetry and stats options including GPU and network bandwidth monitoring.",
"order": [
"network_interfaces",
"stats",
"version_check"
],
"groups": [],
"docs": "/configuration/advanced/reference",
"fields": {
"network_interfaces": {
"label": "Network interfaces",
"description": "List of network interface name prefixes to monitor for bandwidth statistics.",
"widget": "tags",
"default": [],
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"stats.amd_gpu_stats": {
"label": "AMD GPU stats",
"description": "Enable collection of AMD GPU statistics if an AMD GPU is present.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"stats.intel_gpu_stats": {
"label": "Intel GPU stats",
"description": "Enable collection of Intel GPU statistics if an Intel GPU is present.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"stats.network_bandwidth": {
"label": "Network bandwidth",
"description": "Enable per-process network bandwidth monitoring for camera ffmpeg processes and detectors (requires capabilities).",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"stats.intel_gpu_device": {
"label": "Intel GPU device",
"description": "PCI bus address or DRM device path (e.g. /dev/dri/card1) used to pin Intel GPU stats to a specific device when multiple are present.",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"version_check": {
"label": "Version check",
"description": "Enable an outbound check to detect if a newer Frigate version is available.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
}
}
},
"tls": {
"label": "TLS",
"description": "TLS settings for Frigate's web endpoints (port 8971).",
"order": [
"enabled",
"cert",
"key"
],
"groups": [],
"docs": "/configuration/tls",
"fields": {
"enabled": {
"label": "Enable TLS",
"description": "Enable TLS for Frigate's web UI and API on the configured TLS port.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
}
}
},
"ui": {
"label": "UI",
"description": "User interface preferences such as timezone, time/date formatting, and units.",
"order": [
"timezone",
"time_format",
"unit_system"
],
"groups": [],
"docs": "/configuration/advanced/reference",
"fields": {
"timezone": {
"label": "Timezone",
"description": "Optional timezone to display across the UI (defaults to browser local time if unset).",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"time_format": {
"label": "Time format",
"description": "Time format to use in the UI (browser, 12hour, or 24hour).",
"widget": "select",
"default": "browser",
"enum": [
"browser",
"12hour",
"24hour"
],
"minimum": null,
"maximum": null,
"advanced": false
},
"unit_system": {
"label": "Unit system",
"description": "Unit system for display (metric or imperial) used in the UI and MQTT.",
"widget": "select",
"default": "metric",
"enum": [
"imperial",
"metric"
],
"minimum": null,
"maximum": null,
"advanced": false
}
}
},
"model": {
"label": "Detection model",
"description": "Settings to configure a custom object detection model and its input shape.",
"order": [
"path",
"labelmap_path",
"width",
"height",
"input_pixel_format",
"input_tensor",
"input_dtype",
"model_type"
],
"groups": [],
"docs": "/configuration/object_detectors#model",
"fields": {
"path": {
"label": "Custom object detector model path",
"description": "Path to a custom detection model file (or plus://<model_id> for Frigate+ models).",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"labelmap_path": {
"label": "Label map for custom object detector",
"description": "Path to a labelmap file that maps numeric classes to string labels for the detector.",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"width": {
"label": "Object detection model input width",
"description": "Width of the model input tensor in pixels.",
"widget": "number",
"default": 320,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"height": {
"label": "Object detection model input height",
"description": "Height of the model input tensor in pixels.",
"widget": "number",
"default": 320,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"input_tensor": {
"label": "Model Input Tensor Shape",
"description": "Tensor format expected by the model: 'nhwc' or 'nchw'.",
"widget": "select",
"default": "nhwc",
"enum": [
"nchw",
"nhwc",
"hwnc",
"hwcn"
],
"minimum": null,
"maximum": null,
"advanced": true
},
"input_pixel_format": {
"label": "Model Input Pixel Color Format",
"description": "Pixel colorspace expected by the model: 'rgb', 'bgr', or 'yuv'.",
"widget": "select",
"default": "rgb",
"enum": [
"rgb",
"bgr",
"yuv"
],
"minimum": null,
"maximum": null,
"advanced": true
},
"input_dtype": {
"label": "Model Input D Type",
"description": "Data type of the model input tensor (for example 'float32').",
"widget": "select",
"default": "int",
"enum": [
"float",
"float_denorm",
"int"
],
"minimum": null,
"maximum": null,
"advanced": true
},
"model_type": {
"label": "Object Detection Model Type",
"description": "Detector model architecture type (ssd, yolox, yolonas) used by some detectors for optimization.",
"widget": "select",
"default": "ssd",
"enum": [
"dfine",
"rfdetr",
"ssd",
"yolox",
"yolonas",
"yolo-generic"
],
"minimum": null,
"maximum": null,
"advanced": true
}
}
},
"audio": {
"label": "Audio detection",
"description": "Settings for audio-based event detection for all cameras; can be overridden per-camera.",
"order": [
"enabled",
"listen",
"filters",
"min_volume",
"max_not_heard",
"num_threads"
],
"groups": [
{
"key": "detection",
"label": "Global Detection",
"fields": [
"listen",
"filters"
]
},
{
"key": "sensitivity",
"label": "Global Sensitivity",
"fields": [
"min_volume",
"max_not_heard"
]
}
],
"docs": "/configuration/audio_detectors",
"fields": {
"enabled": {
"label": "Enable audio detection",
"description": "Enable or disable audio event detection for all cameras; can be overridden per-camera.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"max_not_heard": {
"label": "End timeout",
"description": "Amount of seconds without the configured audio type before the audio event is ended.",
"widget": "number",
"default": 30,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"min_volume": {
"label": "Minimum volume",
"description": "Minimum RMS volume threshold required to run audio detection; lower values increase sensitivity (e.g., 200 high, 500 medium, 1000 low).",
"widget": "number",
"default": 500,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"listen": {
"label": "Listen types",
"description": "List of audio event types to detect (for example: bark, fire_alarm, speech, yell).",
"widget": "tags",
"default": [
"bark",
"fire_alarm",
"speech",
"yell"
],
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"filters": {
"label": "Audio filters",
"description": "Per-audio-type filter settings such as confidence thresholds used to reduce false positives.",
"widget": "object",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"num_threads": {
"label": "Detection threads",
"description": "Number of threads to use for audio detection processing.",
"widget": "number",
"default": 2,
"enum": null,
"minimum": 1,
"maximum": null,
"advanced": true
}
}
},
"birdseye": {
"label": "Birdseye",
"description": "Settings for the Birdseye composite view that composes multiple camera feeds into a single layout.",
"order": [
"enabled",
"restream",
"width",
"height",
"quality",
"mode",
"layout",
"inactivity_threshold",
"idle_heartbeat_fps"
],
"groups": [],
"docs": "/configuration/birdseye",
"fields": {
"enabled": {
"label": "Enable Birdseye",
"description": "Enable or disable the Birdseye view feature.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"mode": {
"label": "Tracking mode",
"description": "Mode for including cameras in Birdseye: 'objects', 'motion', or 'continuous'.",
"widget": "select",
"default": "objects",
"enum": [
"objects",
"motion",
"continuous"
],
"minimum": null,
"maximum": null,
"advanced": false
},
"restream": {
"label": "Restream RTSP",
"description": "Re-stream the Birdseye output as an RTSP feed; enabling this will keep Birdseye running continuously.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"width": {
"label": "Width",
"description": "Output width (pixels) of the composed Birdseye frame.",
"widget": "number",
"default": 1280,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"height": {
"label": "Height",
"description": "Output height (pixels) of the composed Birdseye frame.",
"widget": "number",
"default": 720,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"quality": {
"label": "Encoding quality",
"description": "Encoding quality for the Birdseye mpeg1 feed (1 highest quality, 31 lowest).",
"widget": "range",
"default": 8,
"enum": null,
"minimum": 1,
"maximum": 31,
"advanced": true
},
"inactivity_threshold": {
"label": "Inactivity threshold",
"description": "Seconds of inactivity after which a camera will stop being shown in Birdseye.",
"widget": "number",
"default": 30,
"enum": null,
"minimum": 0,
"maximum": null,
"advanced": true
},
"layout.scaling_factor": {
"label": "Scaling factor",
"description": "Scaling factor used by the layout calculator (range 1.0 to 5.0).",
"widget": "range",
"default": 2,
"enum": null,
"minimum": 1,
"maximum": 5,
"advanced": false
},
"layout.max_cameras": {
"label": "Max cameras",
"description": "Maximum number of cameras to display at once in Birdseye; shows the most recent cameras.",
"widget": "number",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"idle_heartbeat_fps": {
"label": "Idle heartbeat FPS",
"description": "Frames-per-second to resend the last composed Birdseye frame when idle; set to 0 to disable.",
"widget": "range",
"default": 0,
"enum": null,
"minimum": 0,
"maximum": 10,
"advanced": false
}
}
},
"detect": {
"label": "Object Detection",
"description": "Settings for the detection/detect role used to run object detection and initialize trackers.",
"order": [
"enabled",
"width",
"height",
"fps",
"min_initialized",
"max_disappeared",
"annotation_offset",
"stationary",
"stationary.interval",
"stationary.threshold",
"stationary.max_frames"
],
"groups": [
{
"key": "resolution",
"label": "Global Resolution",
"fields": [
"width",
"height",
"fps"
]
},
{
"key": "tracking",
"label": "Global Tracking",
"fields": [
"min_initialized",
"max_disappeared"
]
}
],
"docs": "/configuration/camera_specific",
"fields": {
"enabled": {
"label": "Enable object detection",
"description": "Enable or disable object detection for all cameras; can be overridden per-camera.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"height": {
"label": "Detect height",
"description": "Height (pixels) of frames used for the detect stream; leave empty to use the native stream resolution.",
"widget": "number",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"width": {
"label": "Detect width",
"description": "Width (pixels) of frames used for the detect stream; leave empty to use the native stream resolution.",
"widget": "number",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"fps": {
"label": "Detect FPS",
"description": "Desired frames per second to run detection on; lower values reduce CPU usage (recommended value is 5, only set higher - at most 10 - if tracking extremely fast moving objects).",
"widget": "number",
"default": 5,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"min_initialized": {
"label": "Minimum initialization frames",
"description": "Number of consecutive detection hits required before creating a tracked object. Increase to reduce false initializations. Default value is fps divided by 2.",
"widget": "number",
"default": null,
"enum": null,
"minimum": 2,
"maximum": null,
"advanced": true
},
"max_disappeared": {
"label": "Maximum disappeared frames",
"description": "Number of frames without a detection before a tracked object is considered gone.",
"widget": "number",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"stationary.interval": {
"label": "Stationary interval",
"description": "How often (in frames) to run a detection check to confirm a stationary object.",
"widget": "number",
"default": null,
"enum": null,
"minimum": 0,
"maximum": null,
"advanced": false
},
"stationary.threshold": {
"label": "Stationary threshold",
"description": "Number of frames with no position change required to mark an object as stationary.",
"widget": "number",
"default": null,
"enum": null,
"minimum": 1,
"maximum": null,
"advanced": false
},
"stationary.max_frames.default": {
"label": "Default max frames",
"description": "Default maximum frames to track a stationary object before stopping.",
"widget": "number",
"default": null,
"enum": null,
"minimum": 1,
"maximum": null,
"advanced": false
},
"stationary.max_frames.objects": {
"label": "Object max frames",
"description": "Per-object overrides for maximum frames to track stationary objects.",
"widget": "object",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"stationary.classifier": {
"label": "Enable visual classifier",
"description": "Use a visual classifier to detect truly stationary objects even when bounding boxes jitter.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"annotation_offset": {
"label": "Annotation offset",
"description": "Milliseconds to shift detect annotations to better align timeline bounding boxes with recordings; can be positive or negative.",
"widget": "number",
"default": 0,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
}
}
},
"ffmpeg": {
"label": "FFmpeg",
"description": "FFmpeg settings including binary path, args, hwaccel options, and per-role output args.",
"order": [
"hwaccel_args",
"path",
"global_args",
"input_args",
"output_args",
"apple_compatibility",
"gpu"
],
"groups": [],
"docs": "/configuration/ffmpeg_presets",
"fields": {
"path": {
"label": "FFmpeg path",
"description": "Path to the FFmpeg binary to use or a version alias (\"7.0\" or \"8.0\").",
"widget": "text",
"default": "default",
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"global_args": {
"label": "FFmpeg global arguments",
"description": "Global arguments passed to FFmpeg processes.",
"widget": "text",
"default": [
"-hide_banner",
"-loglevel",
"warning",
"-threads",
"2"
],
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"hwaccel_args": {
"label": "Hardware acceleration arguments",
"description": "Hardware acceleration arguments for FFmpeg. Provider-specific presets are recommended.",
"widget": "text",
"default": "auto",
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"input_args": {
"label": "Input arguments",
"description": "Input arguments applied to FFmpeg input streams.",
"widget": "text",
"default": "preset-rtsp-generic",
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"output_args.detect": {
"label": "Detect output arguments",
"description": "Default output arguments for detect role streams.",
"widget": "text",
"default": [
"-threads",
"2",
"-f",
"rawvideo",
"-pix_fmt",
"yuv420p"
],
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"output_args.record": {
"label": "Record output arguments",
"description": "Default output arguments for record role streams.",
"widget": "text",
"default": "preset-record-generic-audio-aac",
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"apple_compatibility": {
"label": "Apple compatibility",
"description": "Enable HEVC tagging for better Apple player compatibility when recording H.265.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"gpu": {
"label": "GPU index",
"description": "Default GPU index used for hardware acceleration if available.",
"widget": "number",
"default": 0,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
}
}
},
"live": {
"label": "Live playback",
"description": "Settings to control the jsmpeg live stream resolution and quality. This does not affect restreamed cameras that use go2rtc for live view.",
"order": [
"streams",
"height",
"quality"
],
"groups": [],
"docs": "/configuration/live",
"fields": {
"height": {
"label": "Live height",
"description": "Height (pixels) to render the jsmpeg live stream in the Web UI; must be <= detect stream height.",
"widget": "number",
"default": 720,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"quality": {
"label": "Live quality",
"description": "Encoding quality for the jsmpeg stream (1 highest, 31 lowest).",
"widget": "range",
"default": 8,
"enum": null,
"minimum": 1,
"maximum": 31,
"advanced": true
}
}
},
"motion": {
"label": "Motion detection",
"description": "Default motion detection settings applied to cameras unless overridden per-camera.",
"order": [
"enabled",
"threshold",
"lightning_threshold",
"skip_motion_threshold",
"improve_contrast",
"contour_area",
"delta_alpha",
"frame_alpha",
"frame_height",
"mqtt_off_delay"
],
"groups": [
{
"key": "sensitivity",
"label": "Global Sensitivity",
"fields": [
"threshold",
"contour_area"
]
},
{
"key": "algorithm",
"label": "Global Algorithm",
"fields": [
"improve_contrast",
"delta_alpha",
"frame_alpha"
]
}
],
"docs": "/configuration/motion_detection",
"fields": {
"enabled": {
"label": "Enable motion detection",
"description": "Enable or disable motion detection for all cameras; can be overridden per-camera.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"threshold": {
"label": "Motion threshold",
"description": "Pixel difference threshold used by the motion detector; higher values reduce sensitivity (range 1-255).",
"widget": "range",
"default": 30,
"enum": null,
"minimum": 1,
"maximum": 255,
"advanced": false
},
"lightning_threshold": {
"label": "Lightning threshold",
"description": "Threshold to detect and ignore brief lighting spikes (lower is more sensitive, values between 0.3 and 1.0). This does not prevent motion detection entirely; it merely causes the detector to stop analyzing additional frames once the threshold is exceeded. Motion-based recordings are still created during these events.",
"widget": "range",
"default": 0.8,
"enum": null,
"minimum": 0.3,
"maximum": 1,
"advanced": true
},
"skip_motion_threshold": {
"label": "Skip motion threshold",
"description": "If set to a value between 0.0 and 1.0, and more than this fraction of the image changes in a single frame, the detector will return no motion boxes and immediately recalibrate. This can save CPU and reduce false positives during lightning, storms, etc., but may miss real events such as a PTZ camera autotracking an object. The tradeoff is between dropping a few megabytes of recordings versus reviewing a couple short clips. Leave unset (None) to disable this feature.",
"widget": "range",
"default": null,
"enum": null,
"minimum": 0,
"maximum": 1,
"advanced": true
},
"improve_contrast": {
"label": "Improve contrast",
"description": "Apply contrast improvement to frames before motion analysis to help detection.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"contour_area": {
"label": "Contour area",
"description": "Minimum contour area in pixels required for a motion contour to be counted.",
"widget": "number",
"default": 10,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"delta_alpha": {
"label": "Delta alpha",
"description": "Alpha blending factor used in frame differencing for motion calculation.",
"widget": "number",
"default": 0.2,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"frame_alpha": {
"label": "Frame alpha",
"description": "Alpha value used when blending frames for motion preprocessing.",
"widget": "number",
"default": 0.01,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"frame_height": {
"label": "Frame height",
"description": "Height in pixels to scale frames to when computing motion.",
"widget": "number",
"default": 100,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"mqtt_off_delay": {
"label": "MQTT off delay",
"description": "Seconds to wait after last motion before publishing an MQTT 'off' state.",
"widget": "number",
"default": 30,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
}
}
},
"objects": {
"label": "Objects",
"description": "Object tracking defaults including which labels to track and per-object filters.",
"order": [
"track",
"alert",
"detect",
"filters"
],
"groups": [
{
"key": "tracking",
"label": "Global Tracking",
"fields": [
"track",
"alert",
"detect"
]
},
{
"key": "filtering",
"label": "Global Filtering",
"fields": [
"filters"
]
}
],
"docs": "/configuration/object_filters",
"fields": {
"track": {
"label": "Objects to track",
"description": "List of object labels to track for all cameras; can be overridden per-camera.",
"widget": "tags",
"default": [
"person"
],
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"filters": {
"label": "Object filters",
"description": "Filters applied to detected objects to reduce false positives (area, ratio, confidence).",
"widget": "object",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.enabled": {
"label": "Enable GenAI",
"description": "Enable GenAI generation of descriptions for tracked objects by default.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.use_snapshot": {
"label": "Use snapshots",
"description": "Use object snapshots instead of thumbnails for GenAI description generation.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.prompt": {
"label": "Caption prompt",
"description": "Default prompt template used when generating descriptions with GenAI.",
"widget": "text",
"default": "Analyze the sequence of images containing the {label}. Focus on the likely intent or behavior of the {label} based on its actions and movement, rather than describing its appearance or the surroundings. Consider what the {label} is doing, why, and what it might do next.",
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.object_prompts": {
"label": "Object prompts",
"description": "Per-object prompts to customize GenAI outputs for specific labels.",
"widget": "object",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.objects": {
"label": "GenAI objects",
"description": "List of object labels to send to GenAI by default.",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.debug_save_thumbnails": {
"label": "Save thumbnails",
"description": "Save thumbnails sent to GenAI for debugging and review.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.send_triggers.tracked_object_end": {
"label": "Send on end",
"description": "Send a request to GenAI when the tracked object ends.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.send_triggers.after_significant_updates": {
"label": "Early GenAI trigger",
"description": "Send a request to GenAI after a specified number of significant updates for the tracked object.",
"widget": "number",
"default": null,
"enum": null,
"minimum": 1,
"maximum": null,
"advanced": false
}
}
},
"record": {
"label": "Recording",
"description": "Recording and retention settings applied to cameras unless overridden per-camera.",
"order": [
"enabled",
"expire_interval",
"continuous",
"motion",
"alerts",
"detections",
"preview",
"export"
],
"groups": [
{
"key": "retention",
"label": "Global Retention",
"fields": [
"continuous",
"motion"
]
},
{
"key": "events",
"label": "Global Events",
"fields": [
"alerts",
"detections"
]
}
],
"docs": "/configuration/record",
"fields": {
"enabled": {
"label": "Enable recording",
"description": "Enable or disable recording for all cameras; can be overridden per-camera.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"expire_interval": {
"label": "Record cleanup interval",
"description": "Minutes between cleanup passes that remove expired recording segments.",
"widget": "number",
"default": 60,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"continuous.days": {
"label": "Retention days",
"description": "Days to retain recordings.",
"widget": "number",
"default": 0,
"enum": null,
"minimum": 0,
"maximum": null,
"advanced": false
},
"motion.days": {
"label": "Retention days",
"description": "Days to retain recordings.",
"widget": "number",
"default": 0,
"enum": null,
"minimum": 0,
"maximum": null,
"advanced": false
},
"detections.pre_capture": {
"label": "Pre-capture seconds",
"description": "Number of seconds before the detection event to include in the recording.",
"widget": "range",
"default": 5,
"enum": null,
"minimum": 0,
"maximum": 60,
"advanced": false
},
"detections.post_capture": {
"label": "Post-capture seconds",
"description": "Number of seconds after the detection event to include in the recording.",
"widget": "number",
"default": 5,
"enum": null,
"minimum": 0,
"maximum": null,
"advanced": false
},
"detections.retain.days": {
"label": "Retention days",
"description": "Number of days to retain recordings of detection events.",
"widget": "number",
"default": 10,
"enum": null,
"minimum": 0,
"maximum": null,
"advanced": false
},
"detections.retain.mode": {
"label": "Retention mode",
"description": "Mode for retention: all (save all segments), motion (save segments with motion), or active_objects (save segments with active objects).",
"widget": "select",
"default": "motion",
"enum": [
"all",
"motion",
"active_objects"
],
"minimum": null,
"maximum": null,
"advanced": false
},
"alerts.pre_capture": {
"label": "Pre-capture seconds",
"description": "Number of seconds before the detection event to include in the recording.",
"widget": "range",
"default": 5,
"enum": null,
"minimum": 0,
"maximum": 60,
"advanced": false
},
"alerts.post_capture": {
"label": "Post-capture seconds",
"description": "Number of seconds after the detection event to include in the recording.",
"widget": "number",
"default": 5,
"enum": null,
"minimum": 0,
"maximum": null,
"advanced": false
},
"alerts.retain.days": {
"label": "Retention days",
"description": "Number of days to retain recordings of detection events.",
"widget": "number",
"default": 10,
"enum": null,
"minimum": 0,
"maximum": null,
"advanced": false
},
"alerts.retain.mode": {
"label": "Retention mode",
"description": "Mode for retention: all (save all segments), motion (save segments with motion), or active_objects (save segments with active objects).",
"widget": "select",
"default": "motion",
"enum": [
"all",
"motion",
"active_objects"
],
"minimum": null,
"maximum": null,
"advanced": false
},
"export.hwaccel_args": {
"label": "Export hwaccel args",
"description": "Hardware acceleration args to use for export/transcode operations.",
"widget": "text",
"default": "auto",
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"export.max_concurrent": {
"label": "Maximum concurrent exports",
"description": "Maximum number of export jobs to process at the same time.",
"widget": "number",
"default": 3,
"enum": null,
"minimum": 1,
"maximum": null,
"advanced": false
},
"preview.quality": {
"label": "Preview quality",
"description": "Preview quality level (very_low, low, medium, high, very_high).",
"widget": "select",
"default": "medium",
"enum": [
"very_low",
"low",
"medium",
"high",
"very_high"
],
"minimum": null,
"maximum": null,
"advanced": false
}
}
},
"review": {
"label": "Review",
"description": "Settings that control alerts, detections, and GenAI review summaries used by the UI and storage.",
"order": [
"alerts",
"detections",
"genai",
"genai.enabled"
],
"groups": [],
"docs": "/configuration/review",
"fields": {
"alerts.enabled": {
"label": "Enable alerts",
"description": "Enable or disable alert generation for all cameras; can be overridden per-camera.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"alerts.labels": {
"label": "Alert labels",
"description": "List of object labels that qualify as alerts (for example: car, person).",
"widget": "tags",
"default": [
"person",
"car"
],
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"alerts.required_zones": {
"label": "Required zones",
"description": "Zones that an object must enter to be considered an alert; leave empty to allow any zone.",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"alerts.cutoff_time": {
"label": "Alerts cutoff time",
"description": "Seconds to wait after no alert-causing activity before cutting off an alert.",
"widget": "number",
"default": 40,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"detections.enabled": {
"label": "Enable detections",
"description": "Enable or disable detection events for all cameras; can be overridden per-camera.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"detections.labels": {
"label": "Detection labels",
"description": "List of object labels that qualify as detection events.",
"widget": "tags",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"detections.required_zones": {
"label": "Required zones",
"description": "Zones that an object must enter to be considered a detection; leave empty to allow any zone.",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"detections.cutoff_time": {
"label": "Detections cutoff time",
"description": "Seconds to wait after no detection-causing activity before cutting off a detection.",
"widget": "number",
"default": 30,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.enabled": {
"label": "Enable GenAI descriptions",
"description": "Enable or disable GenAI-generated descriptions and summaries for review items.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.alerts": {
"label": "Enable GenAI for alerts",
"description": "Use GenAI to generate descriptions for alert items.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.detections": {
"label": "Enable GenAI for detections",
"description": "Use GenAI to generate descriptions for detection items.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.image_source": {
"label": "Review image source",
"description": "Source of images sent to GenAI ('preview' or 'recordings'); 'recordings' uses higher quality frames but more tokens.",
"widget": "select",
"default": "preview",
"enum": [
"preview",
"recordings"
],
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.additional_concerns": {
"label": "Additional concerns",
"description": "A list of additional concerns or notes the GenAI should consider when evaluating activity on this camera.",
"widget": "tags",
"default": [],
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.debug_save_thumbnails": {
"label": "Save thumbnails",
"description": "Save thumbnails that are sent to the GenAI provider for debugging and review.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.preferred_language": {
"label": "Preferred language",
"description": "Preferred language to request from the GenAI provider for generated responses.",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.activity_context_prompt": {
"label": "Activity context prompt",
"description": "Custom prompt describing what is and is not suspicious activity to provide context for GenAI summaries.",
"widget": "text",
"default": "### Normal Activity Indicators (Level 0)\n- Known/verified people in any zone at any time\n- People with pets in residential areas\n- Routine residential vehicle access during daytime/evening (6 AM - 10 PM): entering, exiting, loading/unloading items — normal commute and travel patterns\n- Deliveries or services during daytime/evening (6 AM - 10 PM): carrying packages to doors/porches, placing items, leaving\n- Services/maintenance workers with visible tools, uniforms, or service vehicles during daytime\n- Activity confined to public areas only (sidewalks, streets) without entering property at any time\n\n### Suspicious Activity Indicators (Level 1)\n- **Checking or probing vehicle/building access**: trying handles without entering, peering through windows, examining multiple vehicles, or possessing break-in tools — Level 1\n- **Unidentified person in private areas (driveways, near vehicles/buildings) during late night/early morning (11 PM - 5 AM)** — ALWAYS Level 1 regardless of activity or duration\n- Taking items that don't belong to them (packages, objects from porches/driveways)\n- Climbing or jumping fences/barriers to access property\n- Attempting to conceal actions or items from view\n- Prolonged loitering: remaining in same area without visible purpose throughout most of the sequence\n\n### Critical Threat Indicators (Level 2)\n- Holding break-in tools (crowbars, pry bars, bolt cutters)\n- Weapons visible (guns, knives, bats used aggressively)\n- Forced entry in progress\n- Physical aggression or violence\n- Active property damage or theft in progress\n\n### Assessment Guidance\nEvaluate in this order:\n\n1. **If person is verified/known** → Level 0 regardless of time or activity\n2. **If person is unidentified:**\n - Check time: If late night/early morning (11 PM - 5 AM) AND in private areas (driveways, near vehicles/buildings) → Level 1\n - Check actions: If probing access (trying handles without entering, checking multiple vehicles), taking items, climbing → Level 1\n - Otherwise, if daytime/evening (6 AM - 10 PM) with clear legitimate purpose (delivery, service, routine vehicle access) → Level 0\n3. **Escalate to Level 2 if:** Weapons, break-in tools, forced entry in progress, violence, or active property damage visible (escalates from Level 0 or 1)\n\nThe mere presence of an unidentified person in private areas during late night hours is inherently suspicious and warrants human review, regardless of what activity they appear to be doing or how brief the sequence is.",
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
}
}
},
"snapshots": {
"label": "Snapshots",
"description": "Settings for API-generated snapshots of tracked objects for all cameras; can be overridden per-camera.",
"order": [
"enabled",
"bounding_box",
"crop",
"quality",
"timestamp",
"required_zones",
"retain"
],
"groups": [
{
"key": "display",
"label": "Global Display",
"fields": [
"bounding_box",
"crop",
"quality",
"timestamp"
]
}
],
"docs": "/configuration/snapshots",
"fields": {
"enabled": {
"label": "Enable snapshots",
"description": "Enable or disable saving snapshots for all cameras; can be overridden per-camera.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"timestamp": {
"label": "Timestamp overlay",
"description": "Overlay a timestamp on snapshots from API.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"bounding_box": {
"label": "Bounding box overlay",
"description": "Draw bounding boxes for tracked objects on snapshots from API.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"crop": {
"label": "Crop snapshot",
"description": "Crop snapshots from API to the detected object's bounding box.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"height": {
"label": "Snapshot height",
"description": "Height (pixels) to resize snapshots from API to; leave empty to preserve original size.",
"widget": "number",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"retain.default": {
"label": "Default retention",
"description": "Default number of days to retain snapshots.",
"widget": "number",
"default": 10,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"retain.objects": {
"label": "Object retention",
"description": "Per-object overrides for snapshot retention days.",
"widget": "object",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"quality": {
"label": "Snapshot quality",
"description": "Encode quality for saved snapshots (0-100).",
"widget": "range",
"default": 60,
"enum": null,
"minimum": 0,
"maximum": 100,
"advanced": true
}
}
},
"timestamp_style": {
"label": "Timestamp style",
"description": "Styling options for in-feed timestamps applied to debug view and snapshots.",
"order": [
"position",
"format",
"thickness",
"color"
],
"groups": [],
"docs": "/configuration/advanced/reference",
"fields": {
"position": {
"label": "Timestamp position",
"description": "Position of the timestamp on the image (tl/tr/bl/br).",
"widget": "select",
"default": "tl",
"enum": [
"tl",
"tr",
"bl",
"br"
],
"minimum": null,
"maximum": null,
"advanced": false
},
"format": {
"label": "Timestamp format",
"description": "Datetime format string used for timestamps (Python datetime format codes).",
"widget": "text",
"default": "%m/%d/%Y %H:%M:%S",
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"color.red": {
"label": "Red",
"description": "Red component (0-255) for timestamp color.",
"widget": "range",
"default": 255,
"enum": null,
"minimum": 0,
"maximum": 255,
"advanced": false
},
"color.green": {
"label": "Green",
"description": "Green component (0-255) for timestamp color.",
"widget": "range",
"default": 255,
"enum": null,
"minimum": 0,
"maximum": 255,
"advanced": false
},
"color.blue": {
"label": "Blue",
"description": "Blue component (0-255) for timestamp color.",
"widget": "range",
"default": 255,
"enum": null,
"minimum": 0,
"maximum": 255,
"advanced": false
},
"thickness": {
"label": "Timestamp thickness",
"description": "Line thickness of the timestamp text.",
"widget": "number",
"default": 2,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
}
}
},
"audio_transcription": {
"label": "Audio transcription",
"description": "Settings for live and speech audio transcription used for events and live captions.",
"order": [
"enabled",
"language",
"device",
"model_size"
],
"groups": [],
"docs": "/configuration/audio_detectors#audio-transcription",
"fields": {
"enabled": {
"label": "Enable audio transcription",
"description": "Enable or disable automatic audio transcription for all cameras; can be overridden per-camera.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"language": {
"label": "Transcription language",
"description": "Language code used for transcription/translation (for example 'en' for English). See https://whisper-api.com/docs/languages/ for supported language codes.",
"widget": "text",
"default": "en",
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"device": {
"label": "Transcription device",
"description": "Device key (CPU/GPU) to run the transcription model on. Only NVIDIA CUDA GPUs are currently supported for transcription.",
"widget": "select",
"default": "CPU",
"enum": [
"GPU",
"CPU"
],
"minimum": null,
"maximum": null,
"advanced": true
},
"model_size": {
"label": "Model size",
"description": "Model size to use for offline audio event transcription.",
"widget": "select",
"default": "small",
"enum": [
"small",
"large"
],
"minimum": null,
"maximum": null,
"advanced": true
}
}
},
"classification": {
"label": "Object classification",
"description": "Settings for classification models used to refine object labels or state classification.",
"order": [],
"groups": [],
"docs": "/configuration/custom_classification/object_classification",
"fields": {
"bird.enabled": {
"label": "Bird classification",
"description": "Enable or disable bird classification.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"bird.threshold": {
"label": "Minimum score",
"description": "Minimum classification score required to accept a bird classification.",
"widget": "number",
"default": 0.9,
"enum": null,
"minimum": 0,
"maximum": 1,
"advanced": false
}
}
},
"semantic_search": {
"label": "Semantic Search",
"description": "Settings for Semantic Search which builds and queries object embeddings to find similar items.",
"order": [
"enabled",
"reindex",
"model",
"model_size",
"device"
],
"groups": [],
"docs": "/configuration/semantic_search",
"fields": {
"enabled": {
"label": "Enable semantic search",
"description": "Enable or disable the semantic search feature.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"model": {
"label": "Semantic search model or GenAI provider name",
"description": "The embeddings model to use for semantic search (for example 'jinav1'), or the name of a GenAI provider with the embeddings role.",
"widget": "select",
"default": "jinav1",
"enum": [
"jinav1",
"jinav2"
],
"minimum": null,
"maximum": null,
"advanced": false
},
"model_size": {
"label": "Model size",
"description": "Select model size; 'small' runs on CPU and 'large' typically requires GPU.",
"widget": "select",
"default": "small",
"enum": [
"small",
"large"
],
"minimum": null,
"maximum": null,
"advanced": false
},
"device": {
"label": "Device",
"description": "This is an override, to target a specific device. See https://onnxruntime.ai/docs/execution-providers/ for more information",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
}
}
},
"face_recognition": {
"label": "Face recognition",
"description": "Settings for face detection and recognition for all cameras; can be overridden per-camera.",
"order": [
"enabled",
"model_size",
"unknown_score",
"detection_threshold",
"recognition_threshold",
"min_area",
"min_faces",
"save_attempts",
"blur_confidence_filter",
"device"
],
"groups": [],
"docs": "/configuration/face_recognition",
"fields": {
"enabled": {
"label": "Enable face recognition",
"description": "Enable or disable face recognition for all cameras; can be overridden per-camera.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"model_size": {
"label": "Model size",
"description": "Model size to use for face embeddings (small/large); larger may require GPU.",
"widget": "select",
"default": "small",
"enum": [
"small",
"large"
],
"minimum": null,
"maximum": null,
"advanced": false
},
"unknown_score": {
"label": "Unknown score threshold",
"description": "Distance threshold below which a face is considered a potential match (higher = stricter).",
"widget": "number",
"default": 0.8,
"enum": null,
"minimum": 0,
"maximum": 1,
"advanced": true
},
"detection_threshold": {
"label": "Detection threshold",
"description": "Minimum detection confidence required to consider a face detection valid.",
"widget": "number",
"default": 0.7,
"enum": null,
"minimum": 0,
"maximum": 1,
"advanced": true
},
"recognition_threshold": {
"label": "Recognition threshold",
"description": "Face embedding distance threshold to consider two faces a match.",
"widget": "number",
"default": 0.9,
"enum": null,
"minimum": 0,
"maximum": 1,
"advanced": true
},
"min_area": {
"label": "Minimum face area",
"description": "Minimum area (pixels) of a detected face box required to attempt recognition.",
"widget": "number",
"default": 750,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"min_faces": {
"label": "Minimum faces",
"description": "Minimum number of face recognitions required before applying a recognized sub-label to a person.",
"widget": "number",
"default": 1,
"enum": null,
"minimum": 0,
"maximum": 6,
"advanced": true
},
"save_attempts": {
"label": "Save attempts",
"description": "Number of face recognition attempts to retain for recent recognition UI.",
"widget": "number",
"default": 200,
"enum": null,
"minimum": 0,
"maximum": null,
"advanced": true
},
"blur_confidence_filter": {
"label": "Blur confidence filter",
"description": "Adjust confidence scores based on image blur to reduce false positives for poor quality faces.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"device": {
"label": "Device",
"description": "This is an override, to target a specific device. See https://onnxruntime.ai/docs/execution-providers/ for more information",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
}
}
},
"lpr": {
"label": "License Plate Recognition",
"description": "License plate recognition settings including detection thresholds, formatting, and known plates.",
"order": [
"enabled",
"model_size",
"detection_threshold",
"min_area",
"recognition_threshold",
"min_plate_length",
"format",
"match_distance",
"known_plates",
"enhancement",
"debug_save_plates",
"device",
"replace_rules"
],
"groups": [],
"docs": "/configuration/license_plate_recognition",
"fields": {
"enabled": {
"label": "Enable LPR",
"description": "Enable or disable license plate recognition for all cameras; can be overridden per-camera.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"model_size": {
"label": "Model size",
"description": "Model size used for text detection/recognition. Most users should use 'small'.",
"widget": "select",
"default": "small",
"enum": [
"small",
"large"
],
"minimum": null,
"maximum": null,
"advanced": false
},
"detection_threshold": {
"label": "Detection threshold",
"description": "Detection confidence threshold to begin running OCR on a suspected plate.",
"widget": "number",
"default": 0.7,
"enum": null,
"minimum": 0,
"maximum": 1,
"advanced": true
},
"min_area": {
"label": "Minimum plate area",
"description": "Minimum plate area (pixels) required to attempt recognition.",
"widget": "number",
"default": 1000,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"recognition_threshold": {
"label": "Recognition threshold",
"description": "Confidence threshold required for recognized plate text to be attached as a sub-label.",
"widget": "number",
"default": 0.9,
"enum": null,
"minimum": 0,
"maximum": 1,
"advanced": true
},
"min_plate_length": {
"label": "Min plate length",
"description": "Minimum number of characters a recognized plate must contain to be considered valid.",
"widget": "number",
"default": 4,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"format": {
"label": "Plate format regex",
"description": "Optional regex to validate recognized plate strings against an expected format.",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"match_distance": {
"label": "Match distance",
"description": "Number of character mismatches allowed when comparing detected plates to known plates.",
"widget": "number",
"default": 1,
"enum": null,
"minimum": 0,
"maximum": null,
"advanced": true
},
"known_plates": {
"label": "Known plates",
"description": "List of plates or regexes to specially track or alert on.",
"widget": "object",
"default": {},
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"enhancement": {
"label": "Enhancement level",
"description": "Enhancement level (0-10) to apply to plate crops prior to OCR; higher values may not always improve results, levels above 5 may only work with night time plates and should be used with caution.",
"widget": "range",
"default": 0,
"enum": null,
"minimum": 0,
"maximum": 10,
"advanced": true
},
"debug_save_plates": {
"label": "Save debug plates",
"description": "Save plate crop images for debugging LPR performance.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"device": {
"label": "Device",
"description": "This is an override, to target a specific device. See https://onnxruntime.ai/docs/execution-providers/ for more information",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"replace_rules": {
"label": "Replacement rules",
"description": "Regex replacement rules used to normalize detected plate strings before matching.",
"widget": "tags",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
}
}
}
},
"camera": {
"audio": {
"label": "Audio detection",
"description": "Settings for audio-based event detection for this camera.",
"order": [
"enabled",
"listen",
"filters",
"min_volume",
"max_not_heard",
"num_threads"
],
"groups": [
{
"key": "detection",
"label": "Detection",
"fields": [
"listen",
"filters"
]
},
{
"key": "sensitivity",
"label": "Sensitivity",
"fields": [
"min_volume",
"max_not_heard"
]
}
],
"docs": "/configuration/audio_detectors",
"fields": {
"enabled": {
"label": "Enable audio detection",
"description": "Enable or disable audio event detection for this camera.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"max_not_heard": {
"label": "End timeout",
"description": "Amount of seconds without the configured audio type before the audio event is ended.",
"widget": "number",
"default": 30,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"min_volume": {
"label": "Minimum volume",
"description": "Minimum RMS volume threshold required to run audio detection; lower values increase sensitivity (e.g., 200 high, 500 medium, 1000 low).",
"widget": "number",
"default": 500,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"listen": {
"label": "Listen types",
"description": "List of audio event types to detect (for example: bark, fire_alarm, speech, yell).",
"widget": "tags",
"default": [
"bark",
"fire_alarm",
"speech",
"yell"
],
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"filters": {
"label": "Audio filters",
"description": "Per-audio-type filter settings such as confidence thresholds used to reduce false positives.",
"widget": "object",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"num_threads": {
"label": "Detection threads",
"description": "Number of threads to use for audio detection processing.",
"widget": "number",
"default": 2,
"enum": null,
"minimum": 1,
"maximum": null,
"advanced": true
}
}
},
"audio_transcription": {
"label": "Audio transcription",
"description": "Settings for live and speech audio transcription used for events and live captions.",
"order": [
"enabled",
"language",
"device",
"model_size"
],
"groups": [],
"docs": "/configuration/audio_detectors#audio-transcription",
"fields": {
"enabled": {
"label": "Enable transcription",
"description": "Enable or disable manually triggered audio event transcription.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
}
}
},
"birdseye": {
"label": "Birdseye",
"description": "Settings for the Birdseye composite view that composes multiple camera feeds into a single layout.",
"order": [
"enabled",
"mode",
"order"
],
"groups": [],
"docs": "/configuration/birdseye",
"fields": {
"enabled": {
"label": "Enable Birdseye",
"description": "Enable or disable the Birdseye view feature.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"mode": {
"label": "Tracking mode",
"description": "Mode for including cameras in Birdseye: 'objects', 'motion', or 'continuous'.",
"widget": "select",
"default": "objects",
"enum": [
"objects",
"motion",
"continuous"
],
"minimum": null,
"maximum": null,
"advanced": false
}
}
},
"detect": {
"label": "Object Detection",
"description": "Settings for the detection/detect role used to run object detection and initialize trackers.",
"order": [
"enabled",
"width",
"height",
"fps",
"min_initialized",
"max_disappeared",
"annotation_offset",
"stationary",
"stationary.interval",
"stationary.threshold",
"stationary.max_frames"
],
"groups": [
{
"key": "resolution",
"label": "Resolution",
"fields": [
"width",
"height",
"fps"
]
},
{
"key": "tracking",
"label": "Tracking",
"fields": [
"min_initialized",
"max_disappeared"
]
}
],
"docs": "/configuration/camera_specific",
"fields": {
"enabled": {
"label": "Enable object detection",
"description": "Enable or disable object detection for this camera.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"height": {
"label": "Detect height",
"description": "Height (pixels) of frames used for the detect stream; leave empty to use the native stream resolution.",
"widget": "number",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"width": {
"label": "Detect width",
"description": "Width (pixels) of frames used for the detect stream; leave empty to use the native stream resolution.",
"widget": "number",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"fps": {
"label": "Detect FPS",
"description": "Desired frames per second to run detection on; lower values reduce CPU usage (recommended value is 5, only set higher - at most 10 - if tracking extremely fast moving objects).",
"widget": "number",
"default": 5,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"min_initialized": {
"label": "Minimum initialization frames",
"description": "Number of consecutive detection hits required before creating a tracked object. Increase to reduce false initializations. Default value is fps divided by 2.",
"widget": "number",
"default": null,
"enum": null,
"minimum": 2,
"maximum": null,
"advanced": true
},
"max_disappeared": {
"label": "Maximum disappeared frames",
"description": "Number of frames without a detection before a tracked object is considered gone.",
"widget": "number",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"stationary.interval": {
"label": "Stationary interval",
"description": "How often (in frames) to run a detection check to confirm a stationary object.",
"widget": "number",
"default": null,
"enum": null,
"minimum": 0,
"maximum": null,
"advanced": false
},
"stationary.threshold": {
"label": "Stationary threshold",
"description": "Number of frames with no position change required to mark an object as stationary.",
"widget": "number",
"default": null,
"enum": null,
"minimum": 1,
"maximum": null,
"advanced": false
},
"stationary.max_frames.default": {
"label": "Default max frames",
"description": "Default maximum frames to track a stationary object before stopping.",
"widget": "number",
"default": null,
"enum": null,
"minimum": 1,
"maximum": null,
"advanced": false
},
"stationary.max_frames.objects": {
"label": "Object max frames",
"description": "Per-object overrides for maximum frames to track stationary objects.",
"widget": "object",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"stationary.classifier": {
"label": "Enable visual classifier",
"description": "Use a visual classifier to detect truly stationary objects even when bounding boxes jitter.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"annotation_offset": {
"label": "Annotation offset",
"description": "Milliseconds to shift detect annotations to better align timeline bounding boxes with recordings; can be positive or negative.",
"widget": "number",
"default": 0,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
}
}
},
"face_recognition": {
"label": "Face recognition",
"description": "Settings for face detection and recognition for this camera.",
"order": [
"enabled",
"min_area"
],
"groups": [],
"docs": "/configuration/face_recognition",
"fields": {
"enabled": {
"label": "Enable face recognition",
"description": "Enable or disable face recognition.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"min_area": {
"label": "Minimum face area",
"description": "Minimum area (pixels) of a detected face box required to attempt recognition.",
"widget": "number",
"default": 750,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
}
}
},
"ffmpeg": {
"label": "Streams (FFmpeg)",
"description": "Camera stream inputs and FFmpeg options, including binary path, args, hwaccel, and per-role output args.",
"order": [
"inputs",
"global_args",
"input_args",
"hwaccel_args",
"output_args",
"apple_compatibility",
"path",
"gpu"
],
"groups": [
{
"key": "cameraFfmpeg",
"label": "Camera-specific FFmpeg arguments",
"fields": [
"input_args",
"hwaccel_args",
"output_args"
]
}
],
"docs": "/configuration/ffmpeg_presets",
"fields": {
"path": {
"label": "FFmpeg path",
"description": "Path to the FFmpeg binary to use or a version alias (\"7.0\" or \"8.0\").",
"widget": "text",
"default": "default",
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"global_args": {
"label": "FFmpeg global arguments",
"description": "Global arguments passed to FFmpeg processes.",
"widget": "text",
"default": [
"-hide_banner",
"-loglevel",
"warning",
"-threads",
"2"
],
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"hwaccel_args": {
"label": "Hardware acceleration arguments",
"description": "Hardware acceleration arguments for FFmpeg. Provider-specific presets are recommended.",
"widget": "text",
"default": "auto",
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"input_args": {
"label": "Input arguments",
"description": "Input arguments applied to FFmpeg input streams.",
"widget": "text",
"default": "preset-rtsp-generic",
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"output_args.detect": {
"label": "Detect output arguments",
"description": "Default output arguments for detect role streams.",
"widget": "text",
"default": [
"-threads",
"2",
"-f",
"rawvideo",
"-pix_fmt",
"yuv420p"
],
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"output_args.record": {
"label": "Record output arguments",
"description": "Default output arguments for record role streams.",
"widget": "text",
"default": "preset-record-generic-audio-aac",
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"apple_compatibility": {
"label": "Apple compatibility",
"description": "Enable HEVC tagging for better Apple player compatibility when recording H.265.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"gpu": {
"label": "GPU index",
"description": "Default GPU index used for hardware acceleration if available.",
"widget": "number",
"default": 0,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"inputs": {
"label": "Camera inputs",
"description": "List of input stream definitions (paths and roles) for this camera.",
"widget": "tags",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
}
}
},
"live": {
"label": "Live playback",
"description": "Settings used by the Web UI to control live stream selection, resolution and quality.",
"order": [
"streams",
"height",
"quality"
],
"groups": [],
"docs": "/configuration/live",
"fields": {
"streams": {
"label": "Live stream names",
"description": "Mapping of configured stream names to restream/go2rtc names used for live playback.",
"widget": "object",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"height": {
"label": "Live height",
"description": "Height (pixels) to render the jsmpeg live stream in the Web UI; must be <= detect stream height.",
"widget": "number",
"default": 720,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"quality": {
"label": "Live quality",
"description": "Encoding quality for the jsmpeg stream (1 highest, 31 lowest).",
"widget": "range",
"default": 8,
"enum": null,
"minimum": 1,
"maximum": 31,
"advanced": true
}
}
},
"lpr": {
"label": "License Plate Recognition",
"description": "License plate recognition settings including detection thresholds, formatting, and known plates.",
"order": [
"enabled",
"min_area",
"enhancement",
"expire_time"
],
"groups": [],
"docs": "/configuration/license_plate_recognition",
"fields": {
"enabled": {
"label": "Enable LPR",
"description": "Enable or disable LPR on this camera.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"min_area": {
"label": "Minimum plate area",
"description": "Minimum plate area (pixels) required to attempt recognition.",
"widget": "number",
"default": 1000,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"enhancement": {
"label": "Enhancement level",
"description": "Enhancement level (0-10) to apply to plate crops prior to OCR; higher values may not always improve results, levels above 5 may only work with night time plates and should be used with caution.",
"widget": "range",
"default": 0,
"enum": null,
"minimum": 0,
"maximum": 10,
"advanced": true
}
}
},
"motion": {
"label": "Motion detection",
"description": "Default motion detection settings for this camera.",
"order": [
"enabled",
"threshold",
"lightning_threshold",
"skip_motion_threshold",
"improve_contrast",
"contour_area",
"delta_alpha",
"frame_alpha",
"frame_height",
"mqtt_off_delay"
],
"groups": [
{
"key": "sensitivity",
"label": "Sensitivity",
"fields": [
"threshold",
"contour_area"
]
},
{
"key": "algorithm",
"label": "Algorithm",
"fields": [
"improve_contrast",
"delta_alpha",
"frame_alpha"
]
}
],
"docs": "/configuration/motion_detection",
"fields": {
"enabled": {
"label": "Enable motion detection",
"description": "Enable or disable motion detection for this camera.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"threshold": {
"label": "Motion threshold",
"description": "Pixel difference threshold used by the motion detector; higher values reduce sensitivity (range 1-255).",
"widget": "range",
"default": 30,
"enum": null,
"minimum": 1,
"maximum": 255,
"advanced": false
},
"lightning_threshold": {
"label": "Lightning threshold",
"description": "Threshold to detect and ignore brief lighting spikes (lower is more sensitive, values between 0.3 and 1.0). This does not prevent motion detection entirely; it merely causes the detector to stop analyzing additional frames once the threshold is exceeded. Motion-based recordings are still created during these events.",
"widget": "range",
"default": 0.8,
"enum": null,
"minimum": 0.3,
"maximum": 1,
"advanced": true
},
"skip_motion_threshold": {
"label": "Skip motion threshold",
"description": "If set to a value between 0.0 and 1.0, and more than this fraction of the image changes in a single frame, the detector will return no motion boxes and immediately recalibrate. This can save CPU and reduce false positives during lightning, storms, etc., but may miss real events such as a PTZ camera autotracking an object. The tradeoff is between dropping a few megabytes of recordings versus reviewing a couple short clips. Leave unset (None) to disable this feature.",
"widget": "range",
"default": null,
"enum": null,
"minimum": 0,
"maximum": 1,
"advanced": true
},
"improve_contrast": {
"label": "Improve contrast",
"description": "Apply contrast improvement to frames before motion analysis to help detection.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"contour_area": {
"label": "Contour area",
"description": "Minimum contour area in pixels required for a motion contour to be counted.",
"widget": "number",
"default": 10,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"delta_alpha": {
"label": "Delta alpha",
"description": "Alpha blending factor used in frame differencing for motion calculation.",
"widget": "number",
"default": 0.2,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"frame_alpha": {
"label": "Frame alpha",
"description": "Alpha value used when blending frames for motion preprocessing.",
"widget": "number",
"default": 0.01,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"frame_height": {
"label": "Frame height",
"description": "Height in pixels to scale frames to when computing motion.",
"widget": "number",
"default": 100,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"mqtt_off_delay": {
"label": "MQTT off delay",
"description": "Seconds to wait after last motion before publishing an MQTT 'off' state.",
"widget": "number",
"default": 30,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
}
}
},
"objects": {
"label": "Objects",
"description": "Object tracking defaults including which labels to track and per-object filters.",
"order": [
"track",
"alert",
"detect",
"filters"
],
"groups": [
{
"key": "tracking",
"label": "Tracking",
"fields": [
"track",
"alert",
"detect"
]
},
{
"key": "filtering",
"label": "Filtering",
"fields": [
"filters"
]
}
],
"docs": "/configuration/object_filters",
"fields": {
"track": {
"label": "Objects to track",
"description": "List of object labels to track for this camera.",
"widget": "tags",
"default": [
"person"
],
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"filters": {
"label": "Object filters",
"description": "Filters applied to detected objects to reduce false positives (area, ratio, confidence).",
"widget": "object",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.enabled": {
"label": "Enable GenAI",
"description": "Enable GenAI generation of descriptions for tracked objects by default.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.use_snapshot": {
"label": "Use snapshots",
"description": "Use object snapshots instead of thumbnails for GenAI description generation.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.prompt": {
"label": "Caption prompt",
"description": "Default prompt template used when generating descriptions with GenAI.",
"widget": "text",
"default": "Analyze the sequence of images containing the {label}. Focus on the likely intent or behavior of the {label} based on its actions and movement, rather than describing its appearance or the surroundings. Consider what the {label} is doing, why, and what it might do next.",
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.object_prompts": {
"label": "Object prompts",
"description": "Per-object prompts to customize GenAI outputs for specific labels.",
"widget": "object",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.objects": {
"label": "GenAI objects",
"description": "List of object labels to send to GenAI by default.",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.required_zones": {
"label": "Required zones",
"description": "Zones that must be entered for objects to qualify for GenAI description generation.",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.debug_save_thumbnails": {
"label": "Save thumbnails",
"description": "Save thumbnails sent to GenAI for debugging and review.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.send_triggers.tracked_object_end": {
"label": "Send on end",
"description": "Send a request to GenAI when the tracked object ends.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.send_triggers.after_significant_updates": {
"label": "Early GenAI trigger",
"description": "Send a request to GenAI after a specified number of significant updates for the tracked object.",
"widget": "number",
"default": null,
"enum": null,
"minimum": 1,
"maximum": null,
"advanced": false
}
}
},
"record": {
"label": "Recording",
"description": "Recording and retention settings for this camera.",
"order": [
"enabled",
"expire_interval",
"continuous",
"motion",
"alerts",
"detections",
"preview",
"export"
],
"groups": [
{
"key": "retention",
"label": "Retention",
"fields": [
"continuous",
"motion"
]
},
{
"key": "events",
"label": "Events",
"fields": [
"alerts",
"detections"
]
}
],
"docs": "/configuration/record",
"fields": {
"enabled": {
"label": "Enable recording",
"description": "Enable or disable recording for this camera.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"expire_interval": {
"label": "Record cleanup interval",
"description": "Minutes between cleanup passes that remove expired recording segments.",
"widget": "number",
"default": 60,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"continuous.days": {
"label": "Retention days",
"description": "Days to retain recordings.",
"widget": "number",
"default": 0,
"enum": null,
"minimum": 0,
"maximum": null,
"advanced": false
},
"motion.days": {
"label": "Retention days",
"description": "Days to retain recordings.",
"widget": "number",
"default": 0,
"enum": null,
"minimum": 0,
"maximum": null,
"advanced": false
},
"detections.pre_capture": {
"label": "Pre-capture seconds",
"description": "Number of seconds before the detection event to include in the recording.",
"widget": "range",
"default": 5,
"enum": null,
"minimum": 0,
"maximum": 60,
"advanced": false
},
"detections.post_capture": {
"label": "Post-capture seconds",
"description": "Number of seconds after the detection event to include in the recording.",
"widget": "number",
"default": 5,
"enum": null,
"minimum": 0,
"maximum": null,
"advanced": false
},
"detections.retain.days": {
"label": "Retention days",
"description": "Number of days to retain recordings of detection events.",
"widget": "number",
"default": 10,
"enum": null,
"minimum": 0,
"maximum": null,
"advanced": false
},
"detections.retain.mode": {
"label": "Retention mode",
"description": "Mode for retention: all (save all segments), motion (save segments with motion), or active_objects (save segments with active objects).",
"widget": "select",
"default": "motion",
"enum": [
"all",
"motion",
"active_objects"
],
"minimum": null,
"maximum": null,
"advanced": false
},
"alerts.pre_capture": {
"label": "Pre-capture seconds",
"description": "Number of seconds before the detection event to include in the recording.",
"widget": "range",
"default": 5,
"enum": null,
"minimum": 0,
"maximum": 60,
"advanced": false
},
"alerts.post_capture": {
"label": "Post-capture seconds",
"description": "Number of seconds after the detection event to include in the recording.",
"widget": "number",
"default": 5,
"enum": null,
"minimum": 0,
"maximum": null,
"advanced": false
},
"alerts.retain.days": {
"label": "Retention days",
"description": "Number of days to retain recordings of detection events.",
"widget": "number",
"default": 10,
"enum": null,
"minimum": 0,
"maximum": null,
"advanced": false
},
"alerts.retain.mode": {
"label": "Retention mode",
"description": "Mode for retention: all (save all segments), motion (save segments with motion), or active_objects (save segments with active objects).",
"widget": "select",
"default": "motion",
"enum": [
"all",
"motion",
"active_objects"
],
"minimum": null,
"maximum": null,
"advanced": false
},
"export.hwaccel_args": {
"label": "Export hwaccel args",
"description": "Hardware acceleration args to use for export/transcode operations.",
"widget": "text",
"default": "auto",
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"preview.quality": {
"label": "Preview quality",
"description": "Preview quality level (very_low, low, medium, high, very_high).",
"widget": "select",
"default": "medium",
"enum": [
"very_low",
"low",
"medium",
"high",
"very_high"
],
"minimum": null,
"maximum": null,
"advanced": false
}
}
},
"review": {
"label": "Review",
"description": "Settings that control alerts, detections, and GenAI review summaries used by the UI and storage for this camera.",
"order": [
"alerts",
"detections",
"genai",
"genai.enabled"
],
"groups": [],
"docs": "/configuration/review",
"fields": {
"alerts.enabled": {
"label": "Enable alerts",
"description": "Enable or disable alert generation for this camera.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"alerts.labels": {
"label": "Alert labels",
"description": "List of object labels that qualify as alerts (for example: car, person).",
"widget": "tags",
"default": [
"person",
"car"
],
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"alerts.required_zones": {
"label": "Required zones",
"description": "Zones that an object must enter to be considered an alert; leave empty to allow any zone.",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"alerts.cutoff_time": {
"label": "Alerts cutoff time",
"description": "Seconds to wait after no alert-causing activity before cutting off an alert.",
"widget": "number",
"default": 40,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"detections.enabled": {
"label": "Enable detections",
"description": "Enable or disable detection events for this camera.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"detections.labels": {
"label": "Detection labels",
"description": "List of object labels that qualify as detection events.",
"widget": "tags",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"detections.required_zones": {
"label": "Required zones",
"description": "Zones that an object must enter to be considered a detection; leave empty to allow any zone.",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"detections.cutoff_time": {
"label": "Detections cutoff time",
"description": "Seconds to wait after no detection-causing activity before cutting off a detection.",
"widget": "number",
"default": 30,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.enabled": {
"label": "Enable GenAI descriptions",
"description": "Enable or disable GenAI-generated descriptions and summaries for review items.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.alerts": {
"label": "Enable GenAI for alerts",
"description": "Use GenAI to generate descriptions for alert items.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.detections": {
"label": "Enable GenAI for detections",
"description": "Use GenAI to generate descriptions for detection items.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.image_source": {
"label": "Review image source",
"description": "Source of images sent to GenAI ('preview' or 'recordings'); 'recordings' uses higher quality frames but more tokens.",
"widget": "select",
"default": "preview",
"enum": [
"preview",
"recordings"
],
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.additional_concerns": {
"label": "Additional concerns",
"description": "A list of additional concerns or notes the GenAI should consider when evaluating activity on this camera.",
"widget": "tags",
"default": [],
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.debug_save_thumbnails": {
"label": "Save thumbnails",
"description": "Save thumbnails that are sent to the GenAI provider for debugging and review.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.preferred_language": {
"label": "Preferred language",
"description": "Preferred language to request from the GenAI provider for generated responses.",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"genai.activity_context_prompt": {
"label": "Activity context prompt",
"description": "Custom prompt describing what is and is not suspicious activity to provide context for GenAI summaries.",
"widget": "text",
"default": "### Normal Activity Indicators (Level 0)\n- Known/verified people in any zone at any time\n- People with pets in residential areas\n- Routine residential vehicle access during daytime/evening (6 AM - 10 PM): entering, exiting, loading/unloading items — normal commute and travel patterns\n- Deliveries or services during daytime/evening (6 AM - 10 PM): carrying packages to doors/porches, placing items, leaving\n- Services/maintenance workers with visible tools, uniforms, or service vehicles during daytime\n- Activity confined to public areas only (sidewalks, streets) without entering property at any time\n\n### Suspicious Activity Indicators (Level 1)\n- **Checking or probing vehicle/building access**: trying handles without entering, peering through windows, examining multiple vehicles, or possessing break-in tools — Level 1\n- **Unidentified person in private areas (driveways, near vehicles/buildings) during late night/early morning (11 PM - 5 AM)** — ALWAYS Level 1 regardless of activity or duration\n- Taking items that don't belong to them (packages, objects from porches/driveways)\n- Climbing or jumping fences/barriers to access property\n- Attempting to conceal actions or items from view\n- Prolonged loitering: remaining in same area without visible purpose throughout most of the sequence\n\n### Critical Threat Indicators (Level 2)\n- Holding break-in tools (crowbars, pry bars, bolt cutters)\n- Weapons visible (guns, knives, bats used aggressively)\n- Forced entry in progress\n- Physical aggression or violence\n- Active property damage or theft in progress\n\n### Assessment Guidance\nEvaluate in this order:\n\n1. **If person is verified/known** → Level 0 regardless of time or activity\n2. **If person is unidentified:**\n - Check time: If late night/early morning (11 PM - 5 AM) AND in private areas (driveways, near vehicles/buildings) → Level 1\n - Check actions: If probing access (trying handles without entering, checking multiple vehicles), taking items, climbing → Level 1\n - Otherwise, if daytime/evening (6 AM - 10 PM) with clear legitimate purpose (delivery, service, routine vehicle access) → Level 0\n3. **Escalate to Level 2 if:** Weapons, break-in tools, forced entry in progress, violence, or active property damage visible (escalates from Level 0 or 1)\n\nThe mere presence of an unidentified person in private areas during late night hours is inherently suspicious and warrants human review, regardless of what activity they appear to be doing or how brief the sequence is.",
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
}
}
},
"semantic_search": {
"label": "Semantic Search",
"description": "Settings for semantic search which builds and queries object embeddings to find similar items.",
"order": [],
"groups": [],
"docs": "/configuration/semantic_search",
"fields": {
"triggers": {
"label": "Triggers",
"description": "Actions and matching criteria for camera-specific semantic search triggers.",
"widget": "object",
"default": {},
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
}
}
},
"snapshots": {
"label": "Snapshots",
"description": "Settings for API-generated snapshots of tracked objects for this camera.",
"order": [
"enabled",
"bounding_box",
"crop",
"quality",
"timestamp",
"required_zones",
"retain"
],
"groups": [
{
"key": "display",
"label": "Display",
"fields": [
"bounding_box",
"crop",
"quality",
"timestamp"
]
}
],
"docs": "/configuration/snapshots",
"fields": {
"enabled": {
"label": "Enable snapshots",
"description": "Enable or disable saving snapshots for this camera.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"timestamp": {
"label": "Timestamp overlay",
"description": "Overlay a timestamp on snapshots from API.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"bounding_box": {
"label": "Bounding box overlay",
"description": "Draw bounding boxes for tracked objects on snapshots from API.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"crop": {
"label": "Crop snapshot",
"description": "Crop snapshots from API to the detected object's bounding box.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"required_zones": {
"label": "Required zones",
"description": "Zones an object must enter for a snapshot to be saved.",
"widget": "tags",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"height": {
"label": "Snapshot height",
"description": "Height (pixels) to resize snapshots from API to; leave empty to preserve original size.",
"widget": "number",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"retain.default": {
"label": "Default retention",
"description": "Default number of days to retain snapshots.",
"widget": "number",
"default": 10,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"retain.objects": {
"label": "Object retention",
"description": "Per-object overrides for snapshot retention days.",
"widget": "object",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"quality": {
"label": "Snapshot quality",
"description": "Encode quality for saved snapshots (0-100).",
"widget": "range",
"default": 60,
"enum": null,
"minimum": 0,
"maximum": 100,
"advanced": true
}
}
},
"timestamp_style": {
"label": "Timestamp style",
"description": "Styling options for timestamps applied to snapshots and Debug view.",
"order": [
"position",
"format",
"thickness",
"color"
],
"groups": [],
"docs": "/configuration/advanced/reference",
"fields": {
"position": {
"label": "Timestamp position",
"description": "Position of the timestamp on the image (tl/tr/bl/br).",
"widget": "select",
"default": "tl",
"enum": [
"tl",
"tr",
"bl",
"br"
],
"minimum": null,
"maximum": null,
"advanced": false
},
"format": {
"label": "Timestamp format",
"description": "Datetime format string used for timestamps (Python datetime format codes).",
"widget": "text",
"default": "%m/%d/%Y %H:%M:%S",
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"color.red": {
"label": "Red",
"description": "Red component (0-255) for timestamp color.",
"widget": "range",
"default": 255,
"enum": null,
"minimum": 0,
"maximum": 255,
"advanced": false
},
"color.green": {
"label": "Green",
"description": "Green component (0-255) for timestamp color.",
"widget": "range",
"default": 255,
"enum": null,
"minimum": 0,
"maximum": 255,
"advanced": false
},
"color.blue": {
"label": "Blue",
"description": "Blue component (0-255) for timestamp color.",
"widget": "range",
"default": 255,
"enum": null,
"minimum": 0,
"maximum": 255,
"advanced": false
},
"thickness": {
"label": "Timestamp thickness",
"description": "Line thickness of the timestamp text.",
"widget": "number",
"default": 2,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
}
}
},
"mqtt": {
"label": "MQTT",
"description": "MQTT image publishing settings.",
"order": [
"enabled",
"timestamp",
"bounding_box",
"crop",
"height",
"required_zones",
"quality"
],
"groups": [],
"docs": "/integrations/mqtt",
"fields": {
"enabled": {
"label": "Send image",
"description": "Enable publishing image snapshots for objects to MQTT topics for this camera.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"timestamp": {
"label": "Add timestamp",
"description": "Overlay a timestamp on images published to MQTT.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"bounding_box": {
"label": "Add bounding box",
"description": "Draw bounding boxes on images published over MQTT.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"crop": {
"label": "Crop image",
"description": "Crop images published to MQTT to the detected object's bounding box.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"height": {
"label": "Image height",
"description": "Height (pixels) to resize images published over MQTT.",
"widget": "number",
"default": 270,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"required_zones": {
"label": "Required zones",
"description": "Zones that an object must enter for an MQTT image to be published.",
"widget": "tags",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"quality": {
"label": "JPEG quality",
"description": "JPEG quality for images published to MQTT (0-100).",
"widget": "range",
"default": 70,
"enum": null,
"minimum": 0,
"maximum": 100,
"advanced": true
}
}
},
"notifications": {
"label": "Notifications",
"description": "Settings to enable and control notifications for this camera.",
"order": [
"enabled",
"email"
],
"groups": [],
"docs": "/configuration/notifications",
"fields": {
"enabled": {
"label": "Enable notifications",
"description": "Enable or disable notifications for this camera.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"cooldown": {
"label": "Cooldown period",
"description": "Cooldown (seconds) between notifications to avoid spamming recipients.",
"widget": "number",
"default": 0,
"enum": null,
"minimum": 0,
"maximum": null,
"advanced": false
}
}
},
"onvif": {
"label": "ONVIF",
"description": "ONVIF connection and PTZ autotracking settings for this camera.",
"order": [
"host",
"port",
"user",
"password",
"profile",
"tls_insecure",
"ignore_time_mismatch",
"autotracking"
],
"groups": [],
"docs": "/configuration/cameras#setting-up-camera-ptz-controls",
"fields": {
"host": {
"label": "ONVIF host",
"description": "Host (and optional scheme) for the ONVIF service for this camera.",
"widget": "text",
"default": "",
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"port": {
"label": "ONVIF port",
"description": "Port number for the ONVIF service.",
"widget": "number",
"default": 8000,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"user": {
"label": "ONVIF username",
"description": "Username for ONVIF authentication; some devices require admin user for ONVIF.",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"password": {
"label": "ONVIF password",
"description": "Password for ONVIF authentication.",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"tls_insecure": {
"label": "Disable TLS verify",
"description": "Skip TLS verification and disable digest auth for ONVIF (unsafe; use in safe networks only).",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
},
"profile": {
"label": "ONVIF profile",
"description": "Specific ONVIF media profile to use for PTZ control, matched by token or name. If not set, the first profile with valid PTZ configuration is selected automatically.",
"widget": "text",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"autotracking.enabled": {
"label": "Enable Autotracking",
"description": "Enable or disable automatic PTZ camera tracking of detected objects.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"autotracking.calibrate_on_startup": {
"label": "Calibrate on start",
"description": "Measure PTZ motor speeds on startup to improve tracking accuracy. Frigate will update config with movement_weights after calibration.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"autotracking.zooming": {
"label": "Zoom mode",
"description": "Control zoom behavior: disabled (pan/tilt only), absolute (most compatible), or relative (concurrent pan/tilt/zoom).",
"widget": "select",
"default": "disabled",
"enum": [
"disabled",
"absolute",
"relative"
],
"minimum": null,
"maximum": null,
"advanced": false
},
"autotracking.zoom_factor": {
"label": "Zoom factor",
"description": "Control zoom level on tracked objects. Lower values keep more scene in view; higher values zoom in closer but may lose tracking. Values between 0.1 and 0.75.",
"widget": "range",
"default": 0.3,
"enum": null,
"minimum": 0.1,
"maximum": 0.75,
"advanced": false
},
"autotracking.track": {
"label": "Tracked objects",
"description": "List of object types that should trigger autotracking.",
"widget": "tags",
"default": [
"person"
],
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"autotracking.required_zones": {
"label": "Required zones",
"description": "Objects must enter one of these zones before autotracking begins.",
"widget": "tags",
"default": null,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"autotracking.return_preset": {
"label": "Return preset",
"description": "ONVIF preset name configured in camera firmware to return to after tracking ends.",
"widget": "text",
"default": "home",
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"autotracking.timeout": {
"label": "Return timeout",
"description": "Wait this many seconds after losing tracking before returning camera to preset position.",
"widget": "number",
"default": 10,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"ignore_time_mismatch": {
"label": "Ignore time mismatch",
"description": "Ignore time synchronization differences between camera and Frigate server for ONVIF communication.",
"widget": "switch",
"default": false,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": true
}
}
},
"ui": {
"label": "Camera UI",
"description": "Display ordering and visibility for this camera in the UI. Ordering affects the default dashboard. For more granular control, use camera groups.",
"order": [
"dashboard",
"order"
],
"groups": [],
"docs": "/configuration/advanced/reference",
"fields": {
"dashboard": {
"label": "Show in UI",
"description": "Toggle whether this camera is visible everywhere in the Frigate UI. Disabling this will require manually editing the config to view this camera in the UI again.",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
},
"review": {
"label": "Show in review",
"description": "Toggle whether this camera is visible in review (the review page and its camera filter, motion review, and the history view).",
"widget": "switch",
"default": true,
"enum": null,
"minimum": null,
"maximum": null,
"advanced": false
}
}
}
}
},
"navigation": {
"groups": [
{
"key": "general",
"label": "General",
"items": [
{
"key": "uiSettings",
"label": "UI settings"
}
]
},
{
"key": "globalConfig",
"label": "Global configuration",
"items": [
{
"key": "profiles",
"label": "Profiles"
},
{
"key": "cameraManagement",
"label": "Camera management"
},
{
"key": "globalDetect",
"label": "Object detection",
"section": "detect",
"page": "globalDetect",
"level": "global"
},
{
"key": "globalObjects",
"label": "Objects",
"section": "objects",
"page": "globalObjects",
"level": "global"
},
{
"key": "globalMotion",
"label": "Motion detection",
"section": "motion",
"page": "globalMotion",
"level": "global"
},
{
"key": "globalFfmpeg",
"label": "FFmpeg",
"section": "ffmpeg",
"page": "globalFfmpeg",
"level": "global"
},
{
"key": "globalRecording",
"label": "Recording",
"section": "record",
"page": "globalRecording",
"level": "global"
},
{
"key": "globalSnapshots",
"label": "Snapshots",
"section": "snapshots",
"page": "globalSnapshots",
"level": "global"
},
{
"key": "globalReview",
"label": "Review",
"section": "review",
"page": "globalReview",
"level": "global"
},
{
"key": "globalAudioEvents",
"label": "Audio detection",
"section": "audio",
"page": "globalAudioEvents",
"level": "global"
},
{
"key": "globalLivePlayback",
"label": "Live playback",
"section": "live",
"page": "globalLivePlayback",
"level": "global"
},
{
"key": "globalTimestampStyle",
"label": "Timestamp style",
"section": "timestamp_style",
"page": "globalTimestampStyle",
"level": "global"
}
]
},
{
"key": "cameras",
"label": "Camera configuration",
"items": [
{
"key": "cameraDetect",
"label": "Object detection",
"section": "detect",
"page": "cameraDetect",
"level": "camera"
},
{
"key": "cameraObjects",
"label": "Objects",
"section": "objects",
"page": "cameraObjects",
"level": "camera"
},
{
"key": "cameraMotion",
"label": "Motion detection",
"section": "motion",
"page": "cameraMotion",
"level": "camera"
},
{
"key": "motionTuner",
"label": "Motion tuner"
},
{
"key": "cameraFfmpeg",
"label": "Streams (FFmpeg)",
"section": "ffmpeg",
"page": "cameraFfmpeg",
"level": "camera"
},
{
"key": "cameraRecording",
"label": "Recording",
"section": "record",
"page": "cameraRecording",
"level": "camera"
},
{
"key": "cameraSnapshots",
"label": "Snapshots",
"section": "snapshots",
"page": "cameraSnapshots",
"level": "camera"
},
{
"key": "masksAndZones",
"label": "Masks / Zones",
"section": "masksAndZones",
"page": "masksAndZones",
"level": "camera"
},
{
"key": "cameraReview",
"label": "Review",
"section": "review",
"page": "cameraReview",
"level": "camera"
},
{
"key": "cameraAudioEvents",
"label": "Audio detection",
"section": "audio",
"page": "cameraAudioEvents",
"level": "camera"
},
{
"key": "cameraAudioTranscription",
"label": "Audio transcription",
"section": "audio_transcription",
"page": "cameraAudioTranscription",
"level": "camera"
},
{
"key": "cameraBirdseye",
"label": "Birdseye",
"section": "birdseye",
"page": "cameraBirdseye",
"level": "camera"
},
{
"key": "cameraLivePlayback",
"label": "Live playback",
"section": "live",
"page": "cameraLivePlayback",
"level": "camera"
},
{
"key": "cameraNotifications",
"label": "Notifications",
"section": "notifications",
"page": "cameraNotifications",
"level": "camera"
},
{
"key": "cameraFaceRecognition",
"label": "Face recognition",
"section": "face_recognition",
"page": "cameraFaceRecognition",
"level": "camera"
},
{
"key": "cameraLpr",
"label": "License plate recognition",
"section": "lpr",
"page": "cameraLpr",
"level": "camera"
},
{
"key": "cameraOnvif",
"label": "ONVIF",
"section": "onvif",
"page": "cameraOnvif",
"level": "camera"
},
{
"key": "cameraMqttConfig",
"label": "MQTT",
"section": "mqtt",
"page": "cameraMqttConfig",
"level": "camera"
},
{
"key": "cameraTimestampStyle",
"label": "Timestamp style",
"section": "timestamp_style",
"page": "cameraTimestampStyle",
"level": "camera"
}
]
},
{
"key": "enrichments",
"label": "Enrichments",
"items": [
{
"key": "integrationSemanticSearch",
"label": "Semantic search",
"section": "semantic_search",
"page": "integrationSemanticSearch",
"level": "global"
},
{
"key": "integrationGenerativeAi",
"label": "Generative AI",
"section": "genai",
"page": "integrationGenerativeAi",
"level": "global"
},
{
"key": "integrationFaceRecognition",
"label": "Face recognition",
"section": "face_recognition",
"page": "integrationFaceRecognition",
"level": "global"
},
{
"key": "integrationLpr",
"label": "License plate recognition",
"section": "lpr",
"page": "integrationLpr",
"level": "global"
},
{
"key": "integrationObjectClassification",
"label": "Object classification",
"section": "classification",
"page": "integrationObjectClassification",
"level": "global"
},
{
"key": "triggers",
"label": "Triggers"
},
{
"key": "integrationAudioTranscription",
"label": "Audio transcription",
"section": "audio_transcription",
"page": "integrationAudioTranscription",
"level": "global"
}
]
},
{
"key": "system",
"label": "System",
"items": [
{
"key": "systemGo2rtcStreams",
"label": "go2rtc streams",
"section": "go2rtc_streams",
"page": "systemGo2rtcStreams",
"level": "global"
},
{
"key": "systemDetectorsAndModel",
"label": "Detectors and model",
"section": "model",
"page": "systemDetectorsAndModel",
"level": "global"
},
{
"key": "systemDatabase",
"label": "Database",
"section": "database",
"page": "systemDatabase",
"level": "global"
},
{
"key": "systemMqtt",
"label": "MQTT",
"section": "mqtt",
"page": "systemMqtt",
"level": "global"
},
{
"key": "systemBirdseye",
"label": "Birdseye",
"section": "birdseye",
"page": "systemBirdseye",
"level": "global"
},
{
"key": "systemTls",
"label": "TLS",
"section": "tls",
"page": "systemTls",
"level": "global"
},
{
"key": "systemAuthentication",
"label": "Authentication",
"section": "auth",
"page": "systemAuthentication",
"level": "global"
},
{
"key": "systemNetworking",
"label": "Networking",
"section": "networking",
"page": "systemNetworking",
"level": "global"
},
{
"key": "systemProxy",
"label": "Proxy",
"section": "proxy",
"page": "systemProxy",
"level": "global"
},
{
"key": "systemUi",
"label": "UI",
"section": "ui",
"page": "systemUi",
"level": "global"
},
{
"key": "systemLogging",
"label": "Logging",
"section": "logger",
"page": "systemLogging",
"level": "global"
},
{
"key": "systemEnvironmentVariables",
"label": "Environment variables",
"section": "environment_vars",
"page": "systemEnvironmentVariables",
"level": "global"
},
{
"key": "systemTelemetry",
"label": "Telemetry",
"section": "telemetry",
"page": "systemTelemetry",
"level": "global"
}
]
},
{
"key": "users",
"label": "Users",
"items": [
{
"key": "users",
"label": "Users"
},
{
"key": "roles",
"label": "Roles"
}
]
},
{
"key": "notifications",
"label": "Notifications",
"items": [
{
"key": "notifications",
"label": "Notifications",
"section": "notifications",
"page": "notifications",
"level": "global"
}
]
},
{
"key": "frigateplus",
"label": "Frigate+",
"items": [
{
"key": "frigateplus",
"label": "Frigate+"
}
]
},
{
"key": "maintenance",
"label": "Maintenance",
"items": [
{
"key": "mediaSync",
"label": "Media sync"
},
{
"key": "regionGrid",
"label": "Region grid"
}
]
}
],
"pages": {
"globalDetect": {
"section": "detect",
"page": "globalDetect",
"level": "global"
},
"globalFfmpeg": {
"section": "ffmpeg",
"page": "globalFfmpeg",
"level": "global"
},
"globalRecording": {
"section": "record",
"page": "globalRecording",
"level": "global"
},
"globalSnapshots": {
"section": "snapshots",
"page": "globalSnapshots",
"level": "global"
},
"globalMotion": {
"section": "motion",
"page": "globalMotion",
"level": "global"
},
"globalObjects": {
"section": "objects",
"page": "globalObjects",
"level": "global"
},
"globalReview": {
"section": "review",
"page": "globalReview",
"level": "global"
},
"globalAudioEvents": {
"section": "audio",
"page": "globalAudioEvents",
"level": "global"
},
"globalLivePlayback": {
"section": "live",
"page": "globalLivePlayback",
"level": "global"
},
"globalTimestampStyle": {
"section": "timestamp_style",
"page": "globalTimestampStyle",
"level": "global"
},
"notifications": {
"section": "notifications",
"page": "notifications",
"level": "global"
},
"cameraDetect": {
"section": "detect",
"page": "cameraDetect",
"level": "camera"
},
"cameraFfmpeg": {
"section": "ffmpeg",
"page": "cameraFfmpeg",
"level": "camera"
},
"cameraRecording": {
"section": "record",
"page": "cameraRecording",
"level": "camera"
},
"cameraSnapshots": {
"section": "snapshots",
"page": "cameraSnapshots",
"level": "camera"
},
"cameraMotion": {
"section": "motion",
"page": "cameraMotion",
"level": "camera"
},
"cameraObjects": {
"section": "objects",
"page": "cameraObjects",
"level": "camera"
},
"cameraReview": {
"section": "review",
"page": "cameraReview",
"level": "camera"
},
"cameraAudioEvents": {
"section": "audio",
"page": "cameraAudioEvents",
"level": "camera"
},
"cameraAudioTranscription": {
"section": "audio_transcription",
"page": "cameraAudioTranscription",
"level": "camera"
},
"cameraNotifications": {
"section": "notifications",
"page": "cameraNotifications",
"level": "camera"
},
"cameraLivePlayback": {
"section": "live",
"page": "cameraLivePlayback",
"level": "camera"
},
"cameraBirdseye": {
"section": "birdseye",
"page": "cameraBirdseye",
"level": "camera"
},
"cameraFaceRecognition": {
"section": "face_recognition",
"page": "cameraFaceRecognition",
"level": "camera"
},
"cameraLpr": {
"section": "lpr",
"page": "cameraLpr",
"level": "camera"
},
"cameraMqttConfig": {
"section": "mqtt",
"page": "cameraMqttConfig",
"level": "camera"
},
"cameraOnvif": {
"section": "onvif",
"page": "cameraOnvif",
"level": "camera"
},
"cameraTimestampStyle": {
"section": "timestamp_style",
"page": "cameraTimestampStyle",
"level": "camera"
},
"integrationSemanticSearch": {
"section": "semantic_search",
"page": "integrationSemanticSearch",
"level": "global"
},
"integrationGenerativeAi": {
"section": "genai",
"page": "integrationGenerativeAi",
"level": "global"
},
"integrationFaceRecognition": {
"section": "face_recognition",
"page": "integrationFaceRecognition",
"level": "global"
},
"integrationLpr": {
"section": "lpr",
"page": "integrationLpr",
"level": "global"
},
"integrationObjectClassification": {
"section": "classification",
"page": "integrationObjectClassification",
"level": "global"
},
"integrationAudioTranscription": {
"section": "audio_transcription",
"page": "integrationAudioTranscription",
"level": "global"
},
"systemGo2rtcStreams": {
"section": "go2rtc_streams",
"page": "systemGo2rtcStreams",
"level": "global"
},
"systemDatabase": {
"section": "database",
"page": "systemDatabase",
"level": "global"
},
"systemMqtt": {
"section": "mqtt",
"page": "systemMqtt",
"level": "global"
},
"systemTls": {
"section": "tls",
"page": "systemTls",
"level": "global"
},
"systemAuthentication": {
"section": "auth",
"page": "systemAuthentication",
"level": "global"
},
"systemNetworking": {
"section": "networking",
"page": "systemNetworking",
"level": "global"
},
"systemProxy": {
"section": "proxy",
"page": "systemProxy",
"level": "global"
},
"systemUi": {
"section": "ui",
"page": "systemUi",
"level": "global"
},
"systemLogging": {
"section": "logger",
"page": "systemLogging",
"level": "global"
},
"systemEnvironmentVariables": {
"section": "environment_vars",
"page": "systemEnvironmentVariables",
"level": "global"
},
"systemTelemetry": {
"section": "telemetry",
"page": "systemTelemetry",
"level": "global"
},
"systemBirdseye": {
"section": "birdseye",
"page": "systemBirdseye",
"level": "global"
},
"systemDetectorsAndModel": {
"section": "model",
"page": "systemDetectorsAndModel",
"level": "global"
}
}
}
}