Commit Graph

5413 Commits

Author SHA1 Message Date
Josh Hawkins
210d203fa4 fix mask deletion 2026-03-11 16:04:17 -05:00
Josh Hawkins
5c23555882 implement an update_config method for profile manager 2026-03-11 15:57:27 -05:00
Josh Hawkins
5ec1b1841c refactor profilesview and add dots/border colors when overridden 2026-03-11 15:51:29 -05:00
Josh Hawkins
33e4dddb3e rename profile settings to ui settings 2026-03-11 12:35:45 -05:00
Josh Hawkins
6dd8aa912e ensure profile manager gets updated config 2026-03-11 12:35:34 -05:00
Josh Hawkins
8072c991cd ui tweaks 2026-03-11 12:35:13 -05:00
Josh Hawkins
3cdb40610f fix profile save diff, masksAndZones delete, and config sync 2026-03-11 12:04:35 -05:00
Josh Hawkins
7925d120ae tweak colors and switch 2026-03-11 11:36:15 -05:00
Josh Hawkins
18d413fbee tweaks 2026-03-11 11:35:12 -05:00
Josh Hawkins
98e9e79881 formatting 2026-03-11 11:07:23 -05:00
Josh Hawkins
a0849b104c add profiles enable toggle and improve empty state 2026-03-11 11:05:18 -05:00
Josh Hawkins
096a13bce9 move profile dropdown from section panes to settings header 2026-03-11 11:01:51 -05:00
Josh Hawkins
eccad7aa21 add face_recognition and lpr to profile-eligible sections 2026-03-11 10:35:38 -05:00
Josh Hawkins
cd58329796 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.
2026-03-11 10:35:19 -05:00
Josh Hawkins
379247dee6 profile support for mask and zone editor 2026-03-11 07:16:44 -05:00
Josh Hawkins
6205a9d588 add red dot for any pending changes including profiles 2026-03-09 16:08:50 -05:00
Josh Hawkins
53f80a06a5 i18n 2026-03-09 16:06:22 -05:00
Josh Hawkins
fa49e0e7b1 add active profile badge to settings toolbar 2026-03-09 15:57:24 -05:00
Josh Hawkins
fe7aa2ba3d add profiles summary page with card-based layout and fix backend zone comparison bug 2026-03-09 15:52:26 -05:00
Josh Hawkins
7131acafa6 add per-profile camera enable/disable to Camera Management view 2026-03-09 15:35:35 -05:00
Josh Hawkins
94dbabd0ef add profile section dropdown and wire into camera settings pages 2026-03-09 15:20:50 -05:00
Josh Hawkins
d5dc77daa4 add profileName prop to BaseSection for profile-aware config editing 2026-03-09 15:11:56 -05:00
Josh Hawkins
edf7fcb5b4 add profile state management and save preview support 2026-03-09 15:06:11 -05:00
Josh Hawkins
72b4a4ddad add frontend profile types, color utility, and config save support 2026-03-09 15:00:25 -05:00
Josh Hawkins
60930e50c2 add zones support to camera profiles 2026-03-09 14:47:29 -05:00
Josh Hawkins
d15fc4e58e add enabled field to camera profiles for enabling/disabling cameras 2026-03-09 14:47:29 -05:00
Josh Hawkins
7c6926d1e6 consolidate 2026-03-09 14:47:29 -05:00
Josh Hawkins
708399508b 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.
2026-03-09 14:47:29 -05:00
Josh Hawkins
61746984d1 formatting 2026-03-09 14:47:29 -05:00
Josh Hawkins
9efc2499f6 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.
2026-03-09 14:47:29 -05:00
Josh Hawkins
26ec07985c 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
2026-03-09 14:47:29 -05:00
Josh Hawkins
76c65bbf6d 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
2026-03-09 14:47:29 -05:00
Josh Hawkins
f76bb9cfb8 add profile API endpoints (GET /profiles, GET/PUT /profile) 2026-03-09 14:47:29 -05:00
Josh Hawkins
c367e5c95a 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.
2026-03-09 14:47:29 -05:00
Josh Hawkins
1c190220cb add active_profile field to FrigateConfig
Runtime-only field excluded from YAML serialization, tracks which
profile is currently active.
2026-03-09 14:47:29 -05:00
Josh Hawkins
ea2252d09f add profiles field to CameraConfig 2026-03-09 14:47:29 -05:00
Josh Hawkins
0381c96973 add CameraProfileConfig model for named config overrides 2026-03-09 14:47:29 -05:00
Josh Hawkins
dd9497baf2
Add ability to delete cameras (#22336)
Some checks are pending
CI / AMD64 Build (push) Waiting to run
CI / ARM Build (push) Waiting to run
CI / Jetson Jetpack 6 (push) Waiting to run
CI / AMD64 Extra Build (push) Blocked by required conditions
CI / ARM Extra Build (push) Blocked by required conditions
CI / Synaptics Build (push) Blocked by required conditions
CI / Assemble and push default build (push) Blocked by required conditions
* refactor camera cleanup code to generic util

* add api endpoint for deleting a camera

* frontend

* i18n

* clean up
2026-03-08 16:23:48 -06:00
Josh Hawkins
e930492ccc
Publish license plate box coordinates (#22337)
* publish the detected plate's box coordinates in tracked_object_update

* docs
2026-03-08 16:22:38 -06:00
Josh Hawkins
b2c7840c29
Refactor enrichment confg updater (#22325)
* enrichment updater and enum

* update_config stubs

* config updaters in enrichments

* update maintainer

* formatting

* simplify enrichment config updates to use single subscriber with topic-based routing
2026-03-08 14:14:18 -06:00
Josh Hawkins
df27e04c0f
Frontend updates (#22327)
* add optional field widget

adds a switch to enable nullable fields like skip_motion_threshold

* config field updates

add skip_motion_threshold optional switch
add fps back to detect restart required

* don't use ternary operator when displaying motion previews

the main previews were being unnecessarily unmounted

* lazy mount motion preview clips to reduce DOM overhead
2026-03-08 12:27:53 -05:00
Nicolas Mowen
ef07563d0a
Update onnx deps to support 50 series GPUs (#22324)
* Update support for newer Nvidia GPUs

* Update

* Cleanup

* Update gitignore
2026-03-08 11:45:29 -05:00
Nicolas Mowen
a705f254e5
Support using GenAI for embeddings / semantic search (#22323)
* Support GenAI for embeddings

* Add embed API support

* Add support for embedding via genai

* Basic docs

* undo

* Fix sending images

* Don't require download check

* Set model

* Handle emb correctly

* Clarification

* Cleanup

* Cleanup
2026-03-08 10:55:00 -05:00
Josh Hawkins
acdfed40a9
Improve annotation offset UX (#22310)
Some checks failed
CI / AMD64 Build (push) Has been cancelled
CI / ARM Build (push) Has been cancelled
CI / Jetson Jetpack 6 (push) Has been cancelled
CI / AMD64 Extra Build (push) Has been cancelled
CI / ARM Extra Build (push) Has been cancelled
CI / Synaptics Build (push) Has been cancelled
CI / Assemble and push default build (push) Has been cancelled
* keep nav buttons visible

nav buttons would be hidden when closing and reopening dialog after selecting the tracking details pane

* better ux in tracking details

actually pause the video and seek when annotation offset changes to make it easier to visually line up the bounding box

* improve detail stream ux

* update dummy camera docs

* fix docs link
2026-03-07 07:50:00 -06:00
Josh Hawkins
889dfca36c
Frontend fixes (#22309)
* prevent unnecessary reloads in useUserPersistence hook

* always render ProtectedRoute (handling undefined roles internally) and add Suspense fallback

* add missing i18n namespaces

react 19 enforces Suspense more strictly, so components using useTranslation() with unloaded namespaces would suspend, blanking the content behind the empty Suspense fallback

* add missing namespace

* remove unneeded

* remove modal from actions dropdown
2026-03-07 06:43:00 -07:00
Josh Hawkins
dda9f7bfed
apply filters after clustering (#22308)
apply length and format filters to the clustered representative plate rather than individual OCR readings, so noisy variants still contribute to clustering even when they don't pass on their own
2026-03-07 06:42:27 -07:00
Josh Hawkins
c2e667c0dd
Add dynamic configuration for more fields (#22295)
Some checks are pending
CI / AMD64 Build (push) Waiting to run
CI / ARM Build (push) Waiting to run
CI / Jetson Jetpack 6 (push) Waiting to run
CI / AMD64 Extra Build (push) Blocked by required conditions
CI / ARM Extra Build (push) Blocked by required conditions
CI / Synaptics Build (push) Blocked by required conditions
CI / Assemble and push default build (push) Blocked by required conditions
* face recognition dynamic config

* lpr dynamic config

* safe changes for birdseye dynamic config

* bird classification dynamic config

* always assign new config to stats emitter to make telemetry fields dynamic

* add wildcard support for camera config updates in config_set

* update restart required fields for global sections

* add test

* fix rebase issue

* collapsible settings sidebar

use the preexisting control available with shadcn's sidebar (cmd/ctrl-B) to give users more space to set masks/zones on smaller screens

* dynamic ffmpeg

* ensure previews dir exists

when ffmpeg processes restart, there's a brief window where the preview frame generation pipeline is torn down and restarted. before these changes, ffmpeg only restarted on crash/stall recovery or full Frigate restart. Now that ffmpeg restarts happen on-demand via config changes, there's a higher chance a frontend request hits the preview_mp4 or preview_gif endpoints during that brief restart window when the directory might not exist yet. The existing os.listdir() call would throw FileNotFoundError without a directory existence check. this fix just checks if the directory exists and returns 404 if not, exactly how preview_thumbnail already handles the same scenario a few lines below

* global ffmpeg section

* clean up

* tweak

* fix test
2026-03-06 13:45:39 -07:00
Josh Hawkins
c9bd907721
Frontend fixes (#22294)
* fix useImageLoaded hook running on every render

* fix volume not applying for all cameras

* Fix maximum update depth exceeded errors on Review page

- use-overlay-state: use refs for location to keep setter identity
  stable across renders, preventing cascading re-render loops when
  effects depend on the setter. Add Object.is bail-out guard to skip
  redundant navigate calls. Move setPersistedValue after bail-out to
  avoid unnecessary IndexedDB writes.

* don't try to fetch previews when motion search dialog is open

* revert unneeded changes

re-rendering was caused by the overlay state hook, not this one

* filter dicts to only use id field in sync recordings
2026-03-06 13:41:15 -07:00
Josh Hawkins
34cc1208a6
Skip motion threshold configuration (#22255)
Some checks are pending
CI / AMD64 Build (push) Waiting to run
CI / ARM Build (push) Waiting to run
CI / Jetson Jetpack 6 (push) Waiting to run
CI / AMD64 Extra Build (push) Blocked by required conditions
CI / ARM Extra Build (push) Blocked by required conditions
CI / Synaptics Build (push) Blocked by required conditions
CI / Assemble and push default build (push) Blocked by required conditions
* backend

* frontend

* i18n

* docs

* add test

* clean up

* clean up motion detection docs

* formatting

* make optional
2026-03-05 18:20:03 -06:00
Josh Hawkins
2babfd2ec9
Improve motion review and add motion search (#22253)
* implement motion search and motion previews

* tweaks

* fix merge issue

* fix copilot instructions
2026-03-05 17:53:48 -06:00