* fetch more from ffprobe
* add detailed param to ffprobe endpoint
* add dots variant to step indicator
* add classname
* tweak colors for dark mode to match figma
* add step 1 form
* add helper function for ffmpeg snapshot
* add go2rtc stream add and ffprobe snapshot endpoints
* add camera image and stream details on successful test
* step 1 tweaks
* step 2 and i18n
* types
* step 1 and 2 tweaks
* add wizard to camera settings view
* add data unit i18n keys
* restream tweak
* fix type
* implement rough idea for step 3
* add api endpoint to delete stream from go2rtc
* add main wizard dialog component
* extract logic for friendly_name and use in wizard
* add i18n and popover for brand url
* add camera name to top
* consolidate validation logic
* prevent dialog from closing when clicking outside
* center camera name on mobile
* add help/docs link popovers
* keep spaces in friendly name
* add stream details to overlay like stats in liveplayer
* add validation results pane to step 3
* ensure test is invalidated if stream is changed
* only display validation results and enable save button if all streams have been tested
* tweaks
* normalize camera name to lower case and improve hash generation
* move wizard to subfolder
* tweaks
* match look of camera edit form to wizard
* move wizard and edit form to its own component
* move enabled/disabled switch to management section
* clean up
* fixes
* fix mobile
* new body param
* use new body param in endpoint
* explicitly use new param in frontend endpoint
* use reviewsegment as type instead of list of strings
* add toggle function to mark as unreviewed when all selected are reviewed
* i18n
* fix tests
* refactor with sidebar and mobile page
* sidebar spacing and color tweaks
* layout tweaks
* move camera switch button to header
* improve mobile
* remove back button on mobile page header
* mobile fixes
* remove debug
* don't use mobilepage
* more mobile tweaks
* use mobile page for components
* add optional actions to mobile page header for top right buttons
* fix alignment
* use page toggle
* tweaks
* sidebar inset tweaks
* move triggers to notifications sub menu
* consistency
* fix padding
* more padding fixes
* navigate history
* Refactor face card into generic classification card
* Update classification data card to use classification card
* Refactor state training grid to use classification card
* Refactor grouped face card into generic component
* Combine classification objects by event
* Fixup
* Cleanup
* Cleanup
* Do not fail if a single event is not found
* Save original frame
* Cleanup
* Undo
* Make keyboard shortcuts consistent
* Cleanup
* Refactor prevent default to not require separate input
* Fix
* Implement escape for reviews
* Implement escape for explore
* Send content ref to get page changes for free
* Cleanup components
* integrate debug view
* Refactor menu handling
* Cleanup
* cleanup
* Improve ptz placement for debug view
* Cleanup
* Cleanup mobile
* Always show options
* Add info for stream picking being disabled
* Add to mobile too
* Fix ns
* Cleanup
* update config for roles and add validator
* ensure admin and viewer are never overridden
* add class method to user to retrieve all allowed cameras
* enforce config roles in auth api endpoints
* add camera access api dependency functions
* protect review endpoints
* protect preview endpoints
* rename param name for better fastapi injection matching
* remove unneeded
* protect export endpoints
* protect event endpoints
* protect media endpoints
* update auth hook for allowed cameras
* update default app view
* ensure anonymous user always returns all cameras
* limit cameras in explore
* cameras is already a list
* limit cameras in review/history
* limit cameras in live view
* limit cameras in camera groups
* only show face library and classification in sidebar for admin
* remove check in delete reviews
since admin role is required, no need to check camera access. fixes failing test
* pass request with camera access for tests
* more async
* camera access tests
* fix proxy auth tests
* allowed cameras for review tests
* combine event tests and refactor for camera access
* fix post validation for roles
* don't limit roles in create user dialog
* fix triggers endpoints
no need to run require camera access dep since the required role is admin
* fix type
* create and edit role dialogs
* delete role dialog
* fix role change dialog
* update settings view for roles
* i18n changes
* minor spacing tweaks
* docs
* use badges and camera name label component
* clarify docs
* display all cameras badge for admin and viewer
* i18n fix
* use validator to prevent reserved and empty roles from being assigned
* split users and roles into separate tabs in settings
* tweak docs
* clarify docs
* change icon
* don't memoize roles
always recalculate on component render
* model type does not need to match config model type
As long as a model is supported by a detector, it should be available in the list
* fix missing semicolon
the web linter was complaining
* refactor: Refactor camera nickname
* fix: fix cameraNameLabel visually
* chore: The Explore search function also displays the Camera's nickname in English
* chore: add mobile page camera nickname
* feat: webpush support camera nickname
* fix: fix storage camera name is null
* chore: fix review detail and context menu camera nickname
* chore: fix use-stats and notification setting camera nickname
* fix: fix stats camera if not nickname need capitalize
* fix: fix debug page open camera web ui i18n and camera nickname support
* fix: fix camera metrics not use nickname
* refactor: refactor use-camera-nickname hook.
* Include extra level for normal activity
* Add dynamic toggling
* Update docs
* Add different threshold for genai
* Adjust webUI for object and review description feature
* Adjust config
* Send on startup
* Cleanup config setting
* Set config
* Fix config name
* semantic trigger test
* database and model
* config
* embeddings maintainer and trigger post-processor
* api to create, edit, delete triggers
* frontend and i18n keys
* use thumbnail and description for trigger types
* image picker tweaks
* initial sync
* thumbnail file management
* clean up logs and use saved thumbnail on frontend
* publish mqtt messages
* webpush changes to enable trigger notifications
* add enabled switch
* add triggers from explore
* renaming and deletion fixes
* fix typing
* UI updates and add last triggering event time and link
* log exception instead of return in endpoint
* highlight entry in UI when triggered
* save and delete thumbnails directly
* remove alert action for now and add descriptions
* tweaks
* clean up
* fix types
* docs
* docs tweaks
* docs
* reuse enum
* Ui improvements
* Improve image cropping and model saving
* Improve naming
* Add logs for training
* Improve model labeling
* Don't set sub label for none object classification
* Cleanup
* Set runtime
* Use count correctly
* Don't assume camera sizes
* Use separate zmq proxy for object detection
* Correct order
* Use forkserver
* Only store PID instead of entire process reference
* Cleanup
* Catch correct errors
* Fix typing
* Remove before_run from process util
The before_run never actually ran because:
You're right to suspect an issue with before_run not being called and a potential deadlock. The way you've implemented the run_wrapper using __getattribute__ for the run method of BaseProcess is a common pitfall in Python's multiprocessing, especially when combined with how multiprocessing.Process works internally.
Here's a breakdown of why before_run isn't being called and why you might be experiencing a deadlock:
The Problem: __getattribute__ and Process Serialization
When you create a multiprocessing.Process object and call start(), the multiprocessing module needs to serialize the process object (or at least enough of it to re-create the process in the new interpreter). It then pickles this serialized object and sends it to the newly spawned process.
The issue with your __getattribute__ implementation for run is that:
run is retrieved during serialization: When multiprocessing tries to pickle your Process object to send to the new process, it will likely access the run attribute. This triggers your __getattribute__ wrapper, which then tries to bind run_wrapper to self.
run_wrapper is bound to the parent process's self: The run_wrapper closure, when created in the parent process, captures the self (the Process instance) from the parent's memory space.
Deserialization creates a new object: In the child process, a new Process object is created by deserializing the pickled data. However, the run_wrapper method that was pickled still holds a reference to the self from the parent process. This is a subtle but critical distinction.
The child's run is not your wrapped run: When the child process starts, it internally calls its own run method. Because of the serialization and deserialization process, the run method that's ultimately executed in the child process is the original multiprocessing.Process.run or the Process.run if you had directly overridden it. Your __getattribute__ magic, which wraps run, isn't correctly applied to the Process object within the child's context.
* Cleanup
* Logging bugfix (#18465)
* use mp Manager to handle logging queues
A Python bug (https://github.com/python/cpython/issues/91555) was preventing logs from the embeddings maintainer process from printing. The bug is fixed in Python 3.14, but a viable workaround is to use the multiprocessing Manager, which better manages mp queues and causes the logging to work correctly.
* consolidate
* fix typing
* Fix typing
* Use global log queue
* Move to using process for logging
* Convert camera tracking to process
* Add more processes
* Finalize process
* Cleanup
* Cleanup typing
* Formatting
* Remove daemon
---------
Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
* Implement model training via ZMQ and add model states to represent training
* Get model updates working
* Improve toasts and model state
* Clean up logging
* Add back in
* Setup basic training structure
* Build out route
* Handle model configs
* Add image fetch APIs
* Implement model training screen with dataset selection
* Implement viewing of training images
* Adjust directories
* Implement viewing of images
* Add support for deleting images
* Implement full deletion
* Implement classification model training
* Improve naming
* More renaming
* Improve layout
* Reduce logging
* Cleanup
* install new packages for transcription support
* add config options
* audio maintainer modifications to support transcription
* pass main config to audio process
* embeddings support
* api and transcription post processor
* embeddings maintainer support for post processor
* live audio transcription with sherpa and faster-whisper
* update dispatcher with live transcription topic
* frontend websocket
* frontend live transcription
* frontend changes for speech events
* i18n changes
* docs
* mqtt docs
* fix linter
* use float16 and small model on gpu for real-time
* fix return value and use requestor to embed description instead of passing embeddings
* run real-time transcription in its own thread
* tweaks
* publish live transcriptions on their own topic instead of tracked_object_update
* config validator and docs
* clarify docs
* Indicate no recordings on the history timeline with gray hash marks
This commit includes a new backend API endpoint and the frontend changes needed to support this functionality
* don't show slashes for now
* 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
* Remove torch install
* notification fixes
the pubkey was not being returned if notifications was not enabled at the global level
* Put back
* single condition check for fetching and disabling button
---------
Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
* Fix api filter hook
cameras, labels, sub labels, plates, and zones could be parsed as numeric values rather than strings, which would break the explore filter. This change adds an optional param to the useApiFilterArgs hook to always parse keys as string[]
* fix notifications register button from being incorrectly disabled
* Frontend timezone fixes
Last recording date timezone was being applied twice, so it displayed the wrong date
Also, TZDate from react-day-picker could have been behaving incorrectly at times without a full date string
* Ensure returned day is parsed as midnight in specified timezone
* Fix Norwegian language code for date-fns module import
* Fix incorrect apple compatibility change
* Add other and unused as separate storage items
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* 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>
* Don't use timezone in export dialog timestamps
Revert an unnecessary change made in https://github.com/blakeblackshear/frigate/pull/18257
* Ensure notifications register button is only disabled when both all cameras and every individual camera is disabled
* Send test notification if any cameras are enabled
* clarify docs about disabling cameras
* fix crash in autotracking zoom
* clean up
* masks and zones i18n fixes
* Check if camera is enabled in config
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* Add option to not trim clip
* Improve API
* Update snapshot for new best objects
* Fix missing strings
* Convert to separate key
* Always include bounding box on snapshots
* improve autotracking relative zooming time calculation
* update proxy docs to note the need for comma separated header roles
* Add count translation
* tracked object lifecycle i18n fix
* update speed estimation docs
* clarity
* Re-initialize onvif information when toggling camera on live view
* Move time ago to card info and add face area
* Clarify face recognition docs
* Increase minimum face recognition area
* use clipFrom to in vod module endpoint to start at the correct time
* Cleanup media api
* Don't change duration
* Use search detail dialog for face library
* Move to segment based
* Cleanup
* Add back duration modification
* clean up docs
---------
Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
* Add camera name tooltip to previews in recording view
* Apply face area check to cv2 face detection
* Delete review thumbnails
* Don't import hailo until it is used
* Add comment
* Clean up camera name
* Filter out empty keys when updating yaml config
HA ingress seems to randomly add an equal sign to the PUT urls for updating the config from the UI. This fix prevents empty keys from being processed, but still allows empty values.
---------
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>
* face library i18n fixes
* face library i18n fixes
* add ability to use ctrl/cmd S to save in the config editor
* Use datetime as ID
* Update metrics inference speed to start with 0 ms
* fix android formatted thumbnail
* ensure role is comma separated and stripped correctly
* improve face library deletion
- add a confirmation dialog
- add ability to select all / delete faces in collections
* Implement lazy loading for video previews
* Force GPU for large embedding model
* GPU is required
* settings i18n fixes
* Don't delete train tab
* webpush debugging logs
* Fix incorrectly copying zones
* copy path data
* Ensure that cache dir exists for Frigate+
* face docs update
* Add description to upload image step to clarify the image
* Clean up
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* frigate+ pane i18n fix
* catch more exceptions
* explore search result tooltip i18n fix
* i18n fix
* remove comments about deprecated strftime_fmt
* Catch producers exists but is None
* Formatting
* fix live camera view i18n
* Add default role config for proxy users
This allows users to specify a default role for users when using a proxy for auth. This can be useful for users who can't/don't want to define a header mapping for the remote-role header.
* update reference config and auth docs
* clarify face rec camera level config
* clarify auth docs
* Fix onnx not working with openvino
* Update openvino to fix failed npu plugin check
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* Only auto-populate some config fields down to the camera level
- Don't populate LPR and face global-only settings down to the camera level
- Ensure LPR mixin uses camera level min_area
- Explicitly forbid extra config values for LPR and face
* lpr docs tweak
* remove extra text already in i18n key
* consistency
* fix check for snapshot score
for manual events, snapScore is 0, so "0" gets displayed instead of a condition being evaluated.
* fix ongoing events from being returned for all review queries
The existing condition will include any record with a null end_time regardless of when it started, as long as the start_time is greater than the after param. With this fix, both the start time needs to be within the specified range, and for events that have already ended, their end time must be before the before param
* Base alert toggles on width not device class
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* Add plural variant to i18n selected key
Weblate needs both keys to populate other languages
* move smart capitalization logic into language provider
* fix key
* install date-fns-tz
* add date locale hook
* refactor formatUnixTimestampToDateTime
Use date-fns style instead of using strftime. This requires changing the i18n keys to the way date-fns represents dates (eg: "MMM d, h:mm:ss aaa" instead of "%b %-d, %H:%M"
* refactor calendar to use new hook
* fix useFormattedTimestamp to use new formatUnixTimestampToDateTime date_format
* change i18n keys to new format
* fix timeline
* fix review
* fix explore
* fix metrics
* fix notifications
* fix face library
* clean up
* Add npu usages as a statistic
* Support showing NPU stats in dashboard
* Add sys volume mount for npu usages
* Fix type
* Simplify check
* Cleanup
* Cleanup
* Plus Settings: add base model and name
* I18n change user model to fine-tuned model
* Move fields in drop-down for mobile
* Missed commit
* remove unused i18n key
* Add base/FTM to model Type, reorder Model Information fields
* fix missing availableModels for now
* shorten Fine-Tuned Model to Fine-Tuned
* isBaseModel is already available in config, use that
* Change Base Model to Default
* minor tweaks
* Revert "Change Base Model to Default"
This reverts commit 0191aa34f6.
* add support for multi-line plates
* config for model size
* default to small model
* add license plate as attribute to motorcycle
* use model size
* docs
* attribute map
* i18n key fix