Commit Graph

2359 Commits

Author SHA1 Message Date
Claude
95b9b0b7b9
Fix fit-to-screen drag: use newItem.x/y grid coords instead of mouse pixels
Replace getBoundingClientRect+clientX/Y with newItem.x/y from react-grid-layout.
With noCompactor, newItem reports the free grid position where the element was
dropped — reliable across all rows without pixel math or scroll issues.

Also remove handleFitDrag/fitDragRef (no longer needed) and generate a full
snapBack layout so displaced items snap back correctly on no-op drops.

https://claude.ai/code/session_01Cu7YDRKZrYX3sBs6g9w2dy
2026-03-22 05:37:14 +00:00
Claude
8fc7f6bdb7
Fix fit-to-screen drag: use noCompactor for free horizontal movement
In fit-to-screen mode, pass noCompactor to <Responsive> so elements
follow the mouse freely without vertical compaction pushing them down.
The swap-on-drop logic (mouse coordinates in onDragStop) stays unchanged.

https://claude.ai/code/session_01Cu7YDRKZrYX3sBs6g9w2dy
2026-03-22 00:31:56 +00:00
Claude
29e2003a84
Fix fit-to-screen drag types to match EventCallback signature
All LayoutItem args are nullable (LayoutItem | null) and event is Event
not MouseEvent — matching the actual react-grid-layout EventCallback type.
fitDragRef simplified to string | null. Cast event to MouseEvent inside
the handler to access clientX/Y for pixel-accurate slot detection.

https://claude.ai/code/session_01Cu7YDRKZrYX3sBs6g9w2dy
2026-03-22 00:04:21 +00:00
ibs0d
b277b0bd98
Revert "Fix fit-to-screen horizontal swap using real mouse coordinates" 2026-03-22 10:48:32 +11:00
ibs0d
83dbc9fc30
Merge pull request #98 from ibs0d/claude/add-fit-to-screen-mode-XvHoV
Fix fit-to-screen horizontal swap using real mouse coordinates
2026-03-22 00:14:15 +11:00
Claude
051f680b04
Fix fit-to-screen horizontal swap using real mouse coordinates
rgl with compactType=vertical doesn't move items horizontally, so
layoutItem.x in onDragStop stays near its origin, making horizontal
slot detection wrong.

Switch to tracking event.clientX/Y from onDrag (fitDragRef), then in
onDragStop translate the final mouse position against the .grid-layout
element's bounding rect to get pixel-accurate targetCol/targetRow.
This makes horizontal, vertical, and long-distance swaps all reliable.

https://claude.ai/code/session_01Cu7YDRKZrYX3sBs6g9w2dy
2026-03-21 13:12:41 +00:00
ibs0d
cd03cc0ccd
Merge pull request #97 from ibs0d/claude/add-fit-to-screen-mode-XvHoV
Fix fit-to-screen drag: support non-adjacent and horizontal swaps
2026-03-21 23:51:47 +11:00
Claude
3d1de5bf69
Fix fit-to-screen drag: support non-adjacent and horizontal swaps
Previous approach sorted react-grid-layout's post-drag positions to infer
order, which broke for non-adjacent and horizontal moves because rgl pushes
items down instead of swapping them.

New approach:
- onDrag records which item is being dragged (draggedItemRef)
- onDragStop uses the dragged item's final x/y to compute the target slot
  in our own grid, then performs a clean swap in the ordered name array
- Layout is always fully regenerated from our order array, ignoring rgl's
  position arithmetic entirely

