Commit Graph

5724 Commits

Author SHA1 Message Date
ryzendigo
dfc6ff9202
fix: variable shadowing silently drops object label updates (#22472)
When an existing tracked object's label or stationary status changes
(e.g. sub_label assignment from face recognition), the update handler
declares a new const newObjects that shadows the outer let newObjects.

The label and stationary mutations apply to the inner copy, but
handleSetObjects on line 148 reads the outer variable which was never
mutated. The update is silently discarded.

Remove the inner declaration so mutations apply to the outer variable
that gets passed to handleSetObjects.
2026-03-16 06:43:25 -06:00
ryzendigo
bc29c4ba71
fix: off-by-one error in GpuSelector.get_gpu_arg (#22464)
gpu <= len(self._valid_gpus) should be gpu < len(self._valid_gpus).

The list is zero-indexed, so requesting gpu index equal to the list
length causes an IndexError. For example, with 2 valid GPUs (indices
0 and 1), requesting gpu=2 passes the check (2 <= 2) but
self._valid_gpus[2] is out of bounds.
2026-03-16 06:42:03 -06:00
Claude
81f0164e9c
fix: show motion dot regardless of liveReady in grid callback path
The motionVisible condition gated the external dot (via onActiveMotionChange
callback) on liveReady, causing the dot to stay hidden for cameras in
continuous mode (showStillWithoutActivity=false) while the stream is loading
or reconnecting. Since the parent (DraggableGridLayout) renders the dot
outside the stream viewport, it should reflect actual motion state without
depending on stream load status.

Simplify the callback-path effect to use !!(autoLive && !offline &&
activeMotion) so the dot appears in the grid card whenever motion is active.
The full condition (including liveReady) is still used for the inline dot
rendered inside LivePlayer when no callback is provided.

https://claude.ai/code/session_019B4dJXtcxvHn97ZaqHUB62
2026-03-16 12:05:26 +00:00
ibs0d
85a8fef628
Merge pull request #62 from ibs0d/claude/fix-zoom-statistics-WFvOm
fix: enable stats collection when onStatsUpdate callback is provided
2026-03-16 21:18:39 +11:00
Claude
3ba0f1e230
fix: enable stats collection when onStatsUpdate callback is provided
getStats was always passed showStats (false in grid view), so underlying
players never collected stats data. Now uses showStats || !!onStatsUpdate
so players collect stats whenever the external callback is present.

https://claude.ai/code/session_019B4dJXtcxvHn97ZaqHUB62
2026-03-16 10:14:41 +00:00
ibs0d
ce79054590
Merge pull request #61 from ibs0d/claude/fix-zoom-statistics-WFvOm
fix: prevent infinite render loop in zoom overlay callbacks
2026-03-16 21:03:29 +11:00
Claude
89864e364d
fix: prevent infinite render loop in zoom overlay callbacks
Use useRef to store onStatsUpdate/onLoadingChange/onActiveMotionChange
callbacks so useEffect deps don't include the callback references.
Inline arrow functions in .map() change identity every render, causing
the previous useEffect([stats, onCallback]) to re-fire on each parent
re-render, triggering another setState → re-render → infinite loop.

https://claude.ai/code/session_019B4dJXtcxvHn97ZaqHUB62
2026-03-16 09:54:16 +00:00
ibs0d
c3465dd611
Merge pull request #60 from ibs0d/claude/fix-zoom-statistics-WFvOm
fix: exclude stats, spinner and motion dot from camera zoom transform
2026-03-16 20:32:14 +11:00
Claude
9307272007
fix: exclude stats, spinner and motion dot from camera zoom transform
Move PlayerStats, ActivityIndicator and motion dot rendering outside the
zoom transform div in DraggableGridLayout so they are not scaled when
the user zooms with Shift+Wheel.

- Add onStatsUpdate, onLoadingChange, onActiveMotionChange callback props
  to LivePlayer; when provided, suppress the internal overlay elements
  and bubble state up to the parent instead
- In DraggableGridLayout, maintain per-camera overlay states and render
  the three overlays as siblings to the zoom div (inside the clipping
  viewport) so they remain at natural size regardless of zoom level

https://claude.ai/code/session_019B4dJXtcxvHn97ZaqHUB62
2026-03-16 09:08:43 +00:00
ibs0d
00acb95be4
Merge pull request #59 from ibs0d/claude/remove-grid-spacing-E0vKX
Remove rounded corners from CameraImage (visible during stream load)
2026-03-16 19:40:56 +11:00
Claude
8f4063d162
Remove rounded corners from CameraImage (visible during stream load)
https://claude.ai/code/session_01THf2SuS7hLt9NgstxvKdg8
2026-03-16 08:34:38 +00:00
ibs0d
caaf4e7aae
Merge pull request #58 from ibs0d/claude/remove-grid-spacing-E0vKX
Remove rounded corners from LivePlayer component
2026-03-16 19:22:51 +11:00
Claude
16281f669a
Remove rounded corners from LivePlayer component
https://claude.ai/code/session_01THf2SuS7hLt9NgstxvKdg8
2026-03-16 08:18:40 +00:00
ibs0d
ab6a44f046
Merge pull request #57 from ibs0d/claude/remove-grid-spacing-E0vKX
Remove rounded corners from grid camera cards
2026-03-16 19:07:38 +11:00
Claude
61d399db05
Remove rounded corners from grid camera cards
https://claude.ai/code/session_01THf2SuS7hLt9NgstxvKdg8
2026-03-16 08:05:51 +00:00
ibs0d
78ee50a1ce
Merge pull request #56 from ibs0d/claude/remove-grid-spacing-E0vKX
Fix unused marginValue variable after removing grid spacing
2026-03-16 18:47:39 +11:00
Claude
b22dc4c946
Fix unused marginValue variable after removing grid spacing
Removed marginValue state and useLayoutEffect that calculated font size,
and removed unused useLayoutEffect import.

https://claude.ai/code/session_01THf2SuS7hLt9NgstxvKdg8
2026-03-16 07:36:46 +00:00
ibs0d
8b7e6abe6a
Merge pull request #55 from ibs0d/claude/remove-grid-spacing-E0vKX
Remove grid spacing between cards and from edges
2026-03-16 18:22:56 +11:00
Claude
b7b5b08d53
Remove grid spacing between cards and from edges
Set margin and containerPadding to [0,0] in ResponsiveGridLayout,
removed px-2/my-2/pb-8 from the wrapper div, and updated cellHeight
formula to not account for margins.

https://claude.ai/code/session_01THf2SuS7hLt9NgstxvKdg8
2026-03-16 07:15:11 +00:00
ibs0d
d213edd25b
Merge pull request #54 from ibs0d/claude/fix-storage-stats-sUJof
fix: clean up stale DB recording entries when file is missing on disk
2026-03-16 16:09:17 +11:00
Claude
f528a16065
fix: clean up stale DB recording entries when file is missing on disk
When reduce_storage_consumption() encountered a FileNotFoundError
(file deleted outside Frigate), it silently skipped the recording
without removing it from the database. Over time this caused the DB
to accumulate stale entries, making "Frigate recordings tracked" in
/system#storage dramatically overstate actual disk usage.

The bug also affected cleanup behaviour: stale entries don't count
toward freed-space accounting, so Phase 2 (force-delete retained
recordings) could trigger prematurely when most old entries were stale.

Fix: always append the recording to deleted_recordings regardless of
whether the file existed, so the DB entry is removed. freed-space
accounting is unchanged — FileNotFoundError still does not increment
deleted_segments_size since no actual disk space was recovered.

Applied to both Phase 1 (non-retained) and Phase 2 (retained) loops
inside reduce_storage_consumption().

https://claude.ai/code/session_01DMdSSQhQfTuXmzPtRvJmLB
2026-03-16 04:58:47 +00:00
ibs0d
52f78c9de9
Merge pull request #53 from ibs0d/claude/fix-grid-layout-height-p9ZWo
fix: use callback ref to measure container width after skeleton unmounts
2026-03-16 15:22:43 +11:00
Claude
710dec00fe
fix: use callback ref to measure container width after skeleton unmounts
useLayoutEffect with [] deps only ran on the initial render when
gridContainerRef was null (grid div was hidden behind skeleton).
After skeleton disappeared the div mounted but useLayoutEffect never
re-ran, leaving containerWidth=0 and Responsive invisible (blank screen).

A callback ref fires every time the element mounts, so containerWidth
is always set immediately when the grid div first appears.
2026-03-16 04:12:48 +00:00
ibs0d
8a3eaff22f
Merge pull request #52 from ibs0d/claude/fix-grid-layout-height-p9ZWo
Claude/fix grid layout height p9 z wo
2026-03-16 14:43:56 +11:00
Игорь Владимирович
eb5d985daa revert grid fixes 2026-03-16 12:21:51 +11:00
Nicolas Mowen
5a214eb0d1
Review fixes (#22442)
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
* Don't set provider options for llama.cpp as they are set on llama.cpp side

* fix openai format
2026-03-15 07:26:36 -05:00
Josh Hawkins
310b5dfe05
UI tweaks and fixes (#22448)
* fix double scrollbar in debug replay

* always hide ffmpeg cpu warnings for replay cameras

* add slovenian

* fix motion previews on safari and ios

match the logic used in ScrubbablePreview for manually stepping currentTime at the correct rate

* prevent motion recalibration when opening motion tuner
2026-03-15 07:26:23 -05:00
Claude
067fdb50e1
fix: replace useResizeObserver with useLayoutEffect for reliable container width
useResizeObserver reads ref.current during render (before commit), so on
first render ref.current is null, no observation starts, and containerWidth
stays 0 if no subsequent re-render happens (e.g. page refresh with cached
SWR data). useLayoutEffect runs after refs are committed, so ref.current
is always the real DOM element.

This fixes both the right-column overflow (no window.innerWidth fallback
needed — width is always the actual container width) and the black screen
on refresh (containerWidth is reliable before the first paint).

https://claude.ai/code/session_01H1sqbcFmtwwsdNTJcJHJWd
2026-03-15 12:03:54 +00:00
Claude
5e40dbbcd2
fix: reliably init grid width on page refresh using useLayoutEffect
useResizeObserver reads ref.current at render time; on page refresh with
fast SWR cache, no re-render occurs after mount so ref.current remains null
in the effect, observation never starts, and containerWidth stays 0 forever.

Add a useLayoutEffect that measures offsetWidth synchronously before paint
as a seed value (effectiveWidth = containerWidth || initialWidth). Once
ResizeObserver fires normally, containerWidth takes over. The Responsive
grid is gated on effectiveWidth > 0 so it always renders correctly on both
first load and refresh.

https://claude.ai/code/session_01H1sqbcFmtwwsdNTJcJHJWd
2026-03-15 11:32:13 +00:00
ibs0d
60f2e11666
fix right side in grid 2026-03-15 22:13:23 +11:00
Claude
d39590604f
fix: prevent grid right-edge overflow by gating Responsive on containerWidth
Gate <Responsive> rendering on containerWidth > 0 so it only mounts after
ResizeObserver has measured the container. Use availableWidth directly as
the width prop (no window.innerWidth fallback) since the component now only
renders when containerWidth is known. This prevents the grid from rendering
wider than its container (which caused the rightmost column to overflow the
right edge).

https://claude.ai/code/session_01H1sqbcFmtwwsdNTJcJHJWd
2026-03-15 11:03:26 +00:00
ibs0d
aad4739643
fix broken grid, maybe 2026-03-15 21:24:38 +11:00
Claude
84f3b16461
Fix DraggableGridLayout initial height collapse due to nullish coalescing bug
availableWidth starts at 0 (not null/undefined) before ResizeObserver fires.
The ?? operator passes 0 through instead of falling back to window.innerWidth,
making cellHeight negative and causing react-grid-layout to render a ~10px
container. The overflow-x-hidden div then becomes an implicit scroll container,
producing the 'cards squeezed in a small rectangle' symptom.

Changing ?? to || makes 0 trigger the window.innerWidth fallback, giving a
reasonable initial rowHeight until the real container width is measured.

https://claude.ai/code/session_01H1sqbcFmtwwsdNTJcJHJWd
2026-03-15 10:15:52 +00:00
ibs0d
a0ca322129
revert Update RecordingView.tsx 2026-03-15 14:31:11 +11:00
ibs0d
86de033f74
Merge branch 'blakeblackshear:dev' into dev 2026-03-15 13:55:05 +11:00
ibs0d
7c11aef72c
Merge pull request #51 from ibs0d/revert-46-claude/fix-video-stretch-history-ansQF
Revert "Claude/fix video stretch history ans qf"
2026-03-15 13:38:21 +11:00
ibs0d
0c78103e56
Revert "Claude/fix video stretch history ans qf" 2026-03-15 13:38:11 +11:00
ibs0d
e8dde48626
Merge pull request #50 from ibs0d/revert-47-claude/fix-video-stretch-history-ansQF
Revert "Claude/fix video stretch history ans qf"
2026-03-15 13:37:43 +11:00
ibs0d
14709511f0
Revert "Claude/fix video stretch history ans qf" 2026-03-15 13:37:31 +11:00
ibs0d
da50c9660b
Merge pull request #49 from ibs0d/revert-48-claude/fix-video-stretch-history-ansQF
Revert "Add config useSWR to DetectionReview component"
2026-03-15 13:37:03 +11:00
ibs0d
b6b3c970c2
Revert "Add config useSWR to DetectionReview component" 2026-03-15 13:36:49 +11:00
padioca
687fefb343
fix: run Frigate+ API calls in thread pool to prevent event loop bloc… (#22426)
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
2026-03-14 14:31:33 -06:00
ibs0d
f35a257844
Update RecordingView.tsx 2026-03-14 16:34:48 +11:00
ibs0d
7033fc965c
Merge pull request #48 from ibs0d/claude/fix-video-stretch-history-ansQF
Add config useSWR to DetectionReview component
2026-03-14 15:14:56 +11:00
Claude
128f016b5a
Add config useSWR to DetectionReview component
config was referenced but not available in DetectionReview scope.

https://claude.ai/code/session_01EwdaKGsrRLZ74smmCQ1MgW
2026-03-14 04:08:12 +00:00
ibs0d
54bfced9ba
Merge pull request #47 from ibs0d/claude/fix-video-stretch-history-ansQF
Claude/fix video stretch history ans qf
2026-03-14 10:31:50 +11:00
Claude
0dd59b1409
Fix review card aspect ratio using camera's actual detect dimensions
Hard-coded aspect-video (16:9) caused stretching for non-16:9 cameras.
Now uses camera detect.width/detect.height from config, falling back to 16:9.

https://claude.ai/code/session_01EwdaKGsrRLZ74smmCQ1MgW
2026-03-13 21:13:55 +00:00
Nicolas Mowen
7864c446fc
Update inference times for RTX 5060 Ti (#22423)
* Update inference times for RTX 5060 Ti

* Ad RF-DETR

Added Nano-320 performance data for RTX 5060 Ti.
2026-03-13 11:43:16 -05:00
ibs0d
fe6713f41c
Update ScrubbablePreview.tsx 2026-03-13 23:04:52 +11:00
Claude
6cb31d1f96
Fix review page preview video stretch by adding object-contain
VideoPreview's <video> had aspect-video + size-full, but size-full overrides
the aspect-ratio constraint, leaving object-fit at the default fill.
Adding object-contain preserves the video's natural aspect ratio in event cards.

https://claude.ai/code/session_01EwdaKGsrRLZ74smmCQ1MgW
2026-03-13 11:57:56 +00:00