mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-03-10 10:33:11 +03:00
clean up now obsolete namespaces
This commit is contained in:
parent
3f7f5e3253
commit
5e8de5a911
@ -1,32 +0,0 @@
|
||||
{
|
||||
"label": "Audio events",
|
||||
"description": "Settings for audio-based event detection; can be overridden per-camera.",
|
||||
"enabled": {
|
||||
"label": "Enable audio detection",
|
||||
"description": "Enable or disable audio event detection; can be overridden per-camera."
|
||||
},
|
||||
"max_not_heard": {
|
||||
"label": "End timeout",
|
||||
"description": "Amount of seconds without the configured audio type before the audio event is ended."
|
||||
},
|
||||
"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)."
|
||||
},
|
||||
"listen": {
|
||||
"label": "Listen types",
|
||||
"description": "List of audio event types to detect (for example: bark, fire_alarm, scream, speech, yell)."
|
||||
},
|
||||
"filters": {
|
||||
"label": "Audio filters",
|
||||
"description": "Per-audio-type filter settings such as confidence thresholds used to reduce false positives."
|
||||
},
|
||||
"enabled_in_config": {
|
||||
"label": "Original audio state",
|
||||
"description": "Indicates whether audio detection was originally enabled in the static config file."
|
||||
},
|
||||
"num_threads": {
|
||||
"label": "Detection threads",
|
||||
"description": "Number of threads to use for audio detection processing."
|
||||
}
|
||||
}
|
||||
@ -1,24 +0,0 @@
|
||||
{
|
||||
"label": "Audio transcription",
|
||||
"description": "Settings for live and speech audio transcription used for events and live captions.",
|
||||
"enabled": {
|
||||
"label": "Enable audio transcription",
|
||||
"description": "Enable or disable automatic audio transcription globally."
|
||||
},
|
||||
"language": {
|
||||
"label": "Transcription language",
|
||||
"description": "Language code used for transcription/translation (for example 'en' for English)."
|
||||
},
|
||||
"device": {
|
||||
"label": "Transcription device",
|
||||
"description": "Device key (CPU/GPU) to run the transcription model on."
|
||||
},
|
||||
"model_size": {
|
||||
"label": "Model size",
|
||||
"description": "Model size to use for transcription; the small model runs on CPU, large model requires a GPU."
|
||||
},
|
||||
"live_enabled": {
|
||||
"label": "Live transcription",
|
||||
"description": "Enable streaming live transcription for audio as it is received."
|
||||
}
|
||||
}
|
||||
@ -1,48 +0,0 @@
|
||||
{
|
||||
"label": "Authentication",
|
||||
"description": "Authentication and session-related settings including cookie and rate limit options.",
|
||||
"enabled": {
|
||||
"label": "Enable authentication",
|
||||
"description": "Enable native authentication for the Frigate UI."
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"cookie_name": {
|
||||
"label": "JWT cookie name",
|
||||
"description": "Name of the cookie used to store the JWT token for native authentication."
|
||||
},
|
||||
"cookie_secure": {
|
||||
"label": "Secure cookie flag",
|
||||
"description": "Set the secure flag on the auth cookie; should be true when using TLS."
|
||||
},
|
||||
"session_length": {
|
||||
"label": "Session length",
|
||||
"description": "Session duration in seconds for JWT-based sessions."
|
||||
},
|
||||
"refresh_time": {
|
||||
"label": "Session refresh window",
|
||||
"description": "When a session is within this many seconds of expiring, refresh it back to full length."
|
||||
},
|
||||
"failed_login_rate_limit": {
|
||||
"label": "Failed login limits",
|
||||
"description": "Rate limiting rules for failed login attempts to reduce brute-force attacks."
|
||||
},
|
||||
"trusted_proxies": {
|
||||
"label": "Trusted proxies",
|
||||
"description": "List of trusted proxy IPs used when determining client IP for rate limiting."
|
||||
},
|
||||
"hash_iterations": {
|
||||
"label": "Hash iterations",
|
||||
"description": "Number of PBKDF2-SHA256 iterations to use when hashing user passwords."
|
||||
},
|
||||
"roles": {
|
||||
"label": "Role mappings",
|
||||
"description": "Map roles to camera lists. An empty list grants access to all cameras for the role."
|
||||
},
|
||||
"admin_first_time_login": {
|
||||
"label": "First-time admin flag",
|
||||
"description": "When true the UI may show a help link on the login page informing users how to sign in after an admin password reset. "
|
||||
}
|
||||
}
|
||||
@ -1,52 +0,0 @@
|
||||
{
|
||||
"label": "Birdseye",
|
||||
"description": "Settings for the Birdseye composite view that composes multiple camera feeds into a single layout.",
|
||||
"enabled": {
|
||||
"label": "Enable Birdseye",
|
||||
"description": "Enable or disable the Birdseye view feature."
|
||||
},
|
||||
"mode": {
|
||||
"label": "Tracking mode",
|
||||
"description": "Mode for including cameras in Birdseye: 'objects', 'motion', or 'continuous'."
|
||||
},
|
||||
"restream": {
|
||||
"label": "Restream RTSP",
|
||||
"description": "Re-stream the Birdseye output as an RTSP feed; enabling this will keep Birdseye running continuously."
|
||||
},
|
||||
"width": {
|
||||
"label": "Width",
|
||||
"description": "Output width (pixels) of the composed Birdseye frame."
|
||||
},
|
||||
"height": {
|
||||
"label": "Height",
|
||||
"description": "Output height (pixels) of the composed Birdseye frame."
|
||||
},
|
||||
"quality": {
|
||||
"label": "Encoding quality",
|
||||
"description": "Encoding quality for the Birdseye mpeg1 feed (1 highest quality, 31 lowest)."
|
||||
},
|
||||
"inactivity_threshold": {
|
||||
"label": "Inactivity threshold",
|
||||
"description": "Seconds of inactivity after which a camera will stop being shown in Birdseye."
|
||||
},
|
||||
"layout": {
|
||||
"label": "Layout",
|
||||
"description": "Layout options for the Birdseye composition.",
|
||||
"scaling_factor": {
|
||||
"label": "Scaling factor",
|
||||
"description": "Scaling factor used by the layout calculator (range 1.0 to 5.0)."
|
||||
},
|
||||
"max_cameras": {
|
||||
"label": "Max cameras",
|
||||
"description": "Maximum number of cameras to display at once in Birdseye; shows the most recent cameras."
|
||||
}
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"order": {
|
||||
"label": "Position",
|
||||
"description": "Numeric position controlling the camera's ordering in the Birdseye layout."
|
||||
}
|
||||
}
|
||||
@ -1,16 +0,0 @@
|
||||
{
|
||||
"label": "Camera groups",
|
||||
"description": "Configuration for named camera groups used to organize cameras in the UI.",
|
||||
"cameras": {
|
||||
"label": "Camera list",
|
||||
"description": "Array of camera names included in this group."
|
||||
},
|
||||
"icon": {
|
||||
"label": "Group icon",
|
||||
"description": "Icon used to represent the camera group in the UI."
|
||||
},
|
||||
"order": {
|
||||
"label": "Sort order",
|
||||
"description": "Numeric order used to sort camera groups in the UI; larger numbers appear later."
|
||||
}
|
||||
}
|
||||
@ -1,32 +0,0 @@
|
||||
{
|
||||
"label": "MQTT",
|
||||
"description": "MQTT image publishing settings.",
|
||||
"enabled": {
|
||||
"label": "Send image",
|
||||
"description": "Enable publishing image snapshots for objects to MQTT topics for this camera."
|
||||
},
|
||||
"timestamp": {
|
||||
"label": "Add timestamp",
|
||||
"description": "Overlay a timestamp on images published to MQTT."
|
||||
},
|
||||
"bounding_box": {
|
||||
"label": "Add bounding box",
|
||||
"description": "Draw bounding boxes on images published over MQTT."
|
||||
},
|
||||
"crop": {
|
||||
"label": "Crop image",
|
||||
"description": "Crop images published to MQTT to the detected object's bounding box."
|
||||
},
|
||||
"height": {
|
||||
"label": "Image height",
|
||||
"description": "Height (pixels) to resize images published over MQTT."
|
||||
},
|
||||
"required_zones": {
|
||||
"label": "Required zones",
|
||||
"description": "Zones that an object must enter for an MQTT image to be published."
|
||||
},
|
||||
"quality": {
|
||||
"label": "JPEG quality",
|
||||
"description": "JPEG quality for images published to MQTT (0-100)."
|
||||
}
|
||||
}
|
||||
@ -1,12 +0,0 @@
|
||||
{
|
||||
"label": "Camera UI",
|
||||
"description": "Display ordering and dashboard visibility for this camera in the UI.",
|
||||
"order": {
|
||||
"label": "UI order",
|
||||
"description": "Numeric order used to sort the camera in the UI; larger numbers appear later."
|
||||
},
|
||||
"dashboard": {
|
||||
"label": "Show in dashboard",
|
||||
"description": "Toggle whether this camera is visible in the main dashboard."
|
||||
}
|
||||
}
|
||||
@ -1,64 +0,0 @@
|
||||
{
|
||||
"label": "Object classification",
|
||||
"description": "Settings for classification models used to refine object labels or state classification.",
|
||||
"bird": {
|
||||
"label": "Bird classification config",
|
||||
"description": "Settings specific to bird classification models.",
|
||||
"enabled": {
|
||||
"label": "Bird classification",
|
||||
"description": "Enable or disable bird classification."
|
||||
},
|
||||
"threshold": {
|
||||
"label": "Minimum score",
|
||||
"description": "Minimum classification score required to accept a bird classification."
|
||||
}
|
||||
},
|
||||
"custom": {
|
||||
"label": "Custom Classification Models",
|
||||
"description": "Configuration for custom classification models used for objects or state detection.",
|
||||
"enabled": {
|
||||
"label": "Enable model",
|
||||
"description": "Enable or disable the custom classification model."
|
||||
},
|
||||
"name": {
|
||||
"label": "Model name",
|
||||
"description": "Identifier for the custom classification model to use."
|
||||
},
|
||||
"threshold": {
|
||||
"label": "Score threshold",
|
||||
"description": "Score threshold used to change the classification state."
|
||||
},
|
||||
"save_attempts": {
|
||||
"label": "Save attempts",
|
||||
"description": "How many classification attempts to save for recent classifications UI."
|
||||
},
|
||||
"object_config": {
|
||||
"objects": {
|
||||
"label": "Classify objects",
|
||||
"description": "List of object types to run object classification on."
|
||||
},
|
||||
"classification_type": {
|
||||
"label": "Classification type",
|
||||
"description": "Classification type applied: 'sub_label' (adds sub_label) or other supported types."
|
||||
}
|
||||
},
|
||||
"state_config": {
|
||||
"cameras": {
|
||||
"label": "Classification cameras",
|
||||
"description": "Per-camera crop and settings for running state classification.",
|
||||
"crop": {
|
||||
"label": "Classification crop",
|
||||
"description": "Crop coordinates to use for running classification on this camera."
|
||||
}
|
||||
},
|
||||
"motion": {
|
||||
"label": "Run on motion",
|
||||
"description": "If true, run classification when motion is detected within the specified crop."
|
||||
},
|
||||
"interval": {
|
||||
"label": "Classification interval",
|
||||
"description": "Interval (seconds) between periodic classification runs for state classification."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,8 +0,0 @@
|
||||
{
|
||||
"label": "Database",
|
||||
"description": "Settings for the SQLite database used by Frigate to store tracked object and recording metadata.",
|
||||
"path": {
|
||||
"label": "Database path",
|
||||
"description": "Filesystem path where the Frigate SQLite database file will be stored."
|
||||
}
|
||||
}
|
||||
@ -1,60 +0,0 @@
|
||||
{
|
||||
"label": "Object Detection",
|
||||
"description": "Settings for the detection/detect role used to run object detection and initialize trackers.",
|
||||
"enabled": {
|
||||
"label": "Detection enabled",
|
||||
"description": "Enable or disable object detection for this camera. Detection must be enabled for object tracking to run."
|
||||
},
|
||||
"height": {
|
||||
"label": "Detect height",
|
||||
"description": "Height (pixels) of frames used for the detect stream; leave empty to use the native stream resolution."
|
||||
},
|
||||
"width": {
|
||||
"label": "Detect width",
|
||||
"description": "Width (pixels) of frames used for the detect stream; leave empty to use the native stream resolution."
|
||||
},
|
||||
"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)."
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"max_disappeared": {
|
||||
"label": "Maximum disappeared frames",
|
||||
"description": "Number of frames without a detection before a tracked object is considered gone."
|
||||
},
|
||||
"stationary": {
|
||||
"label": "Stationary objects config",
|
||||
"description": "Settings to detect and manage objects that remain stationary for a period of time.",
|
||||
"interval": {
|
||||
"label": "Stationary interval",
|
||||
"description": "How often (in frames) to run a detection check to confirm a stationary object."
|
||||
},
|
||||
"threshold": {
|
||||
"label": "Stationary threshold",
|
||||
"description": "Number of frames with no position change required to mark an object as stationary."
|
||||
},
|
||||
"max_frames": {
|
||||
"label": "Max frames",
|
||||
"description": "Limits how long stationary objects are tracked before being discarded.",
|
||||
"default": {
|
||||
"label": "Default max frames",
|
||||
"description": "Default maximum frames to track a stationary object before stopping."
|
||||
},
|
||||
"objects": {
|
||||
"label": "Object max frames",
|
||||
"description": "Per-object overrides for maximum frames to track stationary objects."
|
||||
}
|
||||
},
|
||||
"classifier": {
|
||||
"label": "Enable visual classifier",
|
||||
"description": "Use a visual classifier to detect truly stationary objects even when bounding boxes jitter."
|
||||
}
|
||||
},
|
||||
"annotation_offset": {
|
||||
"label": "Annotation offset",
|
||||
"description": "Milliseconds to shift detect annotations to better align timeline bounding boxes with recordings; can be positive or negative."
|
||||
}
|
||||
}
|
||||
@ -1,56 +0,0 @@
|
||||
{
|
||||
"label": "Detector hardware",
|
||||
"description": "Configuration for object detectors (CPU, GPU, ONNX backends) and any detector-specific model settings.",
|
||||
"type": {
|
||||
"label": "Detector Type",
|
||||
"description": "Type of detector to use for object detection (for example 'cpu', 'edgetpu', 'openvino')."
|
||||
},
|
||||
"model": {
|
||||
"label": "Detector specific model configuration",
|
||||
"description": "Detector-specific model configuration options (path, input size, etc.).",
|
||||
"path": {
|
||||
"label": "Custom Object detection model path",
|
||||
"description": "Path to a custom detection model file (or plus://<model_id> for Frigate+ models)."
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"width": {
|
||||
"label": "Object detection model input width",
|
||||
"description": "Width of the model input tensor in pixels."
|
||||
},
|
||||
"height": {
|
||||
"label": "Object detection model input height",
|
||||
"description": "Height of the model input tensor in pixels."
|
||||
},
|
||||
"labelmap": {
|
||||
"label": "Labelmap customization",
|
||||
"description": "Overrides or remapping entries to merge into the standard labelmap."
|
||||
},
|
||||
"attributes_map": {
|
||||
"label": "Map of object labels to their attribute labels",
|
||||
"description": "Mapping from object labels to attribute labels used to attach metadata (for example 'car' -> ['license_plate'])."
|
||||
},
|
||||
"input_tensor": {
|
||||
"label": "Model Input Tensor Shape",
|
||||
"description": "Tensor format expected by the model: 'nhwc' or 'nchw'."
|
||||
},
|
||||
"input_pixel_format": {
|
||||
"label": "Model Input Pixel Color Format",
|
||||
"description": "Pixel colorspace expected by the model: 'rgb', 'bgr', or 'yuv'."
|
||||
},
|
||||
"input_dtype": {
|
||||
"label": "Model Input D Type",
|
||||
"description": "Data type of the model input tensor (for example 'float32')."
|
||||
},
|
||||
"model_type": {
|
||||
"label": "Object Detection Model Type",
|
||||
"description": "Detector model architecture type (ssd, yolox, yolonas) used by some detectors for optimization."
|
||||
}
|
||||
},
|
||||
"model_path": {
|
||||
"label": "Detector specific model path",
|
||||
"description": "File path to the detector model binary if required by the chosen detector."
|
||||
}
|
||||
}
|
||||
@ -1,4 +0,0 @@
|
||||
{
|
||||
"label": "Environment variables",
|
||||
"description": "Key/value pairs of environment variables to set for the Frigate process."
|
||||
}
|
||||
@ -1,44 +0,0 @@
|
||||
{
|
||||
"label": "Face recognition",
|
||||
"description": "Settings for face detection and recognition; can be overridden per-camera.",
|
||||
"enabled": {
|
||||
"label": "Enable face recognition",
|
||||
"description": "Enable or disable face recognition globally."
|
||||
},
|
||||
"model_size": {
|
||||
"label": "Model size",
|
||||
"description": "Model size to use for face embeddings (small/large); larger may require GPU."
|
||||
},
|
||||
"unknown_score": {
|
||||
"label": "Unknown score threshold",
|
||||
"description": "Distance threshold below which a face is considered a potential match (higher = stricter)."
|
||||
},
|
||||
"detection_threshold": {
|
||||
"label": "Detection threshold",
|
||||
"description": "Minimum detection confidence required to consider a face detection valid."
|
||||
},
|
||||
"recognition_threshold": {
|
||||
"label": "Recognition threshold",
|
||||
"description": "Face embedding distance threshold to consider two faces a match."
|
||||
},
|
||||
"min_area": {
|
||||
"label": "Minimum face area",
|
||||
"description": "Minimum area (pixels) of a detected face box required to attempt recognition."
|
||||
},
|
||||
"min_faces": {
|
||||
"label": "Minimum faces",
|
||||
"description": "Minimum number of face recognitions required before applying a recognized sub-label to a person."
|
||||
},
|
||||
"save_attempts": {
|
||||
"label": "Save attempts",
|
||||
"description": "Number of face recognition attempts to retain for recent recognition UI."
|
||||
},
|
||||
"blur_confidence_filter": {
|
||||
"label": "Blur confidence filter",
|
||||
"description": "Adjust confidence scores based on image blur to reduce false positives for poor quality faces."
|
||||
},
|
||||
"device": {
|
||||
"label": "Device",
|
||||
"description": "This is an override, to target a specific device. See https://onnxruntime.ai/docs/execution-providers/ for more information"
|
||||
}
|
||||
}
|
||||
@ -1,68 +0,0 @@
|
||||
{
|
||||
"label": "FFmpeg",
|
||||
"description": "FFmpeg settings including binary path, args, hwaccel options, and per-role output args.",
|
||||
"path": {
|
||||
"label": "FFmpeg path",
|
||||
"description": "Path to the FFmpeg binary to use globally or a version alias (\"5.0\" or \"7.0\")."
|
||||
},
|
||||
"global_args": {
|
||||
"label": "FFmpeg global args",
|
||||
"description": "Global args passed to FFmpeg processes by default."
|
||||
},
|
||||
"hwaccel_args": {
|
||||
"label": "Hardware acceleration args",
|
||||
"description": "Hardware acceleration arguments for FFmpeg (auto or provider-specific)."
|
||||
},
|
||||
"input_args": {
|
||||
"label": "Input args",
|
||||
"description": "Input arguments applied to FFmpeg input streams by default."
|
||||
},
|
||||
"output_args": {
|
||||
"label": "Output args",
|
||||
"description": "Default output args used for different FFmpeg roles such as detect and record.",
|
||||
"detect": {
|
||||
"label": "Detect output args",
|
||||
"description": "Default output args for detect role streams."
|
||||
},
|
||||
"record": {
|
||||
"label": "Record output args",
|
||||
"description": "Default output args for record role streams."
|
||||
}
|
||||
},
|
||||
"retry_interval": {
|
||||
"label": "FFmpeg retry time",
|
||||
"description": "Seconds to wait before attempting to reconnect a camera stream after failure. Default is 10."
|
||||
},
|
||||
"apple_compatibility": {
|
||||
"label": "Apple compatibility",
|
||||
"description": "Enable HEVC tagging for better Apple player compatibility when recording H.265."
|
||||
},
|
||||
"gpu": {
|
||||
"label": "GPU index",
|
||||
"description": "Default GPU index used for hardware acceleration if available."
|
||||
},
|
||||
"inputs": {
|
||||
"label": "Camera inputs",
|
||||
"description": "List of input stream definitions (paths and roles) for this camera.",
|
||||
"path": {
|
||||
"label": "Input path",
|
||||
"description": "Camera input stream URL or path."
|
||||
},
|
||||
"roles": {
|
||||
"label": "Input roles",
|
||||
"description": "Roles for this input stream (for example: detect, record, audio)."
|
||||
},
|
||||
"global_args": {
|
||||
"label": "FFmpeg global args",
|
||||
"description": "FFmpeg global arguments for this input stream."
|
||||
},
|
||||
"hwaccel_args": {
|
||||
"label": "Hardware acceleration args",
|
||||
"description": "Hardware acceleration arguments for this input stream."
|
||||
},
|
||||
"input_args": {
|
||||
"label": "Input args",
|
||||
"description": "Input arguments specific to this stream."
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,23 +0,0 @@
|
||||
{
|
||||
"label": "Generative AI configuration.",
|
||||
"properties": {
|
||||
"api_key": {
|
||||
"label": "Provider API key."
|
||||
},
|
||||
"base_url": {
|
||||
"label": "Provider base url."
|
||||
},
|
||||
"model": {
|
||||
"label": "GenAI model."
|
||||
},
|
||||
"provider": {
|
||||
"label": "GenAI provider."
|
||||
},
|
||||
"provider_options": {
|
||||
"label": "GenAI Provider extra options."
|
||||
},
|
||||
"runtime_options": {
|
||||
"label": "Options to pass during inference calls."
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,4 +0,0 @@
|
||||
{
|
||||
"label": "go2rtc",
|
||||
"description": "Settings for the integrated go2rtc restreaming service used for live stream relaying and translation."
|
||||
}
|
||||
@ -1,16 +0,0 @@
|
||||
{
|
||||
"label": "Live playback",
|
||||
"description": "Settings used by the Web UI to control live stream resolution and quality.",
|
||||
"streams": {
|
||||
"label": "Live stream names",
|
||||
"description": "Mapping of configured stream names to restream/go2rtc names used for live playback."
|
||||
},
|
||||
"height": {
|
||||
"label": "Live height",
|
||||
"description": "Height (pixels) to render the live stream in the Web UI; must be <= detect stream height."
|
||||
},
|
||||
"quality": {
|
||||
"label": "Live quality",
|
||||
"description": "Encoding quality for the live jsmpeg stream (1 highest, 31 lowest)."
|
||||
}
|
||||
}
|
||||
@ -1,12 +0,0 @@
|
||||
{
|
||||
"label": "Logging",
|
||||
"description": "Controls default log verbosity and per-component log level overrides.",
|
||||
"default": {
|
||||
"label": "Logging level",
|
||||
"description": "Default global log verbosity (debug, info, warning, error)."
|
||||
},
|
||||
"logs": {
|
||||
"label": "Per-process log level",
|
||||
"description": "Per-component log level overrides to increase or decrease verbosity for specific modules."
|
||||
}
|
||||
}
|
||||
@ -1,66 +0,0 @@
|
||||
{
|
||||
"label": "License Plate Recognition",
|
||||
"description": "License plate recognition settings including detection thresholds, formatting, and known plates.",
|
||||
"enabled": {
|
||||
"label": "Enable LPR",
|
||||
"description": "Enable or disable LPR globally; camera-level settings can override."
|
||||
},
|
||||
"model_size": {
|
||||
"label": "Model size",
|
||||
"description": "Model size used for text detection/recognition; small runs on CPU, large on GPU."
|
||||
},
|
||||
"detection_threshold": {
|
||||
"label": "Detection threshold",
|
||||
"description": "Detection confidence threshold to begin running OCR on a suspected plate."
|
||||
},
|
||||
"min_area": {
|
||||
"label": "Minimum plate area",
|
||||
"description": "Minimum plate area (pixels) required to attempt recognition."
|
||||
},
|
||||
"recognition_threshold": {
|
||||
"label": "Recognition threshold",
|
||||
"description": "Confidence threshold required for recognized plate text to be attached as a sub-label."
|
||||
},
|
||||
"min_plate_length": {
|
||||
"label": "Min plate length",
|
||||
"description": "Minimum number of characters a recognized plate must contain to be considered valid."
|
||||
},
|
||||
"format": {
|
||||
"label": "Plate format regex",
|
||||
"description": "Optional regex to validate recognized plate strings against an expected format."
|
||||
},
|
||||
"match_distance": {
|
||||
"label": "Match distance",
|
||||
"description": "Number of character mismatches allowed when comparing detected plates to known plates."
|
||||
},
|
||||
"known_plates": {
|
||||
"label": "Known plates",
|
||||
"description": "List of plates or regexes to specially track or alert on."
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"debug_save_plates": {
|
||||
"label": "Save debug plates",
|
||||
"description": "Save plate crop images for debugging LPR performance."
|
||||
},
|
||||
"device": {
|
||||
"label": "Device",
|
||||
"description": "This is an override, to target a specific device. See https://onnxruntime.ai/docs/execution-providers/ for more information"
|
||||
},
|
||||
"replace_rules": {
|
||||
"label": "Replacement rules",
|
||||
"description": "Regex replacement rules used to normalize detected plate strings before matching.",
|
||||
"pattern": {
|
||||
"label": "Regex pattern"
|
||||
},
|
||||
"replacement": {
|
||||
"label": "Replacement string"
|
||||
}
|
||||
},
|
||||
"expire_time": {
|
||||
"label": "Expire seconds",
|
||||
"description": "Time in seconds after which an unseen plate is expired from the tracker (for dedicated LPR cameras only)."
|
||||
}
|
||||
}
|
||||
@ -1,44 +0,0 @@
|
||||
{
|
||||
"label": "Detection model",
|
||||
"description": "Settings to configure a custom object detection model and its input shape.",
|
||||
"path": {
|
||||
"label": "Custom Object detection model path",
|
||||
"description": "Path to a custom detection model file (or plus://<model_id> for Frigate+ models)."
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"width": {
|
||||
"label": "Object detection model input width",
|
||||
"description": "Width of the model input tensor in pixels."
|
||||
},
|
||||
"height": {
|
||||
"label": "Object detection model input height",
|
||||
"description": "Height of the model input tensor in pixels."
|
||||
},
|
||||
"labelmap": {
|
||||
"label": "Labelmap customization",
|
||||
"description": "Overrides or remapping entries to merge into the standard labelmap."
|
||||
},
|
||||
"attributes_map": {
|
||||
"label": "Map of object labels to their attribute labels",
|
||||
"description": "Mapping from object labels to attribute labels used to attach metadata (for example 'car' -> ['license_plate'])."
|
||||
},
|
||||
"input_tensor": {
|
||||
"label": "Model Input Tensor Shape",
|
||||
"description": "Tensor format expected by the model: 'nhwc' or 'nchw'."
|
||||
},
|
||||
"input_pixel_format": {
|
||||
"label": "Model Input Pixel Color Format",
|
||||
"description": "Pixel colorspace expected by the model: 'rgb', 'bgr', or 'yuv'."
|
||||
},
|
||||
"input_dtype": {
|
||||
"label": "Model Input D Type",
|
||||
"description": "Data type of the model input tensor (for example 'float32')."
|
||||
},
|
||||
"model_type": {
|
||||
"label": "Object Detection Model Type",
|
||||
"description": "Detector model architecture type (ssd, yolox, yolonas) used by some detectors for optimization."
|
||||
}
|
||||
}
|
||||
@ -1,51 +0,0 @@
|
||||
{
|
||||
"label": "Motion detection",
|
||||
"description": "Default motion detection settings applied to cameras unless overridden per-camera.",
|
||||
"enabled": {
|
||||
"label": "Enable motion detection",
|
||||
"description": "Enable or disable motion detection globally; per-camera settings can override this."
|
||||
},
|
||||
"threshold": {
|
||||
"label": "Motion threshold",
|
||||
"description": "Pixel difference threshold used by the motion detector; higher values reduce sensitivity (range 1-255)."
|
||||
},
|
||||
"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)."
|
||||
},
|
||||
"improve_contrast": {
|
||||
"label": "Improve contrast",
|
||||
"description": "Apply contrast improvement to frames before motion analysis to help detection."
|
||||
},
|
||||
"contour_area": {
|
||||
"label": "Contour area",
|
||||
"description": "Minimum contour area in pixels required for a motion contour to be counted."
|
||||
},
|
||||
"delta_alpha": {
|
||||
"label": "Delta alpha",
|
||||
"description": "Alpha blending factor used in frame differencing for motion calculation."
|
||||
},
|
||||
"frame_alpha": {
|
||||
"label": "Frame alpha",
|
||||
"description": "Alpha value used when blending frames for motion preprocessing."
|
||||
},
|
||||
"frame_height": {
|
||||
"label": "Frame height",
|
||||
"description": "Height in pixels to scale frames to when computing motion (useful for performance)."
|
||||
},
|
||||
"mask": {
|
||||
"label": "Mask coordinates",
|
||||
"description": "Ordered x,y coordinates defining the motion mask polygon used to include/exclude areas."
|
||||
},
|
||||
"mqtt_off_delay": {
|
||||
"label": "MQTT off delay",
|
||||
"description": "Seconds to wait after last motion before publishing an MQTT 'off' state."
|
||||
},
|
||||
"enabled_in_config": {
|
||||
"label": "Original motion state",
|
||||
"description": "Indicates whether motion detection was enabled in the original static configuration."
|
||||
},
|
||||
"raw_mask": {
|
||||
"label": "Raw Mask"
|
||||
}
|
||||
}
|
||||
@ -1,56 +0,0 @@
|
||||
{
|
||||
"label": "MQTT",
|
||||
"description": "Settings for connecting and publishing telemetry, snapshots, and event details to an MQTT broker.",
|
||||
"enabled": {
|
||||
"label": "Enable MQTT",
|
||||
"description": "Enable or disable MQTT integration for state, events, and snapshots."
|
||||
},
|
||||
"host": {
|
||||
"label": "MQTT host",
|
||||
"description": "Hostname or IP address of the MQTT broker."
|
||||
},
|
||||
"port": {
|
||||
"label": "MQTT port",
|
||||
"description": "Port of the MQTT broker (usually 1883 for plain MQTT)."
|
||||
},
|
||||
"topic_prefix": {
|
||||
"label": "Topic prefix",
|
||||
"description": "MQTT topic prefix for all Frigate topics; must be unique if running multiple instances."
|
||||
},
|
||||
"client_id": {
|
||||
"label": "Client ID",
|
||||
"description": "Client identifier used when connecting to the MQTT broker; should be unique per instance."
|
||||
},
|
||||
"stats_interval": {
|
||||
"label": "Stats interval",
|
||||
"description": "Interval in seconds for publishing system and camera stats to MQTT."
|
||||
},
|
||||
"user": {
|
||||
"label": "MQTT username",
|
||||
"description": "Optional MQTT username; can be provided via environment variables or secrets."
|
||||
},
|
||||
"password": {
|
||||
"label": "MQTT password",
|
||||
"description": "Optional MQTT password; can be provided via environment variables or secrets."
|
||||
},
|
||||
"tls_ca_certs": {
|
||||
"label": "TLS CA certs",
|
||||
"description": "Path to CA certificate for TLS connections to the broker (for self-signed certs)."
|
||||
},
|
||||
"tls_client_cert": {
|
||||
"label": "Client cert",
|
||||
"description": "Client certificate path for TLS mutual authentication; do not set user/password when using client certs."
|
||||
},
|
||||
"tls_client_key": {
|
||||
"label": "Client key",
|
||||
"description": "Private key path for the client certificate."
|
||||
},
|
||||
"tls_insecure": {
|
||||
"label": "TLS insecure",
|
||||
"description": "Allow insecure TLS connections by skipping hostname verification (not recommended)."
|
||||
},
|
||||
"qos": {
|
||||
"label": "MQTT QoS",
|
||||
"description": "Quality of Service level for MQTT publishes/subscriptions (0, 1, or 2)."
|
||||
}
|
||||
}
|
||||
@ -1,23 +0,0 @@
|
||||
{
|
||||
"label": "Networking",
|
||||
"description": "Network-related settings such as IPv6 enablement for Frigate endpoints.",
|
||||
"ipv6": {
|
||||
"label": "IPv6 configuration",
|
||||
"description": "IPv6-specific settings for Frigate network services.",
|
||||
"enabled": {
|
||||
"label": "Enable IPv6",
|
||||
"description": "Enable IPv6 support for Frigate services (API and UI) where applicable."
|
||||
}
|
||||
},
|
||||
"listen": {
|
||||
"label": "Listening ports configuration",
|
||||
"internal": {
|
||||
"label": "Internal port",
|
||||
"description": "Internal listening port for Frigate (default 5000)."
|
||||
},
|
||||
"external": {
|
||||
"label": "External port",
|
||||
"description": "External listening port for Frigate (default 8971)."
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,20 +0,0 @@
|
||||
{
|
||||
"label": "Notifications",
|
||||
"description": "Settings to enable and control notifications; can be overridden per-camera.",
|
||||
"enabled": {
|
||||
"label": "Enable notifications",
|
||||
"description": "Enable or disable notifications globally."
|
||||
},
|
||||
"email": {
|
||||
"label": "Notification email",
|
||||
"description": "Email address used for push notifications or required by certain notification providers."
|
||||
},
|
||||
"cooldown": {
|
||||
"label": "Cooldown period",
|
||||
"description": "Cooldown (seconds) between notifications to avoid spamming recipients."
|
||||
},
|
||||
"enabled_in_config": {
|
||||
"label": "Original notifications state",
|
||||
"description": "Indicates whether notifications were enabled in the original static configuration."
|
||||
}
|
||||
}
|
||||
@ -1,95 +0,0 @@
|
||||
{
|
||||
"label": "Objects",
|
||||
"description": "Object tracking defaults including which labels to track and per-object filters.",
|
||||
"track": {
|
||||
"label": "Objects to track",
|
||||
"description": "List of object labels to track globally; camera configs can override this."
|
||||
},
|
||||
"filters": {
|
||||
"label": "Object filters",
|
||||
"description": "Filters applied to detected objects to reduce false positives (area, ratio, confidence).",
|
||||
"min_area": {
|
||||
"label": "Minimum object area",
|
||||
"description": "Minimum bounding box area (pixels or percentage) required for this object type. Can be pixels (int) or percentage (float between 0.000001 and 0.99)."
|
||||
},
|
||||
"max_area": {
|
||||
"label": "Maximum object area",
|
||||
"description": "Maximum bounding box area (pixels or percentage) allowed for this object type. Can be pixels (int) or percentage (float between 0.000001 and 0.99)."
|
||||
},
|
||||
"min_ratio": {
|
||||
"label": "Minimum aspect ratio",
|
||||
"description": "Minimum width/height ratio required for the bounding box to qualify."
|
||||
},
|
||||
"max_ratio": {
|
||||
"label": "Maximum aspect ratio",
|
||||
"description": "Maximum width/height ratio allowed for the bounding box to qualify."
|
||||
},
|
||||
"threshold": {
|
||||
"label": "Avg confidence",
|
||||
"description": "Average detection confidence threshold required for the object to be considered a true positive."
|
||||
},
|
||||
"min_score": {
|
||||
"label": "Minimum confidence",
|
||||
"description": "Minimum single-frame detection confidence required for the object to be counted."
|
||||
},
|
||||
"mask": {
|
||||
"label": "Filter mask",
|
||||
"description": "Polygon coordinates defining where this filter applies within the frame."
|
||||
},
|
||||
"raw_mask": {
|
||||
"label": "Raw Mask"
|
||||
}
|
||||
},
|
||||
"mask": {
|
||||
"label": "Object mask",
|
||||
"description": "Mask polygon used to prevent object detection in specified areas."
|
||||
},
|
||||
"genai": {
|
||||
"label": "GenAI object config",
|
||||
"description": "GenAI options for describing tracked objects and sending frames for generation.",
|
||||
"enabled": {
|
||||
"label": "Enable GenAI",
|
||||
"description": "Enable GenAI generation of descriptions for tracked objects by default."
|
||||
},
|
||||
"use_snapshot": {
|
||||
"label": "Use snapshots",
|
||||
"description": "Use object snapshots instead of thumbnails for GenAI description generation."
|
||||
},
|
||||
"prompt": {
|
||||
"label": "Caption prompt",
|
||||
"description": "Default prompt template used when generating descriptions with GenAI."
|
||||
},
|
||||
"object_prompts": {
|
||||
"label": "Object prompts",
|
||||
"description": "Per-object prompts to customize GenAI outputs for specific labels."
|
||||
},
|
||||
"objects": {
|
||||
"label": "GenAI objects",
|
||||
"description": "List of object labels to send to GenAI by default."
|
||||
},
|
||||
"required_zones": {
|
||||
"label": "Required zones",
|
||||
"description": "Zones that must be entered for objects to qualify for GenAI description generation."
|
||||
},
|
||||
"debug_save_thumbnails": {
|
||||
"label": "Save thumbnails",
|
||||
"description": "Save thumbnails sent to GenAI for debugging and review."
|
||||
},
|
||||
"send_triggers": {
|
||||
"label": "GenAI triggers",
|
||||
"description": "Defines when frames should be sent to GenAI (on end, after updates, etc.).",
|
||||
"tracked_object_end": {
|
||||
"label": "Send on end",
|
||||
"description": "Send a request to GenAI when the tracked object ends."
|
||||
},
|
||||
"after_significant_updates": {
|
||||
"label": "Early GenAI trigger",
|
||||
"description": "Send a request to GenAI after a specified number of significant updates for the tracked object."
|
||||
}
|
||||
},
|
||||
"enabled_in_config": {
|
||||
"label": "Original GenAI state",
|
||||
"description": "Indicates whether GenAI was enabled in the original static config."
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,72 +0,0 @@
|
||||
{
|
||||
"label": "ONVIF",
|
||||
"description": "ONVIF connection and PTZ autotracking settings for this camera.",
|
||||
"host": {
|
||||
"label": "ONVIF host",
|
||||
"description": "Host (and optional scheme) for the ONVIF service for this camera."
|
||||
},
|
||||
"port": {
|
||||
"label": "ONVIF port",
|
||||
"description": "Port number for the ONVIF service."
|
||||
},
|
||||
"user": {
|
||||
"label": "ONVIF username",
|
||||
"description": "Username for ONVIF authentication; some devices require admin user for ONVIF."
|
||||
},
|
||||
"password": {
|
||||
"label": "ONVIF password",
|
||||
"description": "Password for ONVIF authentication."
|
||||
},
|
||||
"tls_insecure": {
|
||||
"label": "Disable TLS verify",
|
||||
"description": "Skip TLS verification and disable digest auth for ONVIF (unsafe; use in safe networks only)."
|
||||
},
|
||||
"autotracking": {
|
||||
"label": "Autotracking",
|
||||
"description": "Automatically track moving objects and keep them centered in the frame using PTZ camera movements.",
|
||||
"enabled": {
|
||||
"label": "Enable Autotracking",
|
||||
"description": "Enable or disable automatic PTZ camera tracking of detected objects."
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"zooming": {
|
||||
"label": "Zoom mode",
|
||||
"description": "Control zoom behavior: disabled (pan/tilt only), absolute (most compatible), or relative (concurrent pan/tilt/zoom)."
|
||||
},
|
||||
"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."
|
||||
},
|
||||
"track": {
|
||||
"label": "Tracked objects",
|
||||
"description": "List of object types that should trigger autotracking."
|
||||
},
|
||||
"required_zones": {
|
||||
"label": "Required zones",
|
||||
"description": "Objects must enter one of these zones before autotracking begins."
|
||||
},
|
||||
"return_preset": {
|
||||
"label": "Return preset",
|
||||
"description": "ONVIF preset name configured in camera firmware to return to after tracking ends."
|
||||
},
|
||||
"timeout": {
|
||||
"label": "Return timeout",
|
||||
"description": "Wait this many seconds after losing tracking before returning camera to preset position."
|
||||
},
|
||||
"movement_weights": {
|
||||
"label": "Movement weights",
|
||||
"description": "Calibration values automatically generated by camera calibration. Do not modify manually."
|
||||
},
|
||||
"enabled_in_config": {
|
||||
"label": "Original autotrack state",
|
||||
"description": "Internal field to track whether autotracking was enabled in configuration."
|
||||
}
|
||||
},
|
||||
"ignore_time_mismatch": {
|
||||
"label": "Ignore time mismatch",
|
||||
"description": "Ignore time synchronization differences between camera and Frigate server for ONVIF communication."
|
||||
}
|
||||
}
|
||||
@ -1,36 +0,0 @@
|
||||
{
|
||||
"label": "Proxy",
|
||||
"description": "Settings for integrating Frigate behind a reverse proxy that passes authenticated user headers.",
|
||||
"header_map": {
|
||||
"label": "Header mapping",
|
||||
"description": "Map incoming proxy headers to Frigate user and role fields for proxy-based auth.",
|
||||
"user": {
|
||||
"label": "User header",
|
||||
"description": "Header containing the authenticated username provided by the upstream proxy."
|
||||
},
|
||||
"role": {
|
||||
"label": "Role header",
|
||||
"description": "Header containing the authenticated user's role or groups from the upstream proxy."
|
||||
},
|
||||
"role_map": {
|
||||
"label": "Role mapping",
|
||||
"description": "Map upstream group values to Frigate roles (for example map admin groups to the admin role)."
|
||||
}
|
||||
},
|
||||
"logout_url": {
|
||||
"label": "Logout URL",
|
||||
"description": "URL to redirect users to when logging out via the proxy."
|
||||
},
|
||||
"auth_secret": {
|
||||
"label": "Proxy secret",
|
||||
"description": "Optional secret checked against the X-Proxy-Secret header to verify trusted proxies."
|
||||
},
|
||||
"default_role": {
|
||||
"label": "Default role",
|
||||
"description": "Default role assigned to proxy-authenticated users when no role mapping applies (admin or viewer)."
|
||||
},
|
||||
"separator": {
|
||||
"label": "Separator character",
|
||||
"description": "Character used to split multiple values provided in proxy headers."
|
||||
}
|
||||
}
|
||||
@ -1,96 +0,0 @@
|
||||
{
|
||||
"label": "Recording",
|
||||
"description": "Recording and retention settings applied to cameras unless overridden per-camera.",
|
||||
"enabled": {
|
||||
"label": "Enable recording",
|
||||
"description": "Enable or disable recording globally; individual cameras can override this."
|
||||
},
|
||||
"expire_interval": {
|
||||
"label": "Record cleanup interval",
|
||||
"description": "Minutes between cleanup passes that remove expired recording segments."
|
||||
},
|
||||
"continuous": {
|
||||
"label": "Continuous retention",
|
||||
"description": "Number of days to retain recordings regardless of tracked objects or motion. Set to 0 if you only want to retain recordings of alerts and detections.",
|
||||
"days": {
|
||||
"label": "Retention days",
|
||||
"description": "Days to retain recordings."
|
||||
}
|
||||
},
|
||||
"motion": {
|
||||
"label": "Motion retention",
|
||||
"description": "Number of days to retain recordings triggered by motion regardless of tracked objects. Set to 0 if you only want to retain recordings of alerts and detections.",
|
||||
"days": {
|
||||
"label": "Retention days",
|
||||
"description": "Days to retain recordings."
|
||||
}
|
||||
},
|
||||
"detections": {
|
||||
"label": "Detection retention",
|
||||
"description": "Recording retention settings for detection events including pre/post capture durations.",
|
||||
"pre_capture": {
|
||||
"label": "Pre-capture seconds",
|
||||
"description": "Number of seconds before the detection event to include in the recording."
|
||||
},
|
||||
"post_capture": {
|
||||
"label": "Post-capture seconds",
|
||||
"description": "Number of seconds after the detection event to include in the recording."
|
||||
},
|
||||
"retain": {
|
||||
"label": "Event retention",
|
||||
"description": "Retention settings for recordings of detection events.",
|
||||
"days": {
|
||||
"label": "Retention days",
|
||||
"description": "Number of days to retain recordings of detection events."
|
||||
},
|
||||
"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)."
|
||||
}
|
||||
}
|
||||
},
|
||||
"alerts": {
|
||||
"label": "Alert retention",
|
||||
"description": "Recording retention settings for alert events including pre/post capture durations.",
|
||||
"pre_capture": {
|
||||
"label": "Pre-capture seconds",
|
||||
"description": "Number of seconds before the detection event to include in the recording."
|
||||
},
|
||||
"post_capture": {
|
||||
"label": "Post-capture seconds",
|
||||
"description": "Number of seconds after the detection event to include in the recording."
|
||||
},
|
||||
"retain": {
|
||||
"label": "Event retention",
|
||||
"description": "Retention settings for recordings of detection events.",
|
||||
"days": {
|
||||
"label": "Retention days",
|
||||
"description": "Number of days to retain recordings of detection events."
|
||||
},
|
||||
"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)."
|
||||
}
|
||||
}
|
||||
},
|
||||
"export": {
|
||||
"label": "Export config",
|
||||
"description": "Settings used when exporting recordings such as timelapse and hardware acceleration.",
|
||||
"hwaccel_args": {
|
||||
"label": "Export hwaccel args",
|
||||
"description": "Hardware acceleration args to use for export/transcode operations."
|
||||
}
|
||||
},
|
||||
"preview": {
|
||||
"label": "Preview config",
|
||||
"description": "Settings controlling the quality of recording previews shown in the UI.",
|
||||
"quality": {
|
||||
"label": "Preview quality",
|
||||
"description": "Preview quality level (very_low, low, medium, high, very_high)."
|
||||
}
|
||||
},
|
||||
"enabled_in_config": {
|
||||
"label": "Original recording state",
|
||||
"description": "Indicates whether recording was enabled in the original static configuration."
|
||||
}
|
||||
}
|
||||
@ -1,92 +0,0 @@
|
||||
{
|
||||
"label": "Review",
|
||||
"description": "Settings that control alerts, detections, and GenAI review summaries used by the UI and storage.",
|
||||
"alerts": {
|
||||
"label": "Alerts config",
|
||||
"description": "Settings for which tracked objects generate alerts and how alerts are retained.",
|
||||
"enabled": {
|
||||
"label": "Enable alerts",
|
||||
"description": "Enable or disable alert generation for this camera."
|
||||
},
|
||||
"labels": {
|
||||
"label": "Alert labels",
|
||||
"description": "List of object labels that qualify as alerts (for example: car, person)."
|
||||
},
|
||||
"required_zones": {
|
||||
"label": "Required zones",
|
||||
"description": "Zones that an object must enter to be considered an alert; leave empty to allow any zone."
|
||||
},
|
||||
"enabled_in_config": {
|
||||
"label": "Original alerts state",
|
||||
"description": "Tracks whether alerts were originally enabled in the static configuration."
|
||||
},
|
||||
"cutoff_time": {
|
||||
"label": "Alerts cutoff time",
|
||||
"description": "Seconds to wait after no alert-causing activity before cutting off an alert."
|
||||
}
|
||||
},
|
||||
"detections": {
|
||||
"label": "Detections config",
|
||||
"description": "Settings for creating detection events (non-alert) and how long to keep them.",
|
||||
"enabled": {
|
||||
"label": "Enable detections",
|
||||
"description": "Enable or disable detection events for this camera."
|
||||
},
|
||||
"labels": {
|
||||
"label": "Detection labels",
|
||||
"description": "List of object labels that qualify as detection events."
|
||||
},
|
||||
"required_zones": {
|
||||
"label": "Required zones",
|
||||
"description": "Zones that an object must enter to be considered a detection; leave empty to allow any zone."
|
||||
},
|
||||
"cutoff_time": {
|
||||
"label": "Detections cutoff time",
|
||||
"description": "Seconds to wait after no detection-causing activity before cutting off a detection."
|
||||
},
|
||||
"enabled_in_config": {
|
||||
"label": "Original detections state",
|
||||
"description": "Tracks whether detections were originally enabled in the static configuration."
|
||||
}
|
||||
},
|
||||
"genai": {
|
||||
"label": "GenAI config",
|
||||
"description": "Controls use of generative AI for producing descriptions and summaries of review items.",
|
||||
"enabled": {
|
||||
"label": "Enable GenAI descriptions",
|
||||
"description": "Enable or disable GenAI-generated descriptions and summaries for review items."
|
||||
},
|
||||
"alerts": {
|
||||
"label": "Enable GenAI for alerts",
|
||||
"description": "Use GenAI to generate descriptions for alert items."
|
||||
},
|
||||
"detections": {
|
||||
"label": "Enable GenAI for detections",
|
||||
"description": "Use GenAI to generate descriptions for detection items."
|
||||
},
|
||||
"image_source": {
|
||||
"label": "Review image source",
|
||||
"description": "Source of images sent to GenAI ('preview' or 'recordings'); 'recordings' uses higher quality frames but more tokens."
|
||||
},
|
||||
"additional_concerns": {
|
||||
"label": "Additional concerns",
|
||||
"description": "A list of additional concerns or notes the GenAI should consider when evaluating activity on this camera."
|
||||
},
|
||||
"debug_save_thumbnails": {
|
||||
"label": "Save thumbnails",
|
||||
"description": "Save thumbnails that are sent to the GenAI provider for debugging and review."
|
||||
},
|
||||
"enabled_in_config": {
|
||||
"label": "Original GenAI state",
|
||||
"description": "Tracks whether GenAI review was originally enabled in the static configuration."
|
||||
},
|
||||
"preferred_language": {
|
||||
"label": "Preferred language",
|
||||
"description": "Preferred language to request from the GenAI provider for generated responses."
|
||||
},
|
||||
"activity_context_prompt": {
|
||||
"label": "Activity context prompt",
|
||||
"description": "Custom prompt describing what is and is not suspicious activity to provide context for GenAI summaries."
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,4 +0,0 @@
|
||||
{
|
||||
"label": "Safe mode",
|
||||
"description": "When enabled, start Frigate in safe mode with reduced features for troubleshooting."
|
||||
}
|
||||
@ -1,52 +0,0 @@
|
||||
{
|
||||
"label": "Semantic Search",
|
||||
"description": "Settings for Semantic Search which builds and queries object embeddings to find similar items.",
|
||||
"enabled": {
|
||||
"label": "Enable semantic search",
|
||||
"description": "Enable or disable the semantic search feature."
|
||||
},
|
||||
"reindex": {
|
||||
"label": "Reindex on startup",
|
||||
"description": "Trigger a full reindex of historical tracked objects into the embeddings database."
|
||||
},
|
||||
"model": {
|
||||
"label": "Semantic search model",
|
||||
"description": "The embeddings model to use for semantic search (for example 'jinav1')."
|
||||
},
|
||||
"model_size": {
|
||||
"label": "Model size",
|
||||
"description": "Select model size; 'small' runs on CPU and 'large' typically requires GPU."
|
||||
},
|
||||
"device": {
|
||||
"label": "Device",
|
||||
"description": "This is an override, to target a specific device. See https://onnxruntime.ai/docs/execution-providers/ for more information"
|
||||
},
|
||||
"triggers": {
|
||||
"label": "Triggers",
|
||||
"description": "Actions and matching criteria for camera-specific semantic search triggers.",
|
||||
"friendly_name": {
|
||||
"label": "Friendly name",
|
||||
"description": "Optional friendly name displayed in the UI for this trigger."
|
||||
},
|
||||
"enabled": {
|
||||
"label": "Enable this trigger",
|
||||
"description": "Enable or disable this semantic search trigger."
|
||||
},
|
||||
"type": {
|
||||
"label": "Trigger type",
|
||||
"description": "Type of trigger: 'thumbnail' (match against image) or 'description' (match against text)."
|
||||
},
|
||||
"data": {
|
||||
"label": "Trigger content",
|
||||
"description": "Text phrase or thumbnail ID to match against tracked objects."
|
||||
},
|
||||
"threshold": {
|
||||
"label": "Trigger threshold",
|
||||
"description": "Minimum similarity score (0-1) required to activate this trigger."
|
||||
},
|
||||
"actions": {
|
||||
"label": "Trigger actions",
|
||||
"description": "List of actions to execute when trigger matches (notification, sub_label, attribute)."
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,52 +0,0 @@
|
||||
{
|
||||
"label": "Snapshots",
|
||||
"description": "Settings for saved JPEG snapshots of tracked objects; can be overridden per-camera.",
|
||||
"enabled": {
|
||||
"label": "Snapshots enabled",
|
||||
"description": "Enable or disable saving snapshots globally."
|
||||
},
|
||||
"clean_copy": {
|
||||
"label": "Save clean copy",
|
||||
"description": "Save an unannotated clean copy of snapshots in addition to annotated ones."
|
||||
},
|
||||
"timestamp": {
|
||||
"label": "Timestamp overlay",
|
||||
"description": "Overlay a timestamp on saved snapshots."
|
||||
},
|
||||
"bounding_box": {
|
||||
"label": "Bounding box overlay",
|
||||
"description": "Draw bounding boxes for tracked objects on saved snapshots."
|
||||
},
|
||||
"crop": {
|
||||
"label": "Crop snapshot",
|
||||
"description": "Crop saved snapshots to the detected object's bounding box."
|
||||
},
|
||||
"required_zones": {
|
||||
"label": "Required zones",
|
||||
"description": "Zones an object must enter for a snapshot to be saved."
|
||||
},
|
||||
"height": {
|
||||
"label": "Snapshot height",
|
||||
"description": "Height (pixels) to resize saved snapshots to; leave empty to preserve original size."
|
||||
},
|
||||
"retain": {
|
||||
"label": "Snapshot retention",
|
||||
"description": "Retention settings for saved snapshots including default days and per-object overrides.",
|
||||
"default": {
|
||||
"label": "Default retention",
|
||||
"description": "Default number of days to retain snapshots."
|
||||
},
|
||||
"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)."
|
||||
},
|
||||
"objects": {
|
||||
"label": "Object retention",
|
||||
"description": "Per-object overrides for snapshot retention days."
|
||||
}
|
||||
},
|
||||
"quality": {
|
||||
"label": "JPEG quality",
|
||||
"description": "JPEG encode quality for saved snapshots (0-100)."
|
||||
}
|
||||
}
|
||||
@ -1,32 +0,0 @@
|
||||
{
|
||||
"label": "Telemetry",
|
||||
"description": "System telemetry and stats options including GPU and network bandwidth monitoring.",
|
||||
"network_interfaces": {
|
||||
"label": "Network interfaces",
|
||||
"description": "List of network interface name prefixes to monitor for bandwidth statistics."
|
||||
},
|
||||
"stats": {
|
||||
"label": "System stats",
|
||||
"description": "Options to enable/disable collection of various system and GPU statistics.",
|
||||
"amd_gpu_stats": {
|
||||
"label": "AMD GPU stats",
|
||||
"description": "Enable collection of AMD GPU statistics if an AMD GPU is present."
|
||||
},
|
||||
"intel_gpu_stats": {
|
||||
"label": "Intel GPU stats",
|
||||
"description": "Enable collection of Intel GPU statistics if an Intel GPU is present."
|
||||
},
|
||||
"network_bandwidth": {
|
||||
"label": "Network bandwidth",
|
||||
"description": "Enable per-process network bandwidth monitoring for camera ffmpeg processes and detectors (requires capabilities)."
|
||||
},
|
||||
"intel_gpu_device": {
|
||||
"label": "SR-IOV device",
|
||||
"description": "Device identifier used when treating Intel GPUs as SR-IOV to fix GPU stats."
|
||||
}
|
||||
},
|
||||
"version_check": {
|
||||
"label": "Version check",
|
||||
"description": "Enable an outbound check to detect if a newer Frigate version is available."
|
||||
}
|
||||
}
|
||||
@ -1,36 +0,0 @@
|
||||
{
|
||||
"label": "Timestamp style",
|
||||
"description": "Styling options for in-feed timestamps applied to recordings and snapshots.",
|
||||
"position": {
|
||||
"label": "Timestamp position",
|
||||
"description": "Position of the timestamp on the image (tl/tr/bl/br)."
|
||||
},
|
||||
"format": {
|
||||
"label": "Timestamp format",
|
||||
"description": "Datetime format string used for timestamps (Python datetime format codes)."
|
||||
},
|
||||
"color": {
|
||||
"label": "Timestamp color",
|
||||
"description": "RGB color values for the timestamp text (all values 0-255).",
|
||||
"red": {
|
||||
"label": "Red",
|
||||
"description": "Red component (0-255) for timestamp color."
|
||||
},
|
||||
"green": {
|
||||
"label": "Green",
|
||||
"description": "Green component (0-255) for timestamp color."
|
||||
},
|
||||
"blue": {
|
||||
"label": "Blue",
|
||||
"description": "Blue component (0-255) for timestamp color."
|
||||
}
|
||||
},
|
||||
"thickness": {
|
||||
"label": "Timestamp thickness",
|
||||
"description": "Line thickness of the timestamp text."
|
||||
},
|
||||
"effect": {
|
||||
"label": "Timestamp effect",
|
||||
"description": "Visual effect for the timestamp text (none, solid, shadow)."
|
||||
}
|
||||
}
|
||||
@ -1,8 +0,0 @@
|
||||
{
|
||||
"label": "TLS",
|
||||
"description": "TLS settings for Frigate's web endpoints (port 8971).",
|
||||
"enabled": {
|
||||
"label": "Enable TLS",
|
||||
"description": "Enable TLS for Frigate's web UI and API on the configured TLS port."
|
||||
}
|
||||
}
|
||||
@ -1,24 +0,0 @@
|
||||
{
|
||||
"label": "UI",
|
||||
"description": "User interface preferences such as timezone, time/date formatting, and units.",
|
||||
"timezone": {
|
||||
"label": "Timezone",
|
||||
"description": "Optional timezone to display across the UI (defaults to browser local time if unset)."
|
||||
},
|
||||
"time_format": {
|
||||
"label": "Time format",
|
||||
"description": "Time format to use in the UI (browser, 12hour, or 24hour)."
|
||||
},
|
||||
"date_style": {
|
||||
"label": "Date style",
|
||||
"description": "Date style to use in the UI (full, long, medium, short)."
|
||||
},
|
||||
"time_style": {
|
||||
"label": "Time style",
|
||||
"description": "Time style to use in the UI (full, long, medium, short)."
|
||||
},
|
||||
"unit_system": {
|
||||
"label": "Unit system",
|
||||
"description": "Unit system for display (metric or imperial) used in the UI and MQTT."
|
||||
}
|
||||
}
|
||||
@ -1,4 +0,0 @@
|
||||
{
|
||||
"label": "Current config version",
|
||||
"description": "Numeric or string version of the active configuration to help detect migrations or format changes."
|
||||
}
|
||||
@ -5,7 +5,6 @@ import { createConfigSection } from "./BaseSection";
|
||||
|
||||
export const AudioSection = createConfigSection({
|
||||
sectionPath: "audio",
|
||||
i18nNamespace: "config/global",
|
||||
defaultConfig: {
|
||||
fieldOrder: [
|
||||
"enabled",
|
||||
|
||||
@ -5,7 +5,6 @@ import { createConfigSection } from "./BaseSection";
|
||||
|
||||
export const AudioTranscriptionSection = createConfigSection({
|
||||
sectionPath: "audio_transcription",
|
||||
i18nNamespace: "config/global",
|
||||
defaultConfig: {
|
||||
fieldOrder: ["enabled", "language", "device", "model_size", "live_enabled"],
|
||||
hiddenFields: ["enabled_in_config"],
|
||||
|
||||
@ -81,8 +81,6 @@ export interface BaseSectionProps {
|
||||
export interface CreateSectionOptions {
|
||||
/** The config path for this section (e.g., "detect", "record") */
|
||||
sectionPath: string;
|
||||
/** i18n namespace for this section (e.g., "config/detect") */
|
||||
i18nNamespace: string;
|
||||
/** Default section configuration */
|
||||
defaultConfig: SectionConfig;
|
||||
}
|
||||
@ -92,7 +90,6 @@ export interface CreateSectionOptions {
|
||||
*/
|
||||
export function createConfigSection({
|
||||
sectionPath,
|
||||
i18nNamespace,
|
||||
defaultConfig,
|
||||
}: CreateSectionOptions) {
|
||||
const cameraUpdateTopicMap: Record<string, string> = {
|
||||
@ -131,7 +128,7 @@ export function createConfigSection({
|
||||
showTitle,
|
||||
}: BaseSectionProps) {
|
||||
const { t, i18n } = useTranslation([
|
||||
i18nNamespace,
|
||||
level === "camera" ? "config/cameras" : "config/global",
|
||||
"config/cameras",
|
||||
"views/settings",
|
||||
"common",
|
||||
|
||||
@ -5,7 +5,6 @@ import { createConfigSection } from "./BaseSection";
|
||||
|
||||
export const BirdseyeSection = createConfigSection({
|
||||
sectionPath: "birdseye",
|
||||
i18nNamespace: "config/global",
|
||||
defaultConfig: {
|
||||
fieldOrder: ["enabled", "mode", "order"],
|
||||
hiddenFields: [],
|
||||
|
||||
@ -5,7 +5,6 @@ import { createConfigSection } from "./BaseSection";
|
||||
|
||||
export const CameraMqttSection = createConfigSection({
|
||||
sectionPath: "mqtt",
|
||||
i18nNamespace: "config/global",
|
||||
defaultConfig: {
|
||||
fieldOrder: [
|
||||
"enabled",
|
||||
|
||||
@ -5,7 +5,6 @@ import { createConfigSection } from "./BaseSection";
|
||||
|
||||
export const CameraUiSection = createConfigSection({
|
||||
sectionPath: "ui",
|
||||
i18nNamespace: "config/global",
|
||||
defaultConfig: {
|
||||
fieldOrder: ["dashboard", "order"],
|
||||
hiddenFields: [],
|
||||
|
||||
@ -5,7 +5,6 @@ import { createConfigSection } from "./BaseSection";
|
||||
|
||||
export const DetectSection = createConfigSection({
|
||||
sectionPath: "detect",
|
||||
i18nNamespace: "config/global",
|
||||
defaultConfig: {
|
||||
fieldOrder: [
|
||||
"enabled",
|
||||
|
||||
@ -5,7 +5,6 @@ import { createConfigSection } from "./BaseSection";
|
||||
|
||||
export const FaceRecognitionSection = createConfigSection({
|
||||
sectionPath: "face_recognition",
|
||||
i18nNamespace: "config/global",
|
||||
defaultConfig: {
|
||||
fieldOrder: ["enabled", "min_area"],
|
||||
hiddenFields: [],
|
||||
|
||||
@ -5,7 +5,6 @@ import { createConfigSection } from "./BaseSection";
|
||||
|
||||
export const FfmpegSection = createConfigSection({
|
||||
sectionPath: "ffmpeg",
|
||||
i18nNamespace: "config/global",
|
||||
defaultConfig: {
|
||||
fieldOrder: [
|
||||
"inputs",
|
||||
|
||||
@ -5,7 +5,6 @@ import { createConfigSection } from "./BaseSection";
|
||||
|
||||
export const LiveSection = createConfigSection({
|
||||
sectionPath: "live",
|
||||
i18nNamespace: "config/global",
|
||||
defaultConfig: {
|
||||
fieldOrder: ["stream_name", "height", "quality"],
|
||||
fieldGroups: {},
|
||||
|
||||
@ -5,7 +5,6 @@ import { createConfigSection } from "./BaseSection";
|
||||
|
||||
export const LprSection = createConfigSection({
|
||||
sectionPath: "lpr",
|
||||
i18nNamespace: "config/global",
|
||||
defaultConfig: {
|
||||
fieldOrder: ["enabled", "expire_time", "min_area", "enhancement"],
|
||||
hiddenFields: [],
|
||||
|
||||
@ -5,7 +5,6 @@ import { createConfigSection } from "./BaseSection";
|
||||
|
||||
export const MotionSection = createConfigSection({
|
||||
sectionPath: "motion",
|
||||
i18nNamespace: "config/global",
|
||||
defaultConfig: {
|
||||
fieldOrder: [
|
||||
"enabled",
|
||||
|
||||
@ -5,7 +5,6 @@ import { createConfigSection } from "./BaseSection";
|
||||
|
||||
export const NotificationsSection = createConfigSection({
|
||||
sectionPath: "notifications",
|
||||
i18nNamespace: "config/global",
|
||||
defaultConfig: {
|
||||
fieldOrder: ["enabled", "email"],
|
||||
fieldGroups: {},
|
||||
|
||||
@ -5,7 +5,6 @@ import { createConfigSection } from "./BaseSection";
|
||||
|
||||
export const ObjectsSection = createConfigSection({
|
||||
sectionPath: "objects",
|
||||
i18nNamespace: "config/global",
|
||||
defaultConfig: {
|
||||
fieldOrder: ["track", "alert", "detect", "filters"],
|
||||
fieldGroups: {
|
||||
|
||||
@ -5,7 +5,6 @@ import { createConfigSection } from "./BaseSection";
|
||||
|
||||
export const OnvifSection = createConfigSection({
|
||||
sectionPath: "onvif",
|
||||
i18nNamespace: "config/global",
|
||||
defaultConfig: {
|
||||
fieldOrder: [
|
||||
"host",
|
||||
|
||||
@ -5,7 +5,6 @@ import { createConfigSection } from "./BaseSection";
|
||||
|
||||
export const RecordSection = createConfigSection({
|
||||
sectionPath: "record",
|
||||
i18nNamespace: "config/global",
|
||||
defaultConfig: {
|
||||
fieldOrder: [
|
||||
"enabled",
|
||||
|
||||
@ -5,7 +5,6 @@ import { createConfigSection } from "./BaseSection";
|
||||
|
||||
export const ReviewSection = createConfigSection({
|
||||
sectionPath: "review",
|
||||
i18nNamespace: "config/global",
|
||||
defaultConfig: {
|
||||
fieldOrder: ["alerts", "detections", "genai"],
|
||||
fieldGroups: {},
|
||||
|
||||
@ -5,7 +5,6 @@ import { createConfigSection } from "./BaseSection";
|
||||
|
||||
export const SemanticSearchSection = createConfigSection({
|
||||
sectionPath: "semantic_search",
|
||||
i18nNamespace: "config/global",
|
||||
defaultConfig: {
|
||||
fieldOrder: ["triggers"],
|
||||
hiddenFields: [],
|
||||
|
||||
@ -5,7 +5,6 @@ import { createConfigSection } from "./BaseSection";
|
||||
|
||||
export const SnapshotsSection = createConfigSection({
|
||||
sectionPath: "snapshots",
|
||||
i18nNamespace: "config/global",
|
||||
defaultConfig: {
|
||||
fieldOrder: [
|
||||
"enabled",
|
||||
|
||||
@ -5,7 +5,6 @@ import { createConfigSection } from "./BaseSection";
|
||||
|
||||
export const TimestampSection = createConfigSection({
|
||||
sectionPath: "timestamp_style",
|
||||
i18nNamespace: "config/global",
|
||||
defaultConfig: {
|
||||
fieldOrder: ["position", "format", "color", "thickness"],
|
||||
hiddenFields: ["effect", "enabled_in_config"],
|
||||
|
||||
@ -11,13 +11,9 @@ export function DescriptionFieldTemplate(props: DescriptionFieldProps) {
|
||||
|
||||
const isCameraLevel = formContext?.level === "camera";
|
||||
const sectionI18nPrefix = formContext?.sectionI18nPrefix;
|
||||
const i18nNamespace = formContext?.i18nNamespace;
|
||||
const effectiveNamespace = isCameraLevel ? "config/cameras" : i18nNamespace;
|
||||
const effectiveNamespace = isCameraLevel ? "config/cameras" : "config/global";
|
||||
|
||||
const { t, i18n } = useTranslation([
|
||||
effectiveNamespace || i18nNamespace || "common",
|
||||
i18nNamespace || "common",
|
||||
]);
|
||||
const { t, i18n } = useTranslation([effectiveNamespace, "common"]);
|
||||
|
||||
let resolvedDescription = description;
|
||||
|
||||
|
||||
@ -69,14 +69,11 @@ export function ObjectFieldTemplate(props: ObjectFieldTemplateProps) {
|
||||
const [isOpen, setIsOpen] = useState(true);
|
||||
|
||||
const isCameraLevel = formContext?.level === "camera";
|
||||
const effectiveNamespace = isCameraLevel
|
||||
? "config/cameras"
|
||||
: formContext?.i18nNamespace;
|
||||
const effectiveNamespace = isCameraLevel ? "config/cameras" : "config/global";
|
||||
const sectionI18nPrefix = formContext?.sectionI18nPrefix;
|
||||
|
||||
const { t, i18n } = useTranslation([
|
||||
effectiveNamespace || formContext?.i18nNamespace || "common",
|
||||
formContext?.i18nNamespace || "common",
|
||||
effectiveNamespace,
|
||||
"config/groups",
|
||||
"common",
|
||||
]);
|
||||
|
||||
@ -52,10 +52,8 @@ i18n
|
||||
"views/system",
|
||||
"views/exports",
|
||||
"views/explore",
|
||||
// Config namespaces: single consolidated global file + camera-level keys
|
||||
"config/global",
|
||||
"config/cameras",
|
||||
// keep these for backwards compatibility with explicit ns usage
|
||||
"config/validation",
|
||||
"config/groups",
|
||||
],
|
||||
|
||||
@ -203,98 +203,81 @@ const CameraConfigContent = memo(function CameraConfigContent({
|
||||
|
||||
const sections: Array<{
|
||||
key: string;
|
||||
i18nNamespace: string;
|
||||
component: typeof DetectSection;
|
||||
showOverrideIndicator?: boolean;
|
||||
}> = [
|
||||
{
|
||||
key: "detect",
|
||||
i18nNamespace: "config/cameras",
|
||||
component: DetectSection,
|
||||
},
|
||||
{
|
||||
key: "ffmpeg",
|
||||
i18nNamespace: "config/cameras",
|
||||
component: FfmpegSection,
|
||||
showOverrideIndicator: true,
|
||||
},
|
||||
{
|
||||
key: "record",
|
||||
i18nNamespace: "config/cameras",
|
||||
component: RecordSection,
|
||||
},
|
||||
{
|
||||
key: "snapshots",
|
||||
i18nNamespace: "config/cameras",
|
||||
component: SnapshotsSection,
|
||||
},
|
||||
{
|
||||
key: "motion",
|
||||
i18nNamespace: "config/cameras",
|
||||
component: MotionSection,
|
||||
},
|
||||
{
|
||||
key: "objects",
|
||||
i18nNamespace: "config/cameras",
|
||||
component: ObjectsSection,
|
||||
},
|
||||
{
|
||||
key: "review",
|
||||
i18nNamespace: "config/cameras",
|
||||
component: ReviewSection,
|
||||
},
|
||||
{ key: "audio", i18nNamespace: "config/cameras", component: AudioSection },
|
||||
{ key: "audio", component: AudioSection },
|
||||
{
|
||||
key: "audio_transcription",
|
||||
i18nNamespace: "config/cameras",
|
||||
component: AudioTranscriptionSection,
|
||||
showOverrideIndicator: true,
|
||||
},
|
||||
{
|
||||
key: "notifications",
|
||||
i18nNamespace: "config/cameras",
|
||||
component: NotificationsSection,
|
||||
},
|
||||
{ key: "live", i18nNamespace: "config/cameras", component: LiveSection },
|
||||
{ key: "live", component: LiveSection },
|
||||
{
|
||||
key: "birdseye",
|
||||
i18nNamespace: "config/cameras",
|
||||
component: BirdseyeSection,
|
||||
showOverrideIndicator: true,
|
||||
},
|
||||
{
|
||||
key: "face_recognition",
|
||||
i18nNamespace: "config/cameras",
|
||||
component: FaceRecognitionSection,
|
||||
showOverrideIndicator: true,
|
||||
},
|
||||
{
|
||||
key: "lpr",
|
||||
i18nNamespace: "config/cameras",
|
||||
component: LprSection,
|
||||
showOverrideIndicator: true,
|
||||
},
|
||||
{
|
||||
key: "mqtt",
|
||||
i18nNamespace: "config/cameras",
|
||||
component: CameraMqttSection,
|
||||
showOverrideIndicator: false,
|
||||
},
|
||||
{
|
||||
key: "onvif",
|
||||
i18nNamespace: "config/cameras",
|
||||
component: OnvifSection,
|
||||
showOverrideIndicator: false,
|
||||
},
|
||||
{
|
||||
key: "ui",
|
||||
i18nNamespace: "config/cameras",
|
||||
component: CameraUiSection,
|
||||
showOverrideIndicator: false,
|
||||
},
|
||||
{
|
||||
key: "timestamp_style",
|
||||
i18nNamespace: "config/cameras",
|
||||
component: TimestampSection,
|
||||
},
|
||||
];
|
||||
|
||||
@ -30,25 +30,22 @@ import { cn } from "@/lib/utils";
|
||||
|
||||
// Shared sections that can be overridden at camera level
|
||||
const sharedSections = [
|
||||
{ key: "detect", i18nNamespace: "config/global", component: DetectSection },
|
||||
{ key: "record", i18nNamespace: "config/global", component: RecordSection },
|
||||
{ key: "detect", component: DetectSection },
|
||||
{ key: "record", component: RecordSection },
|
||||
{
|
||||
key: "snapshots",
|
||||
i18nNamespace: "config/global",
|
||||
component: SnapshotsSection,
|
||||
},
|
||||
{ key: "motion", i18nNamespace: "config/global", component: MotionSection },
|
||||
{ key: "motion", component: MotionSection },
|
||||
{
|
||||
key: "objects",
|
||||
i18nNamespace: "config/global",
|
||||
component: ObjectsSection,
|
||||
},
|
||||
{ key: "review", i18nNamespace: "config/global", component: ReviewSection },
|
||||
{ key: "audio", i18nNamespace: "config/global", component: AudioSection },
|
||||
{ key: "live", i18nNamespace: "config/global", component: LiveSection },
|
||||
{ key: "review", component: ReviewSection },
|
||||
{ key: "audio", component: AudioSection },
|
||||
{ key: "live", component: LiveSection },
|
||||
{
|
||||
key: "timestamp_style",
|
||||
i18nNamespace: "config/global",
|
||||
component: TimestampSection,
|
||||
},
|
||||
];
|
||||
@ -61,12 +58,10 @@ const globalSectionConfigs: Record<
|
||||
hiddenFields?: string[];
|
||||
advancedFields?: string[];
|
||||
liveValidate?: boolean;
|
||||
i18nNamespace: string;
|
||||
uiSchema?: Record<string, unknown>;
|
||||
}
|
||||
> = {
|
||||
mqtt: {
|
||||
i18nNamespace: "config/global",
|
||||
fieldOrder: [
|
||||
"enabled",
|
||||
"host",
|
||||
@ -93,12 +88,10 @@ const globalSectionConfigs: Record<
|
||||
liveValidate: true,
|
||||
},
|
||||
database: {
|
||||
i18nNamespace: "config/global",
|
||||
fieldOrder: ["path"],
|
||||
advancedFields: [],
|
||||
},
|
||||
auth: {
|
||||
i18nNamespace: "config/global",
|
||||
fieldOrder: [
|
||||
"enabled",
|
||||
"reset_admin_password",
|
||||
@ -130,17 +123,14 @@ const globalSectionConfigs: Record<
|
||||
},
|
||||
},
|
||||
tls: {
|
||||
i18nNamespace: "config/global",
|
||||
fieldOrder: ["enabled", "cert", "key"],
|
||||
advancedFields: [],
|
||||
},
|
||||
networking: {
|
||||
i18nNamespace: "config/global",
|
||||
fieldOrder: ["ipv6"],
|
||||
advancedFields: [],
|
||||
},
|
||||
proxy: {
|
||||
i18nNamespace: "config/global",
|
||||
fieldOrder: [
|
||||
"header_map",
|
||||
"logout_url",
|
||||
@ -152,7 +142,6 @@ const globalSectionConfigs: Record<
|
||||
liveValidate: true,
|
||||
},
|
||||
ui: {
|
||||
i18nNamespace: "config/global",
|
||||
fieldOrder: [
|
||||
"timezone",
|
||||
"time_format",
|
||||
@ -163,22 +152,18 @@ const globalSectionConfigs: Record<
|
||||
advancedFields: [],
|
||||
},
|
||||
logger: {
|
||||
i18nNamespace: "config/global",
|
||||
fieldOrder: ["default", "logs"],
|
||||
advancedFields: ["logs"],
|
||||
},
|
||||
environment_vars: {
|
||||
i18nNamespace: "config/global",
|
||||
fieldOrder: [],
|
||||
advancedFields: [],
|
||||
},
|
||||
telemetry: {
|
||||
i18nNamespace: "config/global",
|
||||
fieldOrder: ["network_interfaces", "stats", "version_check"],
|
||||
advancedFields: [],
|
||||
},
|
||||
birdseye: {
|
||||
i18nNamespace: "config/global",
|
||||
fieldOrder: [
|
||||
"enabled",
|
||||
"restream",
|
||||
@ -193,7 +178,6 @@ const globalSectionConfigs: Record<
|
||||
advancedFields: ["width", "height", "quality", "inactivity_threshold"],
|
||||
},
|
||||
ffmpeg: {
|
||||
i18nNamespace: "config/global",
|
||||
fieldOrder: [
|
||||
"path",
|
||||
"global_args",
|
||||
@ -253,12 +237,10 @@ const globalSectionConfigs: Record<
|
||||
},
|
||||
},
|
||||
detectors: {
|
||||
i18nNamespace: "config/global",
|
||||
fieldOrder: [],
|
||||
advancedFields: [],
|
||||
},
|
||||
model: {
|
||||
i18nNamespace: "config/global",
|
||||
fieldOrder: [
|
||||
"path",
|
||||
"labelmap_path",
|
||||
@ -278,7 +260,6 @@ const globalSectionConfigs: Record<
|
||||
hiddenFields: ["labelmap", "attributes_map"],
|
||||
},
|
||||
genai: {
|
||||
i18nNamespace: "config/global",
|
||||
fieldOrder: [
|
||||
"provider",
|
||||
"api_key",
|
||||
@ -291,22 +272,18 @@ const globalSectionConfigs: Record<
|
||||
hiddenFields: ["genai.enabled_in_config"],
|
||||
},
|
||||
classification: {
|
||||
i18nNamespace: "config/global",
|
||||
hiddenFields: ["custom"],
|
||||
advancedFields: [],
|
||||
},
|
||||
semantic_search: {
|
||||
i18nNamespace: "config/global",
|
||||
fieldOrder: ["enabled", "reindex", "model", "model_size", "device"],
|
||||
advancedFields: ["reindex", "device"],
|
||||
},
|
||||
audio_transcription: {
|
||||
i18nNamespace: "config/global",
|
||||
fieldOrder: ["enabled", "language", "device", "model_size", "live_enabled"],
|
||||
advancedFields: ["language", "device", "model_size"],
|
||||
},
|
||||
face_recognition: {
|
||||
i18nNamespace: "config/global",
|
||||
fieldOrder: [
|
||||
"enabled",
|
||||
"model_size",
|
||||
@ -331,7 +308,6 @@ const globalSectionConfigs: Record<
|
||||
],
|
||||
},
|
||||
lpr: {
|
||||
i18nNamespace: "config/global",
|
||||
fieldOrder: [
|
||||
"enabled",
|
||||
"model_size",
|
||||
@ -406,11 +382,7 @@ function GlobalConfigSection({
|
||||
title,
|
||||
}: GlobalConfigSectionProps) {
|
||||
const sectionConfig = globalSectionConfigs[sectionKey];
|
||||
const { t } = useTranslation([
|
||||
sectionConfig?.i18nNamespace || "common",
|
||||
"views/settings",
|
||||
"common",
|
||||
]);
|
||||
const { t } = useTranslation(["config/global", "views/settings", "common"]);
|
||||
const [pendingData, setPendingData] = useState<unknown | null>(null);
|
||||
const [isSaving, setIsSaving] = useState(false);
|
||||
const [formKey, setFormKey] = useState(0);
|
||||
@ -522,8 +494,8 @@ function GlobalConfigSection({
|
||||
liveValidate={sectionConfig.liveValidate}
|
||||
uiSchema={sectionConfig.uiSchema}
|
||||
showSubmit={false}
|
||||
formContext={{ sectionI18nPrefix: sectionKey }}
|
||||
i18nNamespace="config/global"
|
||||
formContext={{ level: "global", sectionI18nPrefix: sectionKey }}
|
||||
disabled={isSaving}
|
||||
/>
|
||||
|
||||
@ -585,13 +557,11 @@ export default function GlobalConfigView() {
|
||||
} else if (activeTab === "system") {
|
||||
return systemSections.map((key) => ({
|
||||
key,
|
||||
i18nNamespace: globalSectionConfigs[key].i18nNamespace,
|
||||
component: null, // Uses GlobalConfigSection instead
|
||||
}));
|
||||
} else {
|
||||
return integrationSections.map((key) => ({
|
||||
key,
|
||||
i18nNamespace: globalSectionConfigs[key].i18nNamespace,
|
||||
component: null,
|
||||
}));
|
||||
}
|
||||
@ -721,21 +691,12 @@ export default function GlobalConfigView() {
|
||||
{activeTab === "system" && (
|
||||
<>
|
||||
{systemSections.map((sectionKey) => {
|
||||
const ns = globalSectionConfigs[sectionKey].i18nNamespace;
|
||||
const sectionTitle =
|
||||
ns === "config/global"
|
||||
? t(`${sectionKey}.label`, {
|
||||
ns: "config/global",
|
||||
defaultValue:
|
||||
sectionKey.charAt(0).toUpperCase() +
|
||||
sectionKey.slice(1).replace(/_/g, " "),
|
||||
})
|
||||
: t("label", {
|
||||
ns,
|
||||
defaultValue:
|
||||
sectionKey.charAt(0).toUpperCase() +
|
||||
sectionKey.slice(1).replace(/_/g, " "),
|
||||
});
|
||||
const sectionTitle = t(`${sectionKey}.label`, {
|
||||
ns: "config/global",
|
||||
defaultValue:
|
||||
sectionKey.charAt(0).toUpperCase() +
|
||||
sectionKey.slice(1).replace(/_/g, " "),
|
||||
});
|
||||
|
||||
return (
|
||||
<div
|
||||
@ -760,21 +721,12 @@ export default function GlobalConfigView() {
|
||||
{activeTab === "integrations" && (
|
||||
<>
|
||||
{integrationSections.map((sectionKey) => {
|
||||
const ns = globalSectionConfigs[sectionKey].i18nNamespace;
|
||||
const sectionTitle =
|
||||
ns === "config/global"
|
||||
? t(`${sectionKey}.label`, {
|
||||
ns: "config/global",
|
||||
defaultValue:
|
||||
sectionKey.charAt(0).toUpperCase() +
|
||||
sectionKey.slice(1).replace(/_/g, " "),
|
||||
})
|
||||
: t("label", {
|
||||
ns,
|
||||
defaultValue:
|
||||
sectionKey.charAt(0).toUpperCase() +
|
||||
sectionKey.slice(1).replace(/_/g, " "),
|
||||
});
|
||||
const sectionTitle = t(`${sectionKey}.label`, {
|
||||
ns: "config/global",
|
||||
defaultValue:
|
||||
sectionKey.charAt(0).toUpperCase() +
|
||||
sectionKey.slice(1).replace(/_/g, " "),
|
||||
});
|
||||
|
||||
return (
|
||||
<div
|
||||
|
||||
Loading…
Reference in New Issue
Block a user