* optimize recordings/summary endpoint db query
replace strftime with integer arithmetic. increases speed by about 6x, especially noticeable for installs with long retention days
* optimize calendar rendering with Set lookups and remove unnecessary remount key
The old code built Date[] arrays with a TZDate object for every day in recording history (365+ timezone-aware date constructions). react-day-picker then did O(visible × history) date comparisons to match each of the displayed days against these arrays. Now we build Set<string> from the raw keys (zero date construction), and pass matcher functions that do O(1) Set.has() lookups. react-day-picker only calls these for visible days
* clean up
* 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
* 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
* 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
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
* 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
* 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
* fix ollama chat tool calling
handle dict arguments, streaming fallback, and message format
* pin setuptools<81 to ensure pkg_resources remains available
When ensure_torch_dependencies() installs torch/torchvision via pip, it can upgrade setuptools to >=81.0.0, which removed the pkg_resources module. rknn-toolkit2 depends on pkg_resources internally, so subsequent RKNN conversion fails with No module named 'pkg_resources'.
* remove unused RecoilRoot and fix implicit ref callback
Remove the vestigial recoil dependency (zero consumers) and convert
the implicit-return ref callback in SearchView to block form to
prevent React 19 interpreting it as a cleanup function.
* replace react-transition-group with framer-motion in Chip
Replace CSSTransition with framer-motion AnimatePresence + motion.div
for React 19 compatibility (react-transition-group uses findDOMNode).
framer-motion is already a project dependency.
* migrate react-grid-layout v1 to v2
- Replace WidthProvider(Responsive) HOC with useContainerWidth hook
- Update types: Layout (single item) → LayoutItem, Layout[] → Layout
- Replace isDraggable/isResizable/resizeHandles with dragConfig/resizeConfig
- Update EventCallback signature for v2 API
- Remove @types/react-grid-layout (v2 includes its own types)
* upgrade vaul, next-themes, framer-motion, react-zoom-pan-pinch
- vaul: ^0.9.1 → ^1.1.2
- next-themes: ^0.3.0 → ^0.4.6
- framer-motion: ^11.5.4 → ^12.35.0 (React 19 native support)
- react-zoom-pan-pinch: 3.4.4 → latest
* upgrade to React 19, react-konva v19, eslint-plugin-react-hooks v5
Core React 19 upgrade with all necessary type fixes:
- Update RefObject types to accept T | null (React 19 refs always nullable)
- Add JSX namespace imports (no longer global in React 19)
- Add initial values to useRef calls (required in React 19)
- Fix ReactElement.props unknown type in config-form components
- Fix IconWrapper interface to use HTMLAttributes instead of index signature
- Add monaco-editor as dev dependency for type declarations
- Upgrade react-konva to v19, eslint-plugin-react-hooks to v5
* upgrade typescript to 5.9.3
* modernize Context.Provider to React 19 shorthand
Replace <Context.Provider value={...}> with <Context value={...}>
across all project-owned context providers. External library contexts
(react-icons IconContext, radix TooltipPrimitive) left unchanged.
* add runtime patches for React 19 compatibility
- Patch @radix-ui/react-compose-refs@1.1.2: stabilize useComposedRefs
to prevent infinite render loops from unstable ref callbacks
https://github.com/radix-ui/primitives/issues/3799
- Patch @radix-ui/react-slot@1.2.4: use useComposedRefs hook in
SlotClone instead of inline composeRefs to prevent re-render cycles
https://github.com/radix-ui/primitives/pull/3804
- Patch react-use-websocket@4.8.1: remove flushSync wrappers that
cause "Maximum update depth exceeded" with React 19 auto-batching
https://github.com/facebook/react/issues/27613
- Add npm overrides to ensure single hoisted copies of compose-refs
and react-slot across all Radix packages
- Add postinstall script for patch-package
- Remove leftover react-transition-group dependency
* formatting
* use availableWidth instead of useContainerWidth for grid layout
The useContainerWidth hook from react-grid-layout v2 returns raw
container width without accounting for scrollbar width, causing the
grid to not fill the full available space. Use the existing
availableWidth value from useResizeObserver which already compensates
for scrollbar width, matching the working implementation.
* remove unused carousel component and fix React 19 peer deps
Remove embla-carousel-react and its unused Carousel UI component.
Upgrade sonner v1 → v2 for native React 19 support. Remove
@types/react-icons stub (react-icons bundles its own types).
These changes eliminate all peer dependency conflicts, so
npm install works without --legacy-peer-deps.
* fix React 19 infinite re-render loop on live dashboard
The "Maximum update depth exceeded" error was caused by two issues:
1. useDeferredStreamMetadata returned a new `{}` default on every render
when SWR data was undefined, creating an unstable reference that
triggered the useEffect in useCameraLiveMode on every render cycle.
Fixed by using a stable module-level EMPTY_METADATA constant.
2. useResizeObserver's rest parameter `...refs` created a new array on
every render, causing its useEffect to re-run and re-observe elements
continuously. Fixed by stabilizing refs with useRef and only
reconnecting the observer when actual DOM elements change.
* debug replay implementation
* fix masks after dev rebase
* fix squash merge issues
* fix
* fix
* fix
* no need to write debug replay camera to config
* camera and filter button and dropdown
* add filters
* add ability to edit motion and object config for debug replay
* add debug draw overlay to debug replay
* add guard to prevent crash when camera is no longer in camera_states
* fix overflow due to radix absolutely positioned elements
* increase number of messages
* ensure deep_merge replaces existing list values when override is true
* add back button
* add debug replay to explore and review menus
* clean up
* clean up
* update instructions to prevent exposing exception info
* fix typing
* refactor output logic
* refactor with helper function
* move init to function for consistency
* 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
* use react-jsonschema-form for UI config
* don't use properties wrapper when generating config i18n json
* configure for full i18n support
* section fields
* add descriptions to all fields for i18n
* motion i18n
* fix nullable fields
* sanitize internal fields
* add switches widgets and use friendly names
* fix nullable schema entries
* ensure update_topic is added to api calls
this needs further backend implementation to work correctly
* add global sections, camera config overrides, and reset button
* i18n
* add reset logic to global config view
* tweaks
* fix sections and live validation
* fix validation for schema objects that can be null
* generic and custom per-field validation
* improve generic error validation messages
* remove show advanced fields switch
* tweaks
* use shadcn theme
* fix array field template
* i18n tweaks
* remove collapsible around root section
* deep merge schema for advanced fields
* add array field item template and fix ffmpeg section
* add missing i18n keys
* tweaks
* comment out api call for testing
* add config groups as a separate i18n namespace
* add descriptions to all pydantic fields
* make titles more concise
* new titles as i18n
* update i18n config generation script to use json schema
* tweaks
* tweaks
* rebase
* clean up
* form tweaks
* add wildcards and fix object filter fields
* add field template for additionalproperties schema objects
* improve typing
* add section description from schema and clarify global vs camera level descriptions
* separate and consolidate global and camera i18n namespaces
* clean up now obsolete namespaces
* tweaks
* refactor sections and overrides
* add ability to render components before and after fields
* fix titles
* chore(sections): remove legacy single-section components replaced by template
* refactor configs to use individual files with a template
* fix review description
* apply hidden fields after ui schema
* move util
* remove unused i18n
* clean up error messages
* fix fast refresh
* add custom validation and use it for ffmpeg input roles
* update nav tree
* remove unused
* re-add override and modified indicators
* mark pending changes and add confirmation dialog for resets
* fix red unsaved dot
* tweaks
* add docs links, readonly keys, and restart required per field
* add special case and comments for global motion section
* add section form special cases
* combine review sections
* tweaks
* add audio labels endpoint
* add audio label switches and input to filter list
* fix type
* remove key from config when resetting to default/global
* don't show description for new key/val fields
* tweaks
* spacing tweaks
* add activity indicator and scrollbar tweaks
* add docs to filter fields
* wording changes
* fix global ffmpeg section
* add review classification zones to review form
* add backend endpoint and frontend widget for ffmpeg presets and manual args
* improve wording
* hide descriptions for additional properties arrays
* add warning log about incorrectly nested model config
* spacing and language tweaks
* fix i18n keys
* networking section docs and description
* small wording tweaks
* add layout grid field
* refactor with shared utilities
* field order
* add individual detectors to schema
add detector titles and descriptions (docstrings in pydantic are used for descriptions) and add i18n keys to globals
* clean up detectors section and i18n
* don't save model config back to yaml when saving detectors
* add full detectors config to api model dump
works around the way we use detector plugins so we can have the full detector config for the frontend
* add restart button to toast when restart is required
* add ui option to remove inner cards
* fix buttons
* section tweaks
* don't zoom into text on mobile
* make buttons sticky at bottom of sections
* small tweaks
* highlight label of changed fields
* add null to enum list when unwrapping
* refactor to shared utils and add save all button
* add undo all button
* add RJSF to dictionary
* consolidate utils
* preserve form data when changing cameras
* add mono fonts
* add popover to show what fields will be saved
* fix mobile menu not re-rendering with unsaved dots
* tweaks
* fix logger and env vars config section saving
use escaped periods in keys to retain them in the config file (eg "frigate.embeddings")
* add timezone widget
* role map field with validation
* fix validation for model section
* add another hidden field
* add footer message for required restart
* use rjsf for notifications view
* fix config saving
* add replace rules field
* default column layout and add field sizing
* clean up field template
* refactor profile settings to match rjsf forms
* tweaks
* refactor frigate+ view and make tweaks to sections
* show frigate+ model info in detection model settings when using a frigate+ model
* update restartRequired for all fields
* fix restart fields
* tweaks and add ability enable disabled cameras
more backend changes required
* require restart when enabling camera that is disabled in config
* disable save when form is invalid
* refactor ffmpeg section for readability
* change label
* clean up camera inputs fields
* misc tweaks to ffmpeg section
- add raw paths endpoint to ensure credentials get saved
- restart required tooltip
* maintenance settings tweaks
* don't mutate with lodash
* fix description re-rendering for nullable object fields
* hide reindex field
* update rjsf
* add frigate+ description to settings pane
* disable save all when any section is invalid
* show translated field name in validation error pane
* clean up
* remove unused
* fix genai merge
* fix genai
* improve jsmpeg player websocket handling
prevent websocket console messages from appearing when player is destroyed
* reformat files after ruff upgrade
* use latest preview frame for latest image when camera is offline
* remove frame extraction logic
* tests
* frontend
* add description to api endpoint
* generic job infrastructure
* types and dispatcher changes for jobs
* save data in memory only for completed jobs
* implement media sync job and endpoints
* change logs to debug
* websocket hook and types
* frontend
* i18n
* docs tweaks
* endpoint descriptions
* tweak docs
* add camera connection quality metrics and indicator
* formatting
* move stall calcs to watchdog
* clean up
* change watchdog to 1s and separately track time for ffmpeg retry_interval
* implement status caching to reduce message volume
* fix config examples
* remove reference to trt model generation script
* tweak tmpfs comment
* update old version
* tweak tmpfs comment
* clean up and clarify tensorrt
* re-add size
* Update docs/docs/configuration/hardware_acceleration_enrichments.md
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* improve chip tooltip display
- use formatList to use i18n separators instead of commas
- ensure the correct event type is used so sublabels are not run through normalization
- remove smart-capitalization classes as translated labels use i18n (which includes capitalization)
- give icons an optional key so that the console doesn't complain about duplication when rendering
* Add grace period for recording segment checks to prevent spurious ffmpeg restarts
* add admin precedence to proxy role_map resolution to prevent downgrade
* clean up
* formatting
* work around radix pointer events issue when dialog is opened from drawer
fixes https://github.com/blakeblackshear/frigate/discussions/21940
* prevent console warnings about missing titles and descriptions
make these invisible with sr-only
* remove duplicate language
* Adjust handling for device sizes
* Cleanup
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* fix display of custom sublabels in review item chip
use "manual" as type so it's not run through translation and normalized, producing "Josh S Car" instead of "Josh's Car"
* use css instead of js for reviewed button hover state in filmstrip
* Add 640x640 Intel NPU stats
* use css instead of js for reviewed button hover state in filmstrip
* update copilot instructions to copy HA's format
* Set json schema for genai
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* use default stable api version for gemini genai client
* update gemini docs
* remove outdated genai.md and update correct file
* Classification fixes
* Mutate when a date is selected and marked as reviewed
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* tracking details tweaks
- fix 4:3 layout
- get and use aspect of record stream if different from detect stream
* aspect ratio docs tip
* spacing
* fix
* i18n fix
* additional logs on ffmpeg exit
* improve no camera view
instead of showing an "add camera" message, show a specific message for empty camera groups when frigate already has cameras added
* add note about separate onvif accounts in some camera firmware
* clarify review summary report docs
* review settings tweaks
- remove horizontal divider
- update description language for switches
- keep save button disabled until review classification settings change
* use correct Toaster component from shadcn
* clarify support for intel b-series (battlemage) gpus
* add clarifying comment to dummy camera docs
* misc triggers tweaks
i18n fixes
fix toaster color
fix clicking on labels selecting incorrect checkbox
* update copilot instructions
* lpr docs tweaks
* add retry params to gemini
* i18n fix
* ensure users only see recognized plates from accessible cameras in explore
* ensure all zone filters are converted to pixels
zone-level filters were never converted from percentage area to pixels. RuntimeFilterConfig was only applied to filters at the camera level, not zone.filters.
Fixes https://github.com/blakeblackshear/frigate/discussions/21694
* add test for percentage based zone filters
* use export id for key instead of name
* update gemini docs
* icon improvements
add type to getIconForLabel
provide default icon for audio events
* Add preferred language to review docs
* prevent react Suspense crash during auth redirect
add redirect-check guards to stop rendering lazy routes while navigation is pending (fixes some users seeing React error #426 when auth expires)
* Uppsercase model name
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* mse player improvements
- fix WebSocket race condition by registering message handlers before sending and avoid closing CONNECTING sockets to eliminate "Socket is not connected" errors.
- attempt to resolve Safari MSE timeout and handler issues by wrapping temporary handlers in try/catch and stabilizing the permanent mse handler so SourceBuffer setup completes reliably.
- add intentional disconnect tracking to prevent unwanted reconnects during navigation/StrictMode cycles
* Update Ollama
* additional MSE tweaks
* Turn activity context prompt into a yaml example
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* disable modal on dropdown menu in explore
* add another example case for when classification overrides a sub label
* update ollama docs link
* Improve handling of automatic playback for recordings
* Improve ollama documentation
* Don't fall out when all recording segments exist
* clarify coral docs
* improve initial scroll to active item in detail stream
* i18n fixes
* remove console warning
* detail stream scrolling fixes for HA/iOS
* Improve usability of GenAI summary dialog and make clicking on the description directly open it
* Review card too
* Use empty card with dynamic text for review based on the user's config
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* use fallback timeout for opening media source
covers the case where there is no active connection to the go2rtc stream and the camera takes a long time to start
* Add review thumbnail URL to integration docs
* fix weekday starting point on explore when set to monday in UI settings
* only show allowed cameras and groups in camera filter button
* Reset the wizard state after closing with model
* remove footnote about 0.17
* 0.17
* add triggers to note
* add slovak
* Ensure genai client exists
* Correctly catch JSONDecodeError
* clarify docs for none class
* version bump on updating page
* fix ExportRecordingsBody to allow optional name field
fixes https://github.com/blakeblackshear/frigate/discussions/21413 because of https://github.com/blakeblackshear/frigate-hass-integration/pull/1021
* Catch remote protocol error from ollama
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* remove footer messages and add update topic to motion tuner view
restart after changing values is no longer required
* add cache key and activity indicator for loading classification wizard images
* Always mark model as untrained when a classname is changed
* clarify object classification docs
* add debug logs for individual lpr replace_rules
* update memray docs
* memray tweaks
* Don't fail for audio transcription when semantic search is not enabled
* Fix incorrect mismatch for object vs sub label
* Check if the video is currently playing when deciding to seek due to misalignment
* Refactor timeline event handling to allow multiple timeline entries per update
* Check if zones have actually changed (not just count) for event state update
* show event icon on mobile
* move div inside conditional
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* attributes endpoint
* event endpoints
* add attributes to more filters
* add to suggestions and query in explore
* support attributes in search input
* i18n
* add object type filter to endpoint
* add attributes to tracked object details pane
* add generic multi select dialog
* save object attributes endpoint
* add group by param to fetch attributes endpoint
* add attribute editing to tracked object details
* docs
* fix docs
* update openapi spec to match python
* fix coral docs
* add note about sub label object classification with person
* Catch OSError for deleting classification image
* add docs for dummy camera debugging
* add to sidebar
* fix formatting
* fix
* avx instructions are required for classification
* break text on classification card to prevent button overflow
* Ensure there is no NameError when processing
* Don't use region for state classification models
* fix spelling
* Handle attribute based models
* Catch case of non-trained model that doesn't add infinite number of classification images
* Actually train object classification models automatically
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* Wait for config to load before evaluating route access
Fix race condition where custom role users are temporarily denied access after login while config is still loading. Defer route rendering in DefaultAppView until config is available so the complete role list is known before ProtectedRoute evaluates permissions
* Use batching for state classification generation
* Ignore incorrect scoring images if they make it through the deletion
* Delete unclassified images
* mitigate tensorflow atexit crash by pre-importing tflite/tensorflow on main thread
Pre-import Interpreter in embeddings maintainer and add defensive lazy imports in classification processors to avoid worker-thread tensorflow imports causing "can't register atexit after shutdown"
* don't require old password for users with admin role when changing passwords
* don't render actions menu if no options are available
* Remove hwaccel arg as it is not used for encoding
* change password button text
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* Fix Safari popover issue in classification wizard
* use name for key instead of title
prevents duplicate key warnings when users mix vaapi and qsv
* update auth api endpoint descriptions and docs
* tweak headings
* fix note
* clarify classification docs
* Fix cuda birdseye
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
- don't look for event ids when trigger type is description
- don't try to delete thumbnail whe trigger type is description
- pass correct event ID into thumbnail deletion
* only show jwt secret tip for admin users
* fix preview endpoint 403 for viewer role when "all" param is used
* Update docs dependencies
* add warning if ffmpeg isn't selected for reolink http streams
* Update the motion for motion masks
* Also update objects
* Add docs about backchannel and two way talk takeover
* don't require restart when deleting zone or mask
* Ensure motion is correctly set when adjusting masks
* don't use python style raw prefixes in yaml examples in LPR docs
* wording
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* conditionally display actions for admin role only
* only allow admins to save annotation offset
* Fix classification reset filter
* fix explore context menu from blocking pointer events on the body element after dialog close
applying modal=false to the menu (not to the dialog) to fix this in the same way as elsewhere in the codebase
* add select all link to face library, classification, and explore
* Disable iOS image dragging for classification card
* add proxmox ballooning comment
* lpr docs tweaks
* yaml list
* clarify tls_insecure
* Improve security summary format and usefulness
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* jwt permissions
* add old password to body req
* add model and migration
need to track the datetime that passwords were changed for the jwt
* auth api backend changes
- use os.open to create jwt secret with restrictive permissions (0o600: read/write for owner only)
- add backend validation for password strength
- add iat claim to jwt so the server can determine when a token was issued and reject any jwts issued before a user's password_changed_at timestamp, ensuring old tokens are invalidated after a password change
- set logout route to public to avoid 401 when logging out
- issue new jwt for users who change their own password so they stay logged in
* improve set password dialog
- add field to verify old password
- add password strength requirements
* frontend tweaks for password dialog
* i18n
* use verify endpoint for existing password verification
avoid /login side effects (creating a new session)
* public logout
* only check if password has changed on jwt refresh
* fix tests
Fix migration 030 by using raw sql to select usernames (avoid ORM selecting nonexistent columns)
* add multi device warning to password dialog
* remove password verification endpoint
Just send old_password + new password in one request, let the backend handle verification in a single operation
* remove extra gap controller overrides
* new vod endpoint for clips to set discontinuity
ensure tracking-detail playlists emit #EXT-X-DISCONTINUITY (avoids fMP4 timestamp rewrites and playback stalls) while leaving standard recordings behavior unchanged
* use new endpoint
* ensure audio events display timeline entries in tracking details
* tweak tracking details layout for small desktop sizes
* update transcription docs
* Update classification docs for training recommendations
* Make number of classification images to be kept configurable
* Add bird to classification reference
* Fix incorrect averaging of the segments so it correctly only uses the most recent segments
* fix trigger logic
* add ability to download clean snapshot
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* pin onnx in rfdetr model generation command
* Apply suggestion from @NickM-27
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* require admin role to delete users
* explicitly prevent deletion of admin user
* Recordings playback fixes
* Remove nvidia pyindex
* Update version
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* fix wording in reference config
* spacing tweaks
* make live view settings drawer scrollable
* clarify audio transcription docs
* change audio transcription icon to activity indicator when transcription is in progress
the backend doesn't implement any kind of queueing for speech event transcription
* tracking details tweaks
- Add attribute box overlay and area
- Add score
- Throttle swr revalidation during video component rerendering
* add mse codecs to console debug on errors
* add camera name
* update live view docs
* use swr as single source of truth for searchDetail
rather than maintaining a separate state, derive the selected item from swr cache. fixes websocket sync when regenerating descriptions or fetching transcriptions
* fix key warning in console
* don't try to fetch event from review item for audio events
* update audio transcription toast wording
* Add a community supported badge to specific detectors in the info summaries to better separate
* Make object classification publish to tracked object update and add examples for state classification
* Add item to advanced docs about tensorflow limiting
* Don't show submission for in progress objects
* fix for ios not reporting video dimensions on initial metadata load
in testing, polling with requestAnimationFrame finds the dimensions within 2 frames
* Catch jetson nvidia device tree
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* ensure viewer roles are available in create user dialog
* admin-only endpoint to return unmaksed camera paths and go2rtc streams
* remove camera edit dropdown
pushing camera editing from the UI to 0.18
* clean up camera edit form
* rename component for clarity
CameraSettingsView is now CameraReviewSettingsView
* Catch case where user requsts clip for time that has no recordings
* ensure emergency cleanup also sets has_clip on overlapping events
improves https://github.com/blakeblackshear/frigate/discussions/20945
* use debug log instead of info
* update docs to recommend tmpfs
* improve display of in-progress events in explore tracking details
* improve seeking logic in tracking details
mimic the logic of DynamicVideoController
* only use ffprobe for duration to avoid blocking
fixes https://github.com/blakeblackshear/frigate/discussions/20737#discussioncomment-14999869
* Revert "only use ffprobe for duration to avoid blocking"
This reverts commit 8b15078005.
* update readme to link to object detector docs
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* don't flatten the search result cache when updating
this would cause an infinite swr fetch if something was mutated and then fetch was called again
* Properly sort keys for recording summary in StorageMetrics
* tracked object description box tweaks
* Remove ability to right click on elements inside of face popup
* Update reprocess message
* don't show object track until video metadata is loaded
* fix blue line height calc for in progress events
* Use timeline tab by default for notifications but add a query arg for customization
* Try and improve notification opening behavior
* Reduce review item buffering behavior
* ensure logging config is passed to camera capture and tracker processes
* ensure on demand recording stops when browser closes
* improve active line progress height with resize observer
* remove icons and duplicate find similar link in explore context menu
* fix for initial broken image when creating trigger from explore
* display friendly names for triggers in toasts
* lpr and triggers docs updates
* remove icons from dropdowns in face and classification
* fix comma dangle linter issue
* re-add incorrectly removed face library button icons
* fix sidebar nav links on < 768px desktop layout
* allow text to wrap on mark as reviewed button
* match exact pixels
* clarify LPR docs
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* digest auth backend
* frontend
* i18n
* update field description language to include note about onvif specific credentials
* mask util helper function
* language
* mask passwords in http-flv and others where a url param is password
* backend api endpoint
* don't add no-credentials version of streams to rtsp_candidates
* frontend types
* improve types
* add optional probe dialog to wizard step 1
* i18n
* form description and field change
* add onvif form description
* match onvif probe pane with other steps in the wizard
* refactor to add probe and snapshot as step 2
* consolidate probe dialog
* don't change dialog size
* radio button style
* refactor to select onvif urls via combobox in step 3
* i18n
* add scrollbar container
* i18n cleanup
* fix button activity indicator
* match test parsing in step 3 with step 2
* hide resolution if both width and height are zero
* use drawer for stream selection on mobile in step 3
* suppress double toasts
* api endpoint description
* Don't warn when event ids have expired for trigger sync
* Import faster_whisper conditinally to avoid illegal instruction
* Catch OpenVINO runtime error
* fix race condition in detail stream context
navigating between tracked objects in Explore would sometimes prevent the object track from appearing
* Handle case where classification images are deleted
* Adjust default rounded corners on larger screens
* Improve flow handling for classification state
* Remove images when wizard is cancelled
* Improve deletion handling for classes
* Set constraints on review buffers
* Update to support correct data format
* Set minimum duration for recording based review items
* Use friendly name in review genai prompt
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* use grid view on desktop
* refactor description box to remove buttons and add row of action icon buttons
* add tooltips
* fix trigger creation
when using the search effect to create a trigger, the prefilled object will not exist in the config yet
* i18n
* set max width on thumbnail
* 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>
* remove frigate+ icon from explore grid footer
* add margin
* pointer cursor on event menu items in detail stream
* don't show submit to plus for non-objects and if plus is disabled
* tweak spacing in annotation settings popover
* Fix deletion of classification images and library
* Ensure after creating a class that things are correct
* Fix dialog getting stuck
* Only show the genai summary popup on mobile when timeline is open
* fix audio transcription embedding
* spacing
* hide x icon on restart sheet to prevent closure issues
* prevent x overflow in detail stream on mobile safari
* ensure name is valid for search effect trigger
* add trigger to detail actions menu
* move find similar to actions menu
* Use a column layout for MobilePageContent in PlatformAwareSheet
This is so the header is outside the scrolling area and the content can grow/scroll independently. This now matches the way it's done in classification
* Skip azure execution provider
* add optional ref to always scroll to top
the more filters in explore was not scrolled to the top on open due to the use of framer motion
* fix title classes on desktop
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* add prev/next buttons on desktop
* buttons should work with summary and grid view
* i18n
* small tweaks
* don't change dialog size
* remove heading and count
* remove icons
* spacing
* two column detail view
* add actions to dots menu
* move actions menu to its own component
* set modal to false on face library dropdown to guard against improper closures
https://github.com/shadcn-ui/ui/discussions/6908
* frigate plus layout
* remove face training
* clean up unused
* refactor to remove duplication between mobile and desktop
* turn annotation settings into a popover
* fix popover
* improve annotation offset popver
* change icon and popover text in detail stream for annotation settings
* clean up
* use drawer on mobile
* fix setter function
* use dialog ref for popover portal
* don't portal popover
* tweaks
* add button type
* lower xl max width
* fixes
* justify
* Always show ID field when editing a trigger
* use onBlur method for form validation
this will prevent the trigger ID from expanding too soon when a user is typing the friendly name
* camera wizard input mobile font zooming
* ensure the selected page is visible when navigating via url on mobile
* Filter detail stream to only show items from within the review item
* remove incorrect classes causing extra scroll in detail stream
* change button label
* fix mobile menu button highlight issue
---------
Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
* detail stream settings
* remove old review detail dialog
* change layout
* use detail stream in tracking details
* reusable tabs component
* pass in tabs for desktop
* fix object selection and time updating
* i18n
* aspect fixes
* include tolerance for displaying of path and zone
some browsers (firefox and probably brave) intentionally reduce precision of seeking with currentTime for privacy reasons
* detail stream seeking fixes
* tracking details seeking fixes
* layout tweaks
* add download button back for now
* remove
* remove
* snapshot is now default tab
* black background
* fix backend logic
* fixes
* ensure data being sent to api is segment aligned
* tweak
* tweaks to keep motion review as-is
* fix for half segment fractional seconds when using zooming
* add reusable component for combined name / internal name form field
* fix labels
* refactor utilities
* refactor image picker
* lazy loading
* don't clear text box
* trigger wizard
* image picker fixes
* use name and ID field in trigger edit dialog
* ensure wizard resets when reopening
* icon size tweak
* multiple triggers can trigger at once
* remove scrolling
* mobile tweaks
* remove duplicated component
* fix types
* use table on desktop and keep cards on mobile
* provide default