Commit Graph

5692 Commits

Author SHA1 Message Date
ibs0d
3a550ebc2f
Merge pull request #96 from ibs0d/claude/add-fit-to-screen-mode-XvHoV
Fix fit-to-screen drag card disappearing and swap icon
2026-03-21 23:31:52 +11:00
Claude
46334ec8be
Fix fit-to-screen drag card disappearing and swap icon
handleFitDragStop now sorts dragged items by position to determine new
order, then recalculates all x/y coords into a strict dense grid instead
of spreading react-grid-layout's arbitrary y values — prevents cards from
being pushed off-screen after a drag.

Also replaces LuMaximize with LuScanBarcode for the fit-to-screen button.

https://claude.ai/code/session_01Cu7YDRKZrYX3sBs6g9w2dy
2026-03-21 12:26:03 +00:00
ibs0d
f2b6f08124
Merge pull request #95 from ibs0d/claude/add-fit-to-screen-mode-XvHoV
Allow drag reordering in Fit to Screen mode
2026-03-21 22:59:03 +11:00
Claude
853978ed4d
Allow drag reordering in Fit to Screen mode
In fitToScreen mode, drag is now enabled so users can reorder cameras
while in edit mode. A fitLayoutOverride state captures the new order
after each drag, normalizing w/h back to gridUnitsPerCam to prevent
size changes. The override resets automatically when the camera list or
grid parameters change.

https://claude.ai/code/session_01Cu7YDRKZrYX3sBs6g9w2dy
2026-03-21 11:53:49 +00:00
ibs0d
fc5e59ec54
Merge pull request #94 from ibs0d/claude/add-camera-rotation-support-Lg2l9
Add ui.rotate support to PreviewPlayer (scrubbing preview in recordings)
2026-03-21 21:50:12 +11:00
Claude
e03f626aeb
Add ui.rotate support to PreviewPlayer (scrubbing preview in recordings)
- PreviewPlayer: add rotate prop, pass through to PreviewVideoPlayer and
  PreviewFramesPlayer
- PreviewVideoPlayer: add rotate prop + ResizeObserver; wrap <img> and
  <video> in width/height-swap container with rotate(90deg) transform;
  add h-full when rotate to fix height chain
- PreviewFramesPlayer: same pattern for <img> frame previews
- DynamicVideoPlayer: pass rotate={rotate} to PreviewPlayer

https://claude.ai/code/session_01CDLHQPGpf8w44jpsG8g8nM
2026-03-21 10:31:22 +00:00
ibs0d
8a83bb2e04
Merge pull request #93 from ibs0d/claude/add-fit-to-screen-mode-XvHoV
Add Fit to Screen mode to Live view grid
2026-03-21 21:22:52 +11:00
Claude
be1a19bccd
Add Fit to Screen mode to Live view grid
Adds a toggle button to the Live view toolbar that automatically arranges
all cameras to fit within the viewport without scrolling. Uses a brute-force
algorithm to find the optimal number of columns that maximizes camera size
while keeping all cameras visible. State persists via IndexedDB.

https://claude.ai/code/session_01Cu7YDRKZrYX3sBs6g9w2dy
2026-03-21 10:17:13 +00:00
ibs0d
81f3619542
Merge pull request #92 from ibs0d/claude/add-camera-rotation-support-Lg2l9
Fix ui.rotate in HlsVideoPlayer: broken CSS height chain on desktop
2026-03-21 20:03:40 +11:00
Claude
6f70c1511d
Fix ui.rotate in HlsVideoPlayer: broken CSS height chain on desktop
TransformComponent's contentStyle had height: undefined on desktop,
so the rotate container's ResizeObserver measured height=0, causing
the inner div to get width=0 and the video to be invisible.

Adding || rotate to the height condition ensures the height chain is
intact when rotation is active, matching the isMobile path that already
set height: "100%".

https://claude.ai/code/session_01CDLHQPGpf8w44jpsG8g8nM
2026-03-21 09:02:48 +00:00
ibs0d
e0ee08ac15
Merge pull request #91 from ibs0d/claude/add-camera-rotation-support-Lg2l9
Add ui.rotate support to RecordingView / HlsVideoPlayer
2026-03-21 19:45:49 +11:00
Claude
4a35ce1f70
Add ui.rotate support to RecordingView / HlsVideoPlayer
- HlsVideoPlayer: add rotate prop; when true, wraps <video> in a
  ResizeObserver-tracked container that swaps width/height and applies
  rotate(90deg) transform, mirroring the MsePlayer grid-rotation logic
