| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
Fix browser time format handling (#22694) * implement hook to return resolved "24hour" | "12hour" string delegate to existing use24HourTime(), which correctly detects the browser's locale preference via Intl.DateTimeFormat * update frontend to use use24HourTime(config) or useTimeFormat(config) instead of directly comparing config.ui.time_format | 5 个月前 | |
UI tweaks (#23346) * remove redundant per-view toasters in settings * add variants to standardize dialog footer button layouts * remove text-md this class name compiles to nothing in tailwind. we used to add it to prevent iOS from zooming when focusing on an input, but that is now solved via the viewport meta in index.html * make wizard footers consistent with dialog footers * consistent destructive button style remove text-white from individual buttons and add it to the variant | 3 个月前 | |
Miscellaneous fixes (#23358) * improve visibility of blurred icon buttons * add motion search to history actions menu and mobile drawer * i18n * use pure css for motion search dialog video * defer profile restoration until subscribers are connected * change order of features in mobile review settings drawer | 3 个月前 | |
Debug replay (#22212) * 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 | 5 个月前 | |
UI tweaks (#23346) * remove redundant per-view toasters in settings * add variants to standardize dialog footer button layouts * remove text-md this class name compiles to nothing in tailwind. we used to add it to prevent iOS from zooming when focusing on an input, but that is now solved via the viewport meta in index.html * make wizard footers consistent with dialog footers * consistent destructive button style remove text-white from individual buttons and add it to the variant | 3 个月前 | |
UI tweaks (#23346) * remove redundant per-view toasters in settings * add variants to standardize dialog footer button layouts * remove text-md this class name compiles to nothing in tailwind. we used to add it to prevent iOS from zooming when focusing on an input, but that is now solved via the viewport meta in index.html * make wizard footers consistent with dialog footers * consistent destructive button style remove text-white from individual buttons and add it to the variant | 3 个月前 | |
UI improvements and fixes (#23690) * add ability to edit enabled and save_attempts for classification models in the UI * add state motion and interval configs to edit dialog * fix preview playback rate for motion previews * add docs note about environment vars and go2rtc * update live view faq | 1 个月前 | |
Add more vehicle types to default attribute map (#24097) * run lpr on more vehicle types by default before, a config change to attribute_map was required * logging tweaks * remove arg * use attributes for frontend check * docs * only check thumbnail attributes the object can have | 10 天前 | |
Replace react-tracked and react-use-websocket with useSyncExternalStore (#22386) * refactor websockets to remove react-tracked react 19 removed useReducer eager bailout, which broke react-tracked. react-tracked works by wrapping state in a JavaScript Proxy. When a component reads state.someField, the proxy records that access. On the next state update, it compares only the fields each component actually touched and skips re-renders if those fields are unchanged. Under the hood, this relies on useReducer — and in React 18, useReducer had an "eager bail-out" that short-circuited rendering when the new state was === to the old state. React 19 removed that optimization, so every dispatch now schedules a render regardless, and the proxy comparison runs too late to prevent it. useSyncExternalStore is a React primitive (added in 18, stable in 19) designed for exactly this pattern: subscribing to an external store: useSyncExternalStore( subscribe, // (listener) => unsubscribe — called when the store changes getSnapshot // () => value — returns the current value for this subscriber ) React calls getSnapshot during render and compares the result with Object.is. If the value is the same reference, the component bails out — no re-render. The key difference from react-tracked is that this bail-out is built into React's reconciler, not bolted on via proxy tricks and useReducer. The per-topic subscription model makes this efficient. Instead of one global store where every subscriber has to check if their fields changed, each useWs("some/topic", ...) call subscribes only to that topic's listener set. When a message arrives for front_door/detect/state, only components subscribed to that exact topic get their listener fired → React calls their getSnapshot → Object.is compares the value → bail-out if unchanged. Components watching back_yard/detect/state are never even notified. * remove react-tracked and react-use-websocket * refactor usePolygonStates to use ws topic subscription * fix TimeAgo refresh interval always returning 1s due to unit mismatch (seconds vs milliseconds) older events now correctly refresh every minute/hour instead of every second * simplify * clean up * don't resend onconnect * clean up * remove patch | 5 个月前 | |
Multi-export UI fixes (#23959) * multi export fixes * i18n * new tests | 25 天前 | |
Miscellaneous fixes (#23335) * stabilize chart options to stop ApexCharts updateOptions running on every stats tick * constrain height of export dialog * stop audio maintainer when deleting a camera * run face register and recognize API handlers in threadpool | 3 个月前 | |
update icons and i18n for 2026.2 frigate+ labels (#23803) | 1 个月前 | |
Frontend Miscellaneous fixes (#23751) * fix: fix logger page i18n * fix: fix button components text * fix: fix command components scrollbar * revert: revert fix button components text | 1 个月前 | |
UI tweaks (#23346) * remove redundant per-view toasters in settings * add variants to standardize dialog footer button layouts * remove text-md this class name compiles to nothing in tailwind. we used to add it to prevent iOS from zooming when focusing on an input, but that is now solved via the viewport meta in index.html * make wizard footers consistent with dialog footers * consistent destructive button style remove text-white from individual buttons and add it to the variant | 3 个月前 | |
fix notification suspend state lost on page reload (#23989) <camera>/notifications/suspended arrives as a string over the live connection but as a number in the camera_activity snapshot, and the truthiness guard dropped the numeric 0, so a camera with notifications off rendered as active after a reload. Normalize to a string and derive isSuspended instead of storing it. | 23 天前 | |
Mobile UI/UX improvements (#23402) * increase camera group icon size on mobile add an animated slider when there is not enough space for all defined camera groups * change desktop and mobile edit camera groups icon to pencil and add desktop tooltip * apply safe area insets to mobile layout in PWA mode using viewport-fit=cover * adaptively size bottom bar nav targets to 48px when they fit, else compact icon size now targets the standardized 48×48px mobile touch target (Material Design 3 / Android 48dp bottom-nav minimum) | 3 个月前 | |
Miscellaneous fixes (0.18 beta) (#23934) * add host npu requirements to docs * allow toggling live audio transcription via mqtt * improve spacing consistency on mobile drawers * fix clearing the region grid not surviving a restart | 28 天前 | |
Return a specific 404 when starting a debug replay with no recordings in range (#24024) | 18 天前 | |
Miscellaneous fixes (#23610) * Handle back seeking going to previous clip * scope /recordings/unavailable query to the caller's allowed cameras * listen for config updates in activity manager * don't set search after awaited request Intentionally do NOT setSearch() to mark the open event submitted. This runs after the awaited request, by which point the user may have closed the dialog; re-setting the parent's selected event would resurrect it and the force-open effect would reopen it (see #23599). The local "submitted" state covers the open card, and mutate() updates the events cache so the grid and any future open reflect the result. * fix ruff #23201 removed pathlib import but for some reason it's just now causing ruff to fail --------- Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com> | 2 个月前 | |
Improve review segmentation behavior (#19850) * Refactor active objects to class * Keep segment going when detection is newer than end of alert * Cleanup logic * Fix * Cleanup ending * Adjust timing * Improve detection saving * Don't have padding at end for in progress reviews * Add review config for cutoff times | 11 个月前 | |
Miscellaneous fixes (0.18 beta) (#23934) * add host npu requirements to docs * allow toggling live audio transcription via mqtt * improve spacing consistency on mobile drawers * fix clearing the region grid not surviving a restart | 28 天前 | |
Miscellaneous fixes (0.18 beta) (#23898) * update homekit docs * update dictionary * preserve function names in production builds adds only 162kb gzipped/450k unzipped to the bundle * margin tweak * fix maximum update depth exceeded when dragging the timeline handlebar Dragging the handlebar, especially quickly or with fast direction changes, could exceed React's nested update limit and unmount the whole app, leaving a blank screen. Motion search was worst affected. The drag loop committed a new time into React state on every animation frame. Edge auto-scrolling mutates scrollTop each iteration, so the value always differed and React's same-value bail-out never engaged, letting the update chain run to the limit of 50. Pace those commits to one per 100ms and flush the pending value on release, so the drop position is still exact. The handlebar position and label are written to the DOM directly and remain at frame rate. useUserInteraction dispatched state on every scroll and touchmove event; only commit on the leading edge. Motion search also passed fresh array literals for the timeline's events, motion events and unavailable ranges, giving the segment memo and the drag effect new dependencies on every render. Both views also passed an inline arrow for onHandlebarDraggingChange, which is an effect dependency that calls setState. * Verify motion search jobs belong to the requested camera * Apply persisted profile and runtime overrides before workers start Worker processes are handed a copy of the config when they start and only learn about later changes from the config_updater broadcast, which is plain ZMQ PUB/SUB with no queue, ack, or retained value, so a message published before a subscriber has connected is dropped and never re-sent. The persisted profile and the runtime camera toggles were restored only by that broadcast, at the very end of startup, so a worker that lost the race kept its yaml values for the rest of the session: audio detection kept running on a camera whose audio had been toggled off, even though /api/config, the UI, and the runtime state file all showed it disabled. Split both restores into a config half and a publish half. ProfileManager.restore_persisted_profile_to_config() and Dispatcher.reapply_runtime_state_to_config() now run right after init_profile_manager(), before the first worker starts, so every worker is handed a config that already carries both layers. ProfileManager.restore_persisted_profile() and Dispatcher.restore_runtime_state() still run at the end of startup: the recording, review, and embeddings processes start before the dispatcher exists, so the broadcast remains their only channel, and MQTT needs the retained switch states. Both config passes have to stay after init_profile_manager(), which snapshots the config as the no-profile base that deactivation resets to. * End timeline drags on touchcancel | 1 个月前 | |
UI tweaks (#23346) * remove redundant per-view toasters in settings * add variants to standardize dialog footer button layouts * remove text-md this class name compiles to nothing in tailwind. we used to add it to prevent iOS from zooming when focusing on an input, but that is now solved via the viewport meta in index.html * make wizard footers consistent with dialog footers * consistent destructive button style remove text-white from individual buttons and add it to the variant | 3 个月前 | |
Miscellaneous fixes (0.18 beta) (#23934) * add host npu requirements to docs * allow toggling live audio transcription via mqtt * improve spacing consistency on mobile drawers * fix clearing the region grid not surviving a restart | 28 天前 | |
Miscellaneous fixes (#23648) * sort preview cameras in history by ui order * sort cameras by UI order in various components for consistent display * add no recordings faq * fix link * recording cache faq * add link * improve anchor naming in object detector docs rather than #configuration-1, #configuration-2, etc * use yaml instead of json for object detector docs * fix anchor | 1 个月前 | |
Use cn() for class names throughout (#11278) * add scrollbar on ptz presets dropdown * use cn function for class names throughout * Revert "add scrollbar on ptz presets dropdown" This reverts commit 2cee93dc3ecf0f77c78b8ef5bcd3c7135227ecd3. | 2 年前 | |
Miscellaneous Fixes (#22890) * 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 | 4 个月前 | |
spacing on mobile landscape (#11397) | 2 年前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 5 个月前 | ||
| 3 个月前 | ||
| 3 个月前 | ||
| 5 个月前 | ||
| 3 个月前 | ||
| 3 个月前 | ||
| 1 个月前 | ||
| 10 天前 | ||
| 5 个月前 | ||
| 25 天前 | ||
| 3 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 3 个月前 | ||
| 23 天前 | ||
| 3 个月前 | ||
| 28 天前 | ||
| 18 天前 | ||
| 2 个月前 | ||
| 11 个月前 | ||
| 28 天前 | ||
| 1 个月前 | ||
| 3 个月前 | ||
| 28 天前 | ||
| 1 个月前 | ||
| 2 年前 | ||
| 4 个月前 | ||
| 2 年前 |