* add CameraProfileConfig model for named config overrides
* add profiles field to CameraConfig
* add active_profile field to FrigateConfig
Runtime-only field excluded from YAML serialization, tracks which
profile is currently active.
* add ProfileManager for profile activation and persistence
Handles snapshotting base configs, applying profile overrides via
deep_merge + apply_section_update, publishing ZMQ updates, and
persisting active profile to /config/.active_profile.
* add profile API endpoints (GET /profiles, GET/PUT /profile)
* add MQTT and dispatcher integration for profiles
- Subscribe to frigate/profile/set MQTT topic
- Publish profile/state and profiles/available on connect
- Add _on_profile_command handler to dispatcher
- Broadcast active profile state on WebSocket connect
* wire ProfileManager into app startup and FastAPI
- Create ProfileManager after dispatcher init
- Restore persisted profile on startup
- Pass dispatcher and profile_manager to FastAPI app
* add tests for invalid profile values and keys
Tests that Pydantic rejects: invalid field values (fps: "not_a_number"),
unknown section keys (ffmpeg in profile), invalid nested values, and
invalid profiles in full config parsing.
* formatting
* fix CameraLiveConfig JSON serialization error on profile activation
refactor _publish_updates to only publish ZMQ updates for
sections that actually changed, not all sections on affected cameras.
* consolidate
* add enabled field to camera profiles for enabling/disabling cameras
* add zones support to camera profiles
* add frontend profile types, color utility, and config save support
* add profile state management and save preview support
* add profileName prop to BaseSection for profile-aware config editing
* add profile section dropdown and wire into camera settings pages
* add per-profile camera enable/disable to Camera Management view
* add profiles summary page with card-based layout and fix backend zone comparison bug
* add active profile badge to settings toolbar
* i18n
* add red dot for any pending changes including profiles
* profile support for mask and zone editor
* fix hidden field validation errors caused by lodash wildcard and schema gaps
lodash unset does not support wildcard (*) segments, so hidden fields like
filters.*.mask were never stripped from form data, leaving null raw_coordinates
that fail RJSF anyOf validation. Add unsetWithWildcard helper and also strip
hidden fields from the JSON schema itself as defense-in-depth.
* add face_recognition and lpr to profile-eligible sections
* move profile dropdown from section panes to settings header
* add profiles enable toggle and improve empty state
* formatting
* tweaks
* tweak colors and switch
* fix profile save diff, masksAndZones delete, and config sync
* ui tweaks
* ensure profile manager gets updated config
* rename profile settings to ui settings
* refactor profilesview and add dots/border colors when overridden
* implement an update_config method for profile manager
* fix mask deletion
* more unique colors
* add top-level profiles config section with friendly names
* implement profile friendly names and improve profile UI
- Add ProfileDefinitionConfig type and profiles field to FrigateConfig
- Use ProfilesApiResponse type with friendly_name support throughout
- Replace Record<string, unknown> with proper JsonObject/JsonValue types
- Add profile creation form matching zone pattern (Zod + NameAndIdFields)
- Add pencil icon for renaming profile friendly names in ProfilesView
- Move Profiles menu item to first under Camera Configuration
- Add activity indicators on save/rename/delete buttons
- Display friendly names in CameraManagementView profile selector
- Fix duplicate colored dots in management profile dropdown
- Fix i18n namespace for overridden base config tooltips
- Move profile override deletion from dropdown trash icon to footer
button with confirmation dialog, matching Reset to Global pattern
- Remove Add Profile from section header dropdown to prevent saving
camera overrides before top-level profile definition exists
- Clean up newProfiles state after API profile deletion
- Refresh profiles SWR cache after saving profile definitions
* remove profile badge in settings and add profiles to main menu
* use icon only on mobile
* change color order
* docs
* show activity indicator on trash icon while deleting a profile
* tweak language
* immediately create profiles on backend instead of deferring to Save All
* hide restart-required fields when editing a profile section
fields that require a restart cannot take effect via profile switching,
so they are merged into hiddenFields when profileName is set
* show active profile indicator in desktop status bar
* fix profile config inheritance bug where Pydantic defaults override base values
The /config API was dumping profile overrides with model_dump() which included
all Pydantic defaults. When the frontend merged these over
the camera's base config, explicitly-set base values were
lost. Now profile overrides are re-dumped with exclude_unset=True so only
user-specified fields are returned.
Also fixes the Save All path generating spurious deletion markers for
restart-required fields that are hidden during profile
editing but not excluded from the raw data sanitization in
prepareSectionSavePayload.
* docs tweaks
* docs tweak
* formatting
* formatting
* fix typing
* fix test pollution
test_maintainer was injecting MagicMock() into sys.modules["frigate.config.camera.updater"] at module load time and never restoring it. When the profile tests later imported CameraConfigUpdateEnum and CameraConfigUpdateTopic from that module, they got mock objects instead of the real dataclass/enum, so equality comparisons always failed
* remove
* fix settings showing profile-merged values when editing base config
When a profile is active, the in-memory config contains effective
(profile-merged) values. The settings UI was displaying these merged
values even when the "Base Config" view was selected.
Backend: snapshot pre-profile base configs in ProfileManager and expose
them via a `base_config` key in the /api/config camera response when a
profile is active. The top-level sections continue to reflect the
effective running config.
Frontend: read from `base_config` when available in BaseSection,
useConfigOverride, useAllCameraOverrides, and prepareSectionSavePayload.
Include formData labels in Object/Audio switches widgets so that labels
added only by a profile override remain visible when editing that profile.
* use rasterized_mask as field
makes it easier to exclude from the schema with exclude=True
prevents leaking of the field when using model_dump for profiles
* fix zones
- Fix zone colors not matching across profiles by falling back to base zone color when profile zone data lacks a color field
- Use base_config for base-layer values in masks/zones view so profile-merged values don't pollute the base config editing view
- Handle zones separately in profile manager snapshot/restore since ZoneConfig requires special serialization (color as private attr, contour generation)
- Inherit base zone color and generate contours for profile zone overrides in profile manager
* formatting
* don't require restart for camera enabled change for profiles
* publish camera state when changing profiles
* formatting
* remove available profiles from mqtt
* improve typing
* add shm frame lifetime calculation and update UI for shared memory metrics
* consistent sizing on activity indicator in save buttons
* fix offline overlay overflowing on mobile when in grid mode
* migrator and runtime config changes
* component changes to use rasterized_mask
* frontend
* convert none to empty string for config save
* i18n
* update tests
* add enabled config to zones
* zones frontend
* i18n
* docs
* tweaks
* use dashed stroke to indicate disabled
* allow toggle from icon
* use filelock to ensure atomic config updates from endpoint
* enforce atomic config update in the frontend
* toggle via mqtt
* fix global object masks
* correctly handle global object masks in dispatcher
* ws hooks
* render masks and zones based on ws enabled state
* use enabled_in_config for zones and masks
* frontend for enabled_in_config
* tweaks
* i18n
* publish websocket on config save
* i18n tweaks
* pydantic title and description
* i18n generation
* tweaks
* fix typing
* Fix saving zone friendly name when it wasn't set
* Fix UTF-8 handling for Onvif
* Don't remove none directory for classes
* Lookup all event IDs for review item immediately
* Cleanup typing
* Only fetch events when review group is open
* Cleanup
* disable debug paths switch for autotracking cameras
* fix clickable birdseye
---------
Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
* show id field when editing zone
* improve zone capitalization
* Update NPU models and docs
* fix mobilepage in tracked object details
* Use thread lock for openvino to avoid concurrent requests with JinaV2
* fix hashing function to avoid collisions
* remove extra flex div causing overflow
* ensure header stays on top of video controls
* don't smart capitalize friendly names
* Fix incorrect object classification crop
* don't display submit to plus if object doesn't have a snapshot
* check for snapshot and clip in actions menu
* frigate plus submission fix
still show frigate+ section if snapshot has already been submitted and run optimistic update, local state was being overridden
* Don't fail to show 0% when showing classification
* Don't fail on file system error
* Improve title and description for review genai
* fix overflowing truncated review item description in detail stream
* catch events with review items that start after the first timeline entry
review items may start later than events within them, so subtract a padding from the start time in the filter so the start of events are not incorrectly filtered out of the list in the detail stream
* also pad on review end_time
* fix
* change order of timeline zoom buttons on mobile
* use grid to ensure genai title does not cause overflow
* small tweaks
* Cleanup
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* feat: add zones friendly name
* fix: fix the issue where the input field was empty when there was no friendly_name
* chore: fix the issue where the friendly name would replace spaces with underscores
* docs: update zones docs
* Update web/src/components/settings/ZoneEditPane.tsx
Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
* Add friendly_name option for zone configuration
Added optional friendly name for zones in configuration.
* fix: fix the logical error in the null/empty check for the polygons parameter
* fix: remove the toast name for zones will use the friendly_name instead
* docs: remove emoji tips
* revert: revert zones doc ui tips
* Update docs/docs/configuration/zones.md
Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
* Update docs/docs/configuration/zones.md
Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
* Update docs/docs/configuration/zones.md
Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
* feat: add friendly zone names to tracking details and lifecycle item descriptions
* chore: lint fix
* refactor: add friendly zone names to timeline entries and clean up unused code
* refactor: add formatList
---------
Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
* Include config publisher in api
* Call update topic for passed topics
* Update zones dynamically
* Update zones internally
* Support zone and mask reset
* Handle updating objects config
* Don't put status for needing to restart Frigate
* Cleanup http tests
* Fix tests
* Object labels with spaces should use correct i18n keys
* Add Hungarian
* Ensure onvif move request has a valid speed before removing
When autotracking zooming is set to `disabled` (or is left out of the config), move_request["Speed"] may not exist, depending on the camera
* Add another frame cache debug log
* fix i18n keys
* hide disable from context menu for viewers
* Fix auto live check for default dashboard and camera groups
Disabling the Automatic Live View switch in Settings should prevent streaming from occurring. Overriding any settings in a camera group will override the global setting. The check here incorrectly always returned false instead of undefined.
* clarify hardware accelerated enrichments
* clarify
* add note about detect stream to face rec docs
* add note about low end Dahuas for autotracking
* Catch invalid face box / image
* Video tab tweaks
With the changes in https://github.com/blakeblackshear/frigate/pull/18220, the video tab in the Tracked Object Details pane now correctly trims the in-browser HLS video. Because of keyframes and record/detect stream differences, we can manually subtract a couple of seconds from the event start_time to ensure the first few frames aren't cut off from the video
* Clarify
* Don't use Migraphx by default
* Provide better support for running embeddings on GPU
* correctly join cameras
* Adjust blur confidence reduction
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* Catch error and show toast when failing to delete review items
* i18n keys
* add link to speed estimation docs in zone edit pane
* Implement reset of tracked object update for each camera
* Cleanup
* register mqtt callbacks for toggling alerts and detections
* clarify snapshots docs
* clarify semantic search reindexing
* add ukrainian
* adjust date granularity for last recording time
The api endpoint only returns granularity down to the day
* Add amd hardware
* fix crash in face library on initial start after enabling
* Fix recordings view for mobile landscape
The events view incorrectly was displaying two columns on landscape view and it only took up 20% of the screen width. Additionally, in landscape view the timeline was too wide (especially on iPads of various screen sizes) and would overlap the main video
* face rec overfitting instructions
* Clarify
* face docs
* clarify
* clarify
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* db migration
* db model
* assign admin role on password reset
* add role to jwt and api responses
* don't restrict api access for admins yet
* use json response
* frontend auth context
* update auth form for profile endpoint
* add access denied page
* add protected routes
* auth hook
* dialogs
* user settings view
* restrict viewer access to settings
* restrict camera functions for viewer role
* add password dialog to account menu
* spacing tweak
* migrator default to admin
* escape quotes in migrator
* ui tweaks
* tweaks
* colors
* colors
* fix merge conflict
* fix icons
* add api layer enforcement
* ui tweaks
* fix error message
* debug
* clean up
* remove print
* guard apis for admin only
* fix tests
* fix review tests
* use correct error responses from api in toasts
* add role to account menu
* config options
* metrics
* stop and restart ffmpeg processes
* dispatcher
* frontend websocket
* buttons for testing
* don't recreate log pipe
* add/remove cam from birdseye when enabling/disabling
* end all objects and send empty camera activity
* enable/disable switch in ui
* disable buttons when camera is disabled
* use enabled_in_config for some frontend checks
* tweaks
* handle settings pane with disabled cameras
* frontend tweaks
* change to debug log
* mqtt docs
* tweak
* ensure all ffmpeg processes are initially started
* clean up
* use zmq
* remove camera metrics
* remove camera metrics
* tweaks
* frontend tweaks
* utility functions
* backend config
* backend object speed tracking
* draw speed on debug view
* basic frontend zone editor
* remove line sorting
* fix types
* highlight line on canvas when entering value in zone edit pane
* rename vars and add validation
* ensure speed estimation is disabled when user adds more than 4 points
* pixel velocity in debug
* unit_system in config
* ability to define unit system in config
* save max speed to db
* frontend
* docs
* clarify docs
* utility functions
* backend config
* backend object speed tracking
* draw speed on debug view
* basic frontend zone editor
* remove line sorting
* fix types
* highlight line on canvas when entering value in zone edit pane
* rename vars and add validation
* ensure speed estimation is disabled when user adds more than 4 points
* pixel velocity in debug
* unit_system in config
* ability to define unit system in config
* save max speed to db
* frontend
* docs
* clarify docs
* fix duplicates from merge
* include max_estimated_speed in api responses
* add units to zone edit pane
* catch undefined
* add average speed
* clarify docs
* only track average speed when object is active
* rename vars
* ensure points and distances are ordered clockwise
* only store the last 10 speeds like score history
* remove max estimated speed
* update docs
* update docs
* fix point ordering
* improve readability
* docs inertia recommendation
* fix point ordering
* check object frame time
* add velocity angle to frontend
* docs clarity
* add frontend speed filter
* fix mqtt docs
* fix mqtt docs
* don't try to remove distances if they weren't already defined
* don't display estimates on debug view/snapshots if object is not in a speed tracking zone
* docs
* implement speed_threshold for zone presence
* docs for threshold
* better ground plane image
* improve image zone size
* add inertia to speed threshold example
* Object lifecycle pane
* fix thumbnails and annotation offset math
* snapshot endpoint height and format, yaml types, bugfixes
* clean up for new type
* use get_image_from_recording in recordings snapshot api
* make height optional
* Camera settings view for alerts/detections
* flxes, beautifying, zone renaming, clean up
* replace underscores with spaces in zone names
* replace underscores with spaces in labels
* use prettier-plugin-tailwindcss to keep class names organized
* use prettierrc file to ensure formatting on save works with vscode
* classname reorder with prettier-plugin-tailwindcss
* initial working konva
* working multi polygons
* multi zones
* clean up
* new zone dialog
* clean up
* relative coordinates and colors
* fix color order
* better motion tuner
* objects for zones
* progress
* merge dev
* edit pane
* motion and object masks
* filtering
* add objects and unsaved to type
* motion tuner, edit controls, tooltips
* object and motion edit panes
* polygon item component, switch color, object form, hover cards
* working zone edit pane
* working motion masks
* object masks and deletion of all types
* use FilterSwitch
* motion tuner fixes and tweaks
* clean up
* tweaks
* spaces in camera name
* tweaks
* allow dragging of points while drawing polygon
* turn off editing mode when switching camera
* limit interpolated coordinates and use crosshair cursor
* padding
* fix tooltip trigger for icons
* konva tweaks
* consolidate
* fix top menu items on mobile