- DynamicVideoPlayer: thread rotate prop through to HlsVideoPlayer
- RecordingView: invert getCameraAspect ratio (1/ratio) for cameras
  with ui.rotate so the outer container gets portrait proportions;
  pass rotate={camera.ui?.rotate} to DynamicVideoPlayer

https://claude.ai/code/session_01CDLHQPGpf8w44jpsG8g8nM
2026-03-21 08:41:56 +00:00
ibs0d
cdb58a43a5
Merge pull request #90 from ibs0d/claude/add-camera-rotation-support-Lg2l9
Fix ui.rotate: broken CSS height chain causing blank video
2026-03-21 19:23:11 +11:00
Claude
25a869eb43
Fix ui.rotate: broken CSS height chain causing blank video
Root cause: LivePlayer's outer div has no explicit height (only w-full),
so when MsePlayer reads containerSize.height via ResizeObserver it gets 0.
With isRotatedGrid=true, MsePlayer sets the inner div width:
containerSize.height → width: 0 → video invisible.

Fix:
- Add size-full to LivePlayer className when camera.ui?.rotate, ensuring
  height: 100% propagates through the chain so MsePlayer gets real dims
- Re-add cameraAspectRatio inversion (1/ratio) for portrait container
  layout; now that the height chain is intact this works correctly:
  portrait container → LivePlayer size-full → MsePlayer real dims → swap+rotate

https://claude.ai/code/session_01CDLHQPGpf8w44jpsG8g8nM
2026-03-21 08:17:40 +00:00
ibs0d
3c111b2f3b
Merge pull request #89 from ibs0d/claude/add-camera-rotation-support-Lg2l9
Fix: revert cameraAspectRatio inversion for ui.rotate cameras
2026-03-21 18:58:51 +11:00
Claude
54b3717a60
Fix: revert cameraAspectRatio inversion for ui.rotate cameras
The previous commit caused a double dimension swap for rotated cameras:
- LiveCameraView was inverting the aspect ratio (1/ratio) → portrait container
- MsePlayer was then swapping width/height again internally when
  isRotatedGrid=true → video got zero/invalid dimensions, nothing visible

The MsePlayer already handles the full rotation internally via CSS variables
(transform + width/height swap). The container in LiveCameraView should
keep the original (landscape) aspect ratio, matching the grid cell behavior
in DraggableGridLayout where this works correctly.

https://claude.ai/code/session_01CDLHQPGpf8w44jpsG8g8nM
2026-03-21 07:55:26 +00:00
ibs0d
a8ee19397c
Merge pull request #88 from ibs0d/claude/add-camera-rotation-support-Lg2l9
Add ui.rotate support to LiveCameraView single-camera view
2026-03-21 18:34:35 +11:00
Claude
ea9ca2f8d1
Add ui.rotate support to LiveCameraView single-camera view
- Invert cameraAspectRatio when camera.ui?.rotate is true so the
  container dimensions match the rotated video (width↔height swap)
- Pass CSS variables --frigate-mse-grid-rotated and
  --frigate-mse-grid-rotation to LivePlayer, enabling the existing
  MsePlayer rotation/swap logic for single-camera view
- Fullscreen orientation lock works automatically: an inverted ratio
  < 1 causes portrait lock for a normally-landscape camera

https://claude.ai/code/session_01CDLHQPGpf8w44jpsG8g8nM
2026-03-21 07:32:14 +00:00
ibs0d
28b5b17b58
Merge pull request #87 from ibs0d/claude/fix-camera-filter-history-q8W9C
fix: pass camera name to Review page when navigating from Live Camera…
2026-03-21 17:45:52 +11:00
Claude
ee7f0c6717
fix: pass camera name to Review page when navigating from Live Camera View
When clicking the History button on a specific camera's Live view,
append `?cameras=<camera_name>` to the review URL so the camera
filter is pre-set to that camera instead of showing "All Cameras".

The Events (Review) page already supports reading the `cameras` URL
parameter via useSearchEffect - no changes needed there.

Fixes: #12776, #16987