https://claude.ai/code/session_01Cu7YDRKZrYX3sBs6g9w2dy
2026-03-21 12:49:02 +00:00
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
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
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
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
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
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
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
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
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
c9971081b7
Revert "Fix PreviewPlayer layout: replace size-full with w-full to allow aspe…" 2026-03-21 13:46:37 +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
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
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
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
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
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
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
a74d9e58e9
Revert "fix: prevent video stretching in timeline scrubbing preview" 2026-03-20 21:11:20 +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
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
Josh Hawkins
a9a2eecebb
add inherit and none to ffmpeg args widget (#22535)
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-19 13:11:34 -06:00
Josh Hawkins
e2bfa26719
Add go2rtc streams to settings UI (#22531)
* Add go2rtc settings section

- create separate settings section for all go2rtc streams
- extract credentials mask code into util
- create ffmpeg module utility
- i18n

* add camera config updater topic for live section

to support adding go2rtc streams after configuring a new one via the UI

* clean up

* tweak delete button color for consistency

* tweaks
2026-03-19 10:33:42 -06:00
Josh Hawkins
c93dad9bd9
Camera profile support (#22482)
* add CameraProfileConfig model for named config overrides

* add profiles field to CameraConfig

* add active_profile field to FrigateConfig

Runtime-only field excluded from YAML serialization, tracks which
profile is currently active.

* add ProfileManager for profile activation and persistence

Handles snapshotting base configs, applying profile overrides via
deep_merge + apply_section_update, publishing ZMQ updates, and
persisting active profile to /config/.active_profile.

* add profile API endpoints (GET /profiles, GET/PUT /profile)

* add MQTT and dispatcher integration for profiles

- Subscribe to frigate/profile/set MQTT topic
- Publish profile/state and profiles/available on connect
- Add _on_profile_command handler to dispatcher
- Broadcast active profile state on WebSocket connect

* wire ProfileManager into app startup and FastAPI

- Create ProfileManager after dispatcher init
- Restore persisted profile on startup
- Pass dispatcher and profile_manager to FastAPI app

* add tests for invalid profile values and keys

Tests that Pydantic rejects: invalid field values (fps: "not_a_number"),
unknown section keys (ffmpeg in profile), invalid nested values, and
invalid profiles in full config parsing.

* formatting

* fix CameraLiveConfig JSON serialization error on profile activation

refactor _publish_updates to only publish ZMQ updates for
sections that actually changed, not all sections on affected cameras.

* consolidate

* add enabled field to camera profiles for enabling/disabling cameras

* add zones support to camera profiles

* add frontend profile types, color utility, and config save support

* add profile state management and save preview support

* add profileName prop to BaseSection for profile-aware config editing

* add profile section dropdown and wire into camera settings pages

* add per-profile camera enable/disable to Camera Management view

* add profiles summary page with card-based layout and fix backend zone comparison bug

* add active profile badge to settings toolbar

* i18n

* add red dot for any pending changes including profiles

* profile support for mask and zone editor

* fix hidden field validation errors caused by lodash wildcard and schema gaps

lodash unset does not support wildcard (*) segments, so hidden fields like
filters.*.mask were never stripped from form data, leaving null raw_coordinates
that fail RJSF anyOf validation. Add unsetWithWildcard helper and also strip
hidden fields from the JSON schema itself as defense-in-depth.

* add face_recognition and lpr to profile-eligible sections

* move profile dropdown from section panes to settings header

* add profiles enable toggle and improve empty state

* formatting

* tweaks

* tweak colors and switch

* fix profile save diff, masksAndZones delete, and config sync

* ui tweaks

* ensure profile manager gets updated config

* rename profile settings to ui settings

* refactor profilesview and add dots/border colors when overridden

* implement an update_config method for profile manager

* fix mask deletion

* more unique colors

* add top-level profiles config section with friendly names

* implement profile friendly names and improve profile UI

- Add ProfileDefinitionConfig type and profiles field to FrigateConfig
- Use ProfilesApiResponse type with friendly_name support throughout
- Replace Record<string, unknown> with proper JsonObject/JsonValue types
- Add profile creation form matching zone pattern (Zod + NameAndIdFields)
- Add pencil icon for renaming profile friendly names in ProfilesView
- Move Profiles menu item to first under Camera Configuration
- Add activity indicators on save/rename/delete buttons
- Display friendly names in CameraManagementView profile selector
- Fix duplicate colored dots in management profile dropdown
- Fix i18n namespace for overridden base config tooltips
- Move profile override deletion from dropdown trash icon to footer
  button with confirmation dialog, matching Reset to Global pattern
- Remove Add Profile from section header dropdown to prevent saving
  camera overrides before top-level profile definition exists
- Clean up newProfiles state after API profile deletion
- Refresh profiles SWR cache after saving profile definitions

* remove profile badge in settings and add profiles to main menu

* use icon only on mobile

* change color order

* docs

* show activity indicator on trash icon while deleting a profile

* tweak language

* immediately create profiles on backend instead of deferring to Save All

* hide restart-required fields when editing a profile section

fields that require a restart cannot take effect via profile switching,
so they are merged into hiddenFields when profileName is set

* show active profile indicator in desktop status bar

* fix profile config inheritance bug where Pydantic defaults override base values

The /config API was dumping profile overrides with model_dump() which included
all Pydantic defaults. When the frontend merged these over
the camera's base config, explicitly-set base values were
lost. Now profile overrides are re-dumped with exclude_unset=True so only
user-specified fields are returned.

Also fixes the Save All path generating spurious deletion markers for
restart-required fields that are hidden during profile
editing but not excluded from the raw data sanitization in
prepareSectionSavePayload.

* docs tweaks

* docs tweak

* formatting

* formatting

* fix typing

* fix test pollution

test_maintainer was injecting MagicMock() into sys.modules["frigate.config.camera.updater"] at module load time and never restoring it. When the profile tests later imported CameraConfigUpdateEnum and CameraConfigUpdateTopic from that module, they got mock objects instead of the real dataclass/enum, so equality comparisons always failed

* remove

* fix settings showing profile-merged values when editing base config

When a profile is active, the in-memory config contains effective
(profile-merged) values. The settings UI was displaying these merged
values even when the "Base Config" view was selected.

Backend: snapshot pre-profile base configs in ProfileManager and expose
them via a `base_config` key in the /api/config camera response when a
profile is active. The top-level sections continue to reflect the
effective running config.

Frontend: read from `base_config` when available in BaseSection,
useConfigOverride, useAllCameraOverrides, and prepareSectionSavePayload.
Include formData labels in Object/Audio switches widgets so that labels
added only by a profile override remain visible when editing that profile.

* use rasterized_mask as field

makes it easier to exclude from the schema with exclude=True
prevents leaking of the field when using model_dump for profiles

* fix zones

- Fix zone colors not matching across profiles by falling back to base zone color when profile zone data lacks a color field
- Use base_config for base-layer values in masks/zones view so profile-merged values don't pollute the base config editing view
- Handle zones separately in profile manager snapshot/restore since ZoneConfig requires special serialization (color as private attr, contour generation)
- Inherit base zone color and generate contours for profile zone overrides in profile manager

* formatting

* don't require restart for camera enabled change for profiles

* publish camera state when changing profiles

* formatting

* remove available profiles from mqtt

* improve typing
2026-03-19 09:47:57 -05:00
ibs0d
d8ecc1a9cc
Revert "feat: add personal camera groups with per-user visibility" 2026-03-19 20:05:46 +11:00
Claude
3b3a513929
feat: add personal camera groups with per-user visibility
Add optional `users` field to camera groups config allowing groups to be
restricted to specific users. Groups without users remain visible to all
(backward compatible). Admin users always see all groups. Backend filters
groups in GET /config based on authenticated user. Frontend adds a users
multi-select toggle in the group editor (admin only).

https://claude.ai/code/session_01PooiYnugPWqdCYDq4TU7ti
2026-03-19 04:49:47 +00:00
ibs0d
9cb7902a9d
Merge pull request #73 from ibs0d/claude/fix-zoom-statistics-WFvOm
Claude/fix zoom statistics w fv om
2026-03-19 14:57:22 +11:00
Claude
7ee24b7518
fix: motion dot outside zoom transform in LiveCameraView
Same pattern as DraggableGridLayout: render the dot outside
TransformComponent so it doesn't scale with pinch/zoom.
LivePlayer gets showMotionDot={false} to avoid duplicate.

https://claude.ai/code/session_019B4dJXtcxvHn97ZaqHUB62
2026-03-19 03:51:29 +00:00
ibs0d
e4e0ccc27c
Merge branch 'blakeblackshear:dev' into dev 2026-03-19 14:49:40 +11:00
spanner3003
7cec1f81b9 chore: ruff format axengine.py and regenerate config translations 2026-03-18 14:39:13 -05:00
Hosted Weblate
e23a57db3e Translated using Weblate (Chinese (Simplified Han script))
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
Currently translated at 100.0% (138 of 138 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (915 of 915 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (467 of 467 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (1084 of 1084 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 98.9% (462 of 467 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 82.8% (758 of 915 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (171 of 171 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (25 of 25 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 98.9% (462 of 467 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (230 of 230 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (23 of 23 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (1084 of 1084 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (62 of 62 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 71.4% (654 of 915 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (1084 of 1084 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (22 of 22 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 73.9% (17 of 23 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 82.8% (387 of 467 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 20.5% (96 of 467 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 8.6% (94 of 1084 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 7.2% (34 of 467 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 65.2% (15 of 23 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 3.1% (34 of 1084 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 71.3% (653 of 915 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 82.8% (140 of 169 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 54.5% (12 of 22 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 52.0% (13 of 25 strings)

Co-authored-by: GuoQing Liu <842607283@qq.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: veberj.mark2c82ae088dda4760 <veberj.mark@gmail.com>
Co-authored-by: 郁闷的太子 <taiziccf@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-dialog/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/config-cameras/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/config-global/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/config-groups/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/config-validation/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-exports/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/zh_Hans/
Translation: Frigate NVR/Config - Cameras
Translation: Frigate NVR/Config - Global
Translation: Frigate NVR/Config - Groups
Translation: Frigate NVR/Config - Validation
Translation: Frigate NVR/common
Translation: Frigate NVR/components-dialog
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-exports
Translation: Frigate NVR/views-settings
Translation: Frigate NVR/views-system
2026-03-18 10:01:37 -05:00
Hosted Weblate
5e3a625227 Translated using Weblate (Slovenian)
Currently translated at 100.0% (122 of 122 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (54 of 54 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (62 of 62 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (98 of 98 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (49 of 49 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (6 of 6 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (915 of 915 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (501 of 501 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (171 of 171 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (138 of 138 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (23 of 23 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (10 of 10 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (118 of 118 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (501 of 501 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (22 of 22 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (10 of 10 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Slovenian)

Currently translated at 69.3% (43 of 62 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (230 of 230 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (2 of 2 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (118 of 118 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (74 of 74 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (2 of 2 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (25 of 25 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (25 of 25 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (46 of 46 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (467 of 467 strings)

Translated using Weblate (Slovenian)

Currently translated at 100.0% (1084 of 1084 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: thehijacker <thehijacker@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/audio/sl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/sl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-auth/sl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-camera/sl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-dialog/sl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-filter/sl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-icons/sl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-input/sl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-player/sl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/config-cameras/sl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/config-global/sl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/config-groups/sl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/config-validation/sl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/objects/sl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/sl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-configeditor/sl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/sl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/sl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-exports/sl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/sl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/sl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-recording/sl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-search/sl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/sl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/sl/
Translation: Frigate NVR/Config - Cameras
Translation: Frigate NVR/Config - Global
Translation: Frigate NVR/Config - Groups
Translation: Frigate NVR/Config - Validation
Translation: Frigate NVR/audio
Translation: Frigate NVR/common
Translation: Frigate NVR/components-auth
Translation: Frigate NVR/components-camera
Translation: Frigate NVR/components-dialog
Translation: Frigate NVR/components-filter
Translation: Frigate NVR/components-icons
Translation: Frigate NVR/components-input
Translation: Frigate NVR/components-player
Translation: Frigate NVR/objects
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-configeditor
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-exports
Translation: Frigate NVR/views-facelibrary
Translation: Frigate NVR/views-live
Translation: Frigate NVR/views-recording
Translation: Frigate NVR/views-search
Translation: Frigate NVR/views-settings
Translation: Frigate NVR/views-system
2026-03-18 10:01:37 -05:00
Hosted Weblate
97186e9819 Translated using Weblate (Korean)
Currently translated at 5.7% (7 of 122 strings)

Translated using Weblate (Korean)

Currently translated at 100.0% (230 of 230 strings)

Translated using Weblate (Korean)

Currently translated at 28.3% (21 of 74 strings)

Translated using Weblate (Korean)

Currently translated at 100.0% (22 of 22 strings)

Translated using Weblate (Korean)

Currently translated at 14.2% (7 of 49 strings)

Translated using Weblate (Korean)

Currently translated at 12.0% (3 of 25 strings)

Translated using Weblate (Korean)

Currently translated at 100.0% (58 of 58 strings)

Translated using Weblate (Korean)

Currently translated at 100.0% (10 of 10 strings)

Translated using Weblate (Korean)

Currently translated at 66.6% (114 of 171 strings)

Translated using Weblate (Korean)

Currently translated at 43.4% (10 of 23 strings)

Translated using Weblate (Korean)

Currently translated at 79.6% (43 of 54 strings)

Translated using Weblate (Korean)

Currently translated at 0.2% (3 of 1084 strings)

Translated using Weblate (Korean)

Currently translated at 15.3% (140 of 915 strings)

Translated using Weblate (Korean)

Currently translated at 100.0% (98 of 98 strings)

Translated using Weblate (Korean)

Currently translated at 13.9% (70 of 501 strings)

Translated using Weblate (Korean)

Currently translated at 12.3% (17 of 138 strings)

Translated using Weblate (Korean)

Currently translated at 0.6% (3 of 467 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: John <john@akfn.net>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/audio/ko/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/ko/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-auth/ko/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-dialog/ko/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-filter/ko/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/config-cameras/ko/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/config-global/ko/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/config-groups/ko/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/config-validation/ko/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/ko/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/ko/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-exports/ko/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/ko/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/ko/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-search/ko/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/ko/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/ko/
Translation: Frigate NVR/Config - Cameras
Translation: Frigate NVR/Config - Global
Translation: Frigate NVR/Config - Groups
Translation: Frigate NVR/Config - Validation
Translation: Frigate NVR/audio
Translation: Frigate NVR/common
Translation: Frigate NVR/components-auth
Translation: Frigate NVR/components-dialog
Translation: Frigate NVR/components-filter
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-exports
Translation: Frigate NVR/views-facelibrary
Translation: Frigate NVR/views-live
Translation: Frigate NVR/views-search
Translation: Frigate NVR/views-settings
Translation: Frigate NVR/views-system
2026-03-18 10:01:37 -05:00
Hosted Weblate
94a0d0a72b Translated using Weblate (Albanian)
Currently translated at 30.0% (69 of 230 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Sali Maloku <sali.maloku94@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/sq/
Translation: Frigate NVR/common
2026-03-18 10:01:37 -05:00