* add ui to camera config update topics enum
* add mqtt to camera config update enum
* ensure cleanup runs when an event end skips post-processing
* end any in-progress audio events when audio detection is disabled
we already end in-progress audio events when we disable a camera, but this mirrors that logic for specifically disabling audio detection
* Improve GenAI metadata
* fix invalid recording segment topic being misrouted to the valid handler
* Add confidence default to avoid unnecessary field causing issues
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* Reduce max frames per second to 1
* Use pydantic but don't fail if some constraints are not met.
* Adjust limits
* Adjust limits
* Cleanup
* add unsaved changes icon/popover to individual settings section
* allow changing camera friendly_name from camera management pane
---------
Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
* Test for image token usage in llama.cpp so we can more appropriately decide how many frames to include
* Limit based on frames per second
* handle zone case sensitivity
* Improve formatting
* Add observations field so model can build CoT before outputting used fields
* ensure classification wizard dialog is scrollable on mobile too
* add chat and features group to mobile menu
Co-authored-by: Copilot <copilot@github.com>
* Set min length for summary too
* Don't use orange for review item
---------
Co-authored-by: Copilot <copilot@github.com>
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* only send monitoring notifications to users with camera access
* check access to similarity search event id camera
* require admin role for storage usage endpoint
* check camera access for jsmpeg and birdseye cameras
* tests
* formatting
* use ffmpeg to probe rtsp urls instead of cv2
cv2 is faster (no subprocess launch) and will continue to be used for recording segments
* tweak faq
* change unsaved color to orange
avoids confusion with validation errors (red)
* don't use any variant of orange as a profile color
avoids confusion with unsaved changes
* more unsaved color tweaks
* fix: bump OpenVINO to 2025.4.x to resolve LXC container crash
* fix: replace openvino + onnxruntime with onnxruntime-openvino 1.24.*
onnxruntime-openvino 1.24.* bundles OpenVINO 2025.4.1, which fixes a
crash in constrained CPU environments (e.g. Proxmox LXC) where
lin_system_conf.cpp calls stoi("") on empty strings read from offline
CPU sysfs entries.
Consolidating to onnxruntime-openvino also ensures the OpenVINO runtime
and ONNX Runtime OpenVINO EP are always compatible versions.
* revert: restore onnxruntime, keep openvino bump
Reverting onnxruntime-openvino consolidation - onnxruntime is used with
multiple execution providers (CUDA, TensorRT, MIGraphX, CPU) and cannot
be replaced wholesale with the openvino-specific wheel.
* Bump radix-ui packages to align react-dismissable-layer version and fix nested overlay pointer-events bug
* remove workarounds for radix pointer events issues on dropdown and context menus
* remove disablePortal from popover
* remove modal on popovers
* remove workarounds in restart dialog
* keep onCloseAutoFocus for face, classification, and ptz
these are necessary to prevent tooltips from re-showing and from the arrow keys from reopening the ptz presets menu
* add tests
* apply annotation offset to frigate+ submission frame time
* fix broken docs links with hash fragments that resolve wrong on reload
* undo
* use recording snapshot for frigate+ frame submission from VideoControls
rather than a canvas grab/paint, which may not always align with an ffmpeg snapshot due to keyframes
* add more docs links
- display docs link for main sections on collapsible fields
* dialog button consistency
* Initial copy timestamp url implementation
* revise url format
* Implement share timestamp dialog
* Use translations
* Add comments
* Add validations to shared link
* Switch to searchEffect implementation
* Add missing accessibility related dialog description
* Change URL format to unix timestamps
* Remove unnecessary useEffect
* Remove duplicated dialog title
* Fixes/improvements based off PR review comments
* Add missing cancel button & separators to dialog
* Make share description clearer
* Bugfix: guard against showing toasts twice
Because this effect ends up running multiple times
* Clamp future timestamps to now
* Revert "Bugfix: guard against showing toasts twice"
This reverts commit 99fa5e1dee.
* Use normal separator
Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
* Fixes based off PR review comments
* Bugfix: Share dialog was not receiving the player timestamp after removing key that triggered remounts
* Defer `setRecording` and return true from hook for cleanup
* Remove timeout defer hack in favor of refactored hook
* Attempt to replay video muted on NotAllowedError
* Use separate persistent mute and temporary forced mute states
* Align cancel button with other dialogs
* Prevent wrapping on dialog title
* Remove extra "back" button on mobile drawer
* Fix back navigation when coming from direct shared timestamp links
* Use new timeformat hook
* Simplify dialog radio buttons
* Apply suggestions from code review
Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
---------
Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
* add log when probing detect stream on startup
when users don't explicitly set detect.width and detect.height, we probe for them. sometimes the probe hangs (camera doesn't support UDP, like some Reolinks), so this log message will make that clearer
* add faq about probing detect stream
* fix stuck activity ring when tracked object transitions to stationary
* drop cache segments past retain cutoff regardless of retention mode
* add maintainer test
* only link to profile settings in status bar for admin users
* use hasFullCameraAccess for group filtering
* add custom export args to record docs
* update recordings docs
* prevent review WS handler from poisoning SWR cache before initial fetch completes
* fix review page spinner not clearing when review item ends
* use last ended review item ID instead of counter
* use separate displayItems memo to overlay end_time updates without re-filtering reviewed items
* backend
* frontend + i18n
* tests + api spec
* tweak backend to use Job infrastructure for exports
* frontend tweaks and Job infrastructure
* tests
* tweaks
- add ability to remove from case
- change location of counts in case card
* add stale export reaper on startup
* fix toaster close button color
* improve add dialog
* formatting
* hide max_concurrent from camera config export settings
* remove border
* refactor batch endpoint for multiple review items
* frontend
* tests and fastapi spec
* fix deletion of in-progress exports in a case
* tweaks
- hide cases when filtering cameras that have no exports from those cameras
- remove description from case card
- use textarea instead of input for case description in add new case dialog
* add auth exceptions for exports
* add e2e test for deleting cases with exports
* refactor delete and case endpoints
allow bulk deleting and reassigning
* frontend
- bulk selection like Review
- gate admin-only actions
- consolidate dialogs
- spacing/padding tweaks
* i18n and tests
* update openapi spec
* tweaks
- add None to case selection list
- allow new case creation from single cam export dialog
* fix codeql
* fix i18n
* remove unused
* fix frontend tests
* fix video playback stutter when GenAI dialog is open in detail stream
Inline `onOpen` callback in DetailStream.tsx:522 creates a new function identity every render. GenAISummaryChip.tsx:98's useEffect depends on [open, onOpen], so it re-fires on every parent re-render while the dialog is open. Each fire calls onSeek -> setCurrentTime -> seekToTimestamp, creating a continuous re-render + seek loop
* add /profiles to EXEMPT_PATHS for non-admin users
* skip debug_replay/status poll for non-admin users
* use subquery for timeline lookup to avoid SQLite variable limit
* Add score fusion helpers for find_similar_objects chat tool
* Add candidate query builder for find_similar_objects chat tool
* register find_similar_objects chat tool definition
* implement _execute_find_similar_objects chat tool dispatcher
* Dispatch find_similar_objects in chat tool executor
* Teach chat system prompt when to use find_similar_objects
* Add i18n strings for find_similar_objects chat tool
* Add frontend extractor for find_similar_objects tool response
* Render anchor badge and similarity scores in chat results
* formatting
* filter similarity results in python, not sqlite-vec
* extract pure chat helpers to chat_util module
* Teach chat system prompt about attached_event marker
* Add parseAttachedEvent and prependAttachment helpers
* Add i18n strings for chat event attachments
* Add ChatAttachmentChip component
* Make chat thumbnails attach to composer on click
* Render attachment chip in user chat bubbles
* Add ChatQuickReplies pill row component
* Add ChatPaperclipButton with event picker popover
* Wire event attachments into chat composer and messages
* add ability to stop streaming
* tweak cursor to appear at the end of the same line of the streaming response
* use abort signal
* add tooltip
* display label and camera on attachment chip
* display area as proper percentage in debug view
* match replay objects list with debug view
* motion search fixes
- tweak progress bar to exclude heatmap and inactive segments
- show metrics immediately on search start
- fix preview frame loading race
- fix polygon missing after dialog remount
- don't try to drag the image when dragging vertex of polygon
* add activity indicator to storage metrics
* make sub label query for events API endpoints case insensitive