https://claude.ai/code/session_01PnMA1HcuKsEXcvVLaXRgF1
2026-03-21 06:42:43 +00:00
ibs0d
c01fd3f38c
Merge pull request #86 from ibs0d/claude/remove-object-contain-7JCSW
Remove redundant object-contain from video elements
2026-03-21 14:03:28 +11:00
Claude
a183efbffc
Remove redundant object-contain from video elements
Commit f481d6d (PR #81) added object-contain to <video> elements in
PreviewPlayer.tsx and HlsVideoPlayer.tsx, but browsers already default
to contain behavior for <video>. Remove the redundant class.

https://claude.ai/code/session_01Ra1xpVwumBhyd6gqUgfGUa
2026-03-21 02:59:12 +00:00
ibs0d
27329b4991
Merge pull request #85 from ibs0d/revert-84-claude/fix-preview-player-layout-s65yN
Revert "Fix PreviewPlayer layout: replace size-full with w-full to allow aspe…"
2026-03-21 13:47:51 +11:00
ibs0d
c9971081b7
Revert "Fix PreviewPlayer layout: replace size-full with w-full to allow aspe…" 2026-03-21 13:46:37 +11:00
ibs0d
c089a21def
Merge pull request #84 from ibs0d/claude/fix-preview-player-layout-s65yN
Fix PreviewPlayer layout: replace size-full with w-full to allow aspe…
2026-03-21 13:07:32 +11:00
Claude
93138cbfb3
Fix PreviewPlayer layout: replace size-full with w-full to allow aspect-ratio CSS to work
When scrubbing in RecordingView, tall cameras passed size-full (width:100% + height:100%)
to PreviewPlayer, causing the browser to ignore aspect-ratio. Replacing size-full with
w-full lets height be computed from width + aspect-ratio, preserving correct proportions.

https://claude.ai/code/session_019sUH2h6HoVswdtD7EbhAJa
2026-03-21 02:00:50 +00:00
ibs0d
08b1c43c16
Merge pull request #83 from ibs0d/revert-82-claude/fix-preview-aspect-ratio-GZq8u
Revert "fix: preserve aspect ratio in preview players during timeline scrubbing"
2026-03-21 12:58:41 +11:00
ibs0d
a5bb293162
Revert "fix: preserve aspect ratio in preview players during timeline scrubbing" 2026-03-21 12:58:30 +11:00
ibs0d
1e10a2f746
Merge branch 'blakeblackshear:dev' into dev 2026-03-21 12:42:30 +11:00
ibs0d
bd1971301d
Merge pull request #82 from ibs0d/claude/fix-preview-aspect-ratio-GZq8u
fix: preserve aspect ratio in preview players during timeline scrubbing
2026-03-21 12:37:06 +11:00
Claude
6d6b800674
fix: preserve aspect ratio in preview players during timeline scrubbing
Replace size-full (100%×100%) on img/video elements with max-h-full max-w-full
so portrait (9:16) and 4:3 cameras maintain their natural proportions during
scrubbing in RecordingView. Add items-center to flex containers so content
stays vertically centered within the available space.

https://claude.ai/code/session_01H1uowWMpsNm1U8HdcSP8AA
2026-03-21 01:34:18 +00:00
Josh Hawkins
6d2b84e202
Improve process watchdog (#22557)
Some checks failed
CI / AMD64 Build (push) Has been cancelled
CI / ARM Build (push) Has been cancelled
CI / Jetson Jetpack 6 (push) Has been cancelled
CI / AMD64 Extra Build (push) Has been cancelled
CI / ARM Extra Build (push) Has been cancelled
CI / Synaptics Build (push) Has been cancelled
CI / Assemble and push default build (push) Has been cancelled
* monitor subprocesses and auto-restart with watchdog

* fix typing

* formatting
2026-03-20 19:02:47 -05:00
Nicolas Mowen
a8da4c4521
Add support a looping GenAI process to monitor a camera (#22556)
* Add support for VLM monitoring a camera

* Cleanup

* Cleanup
2026-03-20 17:44:02 -06:00
Nicolas Mowen
acd10d0e08
Various Tweaks (#22554)
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
* Change review GenAI metric to seconds

* Update API docs
2026-03-20 11:38:22 -06:00
Nicolas Mowen
373bcadef8
Dynamic vision chat (#22551)
* Improve live context image handling

* Improve chat handling

* Cleanup
2026-03-20 11:01:46 -06:00
Josh Hawkins
34a06ac77b
Tweaks (#22552)
* add weblate to contributing docs

* show vertex points in dialog only in motion search
2026-03-20 11:00:28 -06:00
Nicolas Mowen
23820718ee
Fix splintered language keys (#22550) 2026-03-20 10:02:34 -05:00
Nicolas Mowen
411798004a
Update ffmpeg (#22548)
* Update ffmpeg builds to 7.1

* Remove unused

* Cleanup
2026-03-20 08:50:58 -05:00
Josh Hawkins
68de18f10d
Settings UI tweaks (#22547)
* fix genai settings ui

- add roles widget to select roles for genai providers
- add dropdown in semantic search to allow selection of embeddings genai provider

* tweak grouping to prioritize fieldOrder before groups

previously, groups were always rendered first. now fieldOrder is respected, and any fields in a group will cause the group and all the fields in that group to be rendered in order. this allows moving the enabled switches to the top of the section

* mobile tweaks

stack buttons, add more space on profiles pane, and move the overridden badge beneath the description

* language consistency

* prevent camera config sections from being regenerated for profiles

* conditionally import axengine module

to match other detectors

* i18n

* update vscode launch.json for new integrated browser

* formatting
2026-03-20 07:24:34 -06:00
ibs0d
f481d6de5a
Merge pull request #81 from ibs0d/claude/fix-video-player-styling-hjVCd
fix: add object-contain to HlsVideoPlayer and PreviewPlayer video ele…
2026-03-20 21:14:23 +11:00
Claude
b61719e226
fix: add object-contain to HlsVideoPlayer and PreviewPlayer video elements
Ensures recorded video playback preserves aspect ratio instead of
stretching to fill the container. MsePlayer (live grid) is unchanged.

https://claude.ai/code/session_01SxrckSRTA8Hrd3d7M4qw4i
2026-03-20 10:13:23 +00:00
ibs0d
d8b68b53b5
Merge pull request #80 from ibs0d/revert-79-claude/fix-video-stretching-preview-8xXtb
Revert "fix: prevent video stretching in timeline scrubbing preview"
2026-03-20 21:11:32 +11:00
ibs0d
a74d9e58e9
Revert "fix: prevent video stretching in timeline scrubbing preview" 2026-03-20 21:11:20 +11:00
ibs0d
e6c6c077f4
Merge pull request #79 from ibs0d/claude/fix-video-stretching-preview-8xXtb
fix: prevent video stretching in timeline scrubbing preview
2026-03-20 20:50:14 +11:00
Claude
90d9c444c8
fix: prevent video stretching in timeline scrubbing preview
- MsePlayer: change default object-fit fallback from fill to contain
  (grid layout keeps fill via --frigate-mse-object-fit:fill CSS variable)
- PreviewPlayer: add object-contain class to video element
- HlsVideoPlayer: add object-contain class to video element

Recordings view and timeline preview now preserve aspect ratio,
while live grid continues to stretch corridor cameras as before.
2026-03-20 09:47:54 +00:00
ibs0d
e947e1ede7
Merge pull request #78 from ibs0d/claude/frigate-role-based-groups-2kRHN
feat: add role-based visibility for camera groups
2026-03-20 14:49:11 +11:00
Claude
8f990817b4
feat: add role-based visibility for camera groups
Add optional `roles` field to camera groups config to control which user
roles can see each group. Groups without roles are visible only to admins.
Admin users always see all groups. Backend filters groups in GET /config
based on remote-role header. Frontend adds roles multiselect in group
editor (admin only).

https://claude.ai/code/session_011sp9kHQfM39JvVxKHFh1Xq
2026-03-20 03:38:12 +00:00
ibs0d
e8b9f50bc9
Merge branch 'blakeblackshear:dev' into dev 2026-03-20 14:02:44 +11:00
Nicolas Mowen
cedcbdba07
Add ability to toggle camera features via API (#22538)
Some checks are pending
CI / ARM Extra Build (push) Blocked by required conditions
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 / Synaptics Build (push) Blocked by required conditions
CI / Assemble and push default build (push) Blocked by required conditions
* Refactor profile to be a generic state setter API

* Add tool to chat

* Cleanup

* Cleanup
2026-03-19 17:39:28 -05:00
leccelecce
c6991db432
MQTT: Publish "stopped" to available topic on app stop (#22527)
* Publish "stopped" to available topic on app stop

* Add docs
2026-03-19 14:46:37 -06:00