Compare commits

...

85 Commits

Author SHA1 Message Date
Nicolas Mowen
5615ec82dc Set log to debug 2026-02-05 12:20:07 -07:00
GuoQing Liu
c9055ea941 fix: fix delete zone type i18n (#21894) 2026-02-05 09:38:09 -06:00
Nicolas Mowen
c9ba851f0d Fix event getting stuck due to only checking current clip / snapshot (#21893)
* Fix event getting stuck due to only checking current clip / snapshot

* formatting
2026-02-05 08:43:19 -06:00
Pops0n
a8ab82937b Update hailo installation instructions and script (#21882)
* Update installation.md for Raspberry Pi and Hailo

Updated Hailo installation instructions to cover both Bookworm and Trixie OS on Raspberry Pi. 


Referenced discussions: #21177, #20621, #20062, #19531

* Update user_installation.sh for Raspberry Pi (Bookworm and Trixie)

Simplified and improved the user installation script for  Hailo to support Raspberry Pi OS Bookworm, Trixie, and x86 platforms.

Referenced discussions: #21177, #20621, #20062, #19531

* Update installation.md

* Update user_installation.sh

* Update installation.md

* Update installation.md

Added optional fix for PCIe descriptor page size error.
Related discussion: #19481

* Update installation.md

Changed kernel driver version check from modinfo to /sys/module for correct post-reboot output
2026-02-05 06:38:34 -07:00
Josh Hawkins
21e4b36c7c Add languages (#21870)
* add persian, croatian, and slovak

* i18n

* fix formatting due to new version of ruff
2026-02-03 13:29:52 -06:00
Hosted Weblate
06141b900e Update translation files
Updated by "Squash Git commits" add-on in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/
Translation: Frigate NVR/common
2026-02-03 10:54:04 -07:00
Hosted Weblate
011e7a1ce6 Update translation files
Updated by "Squash Git commits" add-on in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/
Translation: Frigate NVR/common
2026-02-03 10:54:04 -07:00
Hosted Weblate
81d5e80dd2 Update translation files
Updated by "Squash Git commits" add-on in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/
Translation: Frigate NVR/common
2026-02-03 10:54:04 -07:00
Hosted Weblate
3b79b34c07 Update translation files
Updated by "Squash Git commits" add-on in Weblate.

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/
Translation: Frigate NVR/common
2026-02-03 10:54:04 -07:00
Hosted Weblate
7d8d2c5521 Translated using Weblate (French)
Currently translated at 100.0% (654 of 654 strings)

Co-authored-by: Apocoloquintose <bertrand.moreux@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/fr/
Translation: Frigate NVR/views-settings
2026-02-03 10:54:04 -07:00
Hosted Weblate
7fcce67c2a Translated using Weblate (Arabic)
Currently translated at 1.6% (2 of 122 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Med Taha Ben Brahim <mohamedtaha.bb@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/ar/
Translation: Frigate NVR/views-classificationmodel
2026-02-03 10:54:04 -07:00
Hosted Weblate
87da12c453 Translated using Weblate (Korean)
Currently translated at 75.4% (40 of 53 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: 임도균 <limkwon7@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/ko/
Translation: Frigate NVR/views-facelibrary
2026-02-03 10:54:04 -07:00
Hosted Weblate
522630487b Translated using Weblate (Serbian)
Currently translated at 94.5% (52 of 55 strings)

Translated using Weblate (Serbian)

Currently translated at 100.0% (49 of 49 strings)

Translated using Weblate (Serbian)

Currently translated at 7.6% (50 of 654 strings)

Translated using Weblate (Serbian)

Currently translated at 55.4% (51 of 92 strings)

Translated using Weblate (Serbian)

Currently translated at 44.0% (52 of 118 strings)

Translated using Weblate (Serbian)

Currently translated at 37.5% (51 of 136 strings)

Translated using Weblate (Serbian)

Currently translated at 18.6% (40 of 215 strings)

Translated using Weblate (Serbian)

Currently translated at 12.9% (65 of 501 strings)

Translated using Weblate (Serbian)

Currently translated at 36.0% (49 of 136 strings)

Translated using Weblate (Serbian)

Currently translated at 100.0% (46 of 46 strings)

Translated using Weblate (Serbian)

Currently translated at 96.2% (51 of 53 strings)

Translated using Weblate (Serbian)

Currently translated at 100.0% (43 of 43 strings)

Translated using Weblate (Serbian)

Currently translated at 42.6% (52 of 122 strings)

Translated using Weblate (Serbian)

Currently translated at 31.9% (39 of 122 strings)

Translated using Weblate (Serbian)

Currently translated at 16.2% (35 of 215 strings)

Translated using Weblate (Serbian)

Currently translated at 10.3% (52 of 501 strings)

Translated using Weblate (Serbian)

Currently translated at 71.6% (38 of 53 strings)

Translated using Weblate (Serbian)

Currently translated at 42.3% (39 of 92 strings)

Translated using Weblate (Serbian)

Currently translated at 27.9% (38 of 136 strings)

Translated using Weblate (Serbian)

Currently translated at 32.2% (38 of 118 strings)

Translated using Weblate (Serbian)

Currently translated at 84.7% (39 of 46 strings)

Translated using Weblate (Serbian)

Currently translated at 70.9% (39 of 55 strings)

Translated using Weblate (Serbian)

Currently translated at 90.6% (39 of 43 strings)

Translated using Weblate (Serbian)

Currently translated at 28.6% (39 of 136 strings)

Translated using Weblate (Serbian)

Currently translated at 79.5% (39 of 49 strings)

Translated using Weblate (Serbian)

Currently translated at 5.5% (36 of 654 strings)

Translated using Weblate (Serbian)

Currently translated at 14.8% (32 of 215 strings)

Translated using Weblate (Serbian)

Currently translated at 100.0% (10 of 10 strings)

Translated using Weblate (Serbian)

Currently translated at 56.6% (30 of 53 strings)

Translated using Weblate (Serbian)

Currently translated at 72.0% (31 of 43 strings)

Translated using Weblate (Serbian)

Currently translated at 22.7% (31 of 136 strings)

Translated using Weblate (Serbian)

Currently translated at 100.0% (74 of 74 strings)

Translated using Weblate (Serbian)

Currently translated at 67.3% (31 of 46 strings)

Translated using Weblate (Serbian)

Currently translated at 25.4% (31 of 122 strings)

Translated using Weblate (Serbian)

Currently translated at 100.0% (13 of 13 strings)

Translated using Weblate (Serbian)

Currently translated at 100.0% (10 of 10 strings)

Translated using Weblate (Serbian)

Currently translated at 56.3% (31 of 55 strings)

Translated using Weblate (Serbian)

Currently translated at 100.0% (25 of 25 strings)

Translated using Weblate (Serbian)

Currently translated at 8.5% (43 of 501 strings)

Translated using Weblate (Serbian)

Currently translated at 63.2% (31 of 49 strings)

Translated using Weblate (Serbian)

Currently translated at 32.6% (30 of 92 strings)

Translated using Weblate (Serbian)

Currently translated at 26.2% (31 of 118 strings)

Translated using Weblate (Serbian)

Currently translated at 22.0% (30 of 136 strings)

Translated using Weblate (Serbian)

Currently translated at 4.5% (30 of 654 strings)

Co-authored-by: Aleksandar Jevremovic <aleksandar@jevremovic.org>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/audio/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-auth/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-camera/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-dialog/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-filter/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-player/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/objects/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-configeditor/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-exports/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-search/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/sr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/sr/
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-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-search
Translation: Frigate NVR/views-settings
Translation: Frigate NVR/views-system
2026-02-03 10:54:04 -07:00
Hosted Weblate
77eb5d6012 Translated using Weblate (Finnish)
Currently translated at 76.9% (10 of 13 strings)

Translated using Weblate (Finnish)

Currently translated at 32.8% (215 of 654 strings)

Translated using Weblate (Finnish)

Currently translated at 4.0% (5 of 122 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Niko Järvinen <nbjarvinen@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/fi/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-exports/fi/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/fi/
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-exports
Translation: Frigate NVR/views-settings
2026-02-03 10:54:04 -07:00
Hosted Weblate
7339961636 Translated using Weblate (Swedish)
Currently translated at 100.0% (98 of 98 strings)

Translated using Weblate (Swedish)

Currently translated at 100.0% (2 of 2 strings)

Translated using Weblate (Swedish)

Currently translated at 100.0% (654 of 654 strings)

Translated using Weblate (Swedish)

Currently translated at 100.0% (216 of 216 strings)

Co-authored-by: Felix Boström <felix.bostrum@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: bittin1ddc447d824349b2 <bittin@reimu.nl>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/sv/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-input/sv/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/sv/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/sv/
Translation: Frigate NVR/common
Translation: Frigate NVR/components-input
Translation: Frigate NVR/views-live
Translation: Frigate NVR/views-settings
2026-02-03 10:54:04 -07:00
Hosted Weblate
c34fd3b0d5 Translated using Weblate (French)
Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (French)

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (French)

Currently translated at 100.0% (98 of 98 strings)

Translated using Weblate (French)

Currently translated at 100.0% (654 of 654 strings)

Co-authored-by: Apocoloquintose <bertrand.moreux@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/fr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/fr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/fr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/fr/
Translation: Frigate NVR/common
Translation: Frigate NVR/views-live
Translation: Frigate NVR/views-settings
Translation: Frigate NVR/views-system
2026-02-03 10:54:04 -07:00
Hosted Weblate
00c8c407c5 Translated using Weblate (Spanish)
Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (98 of 98 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (74 of 74 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (122 of 122 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (654 of 654 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (654 of 654 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (10 of 10 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (216 of 216 strings)

Co-authored-by: Daniel <danieldiazdelaiglesia@gmail.com>
Co-authored-by: Gerard Ricart Castells <gerard.ricart@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/es/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-filter/es/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/es/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-configeditor/es/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/es/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/es/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/es/
Translation: Frigate NVR/common
Translation: Frigate NVR/components-filter
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-configeditor
Translation: Frigate NVR/views-live
Translation: Frigate NVR/views-settings
Translation: Frigate NVR/views-system
2026-02-03 10:54:04 -07:00
Hosted Weblate
b17e5a3eff Translated using Weblate (Dutch)
Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (654 of 654 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (98 of 98 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (122 of 122 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (122 of 122 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Marijn <168113859+Marijn0@users.noreply.github.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/nl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/nl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/nl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/nl/
Translation: Frigate NVR/common
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-live
Translation: Frigate NVR/views-settings
2026-02-03 10:54:04 -07:00
Hosted Weblate
8b3c8a0ade Translated using Weblate (Indonesian)
Currently translated at 36.4% (27 of 74 strings)

Translated using Weblate (Indonesian)

Currently translated at 96.0% (24 of 25 strings)

Translated using Weblate (Indonesian)

Currently translated at 12.5% (27 of 216 strings)

Translated using Weblate (Indonesian)

Currently translated at 17.7% (89 of 501 strings)

Translated using Weblate (Indonesian)

Currently translated at 16.1% (22 of 136 strings)

Translated using Weblate (Indonesian)

Currently translated at 58.6% (27 of 46 strings)

Translated using Weblate (Indonesian)

Currently translated at 4.2% (28 of 654 strings)

Translated using Weblate (Indonesian)

Currently translated at 90.6% (39 of 43 strings)

Translated using Weblate (Indonesian)

Currently translated at 23.7% (29 of 122 strings)

Translated using Weblate (Indonesian)

Currently translated at 47.2% (26 of 55 strings)

Translated using Weblate (Indonesian)

Currently translated at 98.1% (52 of 53 strings)

Translated using Weblate (Indonesian)

Currently translated at 25.5% (25 of 98 strings)

Translated using Weblate (Indonesian)

Currently translated at 19.1% (26 of 136 strings)

Translated using Weblate (Indonesian)

Currently translated at 53.0% (26 of 49 strings)

Translated using Weblate (Indonesian)

Currently translated at 23.7% (28 of 118 strings)

Translated using Weblate (Indonesian)

Currently translated at 13.9% (17 of 122 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Syarif Hidayat <syarifbl09@gmail.com>
Co-authored-by: ariska <ariska@databisnis.id>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/audio/id/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/id/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-camera/id/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-dialog/id/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-filter/id/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-player/id/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/objects/id/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/id/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/id/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/id/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/id/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/id/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-search/id/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/id/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/id/
Translation: Frigate NVR/audio
Translation: Frigate NVR/common
Translation: Frigate NVR/components-camera
Translation: Frigate NVR/components-dialog
Translation: Frigate NVR/components-filter
Translation: Frigate NVR/components-player
Translation: Frigate NVR/objects
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
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-02-03 10:54:04 -07:00
Hosted Weblate
2fe5e06fed Translated using Weblate (Arabic)
Currently translated at 1.6% (2 of 122 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Med Taha Ben Brahim <mohamedtaha.bb@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/ar/
Translation: Frigate NVR/views-classificationmodel
2026-02-03 10:54:04 -07:00
Hosted Weblate
e9db966097 Translated using Weblate (Italian)
Currently translated at 100.0% (654 of 654 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (55 of 55 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (98 of 98 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (654 of 654 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (216 of 216 strings)

Co-authored-by: Filippo-riccardo Franzin (filippo franzin) <filric01@gmail.com>
Co-authored-by: Gringo <ita.translations@tiscali.it>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/it/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-dialog/it/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/it/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/it/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/it/
Translation: Frigate NVR/common
Translation: Frigate NVR/components-dialog
Translation: Frigate NVR/views-live
Translation: Frigate NVR/views-settings
Translation: Frigate NVR/views-system
2026-02-03 10:54:04 -07:00
Hosted Weblate
4d63a74fd6 Translated using Weblate (Polish)
Currently translated at 100.0% (98 of 98 strings)

Translated using Weblate (Polish)

Currently translated at 95.9% (94 of 98 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (215 of 215 strings)

Co-authored-by: Damian Radecki <damianradecki97@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: J P <jpoloczek24@gmail.com>
Co-authored-by: Mateusz Kulis <kulis.matis@gmail.com>
Co-authored-by: przeniek <przeniek@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/pl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/pl/
Translation: Frigate NVR/common
Translation: Frigate NVR/views-live
2026-02-03 10:54:04 -07:00
Hosted Weblate
b6e5894650 Translated using Weblate (Hungarian)
Currently translated at 71.3% (97 of 136 strings)

Translated using Weblate (Hungarian)

Currently translated at 25.4% (31 of 122 strings)

Translated using Weblate (Hungarian)

Currently translated at 93.9% (203 of 216 strings)

Translated using Weblate (Hungarian)

Currently translated at 100.0% (74 of 74 strings)

Translated using Weblate (Hungarian)

Currently translated at 62.3% (408 of 654 strings)

Translated using Weblate (Hungarian)

Currently translated at 96.2% (51 of 53 strings)

Translated using Weblate (Hungarian)

Currently translated at 83.7% (36 of 43 strings)

Translated using Weblate (Hungarian)

Currently translated at 20.4% (25 of 122 strings)

Translated using Weblate (Hungarian)

Currently translated at 88.9% (121 of 136 strings)

Translated using Weblate (Hungarian)

Currently translated at 85.4% (428 of 501 strings)

Translated using Weblate (Hungarian)

Currently translated at 93.9% (202 of 215 strings)

Translated using Weblate (Hungarian)

Currently translated at 68.3% (93 of 136 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Peter Bartfai <pbartfai@stardust.hu>
Co-authored-by: Zsolt Fojtyik <zsozso830316@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/audio/hu/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/hu/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-filter/hu/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/hu/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/hu/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/hu/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/hu/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/hu/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/hu/
Translation: Frigate NVR/audio
Translation: Frigate NVR/common
Translation: Frigate NVR/components-filter
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-facelibrary
Translation: Frigate NVR/views-settings
Translation: Frigate NVR/views-system
2026-02-03 10:54:04 -07:00
Hosted Weblate
62b880a4b2 Translated using Weblate (Croatian)
Currently translated at 100.0% (46 of 46 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (25 of 25 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (122 of 122 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (98 of 98 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (654 of 654 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: stipe-jurkovic <sjurko00@fesb.hr>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/hr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-camera/hr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-player/hr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/hr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/hr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/hr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/hr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/hr/
Translation: Frigate NVR/common
Translation: Frigate NVR/components-camera
Translation: Frigate NVR/components-player
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-live
Translation: Frigate NVR/views-settings
Translation: Frigate NVR/views-system
2026-02-03 10:54:04 -07:00
Hosted Weblate
5984346623 Added translation using Weblate (Icelandic)
Added translation using Weblate (Icelandic)

Added translation using Weblate (Icelandic)

Added translation using Weblate (Icelandic)

Added translation using Weblate (Icelandic)

Added translation using Weblate (Icelandic)

Added translation using Weblate (Icelandic)

Added translation using Weblate (Icelandic)

Added translation using Weblate (Icelandic)

Added translation using Weblate (Icelandic)

Added translation using Weblate (Icelandic)

Added translation using Weblate (Icelandic)

Added translation using Weblate (Icelandic)

Added translation using Weblate (Icelandic)

Added translation using Weblate (Icelandic)

Added translation using Weblate (Icelandic)

Added translation using Weblate (Icelandic)

Added translation using Weblate (Icelandic)

Added translation using Weblate (Icelandic)

Added translation using Weblate (Icelandic)

Added translation using Weblate (Icelandic)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Sindris <sindri.sse@gmail.com>
2026-02-03 10:54:04 -07:00
Hosted Weblate
a394d37bfe Translated using Weblate (Portuguese)
Currently translated at 90.5% (48 of 53 strings)

Translated using Weblate (Portuguese)

Currently translated at 76.9% (10 of 13 strings)

Translated using Weblate (Portuguese)

Currently translated at 28.6% (35 of 122 strings)

Co-authored-by: Carlos Santos <c.santos00@hotmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/pt/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-exports/pt/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/pt/
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-exports
Translation: Frigate NVR/views-facelibrary
2026-02-03 10:54:04 -07:00
Hosted Weblate
a407f08db6 Translated using Weblate (Czech)
Currently translated at 65.4% (428 of 654 strings)

Translated using Weblate (Czech)

Currently translated at 45.9% (56 of 122 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (53 of 53 strings)

Translated using Weblate (Czech)

Currently translated at 91.9% (125 of 136 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (55 of 55 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (Czech)

Currently translated at 86.7% (118 of 136 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (53 of 53 strings)

Translated using Weblate (Czech)

Currently translated at 93.4% (86 of 92 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (43 of 43 strings)

Translated using Weblate (Czech)

Currently translated at 96.3% (53 of 55 strings)

Translated using Weblate (Czech)

Currently translated at 100.0% (74 of 74 strings)

Translated using Weblate (Czech)

Currently translated at 64.9% (425 of 654 strings)

Translated using Weblate (Czech)

Currently translated at 74.2% (101 of 136 strings)

Translated using Weblate (Czech)

Currently translated at 32.7% (40 of 122 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Martin Brož <code@martin-broz.cz>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/cs/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-dialog/cs/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-filter/cs/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/cs/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/cs/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/cs/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/cs/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/cs/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/cs/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/cs/
Translation: Frigate NVR/common
Translation: Frigate NVR/components-dialog
Translation: Frigate NVR/components-filter
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-facelibrary
Translation: Frigate NVR/views-live
Translation: Frigate NVR/views-settings
Translation: Frigate NVR/views-system
2026-02-03 10:54:04 -07:00
Hosted Weblate
2cd14341e0 Translated using Weblate (Catalan)
Currently translated at 100.0% (654 of 654 strings)

Translated using Weblate (Catalan)

Currently translated at 100.0% (501 of 501 strings)

Translated using Weblate (Catalan)

Currently translated at 100.0% (98 of 98 strings)

Translated using Weblate (Catalan)

Currently translated at 100.0% (654 of 654 strings)

Translated using Weblate (Catalan)

Currently translated at 100.0% (501 of 501 strings)

Translated using Weblate (Catalan)

Currently translated at 100.0% (216 of 216 strings)

Co-authored-by: Eduardo Pastor Fernández <123eduardoneko123@gmail.com>
Co-authored-by: Gerard Ricart Castells <gerard.ricart@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/audio/ca/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/ca/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/ca/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/ca/
Translation: Frigate NVR/audio
Translation: Frigate NVR/common
Translation: Frigate NVR/views-live
Translation: Frigate NVR/views-settings
2026-02-03 10:54:04 -07:00
Hosted Weblate
9285c5e10a Translated using Weblate (Ukrainian)
Currently translated at 100.0% (654 of 654 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (98 of 98 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (216 of 216 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Максим Горпиніч <gorpinicmaksim0@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/uk/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/uk/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/uk/
Translation: Frigate NVR/common
Translation: Frigate NVR/views-live
Translation: Frigate NVR/views-settings
2026-02-03 10:54:04 -07:00
Hosted Weblate
74ac45d0af Translated using Weblate (Romanian)
Currently translated at 100.0% (98 of 98 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (10 of 10 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (654 of 654 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (216 of 216 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: lukasig <lukasig@hotmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/ro/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-configeditor/ro/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/ro/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/ro/
Translation: Frigate NVR/common
Translation: Frigate NVR/views-configeditor
Translation: Frigate NVR/views-live
Translation: Frigate NVR/views-settings
2026-02-03 10:54:04 -07:00
Hosted Weblate
2f06cfe50c Translated using Weblate (Russian)
Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (43 of 43 strings)

Translated using Weblate (Russian)

Currently translated at 100.0% (98 of 98 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: internetson <sockmancore@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/ru/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/ru/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/ru/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/ru/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/ru/
Translation: Frigate NVR/common
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-live
Translation: Frigate NVR/views-system
2026-02-03 10:54:04 -07:00
Hosted Weblate
9413f1c46d Translated using Weblate (Estonian)
Currently translated at 80.4% (74 of 92 strings)

Translated using Weblate (Estonian)

Currently translated at 100.0% (216 of 216 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Priit Jõerüüt <jrthwlate@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/et/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/et/
Translation: Frigate NVR/common
Translation: Frigate NVR/views-live
2026-02-03 10:54:04 -07:00
Hosted Weblate
fee3050886 Translated using Weblate (Greek)
Currently translated at 6.5% (8 of 122 strings)

Translated using Weblate (Greek)

Currently translated at 53.2% (115 of 216 strings)

Translated using Weblate (Greek)

Currently translated at 48.8% (21 of 43 strings)

Co-authored-by: Apostolos Tsaganos <apostolos94@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/el/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/el/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/el/
Translation: Frigate NVR/common
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-events
2026-02-03 10:54:04 -07:00
Hosted Weblate
9d572ba8cb Translated using Weblate (Danish)
Currently translated at 72.0% (18 of 25 strings)

Translated using Weblate (Danish)

Currently translated at 100.0% (2 of 2 strings)

Translated using Weblate (Danish)

Currently translated at 18.3% (9 of 49 strings)

Translated using Weblate (Danish)

Currently translated at 92.3% (12 of 13 strings)

Translated using Weblate (Danish)

Currently translated at 39.5% (17 of 43 strings)

Translated using Weblate (Danish)

Currently translated at 100.0% (46 of 46 strings)

Translated using Weblate (Danish)

Currently translated at 100.0% (10 of 10 strings)

Translated using Weblate (Danish)

Currently translated at 100.0% (122 of 122 strings)

Translated using Weblate (Danish)

Currently translated at 100.0% (118 of 118 strings)

Translated using Weblate (Danish)

Currently translated at 39.1% (196 of 501 strings)

Translated using Weblate (Danish)

Currently translated at 100.0% (10 of 10 strings)

Translated using Weblate (Danish)

Currently translated at 18.8% (10 of 53 strings)

Translated using Weblate (Danish)

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (Danish)

Currently translated at 37.2% (16 of 43 strings)

Translated using Weblate (Danish)

Currently translated at 59.8% (73 of 122 strings)

Co-authored-by: Bjorn Jorgensen <github@bjornz.dk>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/audio/da/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/da/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-auth/da/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-camera/da/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-icons/da/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-player/da/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/objects/da/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/da/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-configeditor/da/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/da/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-exports/da/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/da/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-search/da/
Translation: Frigate NVR/audio
Translation: Frigate NVR/common
Translation: Frigate NVR/components-auth
Translation: Frigate NVR/components-camera
Translation: Frigate NVR/components-icons
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-exports
Translation: Frigate NVR/views-facelibrary
Translation: Frigate NVR/views-search
2026-02-03 10:54:04 -07:00
Hosted Weblate
9267d006ce Translated using Weblate (German)
Currently translated at 100.0% (654 of 654 strings)

Translated using Weblate (German)

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (German)

Currently translated at 100.0% (98 of 98 strings)

Translated using Weblate (German)

Currently translated at 99.8% (653 of 654 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Sebastian Sie <sebastian.neuplanitz@googlemail.com>
Co-authored-by: jmtatsch <julian@tatsch.it>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/de/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/de/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/de/
Translation: Frigate NVR/common
Translation: Frigate NVR/views-live
Translation: Frigate NVR/views-settings
2026-02-03 10:54:04 -07:00
Hosted Weblate
e6e2b74034 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (74 of 74 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 83.8% (114 of 136 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 98.1% (54 of 55 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 97.6% (42 of 43 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 47.5% (58 of 122 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (49 of 49 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 69.1% (452 of 654 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 92.5% (200 of 216 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 96.3% (53 of 55 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 68.6% (449 of 654 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 78.6% (107 of 136 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 43.4% (53 of 122 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (53 of 53 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 77.9% (106 of 136 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 96.7% (89 of 92 strings)

Translated using Weblate (Portuguese (Brazil))

Currently translated at 40.9% (50 of 122 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Rhuan Barreto <rhuan@barreto.work>
Co-authored-by: cvroque <carlos.vroque@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-dialog/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-filter/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-search/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/pt_BR/
Translation: Frigate NVR/common
Translation: Frigate NVR/components-dialog
Translation: Frigate NVR/components-filter
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-facelibrary
Translation: Frigate NVR/views-live
Translation: Frigate NVR/views-search
Translation: Frigate NVR/views-settings
2026-02-03 10:54:04 -07:00
Hosted Weblate
0a307edce9 Translated using Weblate (Lithuanian)
Currently translated at 100.0% (122 of 122 strings)

Translated using Weblate (Lithuanian)

Currently translated at 100.0% (216 of 216 strings)

Translated using Weblate (Lithuanian)

Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Lithuanian)

Currently translated at 100.0% (98 of 98 strings)

Translated using Weblate (Lithuanian)

Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Lithuanian)

Currently translated at 84.5% (553 of 654 strings)

Translated using Weblate (Lithuanian)

Currently translated at 100.0% (501 of 501 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: MaBeniu <runnerm@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/audio/lt/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/lt/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/lt/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/lt/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/lt/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/lt/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/lt/
Translation: Frigate NVR/audio
Translation: Frigate NVR/common
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-live
Translation: Frigate NVR/views-settings
Translation: Frigate NVR/views-system
2026-02-03 10:54:04 -07:00
Hosted Weblate
59a959430d Translated using Weblate (Turkish)
Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (654 of 654 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (53 of 53 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (98 of 98 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (216 of 216 strings)

Co-authored-by: Emircanos <emircan368@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: pcislocked <git@pcislocked.net>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/tr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/tr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/tr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/tr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/tr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/tr/
Translation: Frigate NVR/common
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-facelibrary
Translation: Frigate NVR/views-live
Translation: Frigate NVR/views-settings
Translation: Frigate NVR/views-system
2026-02-03 10:54:04 -07:00
Nicolas Mowen
2d83992284 Miscellaneous fixes (0.17 beta) (#21867)
* Adjust title prompt to have less rigidity

* Improve motion boxes handling for features that don't require motion

* Improve handling of classes starting with digits

* Improve vehicle nuance

* tweak lpr docs

* Improve grammar

* Don't allow # in face name

* add password requirements to new user dialog

* change password requirements

* Clenaup

---------

Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
2026-02-03 08:31:00 -06:00
Blake Blackshear
e4fe021279 Merge remote-tracking branch 'origin/master' into dev 2026-01-31 18:42:40 +00:00
Josh Hawkins
b4520d9e2f Miscellaneous fixes (0.17 beta) (#21826)
* revert other changes

* fix verified icon overlay in debug view list

* Add classification object debug logs

* Formatting

---------

Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
2026-01-29 12:42:06 -07:00
Josh Hawkins
3b6814fbc9 Revert "Miscellaneous fixes (0.17 beta) (#21764)" (#21825)
This reverts commit 50ac5a1483.
2026-01-29 11:30:21 -07:00
Marijn0
338d85a9a2 Fix i18n keys (#21814) 2026-01-28 13:55:38 -07:00
Blake Blackshear
4131252a3b Port go2rtc check (#21808)
* version update

* Restrict go2rtc exec sources by default (#21543)

* Restrict go2rtc exec sources by default

* add docs

* check for addon value too

---------

Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
2026-01-28 06:56:15 -06:00
Josh Hawkins
50ac5a1483 Miscellaneous fixes (0.17 beta) (#21764)
* 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>
2026-01-25 18:59:25 -07:00
Josh Hawkins
a75f6945ae Miscellaneous fixes (0.17 beta) (#21737)
* 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>
2026-01-21 17:46:24 -07:00
dependabot[bot]
90b14f1a32 Bump lodash from 4.17.21 to 4.17.23 in /web (#21749)
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

---
updated-dependencies:
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-21 17:46:06 -07:00
Josh Hawkins
d633c7d966 Miscellaneous fixes (0.17 beta) (#21699)
* 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
2026-01-20 08:17:58 -07:00
Josh Hawkins
0a8f499640 Miscellaneous fixes (0.17 beta) (#21683)
* 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
2026-01-18 06:36:27 -07:00
Kirill Kulakov
cfeb86646f fix(recording): handle unexpected filenames in cache maintainer to prevent crash (#21676)
* fix(recording): handle unexpected filenames in cache maintainer to prevent crash

* test(recording): add test for maintainer cache file parsing

* Prevent log spam from unexpected cache files

Addresses PR review feedback: Add deduplication to prevent warning
messages from being logged repeatedly for the same unexpected file
in the cache directory. Each unexpected filename is only logged once
per RecordingMaintainer instance lifecycle.

Also adds test to verify warning is only emitted once per filename.

* Fix code formatting for test_maintainer.py

* fixes + ruff
2026-01-16 19:23:23 -07:00
Nicolas Mowen
bf099c3edd Miscellaneous fixes (0.17 beta) (#21655)
* Fix jetson stats reading

* Return result

* Avoid unknown class for cover image

* fix double encoding of passwords in camera wizard

* formatting

* empty homekit config fixes

* add locks to jina v1 embeddings

protect tokenizer and feature extractor in jina_v1_embedding with per-instance thread lock to avoid the "Already borrowed" RuntimeError during concurrent tokenization

* Capitalize correctly

* replace deprecated google-generativeai with google-genai

update gemini genai provider with new calls from SDK
provider_options specifies any http options
suppress unneeded info logging

* fix attribute area on detail stream hover

---------

Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
2026-01-15 07:08:49 -07:00
dependabot[bot]
2e1706baa0 Bump @remix-run/router and react-router-dom in /web (#21580)
Bumps [@remix-run/router](https://github.com/remix-run/react-router/tree/HEAD/packages/router) to 1.23.2 and updates ancestor dependency [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom). These dependencies need to be updated together.


Updates `@remix-run/router` from 1.19.0 to 1.23.2
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/@remix-run/router@1.23.2/packages/router/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/@remix-run/router@1.23.2/packages/router)

Updates `react-router-dom` from 6.26.0 to 6.30.3
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.30.3/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: "@remix-run/router"
  dependency-version: 1.23.2
  dependency-type: indirect
- dependency-name: react-router-dom
  dependency-version: 6.30.3
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-14 07:26:56 -06:00
dependabot[bot]
43c8f68e44 Bump qs from 6.14.0 to 6.14.1 in /docs (#21504)
Bumps [qs](https://github.com/ljharb/qs) from 6.14.0 to 6.14.1.
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.14.0...v6.14.1)

---
updated-dependencies:
- dependency-name: qs
  dependency-version: 6.14.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-14 07:26:36 -06:00
dependabot[bot]
90d857ad6d Bump vite from 6.2.0 to 6.4.1 in /web (#20593)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.2.0 to 6.4.1.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/create-vite@6.4.1/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.4.1
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-14 07:26:04 -06:00
dependabot[bot]
c222aa0e65 Bump form-data from 4.0.0 to 4.0.4 in /web (#19242)
Bumps [form-data](https://github.com/form-data/form-data) from 4.0.0 to 4.0.4.
- [Release notes](https://github.com/form-data/form-data/releases)
- [Changelog](https://github.com/form-data/form-data/blob/master/CHANGELOG.md)
- [Commits](https://github.com/form-data/form-data/compare/v4.0.0...v4.0.4)

---
updated-dependencies:
- dependency-name: form-data
  dependency-version: 4.0.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-14 07:12:48 -06:00
Hosted Weblate
cd37af4365 Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (215 of 215 strings)

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (43 of 43 strings)

Translated using Weblate (Norwegian Bokmål)

Currently translated at 100.0% (136 of 136 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: OverTheHillsAndFarAway <prosjektx@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/nb_NO/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/nb_NO/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/nb_NO/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/nb_NO/
Translation: Frigate NVR/common
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-system
2026-01-13 13:02:28 -07:00
Hosted Weblate
5e57dbe070 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (654 of 654 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (215 of 215 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (43 of 43 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (501 of 501 strings)

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 100.0% (118 of 118 strings)

Co-authored-by: GuoQing Liu <842607283@qq.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/audio/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/objects/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-settings/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/zh_Hans/
Translation: Frigate NVR/audio
Translation: Frigate NVR/common
Translation: Frigate NVR/objects
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-settings
Translation: Frigate NVR/views-system
2026-01-13 13:02:28 -07:00
Hosted Weblate
bd568ab3b1 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 100.0% (49 of 49 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 11.9% (78 of 654 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 100.0% (214 of 214 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 100.0% (55 of 55 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 97.6% (42 of 43 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 99.2% (135 of 136 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 100.0% (53 of 53 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 100.0% (74 of 74 strings)

Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 100.0% (131 of 131 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: J P <jpoloczek24@gmail.com>
Co-authored-by: windasd <me@windasd.tw>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-dialog/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-filter/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-search/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/zh_Hant/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/zh_Hant/
Translation: Frigate NVR/common
Translation: Frigate NVR/components-dialog
Translation: Frigate NVR/components-filter
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-facelibrary
Translation: Frigate NVR/views-search
Translation: Frigate NVR/views-settings
Translation: Frigate NVR/views-system
2026-01-13 13:02:28 -07:00
Hosted Weblate
7d02220ec5 Translated using Weblate (Persian)
Currently translated at 100.0% (53 of 53 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (49 of 49 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (122 of 122 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (6 of 6 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (214 of 214 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (46 of 46 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (654 of 654 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (92 of 92 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (55 of 55 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (43 of 43 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (13 of 13 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (501 of 501 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (118 of 118 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (10 of 10 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (55 of 55 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (41 of 41 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (53 of 53 strings)

Translated using Weblate (Persian)

Currently translated at 99.6% (652 of 654 strings)

Translated using Weblate (Persian)

Currently translated at 98.9% (91 of 92 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (122 of 122 strings)

Translated using Weblate (Persian)

Currently translated at 84.6% (11 of 13 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (74 of 74 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (118 of 118 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (135 of 135 strings)

Translated using Weblate (Persian)

Currently translated at 95.6% (44 of 46 strings)

Translated using Weblate (Persian)

Currently translated at 66.6% (4 of 6 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (10 of 10 strings)

Translated using Weblate (Persian)

Currently translated at 92.0% (23 of 25 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (501 of 501 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (2 of 2 strings)

Translated using Weblate (Persian)

Currently translated at 100.0% (214 of 214 strings)

Translated using Weblate (Persian)

Currently translated at 97.9% (48 of 49 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: حمید ملک محمدی <hmmftg@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/audio/fa/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/fa/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-auth/fa/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-camera/fa/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-dialog/fa/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-filter/fa/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-icons/fa/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-player/fa/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/objects/fa/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/fa/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-configeditor/fa/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/fa/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/fa/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-exports/fa/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/fa/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/fa/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-recording/fa/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-search/fa/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/fa/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/fa/
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-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-01-13 13:02:28 -07:00
Hosted Weblate
da75481443 Translated using Weblate (Swedish)
Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Swedish)

Currently translated at 100.0% (215 of 215 strings)

Translated using Weblate (Swedish)

Currently translated at 100.0% (43 of 43 strings)

Translated using Weblate (Swedish)

Currently translated at 100.0% (136 of 136 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: bittin1ddc447d824349b2 <bittin@reimu.nl>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/sv/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/sv/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/sv/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/sv/
Translation: Frigate NVR/common
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-system
2026-01-13 13:02:28 -07:00
Hosted Weblate
85bc988c76 Translated using Weblate (French)
Currently translated at 97.7% (133 of 136 strings)

Translated using Weblate (French)

Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (French)

Currently translated at 100.0% (43 of 43 strings)

Co-authored-by: Apocoloquintose <bertrand.moreux@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/fr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/fr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/fr/
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-system
2026-01-13 13:02:28 -07:00
Hosted Weblate
53a592322a Translated using Weblate (Spanish)
Currently translated at 98.5% (134 of 136 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (654 of 654 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (118 of 118 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (214 of 214 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (49 of 49 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (501 of 501 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (53 of 53 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (53 of 53 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (43 of 43 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (122 of 122 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (122 of 122 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (74 of 74 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (55 of 55 strings)

Translated using Weblate (Spanish)

Currently translated at 100.0% (92 of 92 strings)

Co-authored-by: Ancor Trujillo <nightsearch@hotmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: José María Díaz <jdiaz.bb@gmail.com>
Co-authored-by: klakiti <alberticobrito@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/audio/es/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/es/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-dialog/es/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-filter/es/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/objects/es/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/es/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/es/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/es/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/es/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/es/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-search/es/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/es/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/es/
Translation: Frigate NVR/audio
Translation: Frigate NVR/common
Translation: Frigate NVR/components-dialog
Translation: Frigate NVR/components-filter
Translation: Frigate NVR/objects
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
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-01-13 13:02:28 -07:00
Hosted Weblate
0a24e3ce67 Translated using Weblate (Dutch)
Currently translated at 100.0% (215 of 215 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (43 of 43 strings)

Translated using Weblate (Dutch)

Currently translated at 100.0% (131 of 131 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Marijn <168113859+Marijn0@users.noreply.github.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/nl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/nl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/nl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/nl/
Translation: Frigate NVR/common
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-system
2026-01-13 13:02:28 -07:00
Hosted Weblate
d1a184d4ac Translated using Weblate (Arabic)
Currently translated at 100.0% (53 of 53 strings)

Translated using Weblate (Arabic)

Currently translated at 0.8% (1 of 122 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Med Taha Ben Brahim <mohamedtaha.bb@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/ar/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/ar/
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-facelibrary
2026-01-13 13:02:28 -07:00
Hosted Weblate
311549536c Translated using Weblate (Italian)
Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (215 of 215 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Italian)

Currently translated at 100.0% (43 of 43 strings)

Co-authored-by: Gringo <ita.translations@tiscali.it>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Nton <arlatalpa@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/it/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/it/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/it/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/it/
Translation: Frigate NVR/common
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-system
2026-01-13 13:02:28 -07:00
Hosted Weblate
ace11730bd Translated using Weblate (Polish)
Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (654 of 654 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (74 of 74 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (55 of 55 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (214 of 214 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (501 of 501 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (43 of 43 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (131 of 131 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (122 of 122 strings)

Translated using Weblate (Polish)

Currently translated at 95.1% (39 of 41 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (49 of 49 strings)

Translated using Weblate (Polish)

Currently translated at 69.6% (85 of 122 strings)

Translated using Weblate (Polish)

Currently translated at 84.4% (114 of 135 strings)

Translated using Weblate (Polish)

Currently translated at 100.0% (53 of 53 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: J P <jpoloczek24@gmail.com>
Co-authored-by: Janusz Poloczek <jpoloczek@trafficaisolutions.com>
Co-authored-by: przeniek <przeniek@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/audio/pl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/pl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-dialog/pl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-filter/pl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/pl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/pl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/pl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/pl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-search/pl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/pl/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/pl/
Translation: Frigate NVR/audio
Translation: Frigate NVR/common
Translation: Frigate NVR/components-dialog
Translation: Frigate NVR/components-filter
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-facelibrary
Translation: Frigate NVR/views-search
Translation: Frigate NVR/views-settings
Translation: Frigate NVR/views-system
2026-01-13 13:02:28 -07:00
Hosted Weblate
2b345bd3f7 Translated using Weblate (Hebrew)
Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Hebrew)

Currently translated at 100.0% (215 of 215 strings)

Translated using Weblate (Hebrew)

Currently translated at 100.0% (43 of 43 strings)

Translated using Weblate (Hebrew)

Currently translated at 100.0% (136 of 136 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Ronen Atsil <atsil55@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/he/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/he/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/he/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/he/
Translation: Frigate NVR/common
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-system
2026-01-13 13:02:28 -07:00
Hosted Weblate
e2353e55f3 Translated using Weblate (Hungarian)
Currently translated at 94.3% (50 of 53 strings)

Translated using Weblate (Hungarian)

Currently translated at 62.0% (406 of 654 strings)

Translated using Weblate (Hungarian)

Currently translated at 63.4% (26 of 41 strings)

Translated using Weblate (Hungarian)

Currently translated at 97.9% (48 of 49 strings)

Translated using Weblate (Hungarian)

Currently translated at 19.6% (24 of 122 strings)

Translated using Weblate (Hungarian)

Currently translated at 19.6% (24 of 122 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: ZsoltiHUB <zsoltizsolti043@gmail.com>
Co-authored-by: ugfus1630 <katona.ta@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/hu/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/hu/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/hu/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-search/hu/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/hu/
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-facelibrary
Translation: Frigate NVR/views-search
Translation: Frigate NVR/views-settings
2026-01-13 13:02:28 -07:00
Hosted Weblate
cd3d0883bc Translated using Weblate (Croatian)
Currently translated at 100.0% (43 of 43 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (46 of 46 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (74 of 74 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (55 of 55 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (118 of 118 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (49 of 49 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (501 of 501 strings)

Translated using Weblate (Croatian)

Currently translated at 46.7% (43 of 92 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (118 of 118 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (53 of 53 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (43 of 43 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (215 of 215 strings)

Translated using Weblate (Croatian)

Currently translated at 10.9% (55 of 501 strings)

Translated using Weblate (Croatian)

Currently translated at 27.8% (34 of 122 strings)

Translated using Weblate (Croatian)

Currently translated at 15.8% (34 of 215 strings)

Translated using Weblate (Croatian)

Currently translated at 24.5% (29 of 118 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (13 of 13 strings)

Translated using Weblate (Croatian)

Currently translated at 67.4% (29 of 43 strings)

Translated using Weblate (Croatian)

Currently translated at 39.1% (29 of 74 strings)

Translated using Weblate (Croatian)

Currently translated at 58.4% (31 of 53 strings)

Translated using Weblate (Croatian)

Currently translated at 22.7% (31 of 136 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (10 of 10 strings)

Translated using Weblate (Croatian)

Currently translated at 63.0% (29 of 46 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (10 of 10 strings)

Translated using Weblate (Croatian)

Currently translated at 31.5% (29 of 92 strings)

Translated using Weblate (Croatian)

Currently translated at 100.0% (25 of 25 strings)

Translated using Weblate (Croatian)

Currently translated at 59.1% (29 of 49 strings)

Translated using Weblate (Croatian)

Currently translated at 7.9% (40 of 501 strings)

Translated using Weblate (Croatian)

Currently translated at 52.7% (29 of 55 strings)

Translated using Weblate (Croatian)

Currently translated at 5.0% (33 of 654 strings)

Translated using Weblate (Croatian)

Currently translated at 26.4% (36 of 136 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: stipe-jurkovic <sjurko00@fesb.hr>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/audio/hr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/hr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-auth/hr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-camera/hr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-dialog/hr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-filter/hr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-player/hr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/objects/hr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/hr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-configeditor/hr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/hr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/hr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-exports/hr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/hr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/hr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-search/hr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/hr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/hr/
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-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-search
Translation: Frigate NVR/views-settings
Translation: Frigate NVR/views-system
2026-01-13 13:02:28 -07:00
Hosted Weblate
820fc6e9b5 Translated using Weblate (Portuguese)
Currently translated at 100.0% (10 of 10 strings)

Translated using Weblate (Portuguese)

Currently translated at 27.8% (34 of 122 strings)

Translated using Weblate (Portuguese)

Currently translated at 100.0% (214 of 214 strings)

Translated using Weblate (Portuguese)

Currently translated at 4.9% (6 of 122 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Nuno Ponte <nuno.ponte@gmail.com>
Co-authored-by: fabiovalverde <fabio@rvalverde.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/pt/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-auth/pt/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/pt/
Translation: Frigate NVR/common
Translation: Frigate NVR/components-auth
Translation: Frigate NVR/views-classificationmodel
2026-01-13 13:02:28 -07:00
Hosted Weblate
a326ecdc9f Translated using Weblate (Catalan)
Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Catalan)

Currently translated at 100.0% (215 of 215 strings)

Translated using Weblate (Catalan)

Currently translated at 100.0% (43 of 43 strings)

Translated using Weblate (Catalan)

Currently translated at 100.0% (136 of 136 strings)

Co-authored-by: Eduardo Pastor Fernández <123eduardoneko123@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: anton garcias <isaga.percompartir@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/ca/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/ca/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/ca/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/ca/
Translation: Frigate NVR/common
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-system
2026-01-13 13:02:28 -07:00
Hosted Weblate
91f9a01df5 Translated using Weblate (Japanese)
Currently translated at 100.0% (43 of 43 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (501 of 501 strings)

Translated using Weblate (Japanese)

Currently translated at 100.0% (118 of 118 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: alpha <etc@alpha-line.org>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/audio/ja/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/objects/ja/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/ja/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/ja/
Translation: Frigate NVR/audio
Translation: Frigate NVR/objects
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
2026-01-13 13:02:28 -07:00
Hosted Weblate
6572fa8a48 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (215 of 215 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (43 of 43 strings)

Translated using Weblate (Ukrainian)

Currently translated at 100.0% (136 of 136 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Максим Горпиніч <gorpinicmaksim0@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/uk/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/uk/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/uk/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/uk/
Translation: Frigate NVR/common
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-system
2026-01-13 13:02:28 -07:00
Hosted Weblate
067de06176 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (10 of 10 strings)

Translated using Weblate (Bulgarian)

Currently translated at 23.2% (10 of 43 strings)

Translated using Weblate (Bulgarian)

Currently translated at 8.1% (4 of 49 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (10 of 10 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (13 of 13 strings)

Translated using Weblate (Bulgarian)

Currently translated at 53.2% (267 of 501 strings)

Translated using Weblate (Bulgarian)

Currently translated at 1.6% (2 of 122 strings)

Translated using Weblate (Bulgarian)

Currently translated at 45.6% (21 of 46 strings)

Translated using Weblate (Bulgarian)

Currently translated at 2.9% (4 of 136 strings)

Translated using Weblate (Bulgarian)

Currently translated at 10.9% (6 of 55 strings)

Translated using Weblate (Bulgarian)

Currently translated at 11.3% (6 of 53 strings)

Translated using Weblate (Bulgarian)

Currently translated at 2.9% (4 of 136 strings)

Translated using Weblate (Bulgarian)

Currently translated at 100.0% (13 of 13 strings)

Co-authored-by: Borislav <sartheris@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jan Ivanov (Telemaniaka) <telemaniaka@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/audio/bg/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-auth/bg/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-camera/bg/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-dialog/bg/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/bg/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-configeditor/bg/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/bg/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/bg/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-exports/bg/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/bg/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-search/bg/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/bg/
Translation: Frigate NVR/audio
Translation: Frigate NVR/components-auth
Translation: Frigate NVR/components-camera
Translation: Frigate NVR/components-dialog
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-search
Translation: Frigate NVR/views-system
2026-01-13 13:02:28 -07:00
Hosted Weblate
849677c758 Translated using Weblate (Romanian)
Currently translated at 100.0% (215 of 215 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (43 of 43 strings)

Translated using Weblate (Romanian)

Currently translated at 100.0% (136 of 136 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: lukasig <lukasig@hotmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/ro/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/ro/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/ro/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/ro/
Translation: Frigate NVR/common
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-system
2026-01-13 13:02:28 -07:00
Hosted Weblate
1c7f68bf44 Translated using Weblate (Estonian)
Currently translated at 100.0% (215 of 215 strings)

Translated using Weblate (Estonian)

Currently translated at 67.3% (62 of 92 strings)

Translated using Weblate (Estonian)

Currently translated at 100.0% (25 of 25 strings)

Translated using Weblate (Estonian)

Currently translated at 100.0% (43 of 43 strings)

Translated using Weblate (Estonian)

Currently translated at 22.9% (115 of 501 strings)

Translated using Weblate (Estonian)

Currently translated at 26.6% (36 of 135 strings)

Translated using Weblate (Estonian)

Currently translated at 14.7% (18 of 122 strings)

Translated using Weblate (Estonian)

Currently translated at 28.3% (15 of 53 strings)

Translated using Weblate (Estonian)

Currently translated at 26.5% (13 of 49 strings)

Translated using Weblate (Estonian)

Currently translated at 5.3% (7 of 131 strings)

Translated using Weblate (Estonian)

Currently translated at 40.0% (10 of 25 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Priit Jõerüüt <jrthwlate@users.noreply.hosted.weblate.org>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/audio/et/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/et/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-player/et/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/et/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/et/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/et/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/et/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/et/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-search/et/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/et/
Translation: Frigate NVR/audio
Translation: Frigate NVR/common
Translation: Frigate NVR/components-player
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-facelibrary
Translation: Frigate NVR/views-live
Translation: Frigate NVR/views-search
Translation: Frigate NVR/views-system
2026-01-13 13:02:28 -07:00
Hosted Weblate
68fee3ed7b Translated using Weblate (Greek)
Currently translated at 2.4% (3 of 122 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Thanasis <than2031995@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/el/
Translation: Frigate NVR/views-classificationmodel
2026-01-13 13:02:28 -07:00
Hosted Weblate
c13a47f30b Translated using Weblate (German)
Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (German)

Currently translated at 98.5% (134 of 136 strings)

Translated using Weblate (German)

Currently translated at 100.0% (215 of 215 strings)

Translated using Weblate (German)

Currently translated at 100.0% (654 of 654 strings)

Translated using Weblate (German)

Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (German)

Currently translated at 100.0% (43 of 43 strings)

Translated using Weblate (German)

Currently translated at 100.0% (53 of 53 strings)

Translated using Weblate (German)

Currently translated at 100.0% (122 of 122 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Sebastian Sie <sebastian.neuplanitz@googlemail.com>
Co-authored-by: jmtatsch <julian@tatsch.it>
Co-authored-by: zobe123 <manuel.zobl@gmx.at>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/de/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/de/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/de/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/de/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/de/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/de/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/de/
Translation: Frigate NVR/common
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-facelibrary
Translation: Frigate NVR/views-settings
Translation: Frigate NVR/views-system
2026-01-13 13:02:28 -07:00
Hosted Weblate
8d26d2dca2 Translated using Weblate (Portuguese (Brazil))
Currently translated at 66.2% (433 of 654 strings)

Co-authored-by: Cleiton PEres <cleiton@consultecti.com.br>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/pt_BR/
Translation: Frigate NVR/views-settings
2026-01-13 13:02:28 -07:00
Hosted Weblate
4188eedf3d Translated using Weblate (Thai)
Currently translated at 23.5% (32 of 136 strings)

Translated using Weblate (Thai)

Currently translated at 2.4% (3 of 122 strings)

Translated using Weblate (Thai)

Currently translated at 45.2% (24 of 53 strings)

Translated using Weblate (Thai)

Currently translated at 60.8% (45 of 74 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kongesque <Kongesque@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-filter/th/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/th/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/th/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/th/
Translation: Frigate NVR/components-filter
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-facelibrary
Translation: Frigate NVR/views-system
2026-01-13 13:02:28 -07:00
Hosted Weblate
8a52d83065 Translated using Weblate (Lithuanian)
Currently translated at 92.3% (121 of 131 strings)

Translated using Weblate (Lithuanian)

Currently translated at 100.0% (46 of 46 strings)

Translated using Weblate (Lithuanian)

Currently translated at 100.0% (13 of 13 strings)

Translated using Weblate (Lithuanian)

Currently translated at 100.0% (55 of 55 strings)

Translated using Weblate (Lithuanian)

Currently translated at 100.0% (43 of 43 strings)

Translated using Weblate (Lithuanian)

Currently translated at 68.9% (451 of 654 strings)

Translated using Weblate (Lithuanian)

Currently translated at 100.0% (74 of 74 strings)

Translated using Weblate (Lithuanian)

Currently translated at 90.4% (123 of 136 strings)

Translated using Weblate (Lithuanian)

Currently translated at 100.0% (53 of 53 strings)

Translated using Weblate (Lithuanian)

Currently translated at 100.0% (49 of 49 strings)

Translated using Weblate (Lithuanian)

Currently translated at 95.3% (204 of 214 strings)

Translated using Weblate (Lithuanian)

Currently translated at 56.5% (69 of 122 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: MaBeniu <runnerm@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/lt/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-camera/lt/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-dialog/lt/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/components-filter/lt/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/lt/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/lt/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/lt/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-exports/lt/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-facelibrary/lt/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-search/lt/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/lt/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/lt/
Translation: Frigate NVR/common
Translation: Frigate NVR/components-camera
Translation: Frigate NVR/components-dialog
Translation: Frigate NVR/components-filter
Translation: Frigate NVR/views-classificationmodel
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-exports
Translation: Frigate NVR/views-facelibrary
Translation: Frigate NVR/views-search
Translation: Frigate NVR/views-settings
Translation: Frigate NVR/views-system
2026-01-13 13:02:28 -07:00
Hosted Weblate
b2d1fdf7eb Translated using Weblate (Turkish)
Currently translated at 100.0% (215 of 215 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (136 of 136 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (43 of 43 strings)

Translated using Weblate (Turkish)

Currently translated at 100.0% (136 of 136 strings)

Co-authored-by: Emircanos <emircan368@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/common/tr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/tr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/tr/
Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/tr/
Translation: Frigate NVR/common
Translation: Frigate NVR/views-events
Translation: Frigate NVR/views-explore
Translation: Frigate NVR/views-system
2026-01-13 13:02:28 -07:00
Nicolas Mowen
2c34e1ec10 Miscellaneous fixes (0.17 beta) (#21607)
* Strip model name before training

* Handle options file for go2rtc option

* Make reviewed optional and add null to API call

* Send reviewed for dashboard

* Allow setting context size for openai compatible endpoints

* push empty go2rtc config to avoid homekit error in log

* Add option to set runtime options for LLM providers

* Docs

---------

Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
2026-01-12 20:36:38 -07:00
GuoQing Liu
91cc6747b6 i18n miscellaneous fixes (#21614)
* fix: fix face library unknown label i18n wrong

* fix: fix review genai threat level i18n

* fix: fix preview unknown label i18n

* fix: fix AM/PM i18n display issue
2026-01-12 09:15:27 -06:00
Blake Blackshear
ea39bb3565 update copyright (#21485) 2026-01-01 09:55:46 -06:00
437 changed files with 13750 additions and 1451 deletions

View File

@@ -1,2 +1,385 @@
Never write strings in the frontend directly, always write to and reference the relevant translations file.
Always conform new and refactored code to the existing coding style in the project.
# GitHub Copilot Instructions for Frigate NVR
This document provides coding guidelines and best practices for contributing to Frigate NVR, a complete and local NVR designed for Home Assistant with AI object detection.
## Project Overview
Frigate NVR is a realtime object detection system for IP cameras that uses:
- **Backend**: Python 3.13+ with FastAPI, OpenCV, TensorFlow/ONNX
- **Frontend**: React with TypeScript, Vite, TailwindCSS
- **Architecture**: Multiprocessing design with ZMQ and MQTT communication
- **Focus**: Minimal resource usage with maximum performance
## Code Review Guidelines
When reviewing code, do NOT comment on:
- Missing imports - Static analysis tooling catches these
- Code formatting - Ruff (Python) and Prettier (TypeScript/React) handle formatting
- Minor style inconsistencies already enforced by linters
## Python Backend Standards
### Python Requirements
- **Compatibility**: Python 3.13+
- **Language Features**: Use modern Python features:
- Pattern matching
- Type hints (comprehensive typing preferred)
- f-strings (preferred over `%` or `.format()`)
- Dataclasses
- Async/await patterns
### Code Quality Standards
- **Formatting**: Ruff (configured in `pyproject.toml`)
- **Linting**: Ruff with rules defined in project config
- **Type Checking**: Use type hints consistently
- **Testing**: unittest framework - use `python3 -u -m unittest` to run tests
- **Language**: American English for all code, comments, and documentation
### Logging Standards
- **Logger Pattern**: Use module-level logger
```python
import logging
logger = logging.getLogger(__name__)
```
- **Format Guidelines**:
- No periods at end of log messages
- No sensitive data (keys, tokens, passwords)
- Use lazy logging: `logger.debug("Message with %s", variable)`
- **Log Levels**:
- `debug`: Development and troubleshooting information
- `info`: Important runtime events (startup, shutdown, state changes)
- `warning`: Recoverable issues that should be addressed
- `error`: Errors that affect functionality but don't crash the app
- `exception`: Use in except blocks to include traceback
### Error Handling
- **Exception Types**: Choose most specific exception available
- **Try/Catch Best Practices**:
- Only wrap code that can throw exceptions
- Keep try blocks minimal - process data after the try/except
- Avoid bare exceptions except in background tasks
Bad pattern:
```python
try:
data = await device.get_data() # Can throw
# ❌ Don't process data inside try block
processed = data.get("value", 0) * 100
result = processed
except DeviceError:
logger.error("Failed to get data")
```
Good pattern:
```python
try:
data = await device.get_data() # Can throw
except DeviceError:
logger.error("Failed to get data")
return
# ✅ Process data outside try block
processed = data.get("value", 0) * 100
result = processed
```
### Async Programming
- **External I/O**: All external I/O operations must be async
- **Best Practices**:
- Avoid sleeping in loops - use `asyncio.sleep()` not `time.sleep()`
- Avoid awaiting in loops - use `asyncio.gather()` instead
- No blocking calls in async functions
- Use `asyncio.create_task()` for background operations
- **Thread Safety**: Use proper synchronization for shared state
### Documentation Standards
- **Module Docstrings**: Concise descriptions at top of files
```python
"""Utilities for motion detection and analysis."""
```
- **Function Docstrings**: Required for public functions and methods
```python
async def process_frame(frame: ndarray, config: Config) -> Detection:
"""Process a video frame for object detection.
Args:
frame: The video frame as numpy array
config: Detection configuration
Returns:
Detection results with bounding boxes
"""
```
- **Comment Style**:
- Explain the "why" not just the "what"
- Keep lines under 88 characters when possible
- Use clear, descriptive comments
### File Organization
- **API Endpoints**: `frigate/api/` - FastAPI route handlers
- **Configuration**: `frigate/config/` - Configuration parsing and validation
- **Detectors**: `frigate/detectors/` - Object detection backends
- **Events**: `frigate/events/` - Event management and storage
- **Utilities**: `frigate/util/` - Shared utility functions
## Frontend (React/TypeScript) Standards
### Internationalization (i18n)
- **CRITICAL**: Never write user-facing strings directly in components
- **Always use react-i18next**: Import and use the `t()` function
```tsx
import { useTranslation } from "react-i18next";
function MyComponent() {
const { t } = useTranslation(["views/live"]);
return <div>{t("camera_not_found")}</div>;
}
```
- **Translation Files**: Add English strings to the appropriate json files in `web/public/locales/en`
- **Namespaces**: Organize translations by feature/view (e.g., `views/live`, `common`, `views/system`)
### Code Quality
- **Linting**: ESLint (see `web/.eslintrc.cjs`)
- **Formatting**: Prettier with Tailwind CSS plugin
- **Type Safety**: TypeScript strict mode enabled
- **Testing**: Vitest for unit tests
### Component Patterns
- **UI Components**: Use Radix UI primitives (in `web/src/components/ui/`)
- **Styling**: TailwindCSS with `cn()` utility for class merging
- **State Management**: React hooks (useState, useEffect, useCallback, useMemo)
- **Data Fetching**: Custom hooks with proper loading and error states
### ESLint Rules
Key rules enforced:
- `react-hooks/rules-of-hooks`: error
- `react-hooks/exhaustive-deps`: error
- `no-console`: error (use proper logging or remove)
- `@typescript-eslint/no-explicit-any`: warn (always use proper types instead of `any`)
- Unused variables must be prefixed with `_`
- Comma dangles required for multiline objects/arrays
### File Organization
- **Pages**: `web/src/pages/` - Route components
- **Views**: `web/src/views/` - Complex view components
- **Components**: `web/src/components/` - Reusable components
- **Hooks**: `web/src/hooks/` - Custom React hooks
- **API**: `web/src/api/` - API client functions
- **Types**: `web/src/types/` - TypeScript type definitions
## Testing Requirements
### Backend Testing
- **Framework**: Python unittest
- **Run Command**: `python3 -u -m unittest`
- **Location**: `frigate/test/`
- **Coverage**: Aim for comprehensive test coverage of core functionality
- **Pattern**: Use `TestCase` classes with descriptive test method names
```python
class TestMotionDetection(unittest.TestCase):
def test_detects_motion_above_threshold(self):
# Test implementation
```
### Test Best Practices
- Always have a way to test your work and confirm your changes
- Write tests for bug fixes to prevent regressions
- Test edge cases and error conditions
- Mock external dependencies (cameras, APIs, hardware)
- Use fixtures for test data
## Development Commands
### Python Backend
```bash
# Run all tests
python3 -u -m unittest
# Run specific test file
python3 -u -m unittest frigate.test.test_ffmpeg_presets
# Check formatting (Ruff)
ruff format --check frigate/
# Apply formatting
ruff format frigate/
# Run linter
ruff check frigate/
```
### Frontend (from web/ directory)
```bash
# Start dev server (AI agents should never run this directly unless asked)
npm run dev
# Build for production
npm run build
# Run linter
npm run lint
# Fix linting issues
npm run lint:fix
# Format code
npm run prettier:write
```
### Docker Development
AI agents should never run these commands directly unless instructed.
```bash
# Build local image
make local
# Build debug image
make debug
```
## Common Patterns
### API Endpoint Pattern
```python
from fastapi import APIRouter, Request
from frigate.api.defs.tags import Tags
router = APIRouter(tags=[Tags.Events])
@router.get("/events")
async def get_events(request: Request, limit: int = 100):
"""Retrieve events from the database."""
# Implementation
```
### Configuration Access
```python
# Access Frigate configuration
config: FrigateConfig = request.app.frigate_config
camera_config = config.cameras["front_door"]
```
### Database Queries
```python
from frigate.models import Event
# Use Peewee ORM for database access
events = (
Event.select()
.where(Event.camera == camera_name)
.order_by(Event.start_time.desc())
.limit(limit)
)
```
## Common Anti-Patterns to Avoid
### ❌ Avoid These
```python
# Blocking operations in async functions
data = requests.get(url) # ❌ Use async HTTP client
time.sleep(5) # ❌ Use asyncio.sleep()
# Hardcoded strings in React components
<div>Camera not found</div> # ❌ Use t("camera_not_found")
# Missing error handling
data = await api.get_data() # ❌ No exception handling
# Bare exceptions in regular code
try:
value = await sensor.read()
except Exception: # ❌ Too broad
logger.error("Failed")
```
### ✅ Use These Instead
```python
# Async operations
import aiohttp
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
data = await response.json()
await asyncio.sleep(5) # ✅ Non-blocking
# Translatable strings in React
const { t } = useTranslation();
<div>{t("camera_not_found")}</div> # ✅ Translatable
# Proper error handling
try:
data = await api.get_data()
except ApiException as err:
logger.error("API error: %s", err)
raise
# Specific exceptions
try:
value = await sensor.read()
except SensorException as err: # ✅ Specific
logger.exception("Failed to read sensor")
```
## Project-Specific Conventions
### Configuration Files
- Main config: `config/config.yml`
### Directory Structure
- Backend code: `frigate/`
- Frontend code: `web/`
- Docker files: `docker/`
- Documentation: `docs/`
- Database migrations: `migrations/`
### Code Style Conformance
Always conform new and refactored code to the existing coding style in the project:
- Follow established patterns in similar files
- Match indentation and formatting of surrounding code
- Use consistent naming conventions (snake_case for Python, camelCase for TypeScript)
- Maintain the same level of verbosity in comments and docstrings
## Additional Resources
- Documentation: https://docs.frigate.video
- Main Repository: https://github.com/blakeblackshear/frigate
- Home Assistant Integration: https://github.com/blakeblackshear/frigate-hass-integration

View File

@@ -2,15 +2,19 @@
# Update package list and install dependencies
sudo apt-get update
sudo apt-get install -y build-essential cmake git wget
sudo apt-get install -y build-essential cmake git wget linux-headers-$(uname -r)
hailo_version="4.21.0"
arch=$(uname -m)
if [[ $arch == "x86_64" ]]; then
sudo apt install -y linux-headers-$(uname -r);
else
sudo apt install -y linux-modules-extra-$(uname -r);
if [[ $arch == "aarch64" ]]; then
source /etc/os-release
os_codename=$VERSION_CODENAME
echo "Detected OS codename: $os_codename"
fi
if [ "$os_codename" = "trixie" ]; then
sudo apt install -y dkms
fi
# Clone the HailoRT driver repository
@@ -47,3 +51,4 @@ sudo udevadm control --reload-rules && sudo udevadm trigger
echo "HailoRT driver installation complete."
echo "reboot your system to load the firmware!"
echo "Driver version: $(modinfo -F version hailo_pci)"

View File

@@ -47,7 +47,7 @@ onnxruntime == 1.22.*
# Embeddings
transformers == 4.45.*
# Generative AI
google-generativeai == 0.8.*
google-genai == 1.58.*
ollama == 0.6.*
openai == 1.65.*
# push notifications

View File

@@ -54,8 +54,8 @@ function setup_homekit_config() {
local config_path="$1"
if [[ ! -f "${config_path}" ]]; then
echo "[INFO] Creating empty HomeKit config file..."
echo 'homekit: {}' > "${config_path}"
echo "[INFO] Creating empty config file for HomeKit..."
echo '{}' > "${config_path}"
fi
# Convert YAML to JSON for jq processing
@@ -69,15 +69,15 @@ function setup_homekit_config() {
local cleaned_json="/tmp/cache/homekit_cleaned.json"
jq '
# Keep only the homekit section if it exists, otherwise empty object
if has("homekit") then {homekit: .homekit} else {homekit: {}} end
if has("homekit") then {homekit: .homekit} else {} end
' "${temp_json}" > "${cleaned_json}" 2>/dev/null || {
echo '{"homekit": {}}' > "${cleaned_json}"
echo '{}' > "${cleaned_json}"
}
# Convert back to YAML and write to the config file
yq eval -P "${cleaned_json}" > "${config_path}" 2>/dev/null || {
echo "[WARNING] Failed to convert cleaned config to YAML, creating minimal config"
echo 'homekit: {}' > "${config_path}"
echo '{}' > "${config_path}"
}
# Clean up temp files

View File

@@ -23,8 +23,28 @@ sys.path.remove("/opt/frigate")
yaml = YAML()
# Check if arbitrary exec sources are allowed (defaults to False for security)
ALLOW_ARBITRARY_EXEC = os.environ.get(
"GO2RTC_ALLOW_ARBITRARY_EXEC", "false"
allow_arbitrary_exec = None
if "GO2RTC_ALLOW_ARBITRARY_EXEC" in os.environ:
allow_arbitrary_exec = os.environ.get("GO2RTC_ALLOW_ARBITRARY_EXEC")
elif (
os.path.isdir("/run/secrets")
and os.access("/run/secrets", os.R_OK)
and "GO2RTC_ALLOW_ARBITRARY_EXEC" in os.listdir("/run/secrets")
):
allow_arbitrary_exec = (
Path(os.path.join("/run/secrets", "GO2RTC_ALLOW_ARBITRARY_EXEC"))
.read_text()
.strip()
)
# check for the add-on options file
elif os.path.isfile("/data/options.json"):
with open("/data/options.json") as f:
raw_options = f.read()
options = json.loads(raw_options)
allow_arbitrary_exec = options.get("go2rtc_allow_arbitrary_exec")
ALLOW_ARBITRARY_EXEC = allow_arbitrary_exec is not None and str(
allow_arbitrary_exec
).lower() in ("true", "1", "yes")
FRIGATE_ENV_VARS = {k: v for k, v in os.environ.items() if k.startswith("FRIGATE_")}

View File

@@ -29,6 +29,10 @@ auth:
reset_admin_password: true
```
## Password guidance
Constructing secure passwords and managing them properly is important. Frigate requires a minimum length of 12 characters. For guidance on password standards see [NIST SP 800-63B](https://pages.nist.gov/800-63-3/sp800-63b.html). To learn what makes a password truly secure, read this [article](https://medium.com/peerio/how-to-build-a-billion-dollar-password-3d92568d9277).
## Login failure rate limiting
In order to limit the risk of brute force attacks, rate limiting is available for login failures. This is implemented with SlowApi, and the string notation for valid values is available in [the documentation](https://limits.readthedocs.io/en/stable/quickstart.html#examples).

View File

@@ -79,6 +79,12 @@ cameras:
If the ONVIF connection is successful, PTZ controls will be available in the camera's WebUI.
:::note
Some cameras use a separate ONVIF/service account that is distinct from the device administrator credentials. If ONVIF authentication fails with the admin account, try creating or using an ONVIF/service user in the camera's firmware. Refer to your camera manufacturer's documentation for more.
:::
:::tip
If your ONVIF camera does not require authentication credentials, you may still need to specify an empty string for `user` and `password`, eg: `user: ""` and `password: ""`.
@@ -95,7 +101,7 @@ The FeatureList on the [ONVIF Conformant Products Database](https://www.onvif.or
| Brand or specific camera | PTZ Controls | Autotracking | Notes |
| ---------------------------- | :----------: | :----------: | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Amcrest | ✅ | ✅ | ⛔️ Generally, Amcrest should work, but some older models (like the common IP2M-841) don't support autotracking |
| Amcrest | ✅ | ✅ | ⛔️ Generally, Amcrest should work, but some older models (like the common IP2M-841) don't support autotracking |
| Amcrest ASH21 | ✅ | ❌ | ONVIF service port: 80 |
| Amcrest IP4M-S2112EW-AI | ✅ | ❌ | FOV relative movement not supported. |
| Amcrest IP5M-1190EW | ✅ | ❌ | ONVIF Port: 80. FOV relative movement not supported. |

View File

@@ -1,249 +0,0 @@
---
id: genai
title: Generative AI
---
Generative AI can be used to automatically generate descriptive text based on the thumbnails of your tracked objects. This helps with [Semantic Search](/configuration/semantic_search) in Frigate to provide more context about your tracked objects. Descriptions are accessed via the _Explore_ view in the Frigate UI by clicking on a tracked object's thumbnail.
Requests for a description are sent off automatically to your AI provider at the end of the tracked object's lifecycle, or can optionally be sent earlier after a number of significantly changed frames, for example in use in more real-time notifications. Descriptions can also be regenerated manually via the Frigate UI. Note that if you are manually entering a description for tracked objects prior to its end, this will be overwritten by the generated response.
## Configuration
Generative AI can be enabled for all cameras or only for specific cameras. If GenAI is disabled for a camera, you can still manually generate descriptions for events using the HTTP API. There are currently 3 native providers available to integrate with Frigate. Other providers that support the OpenAI standard API can also be used. See the OpenAI section below.
To use Generative AI, you must define a single provider at the global level of your Frigate configuration. If the provider you choose requires an API key, you may either directly paste it in your configuration, or store it in an environment variable prefixed with `FRIGATE_`.
```yaml
genai:
provider: gemini
api_key: "{FRIGATE_GEMINI_API_KEY}"
model: gemini-2.0-flash
cameras:
front_camera:
genai:
enabled: True # <- enable GenAI for your front camera
use_snapshot: True
objects:
- person
required_zones:
- steps
indoor_camera:
objects:
genai:
enabled: False # <- disable GenAI for your indoor camera
```
By default, descriptions will be generated for all tracked objects and all zones. But you can also optionally specify `objects` and `required_zones` to only generate descriptions for certain tracked objects or zones.
Optionally, you can generate the description using a snapshot (if enabled) by setting `use_snapshot` to `True`. By default, this is set to `False`, which sends the uncompressed images from the `detect` stream collected over the object's lifetime to the model. Once the object lifecycle ends, only a single compressed and cropped thumbnail is saved with the tracked object. Using a snapshot might be useful when you want to _regenerate_ a tracked object's description as it will provide the AI with a higher-quality image (typically downscaled by the AI itself) than the cropped/compressed thumbnail. Using a snapshot otherwise has a trade-off in that only a single image is sent to your provider, which will limit the model's ability to determine object movement or direction.
Generative AI can also be toggled dynamically for a camera via MQTT with the topic `frigate/<camera_name>/object_descriptions/set`. See the [MQTT documentation](/integrations/mqtt/#frigatecamera_nameobjectdescriptionsset).
## Ollama
:::warning
Using Ollama on CPU is not recommended, high inference times make using Generative AI impractical.
:::
[Ollama](https://ollama.com/) allows you to self-host large language models and keep everything running locally. It is highly recommended to host this server on a machine with an Nvidia graphics card, or on a Apple silicon Mac for best performance.
Most of the 7b parameter 4-bit vision models will fit inside 8GB of VRAM. There is also a [Docker container](https://hub.docker.com/r/ollama/ollama) available.
Parallel requests also come with some caveats. You will need to set `OLLAMA_NUM_PARALLEL=1` and choose a `OLLAMA_MAX_QUEUE` and `OLLAMA_MAX_LOADED_MODELS` values that are appropriate for your hardware and preferences. See the [Ollama documentation](https://docs.ollama.com/faq#how-does-ollama-handle-concurrent-requests).
### Model Types: Instruct vs Thinking
Most vision-language models are available as **instruct** models, which are fine-tuned to follow instructions and respond concisely to prompts. However, some models (such as certain Qwen-VL or minigpt variants) offer both **instruct** and **thinking** versions.
- **Instruct models** are always recommended for use with Frigate. These models generate direct, relevant, actionable descriptions that best fit Frigate's object and event summary use case.
- **Thinking models** are fine-tuned for more free-form, open-ended, and speculative outputs, which are typically not concise and may not provide the practical summaries Frigate expects. For this reason, Frigate does **not** recommend or support using thinking models.
Some models are labeled as **hybrid** (capable of both thinking and instruct tasks). In these cases, Frigate will always use instruct-style prompts and specifically disables thinking-mode behaviors to ensure concise, useful responses.
**Recommendation:**
Always select the `-instruct` or documented instruct/tagged variant of any model you use in your Frigate configuration. If in doubt, refer to your model providers documentation or model library for guidance on the correct model variant to use.
### Supported Models
You must use a vision capable model with Frigate. Current model variants can be found [in their model library](https://ollama.com/search?c=vision). Note that Frigate will not automatically download the model you specify in your config, you must download the model to your local instance of Ollama first i.e. by running `ollama pull qwen3-vl:2b-instruct` on your Ollama server/Docker container. Note that the model specified in Frigate's config must match the downloaded model tag.
:::note
You should have at least 8 GB of RAM available (or VRAM if running on GPU) to run the 7B models, 16 GB to run the 13B models, and 32 GB to run the 33B models.
:::
#### Ollama Cloud models
Ollama also supports [cloud models](https://ollama.com/cloud), where your local Ollama instance handles requests from Frigate, but model inference is performed in the cloud. Set up Ollama locally, sign in with your Ollama account, and specify the cloud model name in your Frigate config. For more details, see the Ollama cloud model [docs](https://docs.ollama.com/cloud).
### Configuration
```yaml
genai:
provider: ollama
base_url: http://localhost:11434
model: qwen3-vl:4b
```
## Google Gemini
Google Gemini has a free tier allowing [15 queries per minute](https://ai.google.dev/pricing) to the API, which is more than sufficient for standard Frigate usage.
### Supported Models
You must use a vision capable model with Frigate. Current model variants can be found [in their documentation](https://ai.google.dev/gemini-api/docs/models/gemini).
### Get API Key
To start using Gemini, you must first get an API key from [Google AI Studio](https://aistudio.google.com).
1. Accept the Terms of Service
2. Click "Get API Key" from the right hand navigation
3. Click "Create API key in new project"
4. Copy the API key for use in your config
### Configuration
```yaml
genai:
provider: gemini
api_key: "{FRIGATE_GEMINI_API_KEY}"
model: gemini-2.0-flash
```
:::note
To use a different Gemini-compatible API endpoint, set the `GEMINI_BASE_URL` environment variable to your provider's API URL.
:::
## OpenAI
OpenAI does not have a free tier for their API. With the release of gpt-4o, pricing has been reduced and each generation should cost fractions of a cent if you choose to go this route.
### Supported Models
You must use a vision capable model with Frigate. Current model variants can be found [in their documentation](https://platform.openai.com/docs/models).
### Get API Key
To start using OpenAI, you must first [create an API key](https://platform.openai.com/api-keys) and [configure billing](https://platform.openai.com/settings/organization/billing/overview).
### Configuration
```yaml
genai:
provider: openai
api_key: "{FRIGATE_OPENAI_API_KEY}"
model: gpt-4o
```
:::note
To use a different OpenAI-compatible API endpoint, set the `OPENAI_BASE_URL` environment variable to your provider's API URL.
:::
## Azure OpenAI
Microsoft offers several vision models through Azure OpenAI. A subscription is required.
### Supported Models
You must use a vision capable model with Frigate. Current model variants can be found [in their documentation](https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/models).
### Create Resource and Get API Key
To start using Azure OpenAI, you must first [create a resource](https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource?pivots=web-portal#create-a-resource). You'll need your API key, model name, and resource URL, which must include the `api-version` parameter (see the example below).
### Configuration
```yaml
genai:
provider: azure_openai
base_url: https://instance.cognitiveservices.azure.com/openai/responses?api-version=2025-04-01-preview
model: gpt-5-mini
api_key: "{FRIGATE_OPENAI_API_KEY}"
```
## Usage and Best Practices
Frigate's thumbnail search excels at identifying specific details about tracked objects for example, using an "image caption" approach to find a "person wearing a yellow vest," "a white dog running across the lawn," or "a red car on a residential street." To enhance this further, Frigates default prompts are designed to ask your AI provider about the intent behind the object's actions, rather than just describing its appearance.
While generating simple descriptions of detected objects is useful, understanding intent provides a deeper layer of insight. Instead of just recognizing "what" is in a scene, Frigates default prompts aim to infer "why" it might be there or "what" it could do next. Descriptions tell you whats happening, but intent gives context. For instance, a person walking toward a door might seem like a visitor, but if theyre moving quickly after hours, you can infer a potential break-in attempt. Detecting a person loitering near a door at night can trigger an alert sooner than simply noting "a person standing by the door," helping you respond based on the situations context.
### Using GenAI for notifications
Frigate provides an [MQTT topic](/integrations/mqtt), `frigate/tracked_object_update`, that is updated with a JSON payload containing `event_id` and `description` when your AI provider returns a description for a tracked object. This description could be used directly in notifications, such as sending alerts to your phone or making audio announcements. If additional details from the tracked object are needed, you can query the [HTTP API](/integrations/api/event-events-event-id-get) using the `event_id`, eg: `http://frigate_ip:5000/api/events/<event_id>`.
If looking to get notifications earlier than when an object ceases to be tracked, an additional send trigger can be configured of `after_significant_updates`.
```yaml
genai:
send_triggers:
tracked_object_end: true # default
after_significant_updates: 3 # how many updates to a tracked object before we should send an image
```
## Custom Prompts
Frigate sends multiple frames from the tracked object along with a prompt to your Generative AI provider asking it to generate a description. The default prompt is as follows:
```
Analyze the sequence of images containing the {label}. Focus on the likely intent or behavior of the {label} based on its actions and movement, rather than describing its appearance or the surroundings. Consider what the {label} is doing, why, and what it might do next.
```
:::tip
Prompts can use variable replacements `{label}`, `{sub_label}`, and `{camera}` to substitute information from the tracked object as part of the prompt.
:::
You are also able to define custom prompts in your configuration.
```yaml
genai:
provider: ollama
base_url: http://localhost:11434
model: qwen3-vl:8b-instruct
objects:
prompt: "Analyze the {label} in these images from the {camera} security camera. Focus on the actions, behavior, and potential intent of the {label}, rather than just describing its appearance."
object_prompts:
person: "Examine the main person in these images. What are they doing and what might their actions suggest about their intent (e.g., approaching a door, leaving an area, standing still)? Do not describe the surroundings or static details."
car: "Observe the primary vehicle in these images. Focus on its movement, direction, or purpose (e.g., parking, approaching, circling). If it's a delivery vehicle, mention the company."
```
Prompts can also be overridden at the camera level to provide a more detailed prompt to the model about your specific camera, if you desire.
```yaml
cameras:
front_door:
objects:
genai:
enabled: True
use_snapshot: True
prompt: "Analyze the {label} in these images from the {camera} security camera at the front door. Focus on the actions and potential intent of the {label}."
object_prompts:
person: "Examine the person in these images. What are they doing, and how might their actions suggest their purpose (e.g., delivering something, approaching, leaving)? If they are carrying or interacting with a package, include details about its source or destination."
cat: "Observe the cat in these images. Focus on its movement and intent (e.g., wandering, hunting, interacting with objects). If the cat is near the flower pots or engaging in any specific actions, mention it."
objects:
- person
- cat
required_zones:
- steps
```
### Experiment with prompts
Many providers also have a public facing chat interface for their models. Download a couple of different thumbnails or snapshots from Frigate and try new things in the playground to get descriptions to your liking before updating the prompt in Frigate.
- OpenAI - [ChatGPT](https://chatgpt.com)
- Gemini - [Google AI Studio](https://aistudio.google.com)
- Ollama - [Open WebUI](https://docs.openwebui.com/)

View File

@@ -17,11 +17,23 @@ Using Ollama on CPU is not recommended, high inference times make using Generati
:::
[Ollama](https://ollama.com/) allows you to self-host large language models and keep everything running locally. It provides a nice API over [llama.cpp](https://github.com/ggerganov/llama.cpp). It is highly recommended to host this server on a machine with an Nvidia graphics card, or on a Apple silicon Mac for best performance.
[Ollama](https://ollama.com/) allows you to self-host large language models and keep everything running locally. It is highly recommended to host this server on a machine with an Nvidia graphics card, or on a Apple silicon Mac for best performance.
Most of the 7b parameter 4-bit vision models will fit inside 8GB of VRAM. There is also a [Docker container](https://hub.docker.com/r/ollama/ollama) available.
Parallel requests also come with some caveats. You will need to set `OLLAMA_NUM_PARALLEL=1` and choose a `OLLAMA_MAX_QUEUE` and `OLLAMA_MAX_LOADED_MODELS` values that are appropriate for your hardware and preferences. See the [Ollama documentation](https://github.com/ollama/ollama/blob/main/docs/faq.md#how-does-ollama-handle-concurrent-requests).
Parallel requests also come with some caveats. You will need to set `OLLAMA_NUM_PARALLEL=1` and choose a `OLLAMA_MAX_QUEUE` and `OLLAMA_MAX_LOADED_MODELS` values that are appropriate for your hardware and preferences. See the [Ollama documentation](https://docs.ollama.com/faq#how-does-ollama-handle-concurrent-requests).
### Model Types: Instruct vs Thinking
Most vision-language models are available as **instruct** models, which are fine-tuned to follow instructions and respond concisely to prompts. However, some models (such as certain Qwen-VL or minigpt variants) offer both **instruct** and **thinking** versions.
- **Instruct models** are always recommended for use with Frigate. These models generate direct, relevant, actionable descriptions that best fit Frigate's object and event summary use case.
- **Thinking models** are fine-tuned for more free-form, open-ended, and speculative outputs, which are typically not concise and may not provide the practical summaries Frigate expects. For this reason, Frigate does **not** recommend or support using thinking models.
Some models are labeled as **hybrid** (capable of both thinking and instruct tasks). In these cases, Frigate will always use instruct-style prompts and specifically disables thinking-mode behaviors to ensure concise, useful responses.
**Recommendation:**
Always select the `-instruct` or documented instruct/tagged variant of any model you use in your Frigate configuration. If in doubt, refer to your model providers documentation or model library for guidance on the correct model variant to use.
### Supported Models
@@ -41,12 +53,12 @@ If you are trying to use a single model for Frigate and HomeAssistant, it will n
The following models are recommended:
| Model | Notes |
| ----------------- | -------------------------------------------------------------------- |
| `qwen3-vl` | Strong visual and situational understanding, higher vram requirement |
| `Intern3.5VL` | Relatively fast with good vision comprehension |
| `gemma3` | Strong frame-to-frame understanding, slower inference times |
| `qwen2.5-vl` | Fast but capable model with good vision comprehension |
| Model | Notes |
| ------------- | -------------------------------------------------------------------- |
| `qwen3-vl` | Strong visual and situational understanding, higher vram requirement |
| `Intern3.5VL` | Relatively fast with good vision comprehension |
| `gemma3` | Strong frame-to-frame understanding, slower inference times |
| `qwen2.5-vl` | Fast but capable model with good vision comprehension |
:::note
@@ -54,26 +66,26 @@ You should have at least 8 GB of RAM available (or VRAM if running on GPU) to ru
:::
#### Ollama Cloud models
Ollama also supports [cloud models](https://ollama.com/cloud), where your local Ollama instance handles requests from Frigate, but model inference is performed in the cloud. Set up Ollama locally, sign in with your Ollama account, and specify the cloud model name in your Frigate config. For more details, see the Ollama cloud model [docs](https://docs.ollama.com/cloud).
### Configuration
```yaml
genai:
provider: ollama
base_url: http://localhost:11434
model: minicpm-v:8b
provider_options: # other Ollama client options can be defined
keep_alive: -1
options:
num_ctx: 8192 # make sure the context matches other services that are using ollama
model: qwen3-vl:4b
```
## Google Gemini
Google Gemini has a free tier allowing [15 queries per minute](https://ai.google.dev/pricing) to the API, which is more than sufficient for standard Frigate usage.
Google Gemini has a [free tier](https://ai.google.dev/pricing) for the API, however the limits may not be sufficient for standard Frigate usage. Choose a plan appropriate for your installation.
### Supported Models
You must use a vision capable model with Frigate. Current model variants can be found [in their documentation](https://ai.google.dev/gemini-api/docs/models/gemini). At the time of writing, this includes `gemini-1.5-pro` and `gemini-1.5-flash`.
You must use a vision capable model with Frigate. Current model variants can be found [in their documentation](https://ai.google.dev/gemini-api/docs/models/gemini).
### Get API Key
@@ -90,16 +102,32 @@ To start using Gemini, you must first get an API key from [Google AI Studio](htt
genai:
provider: gemini
api_key: "{FRIGATE_GEMINI_API_KEY}"
model: gemini-1.5-flash
model: gemini-2.5-flash
```
:::note
To use a different Gemini-compatible API endpoint, set the `provider_options` with the `base_url` key to your provider's API URL. For example:
```
genai:
provider: gemini
...
provider_options:
base_url: https://...
```
Other HTTP options are available, see the [python-genai documentation](https://github.com/googleapis/python-genai).
:::
## OpenAI
OpenAI does not have a free tier for their API. With the release of gpt-4o, pricing has been reduced and each generation should cost fractions of a cent if you choose to go this route.
### Supported Models
You must use a vision capable model with Frigate. Current model variants can be found [in their documentation](https://platform.openai.com/docs/models). At the time of writing, this includes `gpt-4o` and `gpt-4-turbo`.
You must use a vision capable model with Frigate. Current model variants can be found [in their documentation](https://platform.openai.com/docs/models).
### Get API Key
@@ -120,23 +148,41 @@ To use a different OpenAI-compatible API endpoint, set the `OPENAI_BASE_URL` env
:::
:::tip
For OpenAI-compatible servers (such as llama.cpp) that don't expose the configured context size in the API response, you can manually specify the context size in `provider_options`:
```yaml
genai:
provider: openai
base_url: http://your-llama-server
model: your-model-name
provider_options:
context_size: 8192 # Specify the configured context size
```
This ensures Frigate uses the correct context window size when generating prompts.
:::
## Azure OpenAI
Microsoft offers several vision models through Azure OpenAI. A subscription is required.
### Supported Models
You must use a vision capable model with Frigate. Current model variants can be found [in their documentation](https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/models). At the time of writing, this includes `gpt-4o` and `gpt-4-turbo`.
You must use a vision capable model with Frigate. Current model variants can be found [in their documentation](https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/models).
### Create Resource and Get API Key
To start using Azure OpenAI, you must first [create a resource](https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource?pivots=web-portal#create-a-resource). You'll need your API key and resource URL, which must include the `api-version` parameter (see the example below). The model field is not required in your configuration as the model is part of the deployment name you chose when deploying the resource.
To start using Azure OpenAI, you must first [create a resource](https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource?pivots=web-portal#create-a-resource). You'll need your API key, model name, and resource URL, which must include the `api-version` parameter (see the example below).
### Configuration
```yaml
genai:
provider: azure_openai
base_url: https://example-endpoint.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2023-03-15-preview
base_url: https://instance.cognitiveservices.azure.com/openai/responses?api-version=2025-04-01-preview
model: gpt-5-mini
api_key: "{FRIGATE_OPENAI_API_KEY}"
```

View File

@@ -125,10 +125,10 @@ review:
## Review Reports
Along with individual review item summaries, Generative AI provides the ability to request a report of a given time period. For example, you can get a daily report while on a vacation of any suspicious activity or other concerns that may require review.
Along with individual review item summaries, Generative AI can also produce a single report of review items from all cameras marked "suspicious" over a specified time period (for example, a daily summary of suspicious activity while you're on vacation).
### Requesting Reports Programmatically
Review reports can be requested via the [API](/integrations/api#review-summarization) by sending a POST request to `/api/review/summarize/start/{start_ts}/end/{end_ts}` with Unix timestamps.
Review reports can be requested via the [API](/integrations/api/generate-review-summary-review-summarize-start-start-ts-end-end-ts-post) by sending a POST request to `/api/review/summarize/start/{start_ts}/end/{end_ts}` with Unix timestamps.
For Home Assistant users, there is a built-in service (`frigate.review_summarize`) that makes it easy to request review reports as part of automations or scripts. This allows you to automatically generate daily summaries, vacation reports, or custom time period reports based on your specific needs.

View File

@@ -68,8 +68,8 @@ Fine-tune the LPR feature using these optional parameters at the global level of
- Default: `1000` pixels. Note: this is intentionally set very low as it is an _area_ measurement (length x width). For reference, 1000 pixels represents a ~32x32 pixel square in your camera image.
- Depending on the resolution of your camera's `detect` stream, you can increase this value to ignore small or distant plates.
- **`device`**: Device to use to run license plate detection _and_ recognition models.
- Default: `CPU`
- This can be `CPU`, `GPU`, or the GPU's device number. For users without a model that detects license plates natively, using a GPU may increase performance of the YOLOv9 license plate detector model. See the [Hardware Accelerated Enrichments](/configuration/hardware_acceleration_enrichments.md) documentation. However, for users who run a model that detects `license_plate` natively, there is little to no performance gain reported with running LPR on GPU compared to the CPU.
- Default: `None`
- This is auto-selected by Frigate and can be `CPU`, `GPU`, or the GPU's device number. For users without a model that detects license plates natively, using a GPU may increase performance of the YOLOv9 license plate detector model. See the [Hardware Accelerated Enrichments](/configuration/hardware_acceleration_enrichments.md) documentation. However, for users who run a model that detects `license_plate` natively, there is little to no performance gain reported with running LPR on GPU compared to the CPU.
- **`model_size`**: The size of the model used to identify regions of text on plates.
- Default: `small`
- This can be `small` or `large`.
@@ -381,6 +381,7 @@ Start with ["Why isn't my license plate being detected and recognized?"](#why-is
```yaml
lpr:
enabled: true
device: CPU
debug_save_plates: true
```
@@ -432,6 +433,6 @@ If you are using a model that natively detects `license_plate`, add an _object m
If you are not using a model that natively detects `license_plate` or you are using dedicated LPR camera mode, only a _motion mask_ over your text is required.
### I see "Error running ... model" in my logs. How can I fix this?
### I see "Error running ... model" in my logs, or my inference time is very high. How can I fix this?
This usually happens when your GPU is unable to compile or use one of the LPR models. Set your `device` to `CPU` and try again. GPU acceleration only provides a slight performance increase, and the models are lightweight enough to run without issue on most CPUs.

View File

@@ -696,6 +696,9 @@ genai:
# Optional additional args to pass to the GenAI Provider (default: None)
provider_options:
keep_alive: -1
# Optional: Options to pass during inference calls (default: {})
runtime_options:
temperature: 0.7
# Optional: Configuration for audio transcription
# NOTE: only the enabled option can be overridden at the camera level

View File

@@ -214,6 +214,12 @@ The `exec:`, `echo:`, and `expr:` sources are disabled by default for security.
:::
:::warning
The `exec:`, `echo:`, and `expr:` sources are disabled by default for security. You must set `GO2RTC_ALLOW_ARBITRARY_EXEC=true` to use them. See [Security: Restricted Stream Sources](#security-restricted-stream-sources) for more information.
:::
NOTE: The output will need to be passed with two curly braces `{{output}}`
```yaml

View File

@@ -11,6 +11,12 @@ Cameras configured to output H.264 video and AAC audio will offer the most compa
- **Stream Viewing**: This stream will be rebroadcast as is to Home Assistant for viewing with the stream component. Setting this resolution too high will use significant bandwidth when viewing streams in Home Assistant, and they may not load reliably over slower connections.
:::tip
For the best experience in Frigate's UI, configure your camera so that the detection and recording streams use the same aspect ratio. For example, if your main stream is 3840x2160 (16:9), set your substream to 640x360 (also 16:9) instead of 640x480 (4:3). While not strictly required, matching aspect ratios helps ensure seamless live stream display and preview/recordings playback.
:::
### Choosing a detect resolution
The ideal resolution for detection is one where the objects you want to detect fit inside the dimensions of the model used by Frigate (320x320). Frigate does not pass the entire camera frame to object detection. It will crop an area of motion from the full frame and look in that portion of the frame. If the area being inspected is larger than 320x320, Frigate must resize it before running object detection. Higher resolutions do not improve the detection accuracy because the additional detail is lost in the resize. Below you can see a reference for how large a 320x320 area is against common resolutions.

View File

@@ -42,7 +42,7 @@ If the EQ13 is out of stock, the link below may take you to a suggested alternat
| ------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | --------------------------------------------------- |
| Beelink EQ13 (<a href="https://amzn.to/4jn2qVr" target="_blank" rel="nofollow noopener sponsored">Amazon</a>) | Can run object detection on several 1080p cameras with low-medium activity | Dual gigabit NICs for easy isolated camera network. |
| Intel 1120p ([Amazon](https://www.amazon.com/Beelink-i3-1220P-Computer-Display-Gigabit/dp/B0DDCKT9YP) | Can handle a large number of 1080p cameras with high activity | |
| Intel 125H ([Amazon](https://www.amazon.com/MINISFORUM-Pro-125H-Barebone-Computer-HDMI2-1/dp/B0FH21FSZM) | Can handle a significant number of 1080p cameras with high activity | Includes NPU for more efficient detection in 0.17+ |
| Intel 125H ([Amazon](https://www.amazon.com/MINISFORUM-Pro-125H-Barebone-Computer-HDMI2-1/dp/B0FH21FSZM) | Can handle a significant number of 1080p cameras with high activity | Includes NPU for more efficient detection in 0.17+ |
## Detectors
@@ -55,12 +55,10 @@ Frigate supports multiple different detectors that work on different types of ha
**Most Hardware**
- [Hailo](#hailo-8): The Hailo8 and Hailo8L AI Acceleration module is available in m.2 format with a HAT for RPi devices offering a wide range of compatibility with devices.
- [Supports many model architectures](../../configuration/object_detectors#configuration)
- Runs best with tiny or small size models
- [Google Coral EdgeTPU](#google-coral-tpu): The Google Coral EdgeTPU is available in USB and m.2 format allowing for a wide range of compatibility with devices.
- [Supports primarily ssdlite and mobilenet model architectures](../../configuration/object_detectors#edge-tpu-detector)
- <CommunityBadge /> [MemryX](#memryx-mx3): The MX3 M.2 accelerator module is available in m.2 format allowing for a wide range of compatibility with devices.
@@ -89,7 +87,6 @@ Frigate supports multiple different detectors that work on different types of ha
**Nvidia**
- [TensortRT](#tensorrt---nvidia-gpu): TensorRT can run on Nvidia GPUs to provide efficient object detection.
- [Supports majority of model architectures via ONNX](../../configuration/object_detectors#onnx-supported-models)
- Runs well with any size models including large
@@ -152,9 +149,7 @@ The OpenVINO detector type is able to run on:
:::note
Intel NPUs have seen [limited success in community deployments](https://github.com/blakeblackshear/frigate/discussions/13248#discussioncomment-12347357), although they remain officially unsupported.
In testing, the NPU delivered performance that was only comparable to — or in some cases worse than — the integrated GPU.
Intel B-series (Battlemage) GPUs are not officially supported with Frigate 0.17, though a user has [provided steps to rebuild the Frigate container](https://github.com/blakeblackshear/frigate/discussions/21257) with support for them.
:::
@@ -172,7 +167,7 @@ Inference speeds vary greatly depending on the CPU or GPU used, some known examp
| Intel N100 | ~ 15 ms | s-320: 30 ms | 320: ~ 25 ms | | Can only run one detector instance |
| Intel N150 | ~ 15 ms | t-320: 16 ms s-320: 24 ms | | | |
| Intel Iris XE | ~ 10 ms | t-320: 6 ms t-640: 14 ms s-320: 8 ms s-640: 16 ms | 320: ~ 10 ms 640: ~ 20 ms | 320-n: 33 ms | |
| Intel NPU | ~ 6 ms | s-320: 11 ms | 320: ~ 14 ms 640: ~ 34 ms | 320-n: 40 ms | |
| Intel NPU | ~ 6 ms | s-320: 11 ms s-640: 30 ms | 320: ~ 14 ms 640: ~ 34 ms | 320-n: 40 ms | |
| Intel Arc A310 | ~ 5 ms | t-320: 7 ms t-640: 11 ms s-320: 8 ms s-640: 15 ms | 320: ~ 8 ms 640: ~ 14 ms | | |
| Intel Arc A380 | ~ 6 ms | | 320: ~ 10 ms 640: ~ 22 ms | 336: 20 ms 448: 27 ms | |
| Intel Arc A750 | ~ 4 ms | | 320: ~ 8 ms | | |

View File

@@ -112,42 +112,65 @@ The Hailo-8 and Hailo-8L AI accelerators are available in both M.2 and HAT form
:::warning
The Raspberry Pi kernel includes an older version of the Hailo driver that is incompatible with Frigate. You **must** follow the installation steps below to install the correct driver version, and you **must** disable the built-in kernel driver as described in step 1.
On Raspberry Pi OS **Bookworm**, the kernel includes an older version of the Hailo driver that is incompatible with Frigate. You **must** follow the installation steps below to install the correct driver version, and you **must** disable the built-in kernel driver as described in step 1.
On Raspberry Pi OS **Trixie**, the Hailo driver is no longer shipped with the kernel. It is installed via DKMS, and the conflict described below does not apply. You can simply run the installation script.
:::
1. **Disable the built-in Hailo driver (Raspberry Pi only)**:
1. **Disable the built-in Hailo driver (Raspberry Pi Bookworm OS only)**:
:::note
If you are **not** using a Raspberry Pi, skip this step and proceed directly to step 2.
If you are **not** using a Raspberry Pi with **Bookworm OS**, skip this step and proceed directly to step 2.
If you are using Raspberry Pi with **Trixie OS**, also skip this step and proceed directly to step 2.
:::
If you are using a Raspberry Pi, you need to blacklist the built-in kernel Hailo driver to prevent conflicts. First, check if the driver is currently loaded:
First, check if the driver is currently loaded:
```bash
lsmod | grep hailo
```
If it shows `hailo_pci`, unload it:
```bash
sudo rmmod hailo_pci
sudo modprobe -r hailo_pci
```
Now blacklist the driver to prevent it from loading on boot:
Then locate the built-in kernel driver and rename it so it cannot be loaded.
Renaming allows the original driver to be restored later if needed.
First, locate the currently installed kernel module:
```bash
echo "blacklist hailo_pci" | sudo tee /etc/modprobe.d/blacklist-hailo_pci.conf
modinfo -n hailo_pci
```
Update initramfs to ensure the blacklist takes effect:
Example output:
```
/lib/modules/6.6.31+rpt-rpi-2712/kernel/drivers/media/pci/hailo/hailo_pci.ko.xz
```
Save the module path to a variable:
```bash
sudo update-initramfs -u
BUILTIN=$(modinfo -n hailo_pci)
```
And rename the module by appending .bak:
```bash
sudo mv "$BUILTIN" "${BUILTIN}.bak"
```
Now refresh the kernel module map so the system recognizes the change:
```bash
sudo depmod -a
```
Reboot your Raspberry Pi:
```bash
@@ -160,9 +183,9 @@ The Raspberry Pi kernel includes an older version of the Hailo driver that is in
lsmod | grep hailo
```
This command should return no results. If it still shows `hailo_pci`, the blacklist did not take effect properly and you may need to check for other Hailo packages installed via apt that are loading the driver.
This command should return no results.
2. **Run the installation script**:
3. **Run the installation script**:
Download the installation script:
@@ -190,7 +213,7 @@ The Raspberry Pi kernel includes an older version of the Hailo driver that is in
- Download and install the required firmware
- Set up udev rules
3. **Reboot your system**:
4. **Reboot your system**:
After the script completes successfully, reboot to load the firmware:
@@ -198,7 +221,7 @@ The Raspberry Pi kernel includes an older version of the Hailo driver that is in
sudo reboot
```
4. **Verify the installation**:
5. **Verify the installation**:
After rebooting, verify that the Hailo device is available:
@@ -212,6 +235,38 @@ The Raspberry Pi kernel includes an older version of the Hailo driver that is in
lsmod | grep hailo_pci
```
Verify the driver version:
```bash
cat /sys/module/hailo_pci/version
```
Verify that the firmware was installed correctly:
```bash
ls -l /lib/firmware/hailo/hailo8_fw.bin
```
**Optional: Fix PCIe descriptor page size error**
If you encounter the following error:
```
[HailoRT] [error] CHECK failed - max_desc_page_size given 16384 is bigger than hw max desc page size 4096
```
Create a configuration file to force the correct descriptor page size:
```bash
echo 'options hailo_pci force_desc_page_size=4096' | sudo tee /etc/modprobe.d/hailo_pci.conf
```
and reboot:
```bash
sudo reboot
```
#### Setup
To set up Frigate, follow the default installation instructions, for example: `ghcr.io/blakeblackshear/frigate:stable`

View File

@@ -37,7 +37,7 @@ cameras:
## Steps
1. Export or copy the clip you want to replay to the Frigate host (e.g., `/media/frigate/` or `debug/clips/`).
1. Export or copy the clip you want to replay to the Frigate host (e.g., `/media/frigate/` or `debug/clips/`). Depending on what you are looking to debug, it is often helpful to add some "pre-capture" time (where the tracked object is not yet visible) to the clip when exporting.
2. Add the temporary camera to `config/config.yml` (example above). Use a unique name such as `test` or `replay_camera` so it's easy to remove later.
- If you're debugging a specific camera, copy the settings from that camera (frame rate, model/enrichment settings, zones, etc.) into the temporary camera so the replay closely matches the original environment. Leave `record` and `snapshots` disabled unless you are specifically debugging recording or snapshot behavior.
3. Restart Frigate.

View File

@@ -18490,9 +18490,9 @@
}
},
"node_modules/qs": {
"version": "6.14.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
"integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
"version": "6.14.1",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz",
"integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==",
"license": "BSD-3-Clause",
"dependencies": {
"side-channel": "^1.1.0"

View File

@@ -23,7 +23,12 @@ from markupsafe import escape
from peewee import SQL, fn, operator
from pydantic import ValidationError
from frigate.api.auth import allow_any_authenticated, allow_public, require_role
from frigate.api.auth import (
allow_any_authenticated,
allow_public,
get_allowed_cameras_for_filter,
require_role,
)
from frigate.api.defs.query.app_query_parameters import AppTimelineHourlyQueryParameters
from frigate.api.defs.request.app_body import AppConfigSetBody
from frigate.api.defs.tags import Tags
@@ -687,13 +692,19 @@ def plusModels(request: Request, filterByCurrentModelDetector: bool = False):
@router.get(
"/recognized_license_plates", dependencies=[Depends(allow_any_authenticated())]
)
def get_recognized_license_plates(split_joined: Optional[int] = None):
def get_recognized_license_plates(
split_joined: Optional[int] = None,
allowed_cameras: List[str] = Depends(get_allowed_cameras_for_filter),
):
try:
query = (
Event.select(
SQL("json_extract(data, '$.recognized_license_plate') AS plate")
)
.where(SQL("json_extract(data, '$.recognized_license_plate') IS NOT NULL"))
.where(
(SQL("json_extract(data, '$.recognized_license_plate') IS NOT NULL"))
& (Event.camera << allowed_cameras)
)
.distinct()
)
recognized_license_plates = [row[0] for row in query.tuples()]

View File

@@ -350,21 +350,15 @@ def validate_password_strength(password: str) -> tuple[bool, Optional[str]]:
Validate password strength.
Returns a tuple of (is_valid, error_message).
Longer passwords are harder to crack than shorter complex ones.
https://pages.nist.gov/800-63-3/sp800-63b.html
"""
if not password:
return False, "Password cannot be empty"
if len(password) < 8:
return False, "Password must be at least 8 characters long"
if not any(c.isupper() for c in password):
return False, "Password must contain at least one uppercase letter"
if not any(c.isdigit() for c in password):
return False, "Password must contain at least one digit"
if not any(c in '!@#$%^&*(),.?":{}|<>' for c in password):
return False, "Password must contain at least one special character"
if len(password) < 12:
return False, "Password must be at least 12 characters long"
return True, None
@@ -800,7 +794,7 @@ def get_users():
"/users",
dependencies=[Depends(require_role(["admin"]))],
summary="Create new user",
description='Creates a new user with the specified username, password, and role. Requires admin role. Password must meet strength requirements: minimum 8 characters, at least one uppercase letter, at least one digit, and at least one special character (!@#$%^&*(),.?":{} |<>).',
description="Creates a new user with the specified username, password, and role. Requires admin role. Password must be at least 12 characters long.",
)
def create_user(
request: Request,
@@ -817,6 +811,15 @@ def create_user(
content={"message": f"Role must be one of: {', '.join(config_roles)}"},
status_code=400,
)
# Validate password strength
is_valid, error_message = validate_password_strength(body.password)
if not is_valid:
return JSONResponse(
content={"message": error_message},
status_code=400,
)
role = body.role or "viewer"
password_hash = hash_password(body.password, iterations=HASH_ITERATIONS)
User.insert(
@@ -851,7 +854,7 @@ def delete_user(request: Request, username: str):
"/users/{username}/password",
dependencies=[Depends(allow_any_authenticated())],
summary="Update user password",
description="Updates a user's password. Users can only change their own password unless they have admin role. Requires the current password to verify identity for non-admin users. Password must meet strength requirements: minimum 8 characters, at least one uppercase letter, at least one digit, and at least one special character (!@#$%^&*(),.?\":{} |<>). If user changes their own password, a new JWT cookie is automatically issued.",
description="Updates a user's password. Users can only change their own password unless they have admin role. Requires the current password to verify identity for non-admin users. Password must be at least 12 characters long. If user changes their own password, a new JWT cookie is automatically issued.",
)
async def update_password(
request: Request,

View File

@@ -848,9 +848,10 @@ async def onvif_probe(
try:
if isinstance(uri, str) and uri.startswith("rtsp://"):
if username and password and "@" not in uri:
# Inject URL-encoded credentials and add only the
# authenticated version.
cred = f"{quote_plus(username)}:{quote_plus(password)}@"
# Inject raw credentials and add only the
# authenticated version. The credentials will be encoded
# later by ffprobe_stream or the config system.
cred = f"{username}:{password}@"
injected = uri.replace(
"rtsp://", f"rtsp://{cred}", 1
)
@@ -903,12 +904,8 @@ async def onvif_probe(
"/cam/realmonitor?channel=1&subtype=0",
"/11",
]
# Use URL-encoded credentials for pattern fallback URIs when provided
auth_str = (
f"{quote_plus(username)}:{quote_plus(password)}@"
if username and password
else ""
)
# Use raw credentials for pattern fallback URIs when provided
auth_str = f"{username}:{password}@" if username and password else ""
rtsp_port = 554
for path in common_paths:
uri = f"rtsp://{auth_str}{host}:{rtsp_port}{path}"
@@ -930,7 +927,7 @@ async def onvif_probe(
and uri.startswith("rtsp://")
and "@" not in uri
):
cred = f"{quote_plus(username)}:{quote_plus(password)}@"
cred = f"{username}:{password}@"
cred_uri = uri.replace("rtsp://", f"rtsp://{cred}", 1)
if cred_uri not in to_test:
to_test.append(cred_uri)

View File

@@ -73,7 +73,7 @@ def get_faces():
face_dict[name] = []
for file in filter(
lambda f: (f.lower().endswith((".webp", ".png", ".jpg", ".jpeg"))),
lambda f: f.lower().endswith((".webp", ".png", ".jpg", ".jpeg")),
os.listdir(face_dir),
):
face_dict[name].append(file)
@@ -582,7 +582,7 @@ def get_classification_dataset(name: str):
dataset_dict[category_name] = []
for file in filter(
lambda f: (f.lower().endswith((".webp", ".png", ".jpg", ".jpeg"))),
lambda f: f.lower().endswith((".webp", ".png", ".jpg", ".jpeg")),
os.listdir(category_dir),
):
dataset_dict[category_name].append(file)
@@ -693,7 +693,7 @@ def get_classification_images(name: str):
status_code=200,
content=list(
filter(
lambda f: (f.lower().endswith((".webp", ".png", ".jpg", ".jpeg"))),
lambda f: f.lower().endswith((".webp", ".png", ".jpg", ".jpeg")),
os.listdir(train_dir),
)
),
@@ -759,15 +759,28 @@ def delete_classification_dataset_images(
CLIPS_DIR, sanitize_filename(name), "dataset", sanitize_filename(category)
)
deleted_count = 0
for id in list_of_ids:
file_path = os.path.join(folder, sanitize_filename(id))
if os.path.isfile(file_path):
os.unlink(file_path)
deleted_count += 1
if os.path.exists(folder) and not os.listdir(folder) and category.lower() != "none":
os.rmdir(folder)
# Update training metadata to reflect deleted images
# This ensures the dataset is marked as changed after deletion
# (even if the total count happens to be the same after adding and deleting)
if deleted_count > 0:
sanitized_name = sanitize_filename(name)
metadata = read_training_metadata(sanitized_name)
if metadata:
last_count = metadata.get("last_training_image_count", 0)
updated_count = max(0, last_count - deleted_count)
write_training_metadata(sanitized_name, updated_count)
return JSONResponse(
content=({"success": True, "message": "Successfully deleted images."}),
status_code=200,

View File

@@ -10,7 +10,7 @@ class ReviewQueryParams(BaseModel):
cameras: str = "all"
labels: str = "all"
zones: str = "all"
reviewed: int = 0
reviewed: Union[int, SkipJsonSchema[None]] = None
limit: Union[int, SkipJsonSchema[None]] = None
severity: Union[SeverityEnum, SkipJsonSchema[None]] = None
before: Union[float, SkipJsonSchema[None]] = None

View File

@@ -26,3 +26,6 @@ class GenAIConfig(FrigateBaseModel):
provider_options: dict[str, Any] = Field(
default={}, title="GenAI Provider extra options."
)
runtime_options: dict[str, Any] = Field(
default={}, title="Options to pass during inference calls."
)

View File

@@ -108,12 +108,13 @@ class GenAIReviewConfig(FrigateBaseModel):
default="""### Normal Activity Indicators (Level 0)
- Known/verified people in any zone at any time
- People with pets in residential areas
- Routine residential vehicle access during daytime/evening (6 AM - 10 PM): entering, exiting, loading/unloading items — normal commute and travel patterns
- Deliveries or services during daytime/evening (6 AM - 10 PM): carrying packages to doors/porches, placing items, leaving
- Services/maintenance workers with visible tools, uniforms, or service vehicles during daytime
- Activity confined to public areas only (sidewalks, streets) without entering property at any time
### Suspicious Activity Indicators (Level 1)
- **Testing or attempting to open doors/windows/handles on vehicles or buildings** — ALWAYS Level 1 regardless of time or duration
- **Checking or probing vehicle/building access**: trying handles without entering, peering through windows, examining multiple vehicles, or possessing break-in tools — Level 1
- **Unidentified person in private areas (driveways, near vehicles/buildings) during late night/early morning (11 PM - 5 AM)** — ALWAYS Level 1 regardless of activity or duration
- Taking items that don't belong to them (packages, objects from porches/driveways)
- Climbing or jumping fences/barriers to access property
@@ -133,8 +134,8 @@ Evaluate in this order:
1. **If person is verified/known** → Level 0 regardless of time or activity
2. **If person is unidentified:**
- Check time: If late night/early morning (11 PM - 5 AM) AND in private areas (driveways, near vehicles/buildings) → Level 1
- Check actions: If testing doors/handles, taking items, climbing → Level 1
- Otherwise, if daytime/evening (6 AM - 10 PM) with clear legitimate purpose (delivery, service worker) → Level 0
- Check actions: If probing access (trying handles without entering, checking multiple vehicles), taking items, climbing → Level 1
- Otherwise, if daytime/evening (6 AM - 10 PM) with clear legitimate purpose (delivery, service, routine vehicle access) → Level 0
3. **Escalate to Level 2 if:** Weapons, break-in tools, forced entry in progress, violence, or active property damage visible (escalates from Level 0 or 1)
The mere presence of an unidentified person in private areas during late night hours is inherently suspicious and warrants human review, regardless of what activity they appear to be doing or how brief the sequence is.""",

View File

@@ -662,6 +662,13 @@ class FrigateConfig(FrigateBaseModel):
# generate zone contours
if len(camera_config.zones) > 0:
for zone in camera_config.zones.values():
if zone.filters:
for object_name, filter_config in zone.filters.items():
zone.filters[object_name] = RuntimeFilterConfig(
frame_shape=camera_config.frame_shape,
**filter_config.model_dump(exclude_unset=True),
)
zone.generate_contour(camera_config.frame_shape)
# Set live view stream if none is set

View File

@@ -97,7 +97,7 @@ class CustomStateClassificationProcessor(RealTimeProcessorApi):
self.interpreter.allocate_tensors()
self.tensor_input_details = self.interpreter.get_input_details()
self.tensor_output_details = self.interpreter.get_output_details()
self.labelmap = load_labels(labelmap_path, prefill=0)
self.labelmap = load_labels(labelmap_path, prefill=0, indexed=False)
self.classifications_per_second.start()
def __update_metrics(self, duration: float) -> None:
@@ -398,7 +398,7 @@ class CustomObjectClassificationProcessor(RealTimeProcessorApi):
self.interpreter.allocate_tensors()
self.tensor_input_details = self.interpreter.get_input_details()
self.tensor_output_details = self.interpreter.get_output_details()
self.labelmap = load_labels(labelmap_path, prefill=0)
self.labelmap = load_labels(labelmap_path, prefill=0, indexed=False)
def __update_metrics(self, duration: float) -> None:
self.classifications_per_second.update()
@@ -419,14 +419,21 @@ class CustomObjectClassificationProcessor(RealTimeProcessorApi):
"""
if object_id not in self.classification_history:
self.classification_history[object_id] = []
logger.debug(f"Created new classification history for {object_id}")
self.classification_history[object_id].append(
(current_label, current_score, current_time)
)
history = self.classification_history[object_id]
logger.debug(
f"History for {object_id}: {len(history)} entries, latest=({current_label}, {current_score})"
)
if len(history) < 3:
logger.debug(
f"History for {object_id} has {len(history)} entries, need at least 3"
)
return None, 0.0
label_counts = {}
@@ -445,14 +452,27 @@ class CustomObjectClassificationProcessor(RealTimeProcessorApi):
best_count = label_counts[best_label]
consensus_threshold = total_attempts * 0.6
logger.debug(
f"Consensus calc for {object_id}: label_counts={label_counts}, "
f"best_label={best_label}, best_count={best_count}, "
f"total={total_attempts}, threshold={consensus_threshold}"
)
if best_count < consensus_threshold:
logger.debug(
f"No consensus for {object_id}: {best_count} < {consensus_threshold}"
)
return None, 0.0
avg_score = sum(label_scores[best_label]) / len(label_scores[best_label])
if best_label == "none":
logger.debug(f"Filtering 'none' label for {object_id}")
return None, 0.0
logger.debug(
f"Consensus reached for {object_id}: {best_label} with avg_score={avg_score}"
)
return best_label, avg_score
def process_frame(self, obj_data, frame):
@@ -560,17 +580,30 @@ class CustomObjectClassificationProcessor(RealTimeProcessorApi):
)
if score < self.model_config.threshold:
logger.debug(f"Score {score} is less than threshold.")
logger.debug(
f"{self.model_config.name}: Score {score} < threshold {self.model_config.threshold} for {object_id}, skipping"
)
return
sub_label = self.labelmap[best_id]
logger.debug(
f"{self.model_config.name}: Object {object_id} (label={obj_data['label']}) passed threshold with sub_label={sub_label}, score={score}"
)
consensus_label, consensus_score = self.get_weighted_score(
object_id, sub_label, score, now
)
logger.debug(
f"{self.model_config.name}: get_weighted_score returned consensus_label={consensus_label}, consensus_score={consensus_score} for {object_id}"
)
if consensus_label is not None:
camera = obj_data["camera"]
logger.debug(
f"{self.model_config.name}: Publishing sub_label={consensus_label} for {obj_data['label']} object {object_id} on {camera}"
)
if (
self.model_config.object_config.classification_type
@@ -662,7 +695,7 @@ def write_classification_attempt(
# delete oldest face image if maximum is reached
try:
files = sorted(
filter(lambda f: (f.endswith(".webp")), os.listdir(folder)),
filter(lambda f: f.endswith(".webp"), os.listdir(folder)),
key=lambda f: os.path.getctime(os.path.join(folder, f)),
reverse=True,
)

View File

@@ -539,7 +539,7 @@ class FaceRealTimeProcessor(RealTimeProcessorApi):
cv2.imwrite(file, frame)
files = sorted(
filter(lambda f: (f.endswith(".webp")), os.listdir(folder)),
filter(lambda f: f.endswith(".webp"), os.listdir(folder)),
key=lambda f: os.path.getctime(os.path.join(folder, f)),
reverse=True,
)

View File

@@ -633,7 +633,7 @@ class EmbeddingMaintainer(threading.Thread):
camera, frame_name, _, _, motion_boxes, _ = data
if not camera or len(motion_boxes) == 0 or camera not in self.config.cameras:
if not camera or camera not in self.config.cameras:
return
camera_config = self.config.cameras[camera]
@@ -660,8 +660,10 @@ class EmbeddingMaintainer(threading.Thread):
return
for processor in self.realtime_processors:
if dedicated_lpr_enabled and isinstance(
processor, LicensePlateRealTimeProcessor
if (
dedicated_lpr_enabled
and len(motion_boxes) > 0
and isinstance(processor, LicensePlateRealTimeProcessor)
):
processor.process_frame(camera, yuv_frame, True)

View File

@@ -2,6 +2,7 @@
import logging
import os
import threading
import warnings
from transformers import AutoFeatureExtractor, AutoTokenizer
@@ -54,6 +55,7 @@ class JinaV1TextEmbedding(BaseEmbedding):
self.tokenizer = None
self.feature_extractor = None
self.runner = None
self._lock = threading.Lock()
files_names = list(self.download_urls.keys()) + [self.tokenizer_file]
if not all(
@@ -134,17 +136,18 @@ class JinaV1TextEmbedding(BaseEmbedding):
)
def _preprocess_inputs(self, raw_inputs):
max_length = max(len(self.tokenizer.encode(text)) for text in raw_inputs)
return [
self.tokenizer(
text,
padding="max_length",
truncation=True,
max_length=max_length,
return_tensors="np",
)
for text in raw_inputs
]
with self._lock:
max_length = max(len(self.tokenizer.encode(text)) for text in raw_inputs)
return [
self.tokenizer(
text,
padding="max_length",
truncation=True,
max_length=max_length,
return_tensors="np",
)
for text in raw_inputs
]
class JinaV1ImageEmbedding(BaseEmbedding):
@@ -174,6 +177,7 @@ class JinaV1ImageEmbedding(BaseEmbedding):
self.download_path = os.path.join(MODEL_CACHE_DIR, self.model_name)
self.feature_extractor = None
self.runner: BaseModelRunner | None = None
self._lock = threading.Lock()
files_names = list(self.download_urls.keys())
if not all(
os.path.exists(os.path.join(self.download_path, n)) for n in files_names
@@ -216,8 +220,9 @@ class JinaV1ImageEmbedding(BaseEmbedding):
)
def _preprocess_inputs(self, raw_inputs):
processed_images = [self._process_image(img) for img in raw_inputs]
return [
self.feature_extractor(images=image, return_tensors="np")
for image in processed_images
]
with self._lock:
processed_images = [self._process_image(img) for img in raw_inputs]
return [
self.feature_extractor(images=image, return_tensors="np")
for image in processed_images
]

View File

@@ -15,6 +15,16 @@ logger = logging.getLogger(__name__)
def should_update_db(prev_event: Event, current_event: Event) -> bool:
"""If current_event has updated fields and (clip or snapshot)."""
# If event is ending and was previously saved, always update to set end_time
# This ensures events are properly ended even when alerts/detections are disabled
# mid-event (which can cause has_clip/has_snapshot to become False)
if (
prev_event["end_time"] is None
and current_event["end_time"] is not None
and (prev_event["has_clip"] or prev_event["has_snapshot"])
):
return True
if current_event["has_clip"] or current_event["has_snapshot"]:
# if this is the first time has_clip or has_snapshot turned true
if not prev_event["has_clip"] and not prev_event["has_snapshot"]:

View File

@@ -99,8 +99,8 @@ When forming your description:
## Response Format
Your response MUST be a flat JSON object with:
- `title` (string): A concise, direct title that describes the primary action or event in the sequence, not just what you literally see. Use spatial context when available to make titles more meaningful. When multiple objects/actions are present, prioritize whichever is most prominent or occurs first. Use names from "Objects in Scene" based on what you visually observe. If you see both a name and an unidentified object of the same type but visually observe only one person/object, use ONLY the name. Examples: "Joe walking dog", "Person taking out trash", "Vehicle arriving in driveway", "Joe accessing vehicle", "Person leaving porch for driveway".
- `scene` (string): A narrative description of what happens across the sequence from start to finish, in chronological order. Start by describing how the sequence begins, then describe the progression of events. **Describe all significant movements and actions in the order they occur.** For example, if a vehicle arrives and then a person exits, describe both actions sequentially. **Only describe actions you can actually observe happening in the frames provided.** Do not infer or assume actions that aren't visible (e.g., if you see someone walking but never see them sit, don't say they sat down). Include setting, detected objects, and their observable actions. Avoid speculation or filling in assumed behaviors. Your description should align with and support the threat level you assign.
- `title` (string): A concise, grammatically complete title in the format "[Subject] [action verb] [context]" that matches your scene description. Use names from "Objects in Scene" when you visually observe them.
- `shortSummary` (string): A brief 2-sentence summary of the scene, suitable for notifications. Should capture the key activity and context without full detail. This should be a condensed version of the scene description above.
- `confidence` (float): 0-1 confidence in your analysis. Higher confidence when objects/actions are clearly visible and context is unambiguous. Lower confidence when the sequence is unclear, objects are partially obscured, or context is ambiguous.
- `potential_threat_level` (integer): 0, 1, or 2 as defined in "Normal Activity Patterns for This Property" above. Your threat level must be consistent with your scene description and the guidance above.

View File

@@ -64,6 +64,7 @@ class OpenAIClient(GenAIClient):
},
],
timeout=self.timeout,
**self.genai_config.runtime_options,
)
except Exception as e:
logger.warning("Azure OpenAI returned an error: %s", str(e))

View File

@@ -3,8 +3,8 @@
import logging
from typing import Optional
import google.generativeai as genai
from google.api_core.exceptions import GoogleAPICallError
from google import genai
from google.genai import errors, types
from frigate.config import GenAIProviderEnum
from frigate.genai import GenAIClient, register_genai_provider
@@ -16,40 +16,58 @@ logger = logging.getLogger(__name__)
class GeminiClient(GenAIClient):
"""Generative AI client for Frigate using Gemini."""
provider: genai.GenerativeModel
provider: genai.Client
def _init_provider(self):
"""Initialize the client."""
genai.configure(api_key=self.genai_config.api_key)
return genai.GenerativeModel(
self.genai_config.model, **self.genai_config.provider_options
# Merge provider_options into HttpOptions
http_options_dict = {
"timeout": int(self.timeout * 1000), # requires milliseconds
"retry_options": types.HttpRetryOptions(
attempts=3,
initial_delay=1.0,
max_delay=60.0,
exp_base=2.0,
jitter=1.0,
http_status_codes=[429, 500, 502, 503, 504],
),
}
if isinstance(self.genai_config.provider_options, dict):
http_options_dict.update(self.genai_config.provider_options)
return genai.Client(
api_key=self.genai_config.api_key,
http_options=types.HttpOptions(**http_options_dict),
)
def _send(self, prompt: str, images: list[bytes]) -> Optional[str]:
"""Submit a request to Gemini."""
data = [
{
"mime_type": "image/jpeg",
"data": img,
}
for img in images
contents = [
types.Part.from_bytes(data=img, mime_type="image/jpeg") for img in images
] + [prompt]
try:
response = self.provider.generate_content(
data,
generation_config=genai.types.GenerationConfig(
candidate_count=1,
),
request_options=genai.types.RequestOptions(
timeout=self.timeout,
# Merge runtime_options into generation_config if provided
generation_config_dict = {"candidate_count": 1}
generation_config_dict.update(self.genai_config.runtime_options)
response = self.provider.models.generate_content(
model=self.genai_config.model,
contents=contents,
config=types.GenerateContentConfig(
**generation_config_dict,
),
)
except GoogleAPICallError as e:
except errors.APIError as e:
logger.warning("Gemini returned an error: %s", str(e))
return None
except Exception as e:
logger.warning("An unexpected error occurred with Gemini: %s", str(e))
return None
try:
description = response.text.strip()
except ValueError:
except (ValueError, AttributeError):
# No description was generated
return None
return description

View File

@@ -58,11 +58,15 @@ class OllamaClient(GenAIClient):
)
return None
try:
ollama_options = {
**self.provider_options,
**self.genai_config.runtime_options,
}
result = self.provider.generate(
self.genai_config.model,
prompt,
images=images if images else None,
**self.provider_options,
**ollama_options,
)
logger.debug(
f"Ollama tokens used: eval_count={result.get('eval_count')}, prompt_eval_count={result.get('prompt_eval_count')}"

View File

@@ -22,9 +22,14 @@ class OpenAIClient(GenAIClient):
def _init_provider(self):
"""Initialize the client."""
return OpenAI(
api_key=self.genai_config.api_key, **self.genai_config.provider_options
)
# Extract context_size from provider_options as it's not a valid OpenAI client parameter
# It will be used in get_context_size() instead
provider_opts = {
k: v
for k, v in self.genai_config.provider_options.items()
if k != "context_size"
}
return OpenAI(api_key=self.genai_config.api_key, **provider_opts)
def _send(self, prompt: str, images: list[bytes]) -> Optional[str]:
"""Submit a request to OpenAI."""
@@ -56,6 +61,7 @@ class OpenAIClient(GenAIClient):
},
],
timeout=self.timeout,
**self.genai_config.runtime_options,
)
if (
result is not None
@@ -73,6 +79,16 @@ class OpenAIClient(GenAIClient):
if self.context_size is not None:
return self.context_size
# First check provider_options for manually specified context size
# This is necessary for llama.cpp and other OpenAI-compatible servers
# that don't expose the configured runtime context size in the API response
if "context_size" in self.genai_config.provider_options:
self.context_size = self.genai_config.provider_options["context_size"]
logger.debug(
f"Using context size {self.context_size} from provider_options for model {self.genai_config.model}"
)
return self.context_size
try:
models = self.provider.models.list()
for model in models.data:

View File

@@ -26,15 +26,16 @@ LOG_HANDLER.setFormatter(
# filter out norfair warning
LOG_HANDLER.addFilter(
lambda record: not record.getMessage().startswith(
"You are using a scalar distance function"
lambda record: (
not record.getMessage().startswith("You are using a scalar distance function")
)
)
# filter out tflite logging
LOG_HANDLER.addFilter(
lambda record: "Created TensorFlow Lite XNNPACK delegate for CPU."
not in record.getMessage()
lambda record: (
"Created TensorFlow Lite XNNPACK delegate for CPU." not in record.getMessage()
)
)
@@ -89,6 +90,7 @@ def apply_log_levels(default: str, log_levels: dict[str, LogLevel]) -> None:
"ws4py": LogLevel.error,
"PIL": LogLevel.warning,
"numba": LogLevel.warning,
"google_genai.models": LogLevel.warning,
**log_levels,
}

View File

@@ -97,6 +97,7 @@ class RecordingMaintainer(threading.Thread):
self.object_recordings_info: dict[str, list] = defaultdict(list)
self.audio_recordings_info: dict[str, list] = defaultdict(list)
self.end_time_cache: dict[str, Tuple[datetime.datetime, float]] = {}
self.unexpected_cache_files_logged: bool = False
async def move_files(self) -> None:
cache_files = [
@@ -112,7 +113,14 @@ class RecordingMaintainer(threading.Thread):
for cache in cache_files:
cache_path = os.path.join(CACHE_DIR, cache)
basename = os.path.splitext(cache)[0]
camera, date = basename.rsplit("@", maxsplit=1)
try:
camera, date = basename.rsplit("@", maxsplit=1)
except ValueError:
if not self.unexpected_cache_files_logged:
logger.warning("Skipping unexpected files in cache")
self.unexpected_cache_files_logged = True
continue
start_time = datetime.datetime.strptime(
date, CACHE_SEGMENT_FORMAT
).astimezone(datetime.timezone.utc)
@@ -164,7 +172,13 @@ class RecordingMaintainer(threading.Thread):
cache_path = os.path.join(CACHE_DIR, cache)
basename = os.path.splitext(cache)[0]
camera, date = basename.rsplit("@", maxsplit=1)
try:
camera, date = basename.rsplit("@", maxsplit=1)
except ValueError:
if not self.unexpected_cache_files_logged:
logger.warning("Skipping unexpected files in cache")
self.unexpected_cache_files_logged = True
continue
# important that start_time is utc because recordings are stored and compared in utc
start_time = datetime.datetime.strptime(
@@ -194,8 +208,10 @@ class RecordingMaintainer(threading.Thread):
processed_segment_count = len(
list(
filter(
lambda r: r["start_time"].timestamp()
< most_recently_processed_frame_time,
lambda r: (
r["start_time"].timestamp()
< most_recently_processed_frame_time
),
grouped_recordings[camera],
)
)

View File

@@ -632,6 +632,49 @@ class TestConfig(unittest.TestCase):
)
assert frigate_config.cameras["back"].zones["test"].color != (0, 0, 0)
def test_zone_filter_area_percent_converts_to_pixels(self):
config = {
"mqtt": {"host": "mqtt"},
"record": {
"alerts": {
"retain": {
"days": 20,
}
}
},
"cameras": {
"back": {
"ffmpeg": {
"inputs": [
{"path": "rtsp://10.0.0.1:554/video", "roles": ["detect"]}
]
},
"detect": {
"height": 1080,
"width": 1920,
"fps": 5,
},
"zones": {
"notification": {
"coordinates": "0.03,1,0.025,0,0.626,0,0.643,1",
"objects": ["person"],
"filters": {"person": {"min_area": 0.1}},
}
},
}
},
}
frigate_config = FrigateConfig(**config)
expected_min_area = int(1080 * 1920 * 0.1)
assert (
frigate_config.cameras["back"]
.zones["notification"]
.filters["person"]
.min_area
== expected_min_area
)
def test_zone_relative_matches_explicit(self):
config = {
"mqtt": {"host": "mqtt"},

View File

@@ -0,0 +1,66 @@
import sys
import unittest
from unittest.mock import MagicMock, patch
# Mock complex imports before importing maintainer
sys.modules["frigate.comms.inter_process"] = MagicMock()
sys.modules["frigate.comms.detections_updater"] = MagicMock()
sys.modules["frigate.comms.recordings_updater"] = MagicMock()
sys.modules["frigate.config.camera.updater"] = MagicMock()
# Now import the class under test
from frigate.config import FrigateConfig # noqa: E402
from frigate.record.maintainer import RecordingMaintainer # noqa: E402
class TestMaintainer(unittest.IsolatedAsyncioTestCase):
async def test_move_files_survives_bad_filename(self):
config = MagicMock(spec=FrigateConfig)
config.cameras = {}
stop_event = MagicMock()
maintainer = RecordingMaintainer(config, stop_event)
# We need to mock end_time_cache to avoid key errors if logic proceeds
maintainer.end_time_cache = {}
# Mock filesystem
# One bad file, one good file
files = ["bad_filename.mp4", "camera@20210101000000+0000.mp4"]
with patch("os.listdir", return_value=files):
with patch("os.path.isfile", return_value=True):
with patch(
"frigate.record.maintainer.psutil.process_iter", return_value=[]
):
with patch("frigate.record.maintainer.logger.warning") as warn:
# Mock validate_and_move_segment to avoid further logic
maintainer.validate_and_move_segment = MagicMock()
try:
await maintainer.move_files()
except ValueError as e:
if "not enough values to unpack" in str(e):
self.fail("move_files() crashed on bad filename!")
raise e
except Exception:
# Ignore other errors (like DB connection) as we only care about the unpack crash
pass
# The bad filename is encountered in multiple loops, but should only warn once.
matching = [
c
for c in warn.call_args_list
if c.args
and isinstance(c.args[0], str)
and "Skipping unexpected files in cache" in c.args[0]
]
self.assertEqual(
1,
len(matching),
f"Expected a single warning for unexpected files, got {len(matching)}",
)
if __name__ == "__main__":
unittest.main()

View File

@@ -129,7 +129,9 @@ def get_ffmpeg_arg_list(arg: Any) -> list:
return arg if isinstance(arg, list) else shlex.split(arg)
def load_labels(path: Optional[str], encoding="utf-8", prefill=91):
def load_labels(
path: Optional[str], encoding="utf-8", prefill=91, indexed: bool | None = None
):
"""Loads labels from file (with or without index numbers).
Args:
path: path to label file.
@@ -146,11 +148,12 @@ def load_labels(path: Optional[str], encoding="utf-8", prefill=91):
if not lines:
return {}
if lines[0].split(" ", maxsplit=1)[0].isdigit():
if indexed != False and lines[0].split(" ", maxsplit=1)[0].isdigit():
pairs = [line.split(" ", maxsplit=1) for line in lines]
labels.update({int(index): label.strip() for index, label in pairs})
else:
labels.update({index: line.strip() for index, line in enumerate(lines)})
return labels

View File

@@ -43,6 +43,7 @@ def write_training_metadata(model_name: str, image_count: int) -> None:
model_name: Name of the classification model
image_count: Number of images used in training
"""
model_name = model_name.strip()
clips_model_dir = os.path.join(CLIPS_DIR, model_name)
os.makedirs(clips_model_dir, exist_ok=True)
@@ -70,6 +71,7 @@ def read_training_metadata(model_name: str) -> dict[str, any] | None:
Returns:
Dictionary with last_training_date and last_training_image_count, or None if not found
"""
model_name = model_name.strip()
clips_model_dir = os.path.join(CLIPS_DIR, model_name)
metadata_path = os.path.join(clips_model_dir, TRAINING_METADATA_FILE)
@@ -95,6 +97,7 @@ def get_dataset_image_count(model_name: str) -> int:
Returns:
Total count of images across all categories
"""
model_name = model_name.strip()
dataset_dir = os.path.join(CLIPS_DIR, model_name, "dataset")
if not os.path.exists(dataset_dir):
@@ -126,6 +129,7 @@ class ClassificationTrainingProcess(FrigateProcess):
"TF_KERAS_MOBILENET_V2_WEIGHTS_URL",
"",
)
model_name = model_name.strip()
super().__init__(
stop_event=None,
priority=PROCESS_PRIORITY_LOW,
@@ -292,6 +296,7 @@ class ClassificationTrainingProcess(FrigateProcess):
def kickoff_model_training(
embeddingRequestor: EmbeddingsRequestor, model_name: str
) -> None:
model_name = model_name.strip()
requestor = InterProcessRequestor()
requestor.send_data(
UPDATE_MODEL_STATE,
@@ -359,6 +364,7 @@ def collect_state_classification_examples(
model_name: Name of the classification model
cameras: Dict mapping camera names to normalized crop coordinates [x1, y1, x2, y2] (0-1)
"""
model_name = model_name.strip()
dataset_dir = os.path.join(CLIPS_DIR, model_name, "dataset")
# Step 1: Get review items for the cameras
@@ -714,6 +720,7 @@ def collect_object_classification_examples(
model_name: Name of the classification model
label: Object label to collect (e.g., "person", "car")
"""
model_name = model_name.strip()
dataset_dir = os.path.join(CLIPS_DIR, model_name, "dataset")
temp_dir = os.path.join(dataset_dir, "temp")
os.makedirs(temp_dir, exist_ok=True)

View File

@@ -540,9 +540,16 @@ def get_jetson_stats() -> Optional[dict[int, dict]]:
try:
results["mem"] = "-" # no discrete gpu memory
with open("/sys/devices/gpu.0/load", "r") as f:
gpuload = float(f.readline()) / 10
results["gpu"] = f"{gpuload}%"
if os.path.exists("/sys/devices/gpu.0/load"):
with open("/sys/devices/gpu.0/load", "r") as f:
gpuload = float(f.readline()) / 10
results["gpu"] = f"{gpuload}%"
elif os.path.exists("/sys/devices/platform/gpu.0/load"):
with open("/sys/devices/platform/gpu.0/load", "r") as f:
gpuload = float(f.readline()) / 10
results["gpu"] = f"{gpuload}%"
else:
results["gpu"] = "-"
except Exception:
return None

View File

@@ -64,10 +64,12 @@ def stop_ffmpeg(ffmpeg_process: sp.Popen[Any], logger: logging.Logger):
try:
logger.info("Waiting for ffmpeg to exit gracefully...")
ffmpeg_process.communicate(timeout=30)
logger.info("FFmpeg has exited")
except sp.TimeoutExpired:
logger.info("FFmpeg didn't exit. Force killing...")
ffmpeg_process.kill()
ffmpeg_process.communicate()
logger.info("FFmpeg has been killed")
ffmpeg_process = None

300
web/package-lock.json generated
View File

@@ -48,7 +48,7 @@
"idb-keyval": "^6.2.1",
"immer": "^10.1.1",
"konva": "^9.3.18",
"lodash": "^4.17.21",
"lodash": "^4.17.23",
"lucide-react": "^0.477.0",
"monaco-yaml": "^5.3.1",
"next-themes": "^0.3.0",
@@ -64,7 +64,7 @@
"react-i18next": "^15.2.0",
"react-icons": "^5.5.0",
"react-konva": "^18.2.10",
"react-router-dom": "^6.26.0",
"react-router-dom": "^6.30.3",
"react-swipeable": "^7.0.2",
"react-tracked": "^2.0.1",
"react-transition-group": "^4.4.5",
@@ -116,7 +116,7 @@
"prettier-plugin-tailwindcss": "^0.6.5",
"tailwindcss": "^3.4.9",
"typescript": "^5.8.2",
"vite": "^6.2.0",
"vite": "^6.4.1",
"vitest": "^3.0.7"
}
},
@@ -3293,9 +3293,9 @@
"license": "MIT"
},
"node_modules/@remix-run/router": {
"version": "1.19.0",
"resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.0.tgz",
"integrity": "sha512-zDICCLKEwbVYTS6TjYaWtHXxkdoUvD/QXvyVZjGCsWz5vyH7aFeONlPffPdW+Y/t6KT0MgXb2Mfjun9YpWN1dA==",
"version": "1.23.2",
"resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.2.tgz",
"integrity": "sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w==",
"license": "MIT",
"engines": {
"node": ">=14.0.0"
@@ -4683,6 +4683,19 @@
"node": ">=8"
}
},
"node_modules/call-bind-apply-helpers": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"function-bind": "^1.1.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/callsites": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
@@ -5619,6 +5632,20 @@
"csstype": "^3.0.2"
}
},
"node_modules/dunder-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.1",
"es-errors": "^1.3.0",
"gopd": "^1.2.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/eastasianwidth": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
@@ -5679,6 +5706,24 @@
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/es-define-property": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-errors": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-module-lexer": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz",
@@ -5686,6 +5731,33 @@
"dev": true,
"license": "MIT"
},
"node_modules/es-object-atoms": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-set-tostringtag": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"get-intrinsic": "^1.2.6",
"has-tostringtag": "^1.0.2",
"hasown": "^2.0.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/esbuild": {
"version": "0.25.0",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz",
@@ -6222,12 +6294,15 @@
}
},
"node_modules/form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
"integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
"license": "MIT",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"es-set-tostringtag": "^2.1.0",
"hasown": "^2.0.2",
"mime-types": "^2.1.12"
},
"engines": {
@@ -6307,6 +6382,30 @@
"node": "6.* || 8.* || >= 10.*"
}
},
"node_modules/get-intrinsic": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.2",
"es-define-property": "^1.0.1",
"es-errors": "^1.3.0",
"es-object-atoms": "^1.1.1",
"function-bind": "^1.1.2",
"get-proto": "^1.0.1",
"gopd": "^1.2.0",
"has-symbols": "^1.1.0",
"hasown": "^2.0.2",
"math-intrinsics": "^1.1.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/get-nonce": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz",
@@ -6316,6 +6415,19 @@
"node": ">=6"
}
},
"node_modules/get-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
"license": "MIT",
"dependencies": {
"dunder-proto": "^1.0.1",
"es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
@@ -6384,6 +6496,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/gopd": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/graphemer": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
@@ -6413,10 +6537,38 @@
"node": ">=8"
}
},
"node_modules/has-symbols": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-tostringtag": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
"license": "MIT",
"dependencies": {
"has-symbols": "^1.0.3"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/hasown": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
"integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"license": "MIT",
"dependencies": {
"function-bind": "^1.1.2"
},
@@ -7058,9 +7210,10 @@
}
},
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
"version": "4.17.23",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
"integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
"license": "MIT"
},
"node_modules/lodash.merge": {
"version": "4.6.2",
@@ -7140,6 +7293,15 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/math-intrinsics": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
@@ -8456,12 +8618,12 @@
}
},
"node_modules/react-router": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.0.tgz",
"integrity": "sha512-wVQq0/iFYd3iZ9H2l3N3k4PL8EEHcb0XlU2Na8nEwmiXgIUElEH6gaJDtUQxJ+JFzmIXaQjfdpcGWaM6IoQGxg==",
"version": "6.30.3",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.3.tgz",
"integrity": "sha512-XRnlbKMTmktBkjCLE8/XcZFlnHvr2Ltdr1eJX4idL55/9BbORzyZEaIkBFDhFGCEWBBItsVrDxwx3gnisMitdw==",
"license": "MIT",
"dependencies": {
"@remix-run/router": "1.19.0"
"@remix-run/router": "1.23.2"
},
"engines": {
"node": ">=14.0.0"
@@ -8471,13 +8633,13 @@
}
},
"node_modules/react-router-dom": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.0.tgz",
"integrity": "sha512-RRGUIiDtLrkX3uYcFiCIxKFWMcWQGMojpYZfcstc63A1+sSnVgILGIm9gNUA6na3Fm1QuPGSBQH2EMbAZOnMsQ==",
"version": "6.30.3",
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.3.tgz",
"integrity": "sha512-pxPcv1AczD4vso7G4Z3TKcvlxK7g7TNt3/FNGMhfqyntocvYKj+GCatfigGDjbLozC4baguJ0ReCigoDJXb0ag==",
"license": "MIT",
"dependencies": {
"@remix-run/router": "1.19.0",
"react-router": "6.26.0"
"@remix-run/router": "1.23.2",
"react-router": "6.30.3"
},
"engines": {
"node": ">=14.0.0"
@@ -9502,6 +9664,54 @@
"dev": true,
"license": "MIT"
},
"node_modules/tinyglobby": {
"version": "0.2.15",
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
"integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"fdir": "^6.5.0",
"picomatch": "^4.0.3"
},
"engines": {
"node": ">=12.0.0"
},
"funding": {
"url": "https://github.com/sponsors/SuperchupuDev"
}
},
"node_modules/tinyglobby/node_modules/fdir": {
"version": "6.5.0",
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
"integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12.0.0"
},
"peerDependencies": {
"picomatch": "^3 || ^4"
},
"peerDependenciesMeta": {
"picomatch": {
"optional": true
}
}
},
"node_modules/tinyglobby/node_modules/picomatch": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/tinypool": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz",
@@ -9868,15 +10078,18 @@
}
},
"node_modules/vite": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/vite/-/vite-6.2.0.tgz",
"integrity": "sha512-7dPxoo+WsT/64rDcwoOjk76XHj+TqNTIvHKcuMQ1k4/SeHDaQt5GFAeLYzrimZrMpn/O6DtdI03WUjdxuPM0oQ==",
"version": "6.4.1",
"resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz",
"integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==",
"dev": true,
"license": "MIT",
"dependencies": {
"esbuild": "^0.25.0",
"fdir": "^6.4.4",
"picomatch": "^4.0.2",
"postcss": "^8.5.3",
"rollup": "^4.30.1"
"rollup": "^4.34.9",
"tinyglobby": "^0.2.13"
},
"bin": {
"vite": "bin/vite.js"
@@ -9970,6 +10183,37 @@
"monaco-editor": ">=0.33.0"
}
},
"node_modules/vite/node_modules/fdir": {
"version": "6.5.0",
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
"integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12.0.0"
},
"peerDependencies": {
"picomatch": "^3 || ^4"
},
"peerDependenciesMeta": {
"picomatch": {
"optional": true
}
}
},
"node_modules/vite/node_modules/picomatch": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/vitest": {
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/vitest/-/vitest-3.0.7.tgz",

View File

@@ -54,7 +54,7 @@
"idb-keyval": "^6.2.1",
"immer": "^10.1.1",
"konva": "^9.3.18",
"lodash": "^4.17.21",
"lodash": "^4.17.23",
"lucide-react": "^0.477.0",
"monaco-yaml": "^5.3.1",
"next-themes": "^0.3.0",
@@ -70,7 +70,7 @@
"react-i18next": "^15.2.0",
"react-icons": "^5.5.0",
"react-konva": "^18.2.10",
"react-router-dom": "^6.26.0",
"react-router-dom": "^6.30.3",
"react-swipeable": "^7.0.2",
"react-tracked": "^2.0.1",
"react-transition-group": "^4.4.5",
@@ -122,7 +122,7 @@
"prettier-plugin-tailwindcss": "^0.6.5",
"tailwindcss": "^3.4.9",
"typescript": "^5.8.2",
"vite": "^6.2.0",
"vite": "^6.4.1",
"vitest": "^3.0.7"
}
}

View File

@@ -1 +1,6 @@
{}
{
"train": {
"titleShort": "الأخيرة"
},
"documentTitle": "تصنيف النماذج - Frigate"
}

View File

@@ -1,6 +1,6 @@
{
"description": {
"addFace": "قم بإضافة مجموعة جديدة لمكتبة الأوجه.",
"addFace": "أضف مجموعة جديدة إلى مكتبة الوجوه عن طريق رفع صورتك الأولى.",
"invalidName": "أسم غير صالح. يجب أن يشمل الأسم فقط على الحروف، الأرقام، المسافات، الفاصلة العليا، الشرطة التحتية، والشرطة الواصلة.",
"placeholder": "أدخل أسم لهذه المجموعة"
},
@@ -21,6 +21,88 @@
"collections": "المجموعات",
"createFaceLibrary": {
"title": "إنشاء المجاميع",
"desc": "إنشاء مجموعة جديدة"
"desc": "إنشاء مجموعة جديدة",
"new": "إضافة وجه جديد",
"nextSteps": "لبناء أساس قوي:<li>استخدم علامة التبويب \"التعرّفات الأخيرة\" لاختيار الصور والتدريب عليها لكل شخص تم اكتشافه.</li> <li>ركّز على الصور الأمامية المباشرة للحصول على أفضل النتائج؛ وتجنّب صور التدريب التي تُظهر الوجوه بزاوية.</li>"
},
"steps": {
"faceName": "ادخل اسم للوجه",
"uploadFace": "ارفع صورة للوجه",
"nextSteps": "الخطوة التالية",
"description": {
"uploadFace": "قم برفع صورة لـ {{name}} تُظهر وجهه من زاوية أمامية مباشرة. لا يلزم أن تكون الصورة مقتصرة على الوجه فقط."
}
},
"train": {
"title": "التعرّفات الأخيرة",
"titleShort": "الأخيرة",
"aria": "اختر التعرّفات الأخيرة",
"empty": "لا توجد أي محاولات حديثة للتعرّف على الوجوه"
},
"deleteFaceLibrary": {
"title": "احذف الاسم",
"desc": "هل أنت متأكد أنك تريد حذف المجموعة {{name}}؟ سيؤدي هذا إلى حذف جميع الوجوه المرتبطة بها نهائيًا."
},
"deleteFaceAttempts": {
"title": "احذف الوجوه",
"desc_zero": "وجه",
"desc_one": "وجه",
"desc_two": "وجهان",
"desc_few": "وجوه",
"desc_many": "وجهًا",
"desc_other": "وجه"
},
"renameFace": {
"title": "اعادة تسمية الوجه",
"desc": "ادخل اسم جديد لـ{{name}}"
},
"button": {
"deleteFaceAttempts": "احذف الوجوه",
"addFace": "اظف وجهًا",
"renameFace": "اعد تسمية وجه",
"deleteFace": "احذف وجهًا",
"uploadImage": "ارفع صورة",
"reprocessFace": "إعادة معالجة الوجه"
},
"imageEntry": {
"validation": {
"selectImage": "يرجى اختيار ملف صورة."
},
"dropActive": "اسحب الصورة إلى هنا…",
"dropInstructions": "اسحب وأفلت أو الصق صورة هنا، أو انقر للاختيار",
"maxSize": "الحجم الأقصى: {{size}} ميغابايت"
},
"nofaces": "لا توجد وجوه متاحة",
"trainFaceAs": "درّب الوجه كـ:",
"trainFace": "درّب الوجه",
"toast": {
"success": {
"uploadedImage": "تم رفع الصورة بنجاح.",
"addFaceLibrary": "تمت إضافة {{name}} بنجاح إلى مكتبة الوجوه!",
"deletedFace_zero": "وجه",
"deletedFace_one": "وجه",
"deletedFace_two": "وجهين",
"deletedFace_few": "وجوه",
"deletedFace_many": "وجهًا",
"deletedFace_other": "وجه",
"deletedName_zero": "وجه",
"deletedName_one": "وجه",
"deletedName_two": "وجهين",
"deletedName_few": "وجوه",
"deletedName_many": "وجهًا",
"deletedName_other": "وجه",
"renamedFace": "تمت إعادة تسمية الوجه بنجاح إلى {{name}}",
"trainedFace": "تم تدريب الوجه بنجاح.",
"updatedFaceScore": "تم تحديث درجة الوجه بنجاح إلى {{name}} ({{score}})."
},
"error": {
"uploadingImageFailed": "فشل في رفع الصورة: {{errorMessage}}",
"addFaceLibraryFailed": "فشل في تعيين اسم الوجه: {{errorMessage}}",
"deleteFaceFailed": "فشل الحذف: {{errorMessage}}",
"deleteNameFailed": "فشل في حذف الاسم: {{errorMessage}}",
"renameFaceFailed": "فشل في إعادة تسمية الوجه: {{errorMessage}}",
"trainFailed": "فشل التدريب: {{errorMessage}}",
"updateFaceScoreFailed": "فشل في تحديث درجة الوجه: {{errorMessage}}"
}
}
}

View File

@@ -2,9 +2,9 @@
"babbling": "Бърборене",
"whispering": "Шепнене",
"laughter": "Смях",
"crying": "Плача",
"crying": "Плач",
"sigh": "Въздишка",
"singing": одписвам",
"singing": еене",
"choir": "Хор",
"yodeling": "Йоделинг",
"mantra": "Мантра",
@@ -264,5 +264,6 @@
"pant": "Здъхване",
"stomach_rumble": "Къркорене на стомах",
"heartbeat": "Сърцебиене",
"scream": "Вик"
"scream": "Вик",
"snicker": "Хихикане"
}

View File

@@ -1,6 +1,16 @@
{
"form": {
"user": "Потребителско име",
"password": "Парола"
"password": "Парола",
"login": "Вход",
"firstTimeLogin": "Опитвате да влезете за първи път? Данните за вход са разпечатани в логовете на Frigate.",
"errors": {
"usernameRequired": "Потребителското име е задължително",
"passwordRequired": "Паролата е задължителна",
"rateLimit": "Надхвърлен брой опити. Моля Опитайте по-късно.",
"loginFailed": "Неуспешен вход",
"unknownError": "Неизвестна грешка. Поля проверете логовете.",
"webUnknownError": "Неизвестна грешка. Поля проверете изхода в конзолата."
}
}
}

View File

@@ -7,7 +7,7 @@
"label": "Изтрий група за камери",
"confirm": {
"title": "Потвърди изтриването",
"desc": "Сигурни ли сте, че искате да изтриете група </em>{{name}}</em>?"
"desc": "Сигурни ли сте, че искате да изтриете група <em>{{name}}</em>?"
}
},
"name": {

View File

@@ -11,6 +11,9 @@
},
"restart": {
"title": "Сигурен ли сте, че искате да рестартирате Frigate?",
"button": "Рестартирай"
"button": "Рестартирай",
"restarting": {
"title": "Frigare се рестартира"
}
}
}

View File

@@ -1,3 +1,6 @@
{
"documentTitle": "Модели за класификация"
"documentTitle": "Модели за класификация - Frigate",
"description": {
"invalidName": "Невалидно име. Имената могат да съдържат единствено: букви, числа, празни места, долни черти и тирета."
}
}

View File

@@ -1,4 +1,18 @@
{
"documentTitle": "Настройки на конфигурацията - Фригейт",
"configEditor": "Настройки на конфигурацията"
"documentTitle": "Настройки на конфигурацията - Frigate",
"configEditor": "Конфигуратор",
"safeConfigEditor": "Конфигуратор (Safe Mode)",
"safeModeDescription": "Frigate е в режим \"Safe Mode\" тъй като конфигурацията не минава проверките за валидност.",
"copyConfig": "Копирай Конфигурацията",
"saveAndRestart": "Запази и Рестартирай",
"saveOnly": "Запази",
"confirm": "Изход без запис?",
"toast": {
"success": {
"copyToClipboard": "Конфигурацията е копирана."
},
"error": {
"savingError": "Грешка при запис на конфигурацията"
}
}
}

View File

@@ -11,5 +11,8 @@
},
"allCameras": "Всички камери",
"alerts": "Известия",
"detections": "Засичания"
"detections": "Засичания",
"motion": {
"label": "Движение"
}
}

View File

@@ -10,5 +10,5 @@
"trackedObjectsCount_one": "{{count}} проследен обект ",
"trackedObjectsCount_other": "{{count}} проследени обекта ",
"documentTitle": "Разгледай - Фригейт",
"generativeAI": "Генериращ Изкъствен Интелект"
"generativeAI": "Генеративен Изкъствен Интелект"
}

View File

@@ -1,4 +1,23 @@
{
"documentTitle": "Експорт - Frigate",
"search": "Търси"
"search": "Търси",
"noExports": "Няма намерени експорти",
"deleteExport": "Изтрий експорт",
"deleteExport.desc": "Сигурни ли сте, че искате да изтриете {{exportName}}?",
"editExport": {
"title": "Преименувай експорт",
"desc": "Въведете ново име за този експорт.",
"saveExport": "Запази експорт"
},
"tooltip": {
"shareExport": "Сподели експорт",
"downloadVideo": "Свали видео",
"editName": "Редактирай име",
"deleteExport": "Изтрий експорт"
},
"toast": {
"error": {
"renameExportFailed": "Неуспешно преименуване на експорт: {{errorMessage}}"
}
}
}

View File

@@ -13,6 +13,7 @@
},
"description": {
"addFace": "Добавете нова колекция във библиотеката за лица при качването на първата ви снимка.",
"placeholder": "Напишете име за тази колекция"
"placeholder": "Напишете име за тази колекция",
"invalidName": "Невалидно име. Имената могат да съдържат единствено: букви, числа, празни места, долни черти и тирета."
}
}

View File

@@ -3,5 +3,6 @@
"save": "Запазване на търсенето"
},
"search": "Търси",
"savedSearches": "Запазени търсения"
"savedSearches": "Запазени търсения",
"searchFor": "Търсене за {{inputValue}}"
}

View File

@@ -4,6 +4,7 @@
},
"documentTitle": {
"cameras": "Статистики за Камери - Фригейт",
"storage": "Статистика за паметта - Фригейт"
"storage": "Статистика за паметта - Фригейт",
"general": "Обща Статистика - Frigate"
}
}

View File

@@ -60,7 +60,7 @@
"cough": "Tos",
"throat_clearing": "Carraspeig",
"sneeze": "Esternut",
"sniff": "Fregit nasal",
"sniff": "olorar",
"run": "Córrer",
"shuffle": "Passos arrossegats",
"footsteps": "Passos",
@@ -97,7 +97,7 @@
"moo": "Mugir",
"cowbell": "Esquellot",
"pig": "Porc",
"oink": "Oink",
"oink": "Oinc",
"bleat": "Brama",
"fowl": "Au de corral",
"chicken": "Pollastre",
@@ -439,37 +439,37 @@
"inside": "Interior",
"pulse": "Pols",
"outside": "Fora",
"chirp_tone": "To de grinyol",
"chirp_tone": "Gisclada",
"harmonic": "Harmònic",
"sine_wave": "Ona sinus",
"crunch": "Cruixit",
"hum": "Taral·lejar",
"plop": "Chof",
"hum": "Zunzum",
"plop": "Xip-xap",
"clickety_clack": "Clic-Clac",
"clicking": "Clicant",
"clatter": "Soroll",
"clatter": "Rebombori",
"chird": "Piular",
"liquid": "Líquid",
"splash": "Xof",
"slosh": "Xip-xap",
"boing": "Boing",
"zing": "Fiu",
"rumble": "Bum-bum",
"sizzle": "Xiu-xiu",
"splash": "Esquitx",
"slosh": "Xipolleig",
"boing": "Rebot",
"zing": "Zunzum agut",
"rumble": "Retombori",
"sizzle": "Crepitació",
"whir": "Brrrm",
"rustle": "Fru-Fru",
"creak": "Clic-clac",
"clang": "Clang",
"rustle": "Frec",
"creak": "Rascada",
"clang": "Soroll metàl·lic",
"squish": "Xaf",
"drip": "Plic-plic",
"pour": "Glug-glug",
"trickle": "Xiulet",
"gush": "Xuuuix",
"fill": "Glug-glug",
"ding": "Ding",
"ping": "Ping",
"beep": "Bip",
"squeal": "Xiscle",
"drip": "Goteig",
"pour": "Abocament",
"trickle": "Raig fi",
"gush": "Raig fort",
"fill": "Ompliment",
"ding": "Ting",
"ping": "Ressò",
"beep": "Pitit",
"squeal": "Chirrit",
"crumpling": "Arrugant-se",
"rub": "Fregar",
"scrape": "Raspar",
@@ -480,13 +480,13 @@
"smash": "Aixafar",
"whack": "Cop",
"slap": "Bufetada",
"bang": "Bang",
"bang": "Cop fort",
"basketball_bounce": "Rebot de bàsquet",
"chorus_effect": "Efecte de cor",
"effects_unit": "Unitat d'Efectes",
"electronic_tuner": "Afinador electrònic",
"thunk": "Bruix",
"thump": "Cop fort",
"thump": "Soroll sord",
"whoosh": "Xiuxiueig",
"arrow": "Fletxa",
"sonar": "Sonar",

View File

@@ -201,7 +201,8 @@
},
"inProgress": "En curs",
"invalidStartTime": "Hora d'inici no vàlida",
"invalidEndTime": "Hora de finalització no vàlida"
"invalidEndTime": "Hora de finalització no vàlida",
"never": "Mai"
},
"unit": {
"speed": {
@@ -227,7 +228,8 @@
"show": "Mostra {{item}}",
"ID": "ID",
"none": "Cap",
"all": "Tots"
"all": "Tots",
"other": "Altres"
},
"button": {
"apply": "Aplicar",

View File

@@ -10,7 +10,11 @@
"empty": {
"alert": "Hi ha cap alerta per revisar",
"detection": "Hi ha cap detecció per revisar",
"motion": "No s'haan trobat dades de moviment"
"motion": "No s'haan trobat dades de moviment",
"recordingsDisabled": {
"title": "S'han d'activar les gravacions",
"description": "Només es poden revisar temes quan s'han activat les gravacions de la càmera."
}
},
"timeline": "Línia de temps",
"timeline.aria": "Seleccionar línia de temps",

View File

@@ -169,7 +169,10 @@
"title": "Edita els atributs",
"desc": "Seleccioneu els atributs de classificació per a aquesta {{label}}"
},
"attributes": "Atributs de classificació"
"attributes": "Atributs de classificació",
"title": {
"label": "Títol"
}
},
"searchResult": {
"tooltip": "S'ha identificat {{type}} amb una confiança del {{confidence}}%",

View File

@@ -184,6 +184,16 @@
"restricted": {
"title": "No hi ha càmeres disponibles",
"description": "No teniu permís per veure cap càmera en aquest grup."
},
"default": {
"title": "No s'ha configurat cap càmera",
"description": "Comenceu connectant una càmera a Frigate.",
"buttonText": "Afegeix una càmera"
},
"group": {
"title": "No hi ha càmeres al grup",
"description": "Aquest grup de càmeres no té càmeres assignades o habilitades.",
"buttonText": "Gestiona els grups"
}
}
}

View File

@@ -954,7 +954,7 @@
"useDigestAuthDescription": "Usa l'autenticació de resum HTTP per a ONVIF. Algunes càmeres poden requerir un nom d'usuari/contrasenya ONVIF dedicat en lloc de l'usuari administrador estàndard."
},
"save": {
"failure": "SS'ha produït un error en desar {{cameraName}}.",
"failure": "S'ha produït un error en desar {{cameraName}}.",
"success": "S'ha desat correctament la càmera nova {{cameraName}}."
},
"testResultLabels": {
@@ -1211,11 +1211,11 @@
"cameraReview": {
"object_descriptions": {
"title": "Descripcions d'objectes generadors d'IA",
"desc": "Activa/desactiva temporalment les descripcions d'objectes generatius d'IA per a aquesta càmera. Quan està desactivat, les descripcions generades per IA no se sol·licitaran per als objectes rastrejats en aquesta càmera."
"desc": "Activa/desactiva temporalment les descripcions d'objectes generatius d'IA per a aquesta càmera fins que es reiniciï Frigate. Quan està desactivat, les descripcions generades per IA no se sol·licitaran per als objectes rastrejats en aquesta càmera."
},
"review_descriptions": {
"title": "Descripcions de la IA generativa",
"desc": "Activa/desactiva temporalment les descripcions de revisió de la IA generativa per a aquesta càmera. Quan està desactivat, les descripcions generades per IA no se sol·licitaran per als elements de revisió d'aquesta càmera."
"desc": "Activa/desactiva temporalment les descripcions de la IA Generativa per a aquesta càmera fins que es reiniciï Frigate. Quan està desactivat, les descripcions generades per IA no se sol·licitaran per als elements de revisió d'aquesta càmera."
},
"review": {
"title": "Revisió",

View File

@@ -86,7 +86,14 @@
"otherProcesses": {
"title": "Altres processos",
"processMemoryUsage": "Ús de memòria de procés",
"processCpuUsage": "Ús de la CPU del procés"
"processCpuUsage": "Ús de la CPU del procés",
"series": {
"recording": "gravant",
"review_segment": "segment de revisió",
"embeddings": "incrustacions",
"audio_detector": "detector d'àudio",
"go2rtc": "go2rtc"
}
}
},
"storage": {

View File

@@ -78,7 +78,11 @@
"formattedTimestampFilename": {
"24hour": "dd-MM-yy-HH-mm-ss",
"12hour": "dd-MM.yy-h-mm-ss-a"
}
},
"never": "Nikdy",
"inProgress": "Zpracovává se",
"invalidStartTime": "Neplatný čas začátku",
"invalidEndTime": "Neplatný čas konce"
},
"button": {
"twoWayTalk": "Obousměrná komunikace",
@@ -115,10 +119,17 @@
"unselect": "Zrušit výběr",
"deleteNow": "Smazat hned",
"next": "Další",
"export": "Exportovat"
"export": "Exportovat",
"continue": "Pokračovat"
},
"label": {
"back": "Jdi zpět"
"back": "Jdi zpět",
"hide": "Skrýt {{item}}",
"show": "Zobrazit {{item}}",
"ID": "ID",
"none": "Nic",
"all": "Vše",
"other": "Ostatní"
},
"unit": {
"speed": {
@@ -128,6 +139,14 @@
"length": {
"feet": "stopa",
"meters": "metry"
},
"data": {
"kbps": "kB/s",
"mbps": "MB/s",
"gbps": "GB/s",
"kbph": "kB/hodinu",
"mbph": "MB/hodinu",
"gbph": "GB/hodinu"
}
},
"selectItem": "Vybrat {{item}}",
@@ -230,7 +249,8 @@
"uiPlayground": "UI hřiště",
"faceLibrary": "Knihovna Obličejů",
"configurationEditor": "Editor Konfigurace",
"withSystem": "Systém"
"withSystem": "Systém",
"classification": "Klasifikace"
},
"pagination": {
"previous": {
@@ -270,5 +290,17 @@
"viewer": "Divák",
"desc": "Správci mají plný přístup ke všem funkcím v uživatelském rozhraní Frigate. Diváci jsou omezeni na sledování kamer, položek přehledu a historických záznamů v UI."
},
"readTheDocumentation": "Přečtěte si dokumentaci"
"readTheDocumentation": "Přečtěte si dokumentaci",
"list": {
"two": "{{0}} a {{1}}",
"many": "{{items}}, a {{last}}",
"separatorWithSpace": ", "
},
"field": {
"optional": "Volitelné",
"internalID": "Interní ID Frigate používá v konfiguraci a databázi"
},
"information": {
"pixels": "{{area}}px"
}
}

View File

@@ -44,7 +44,8 @@
"button": {
"markAsReviewed": "Označit jako zkontrolované",
"deleteNow": "Smazat hned",
"export": "Exportovat"
"export": "Exportovat",
"markAsUnreviewed": "Označit jako nezkontrolované"
}
},
"export": {
@@ -67,12 +68,13 @@
"export": "Exportovat",
"selectOrExport": "Vybrat pro Export",
"toast": {
"success": "Export úspěšně spuštěn. Soubor najdete v adresáři /exports.",
"success": "Export úspěšně spuštěn. Soubor najdete na stránce exportů.",
"error": {
"failed": "Chyba spuštění exportu: {{error}}",
"endTimeMustAfterStartTime": "Čas konce musí být po čase začátku",
"noVaildTimeSelected": "Není vybráno žádné platné časové období"
}
},
"view": "Zobrazení"
},
"fromTimeline": {
"saveExport": "Uložit export",
@@ -116,6 +118,7 @@
"search": {
"placeholder": "Hledej pomocí štítku nebo podštítku..."
},
"noImages": "Nebyly nalezeny žádné náhledy pro tuto kameru"
"noImages": "Nebyly nalezeny žádné náhledy pro tuto kameru",
"unknownLabel": "Uložený obrázek Spouštěče"
}
}

View File

@@ -132,5 +132,9 @@
},
"count_one": "Třída {{count}}",
"count_other": "Třídy {{count}}"
},
"attributes": {
"label": "Atributy Klasifikace",
"all": "Všechny Atributy"
}
}

View File

@@ -38,10 +38,65 @@
"deleteImageFailed": "Chyba při mazání: {{errorMessage}}",
"deleteCategoryFailed": "Chyba při mazání třídy: {{errorMessage}}",
"deleteModelFailed": "Chyba při mazání modelu: {{errorMessage}}",
"categorizeFailed": "Chyba při mazání obrázku: {{errorMessage}}"
"categorizeFailed": "Chyba při mazání obrázku: {{errorMessage}}",
"trainingFailed": "Trénování modelu selhalo. Zkontrolujte logy Frigate pro zjištění detailů.",
"trainingFailedToStart": "Chyba spuštění trénování modelu: {{errorMessage}}",
"updateModelFailed": "Chyba aktualizace modelu: {{errorMessage}}",
"renameCategoryFailed": "Chyba přejmenování třídy: {{errorMessage}}"
}
},
"train": {
"titleShort": "Nedávný"
}
"titleShort": "Nedávný",
"title": "Předchozí klasifikace",
"aria": "Vybrat předchozí Klasifikace"
},
"deleteModel": {
"desc_one": "Jste si jistí, že chcete odstranit {{count}} model? Tím trvale odstraníte všechny související data včetně obrázků a tréninkových dat. Tato akce je nevratná.",
"desc_few": "Jste si jistí, že chcete odstranit {{count}} modely? Tím trvale odstraníte všechny související data včetně obrázků a tréninkových dat. Tato akce je nevratná.",
"desc_other": "Jste si jistí, že chcete odstranit {{count}} modelů? Tím trvale odstraníte všechny související data včetně obrázků a tréninkových dat. Tato akce je nevratná."
},
"deleteDatasetImages": {
"desc_one": "Opravdu chcete odstranit {{count}} obrázek z {{dataset}}? Tato akce je nevratná a vyžaduje přetrénování modelu.",
"desc_few": "Opravdu chcete odstranit {{count}} obrázky z {{dataset}}? Tato akce je nevratná a vyžaduje přetrénování modelu.",
"desc_other": "Opravdu chcete odstranit {{count}} obrázků z {{dataset}}? Tato akce je nevratná a vyžaduje přetrénování modelu.",
"title": "Smazat obrázky datové sady"
},
"deleteTrainImages": {
"desc_one": "Opravdu chcete odstranit {{count}} obrázek? Tato akce je nevratná.",
"desc_few": "Opravdu chcete odstranit {{count}} obrázky? Tato akce je nevratná.",
"desc_other": "Opravdu chcete odstranit {{count}} obrázků? Tato akce je nevratná.",
"title": "Odstranit tréninkové obrázky"
},
"wizard": {
"step3": {
"allImagesRequired_one": "Prosím, zařaďte všechny obrázky. Zbývá {{count}} obrázek.",
"allImagesRequired_few": "Prosím, zařaďte všechny obrázky. Zbývají {{count}} obrázky.",
"allImagesRequired_other": "Prosím, zařaďte všechny obrázky. Zbývá {{count}} obrázků.",
"trainingStarted": "Trénování úspěšně spuštěno",
"generateSuccess": "Vzorové obrázky byly úspěšně vytvořeny"
}
},
"deleteCategory": {
"title": "Smazat Třídu",
"desc": "Opravdu chcete odstranit třídu {{name}}? Tím se na trvalo odstraní všechny související obrázky a bude potřeba přetrénovat model.",
"minClassesTitle": "Nemůžete smazat třídu",
"minClassesDesc": "Klasifikační model musí mít alespoň 2 třídy. Než tuto třídu odstraníte přidejte další třídu."
},
"edit": {
"descriptionObject": "Upravte typ objektu a typ klasifikace pro tento model klasifikace.",
"stateClassesInfo": "Poznámka: Změna tříd stavů vyžaduje přetrénování modelu s aktualizovanými třídami."
},
"renameCategory": {
"title": "Přejmenovat třídu",
"desc": "Vložte nové jméno pro {{name}}. Aby se změna názvu projevila, bude nutné model znovu natrénovat."
},
"description": {
"invalidName": "Neplatné jméno. Jméno můžou obsahovat pouze písmena, čísla, mezery, apostrofy, podtržítka a spojovníky."
},
"categories": "Třídy",
"createCategory": {
"new": "Vytvořit novou Třídu"
},
"categorizeImageAs": "Klasifikovat obrázek jako:",
"categorizeImage": "Klasifikovat obrázek"
}

View File

@@ -9,14 +9,18 @@
"empty": {
"alert": "Nejsou žádné výstrahy na kontrolu",
"detection": "Nejsou žádné detekce na kontrolu",
"motion": "Nenalezena žádná data o pohybu"
"motion": "Nenalezena žádná data o pohybu",
"recordingsDisabled": {
"title": "Nahrávání musí být povoleno",
"description": "Položky revize lze pro kameru vytvořit pouze tehdy, je-li pro ni povoleno nahrávání."
}
},
"timeline": "Časová osa",
"timeline.aria": "Zvolit časovou osu",
"events": {
"label": "Události",
"aria": "Zvolit události",
"noFoundForTimePeriod": "Pro toto období nebyly nalezeny žádné události."
"noFoundForTimePeriod": "Pro toto časové období nebyly nalezeny žádné události."
},
"documentTitle": "Revize - Frigate",
"camera": "Kamera",
@@ -26,8 +30,8 @@
"markAsReviewed": "Označit jako zkontrolované",
"markTheseItemsAsReviewed": "Označit tyto položky jako zkontrolované",
"newReviewItems": {
"label": "Zobrazit nové položky na kontrolu",
"button": "Nové položky na kontrolu"
"label": "Zobrazit nové položky revize",
"button": "Nové položky revize"
},
"recordings": {
"documentTitle": "Záznamy - Frigate"
@@ -42,8 +46,22 @@
"detail": {
"label": "Detail",
"noDataFound": "Žádná detailní data k prohlédnutí",
"aria": "Přepnout detailní zobrazení",
"aria": "Přepnout zobrazení detailů",
"trackedObject_other": "{{count}} objektů",
"trackedObject_one": "{{count}} objektů"
}
"trackedObject_one": "{{count}} objekt",
"noObjectDetailData": "Nejsou k dispozici žádné podrobné údaje o objektu.",
"settings": "Nastavení Detailního Zobrazení",
"alwaysExpandActive": {
"title": "Vždy rozbalit aktivní",
"desc": "Vždy zobrazit podrobnosti objektu aktivní položky revize, pokud jsou k dispozici."
}
},
"objectTrack": {
"trackedPoint": "Sledovaný bod",
"clickToSeek": "Kliknutím přeskočte na tento čas"
},
"select_all": "Vše",
"normalActivity": "Normální",
"needsReview": "Potřebuje revizi",
"securityConcern": "Obava o bezpečnost"
}

View File

@@ -24,7 +24,8 @@
"regenerate": "Od {{provider}} byl vyžádán nový popis. V závislosti na rychlosti vašeho poskytovatele může obnovení nového popisu nějakou dobu trvat.",
"updatedSublabel": "Úspěšně aktualizovaný podružný štítek.",
"updatedLPR": "Úspěšně aktualizovaná SPZ.",
"audioTranscription": "Požádání o přepis zvuku bylo úspěšné."
"audioTranscription": "Požádání o přepis zvuku bylo úspěšné. V závislosti na rychlosti Vašeho Frigate serveru může přepis trvat nějaký čas než bude dokončen.",
"updatedAttributes": "Atributy byly úspěšně aktualizovány."
},
"error": {
"regenerate": "Chyba volání {{provider}} pro nový popis: {{errorMessage}}",
@@ -206,7 +207,7 @@
"dialog": {
"confirmDelete": {
"title": "Potvrdit smazání",
"desc": "Odstraněním tohoto sledovaného objektu se odstraní snímek, všechna uložená vložení a všechny související položky životního cyklu objektu. Zaznamenaný záznam tohoto sledovaného objektu v zobrazení Historie <em>NEBUDE</em> smazán.<br /><br />Opravdu chcete pokračovat?"
"desc": "Odstraněním tohoto sledovaného objektu se odstraní snímek, všechna uložená vložení a všechny související položky s podrobnostmi o sledování. Zaznamenaný záznam tohoto sledovaného objektu v zobrazení Historie <em>NEBUDE</em> smazán.<br /><br />Opravdu chcete pokračovat?"
}
},
"trackedObjectDetails": "Detaily sledovaných objektů",
@@ -214,7 +215,9 @@
"details": "detaily",
"snapshot": "snímek",
"video": "video",
"object_lifecycle": "životní cyklus objektu"
"object_lifecycle": "životní cyklus objektu",
"thumbnail": "Náhled",
"tracking_details": "detaily sledování"
},
"noTrackedObjects": "Žádné sledované objekty nebyly nalezeny",
"fetchingTrackedObjectsFailed": "Chyba při načítání sledovaných objektů: {{errorMessage}}",
@@ -224,5 +227,49 @@
},
"concerns": {
"label": "Obavy"
},
"trackingDetails": {
"title": "Detaily Sledování",
"noImageFound": "Nebyl nalezen obrázek pro tuto časovou značku.",
"createObjectMask": "Vytvořit Masku Objektu",
"adjustAnnotationSettings": "Upravte nastavení poznámek",
"scrollViewTips": "Klikněte pro zobrazení významných okamžiků z životního cyklu tohoto objektu.",
"autoTrackingTips": "Pozice ohraničujících rámečků budou nepřesné pro kamery s automatickým sledováním.",
"count": "{{first}} z {{second}}",
"trackedPoint": "Sledovaný Bod",
"lifecycleItemDesc": {
"visible": "Detekován {{label}}",
"entered_zone": "{{label}} vstoupil do {{zones}}",
"active": "{{label}} se stal aktivním",
"stationary": "{{label}} se zastavil",
"attribute": {
"faceOrLicense_plate": "Pro {{label}} zjištěn {{attribute}}"
},
"header": {
"ratio": "Poměr",
"area": "Oblast",
"score": "Skóre"
}
},
"annotationSettings": {
"title": "Nastavení anotací",
"showAllZones": {
"title": "Zobrazit všechny zóny",
"desc": "Vždy zobrazovat zóny na snímcích, na kterých objekty vstoupili do zóny."
},
"offset": {
"label": "Odsazení anotace",
"desc": "Tato data pocházejí z detekčního kanálu vaší kamery, ale překrývají se s obrázky ze záznamového kanálu. Je nepravděpodobné, že by oba streamy byly dokonale synchronizované. V důsledku toho se ohraničovací rámeček a záznam nebudou dokonale srovnávat. Toto nastavení můžete použít k časovému posunutí anotací dopředu nebo dozadu, abyste je lépe zarovnali se zaznamenaným záznamem.",
"millisecondsToOffset": "Milisekundy na posunutí detekce anotací. <em>Výchozí: 0</em>",
"tips": "Snižte hodnotu, pokud je přehrávané video před ohraničením a body cesty, nebo zvyšte hodnotu, pokud je přehrávané video za nimi. Hodnota může být i záporná.",
"toast": {
"success": "Odsazení anotací pro {{camera}} bylo uloženo do konfiguračního souboru."
}
}
},
"carousel": {
"previous": "Předcházející snímek",
"next": "Další snímek"
}
}
}

View File

@@ -1,6 +1,6 @@
{
"imageEntry": {
"dropInstructions": "Přetáhněte obrázek zde, nebo klikněte na výběr",
"dropInstructions": "Přetáhněte obrázek sem, nebo klikněte na výběr",
"maxSize": "Maximální velikost: {{size}}MB",
"dropActive": "Přetáhněte obrázek zde…",
"validation": {
@@ -10,7 +10,7 @@
"createFaceLibrary": {
"new": "Vytvořit nový obličej",
"desc": "Vytvořit novou kolekci",
"nextSteps": "Chcete-li vybudovat pevný základ:<li>Použijte kartu Trénování k výběru a trénování na snímcích pro každou detekovanou osobu.</li><li>Pro nejlepší výsledky se zaměřte na přímé snímky; vyhněte se trénování snímků, které zachycují obličeje pod úhlem.</li></ul>",
"nextSteps": "Chcete-li vybudovat pevný základ:<li>Použijte kartu Nedávná Rozpoznání k výběru a trénování na snímcích pro každou detekovanou osobu.</li><li>Pro nejlepší výsledky se zaměřte na přímé snímky; vyhněte se trénování snímků, které zachycují obličeje pod úhlem.</li></ul>",
"title": "Vytvořit kolekci"
},
"details": {
@@ -44,7 +44,7 @@
"description": {
"addFace": "Přidejte novou kolekci do Knihovny obličejů nahráním prvního obrázku.",
"placeholder": "Zadejte název pro tuto kolekci",
"invalidName": "Neplatný název. Názvy mohou obsahovat pouze písmena, čísla, mezery, apostrofy, podtržítka a pomlčky."
"invalidName": "Neplatné jméno. Jméno můžou obsahovat pouze písmena, čísla, mezery, apostrofy, podtržítka a spojovníky."
},
"documentTitle": "Knihovna obličejů - Frigate",
"uploadFaceImage": {

View File

@@ -86,7 +86,7 @@
"enable": "Ukázat statistiky streamu"
},
"manualRecording": {
"title": "Nahrávání na vyžádání",
"title": "Na požádání",
"playInBackground": {
"label": "Přehrát na pozadí",
"desc": "Povolte tuto volbu pro pokračování streamování i když je přehrávač skrytý."
@@ -103,7 +103,7 @@
"started": "Manuálně spuštěno nahrávání na požádání.",
"ended": "Ukončeno manuální nahrávání na vyžádání.",
"recordDisabledTips": "Protože je v konfiguraci této kamery nahrávání zakázáno nebo omezeno, bude uložen pouze snímek.",
"tips": "Spustit ruční událost na základě nastavení uchování záznamů této kamery."
"tips": "Stáhněte si aktuální snímek nebo spusťte ruční událost na základě nastavení uchování záznamu této kamery."
},
"streamingSettings": "Nastavení Streamování",
"audio": "Zvuk",
@@ -167,5 +167,11 @@
"transcription": {
"enable": "Povolit živý přepis zvuku",
"disable": "Zakázat živý přepis zvuku"
},
"snapshot": {
"takeSnapshot": "Stáhnout aktuální snímek",
"noVideoSource": "Pro snímek není k dispozici žádné video.",
"captureFailed": "Zachycení snímku selhalo.",
"downloadStarted": "Stažení snímku spuštěno."
}
}

View File

@@ -134,7 +134,7 @@
"name": {
"inputPlaceHolder": "Zadejte jméno…",
"title": "Jméno",
"tips": "Název musí mít alespoň 2 znaky a nesmí být shodný s názvem kamery nebo jiné zóny."
"tips": "Název musí mít alespoň 2 znaky, musí obsahovat alespoň jedno písmeno a nesmí být shodný s názvem kamery nebo jiné zóny této kamery."
},
"inertia": {
"title": "Setrvačnost",
@@ -160,7 +160,7 @@
}
},
"toast": {
"success": "Zóna {{zoneName}} byla uložena. Restartujte Frigate pro aplikování změn."
"success": "Zóna {{zoneName}} byla uložena."
},
"label": "Zóny",
"desc": {
@@ -199,8 +199,8 @@
"clickDrawPolygon": "Kliknutím nakreslíte polygon do obrázku.",
"toast": {
"success": {
"title": "{{polygonName}} byl uložen. Restartujte Frigate pro aplikování změn.",
"noName": "Maska Detekce pohybu byla uložena. Restartujte Frigate pro aplikování změn."
"title": "{{polygonName}} byl uložen.",
"noName": "Maska Detekce pohybu byla uložena."
}
}
},
@@ -284,8 +284,8 @@
"clickDrawPolygon": "Kliknutím nakreslete polygon do obrázku.",
"toast": {
"success": {
"title": "{{polygonName}} byl uložen. Restartujte Frigate pro aplikování změn.",
"noName": "Maska Objektu byla uložena. Restartujte Frigate pro aplikování změn."
"title": "{{polygonName}} byl uložen.",
"noName": "Maska Objektu byla uložena."
}
},
"point_one": "{{count}} bod",
@@ -322,7 +322,7 @@
"noCamera": "Žádná Kamera"
},
"general": {
"title": "Hlavní nastavení",
"title": "Nastavení rozhraní",
"liveDashboard": {
"title": "Živý dashboard",
"automaticLiveView": {
@@ -332,6 +332,13 @@
"playAlertVideos": {
"label": "Přehrát videa s výstrahou",
"desc": "Ve výchozím nastavení se nedávná upozornění na ovládacím panelu Živě přehrávají jako malá opakující se videa. Vypněte tuto možnost, chcete-li na tomto zařízení/prohlížeči zobrazovat pouze statický obrázek nedávných výstrah."
},
"displayCameraNames": {
"label": "Vždy zobrazit názvy kamer",
"desc": "Vždy zobrazit názvy kamer v čipu na ovládacím panelu živého náhledu s více kamerami."
},
"liveFallbackTimeout": {
"label": "Časový limit pádu živého přehrávání"
}
},
"storedLayouts": {
@@ -629,11 +636,11 @@
"actions": "Akce",
"noUsers": "Žádní uživatelé nebyli nalezeni.",
"changeRole": "Změnit roli uživatele",
"password": "Heslo",
"password": "Resetovat Heslo",
"deleteUser": "Smazat uživatele",
"role": "Role"
},
"updatePassword": "Aktualizovat heslo",
"updatePassword": "Resetovat heslo",
"toast": {
"success": {
"createUser": "Uživatel {{user}} úspěšně vytvořen",
@@ -743,7 +750,7 @@
"triggers": {
"documentTitle": "Spouštěče",
"management": {
"title": "Správa spouštěčů",
"title": "Spouštěče",
"desc": "Spravovat spouštěče pro {{camera}}. Použít typ miniatury ke spuštění u miniatur podobných vybranému sledovanému objektu a typ popisu ke spuštění u popisů podobných zadanému textu."
},
"addTrigger": "Přidat spouštěč",
@@ -782,10 +789,10 @@
"form": {
"name": {
"title": "Název",
"placeholder": "Zadejte název spouštěče",
"placeholder": "Pojmenujte tento spouštěč",
"error": {
"minLength": "Název musí mít alespoň 2 znaky.",
"invalidCharacters": "Jméno může obsahovat pouze písmena, číslice, podtržítka a pomlčky.",
"minLength": "Pole musí mít alespoň 2 znaky.",
"invalidCharacters": "Pole může obsahovat pouze písmena, číslice, podtržítka a pomlčky.",
"alreadyExists": "Spouštěč s tímto názvem již pro tuto kameru existuje."
}
},
@@ -798,9 +805,9 @@
},
"content": {
"title": "Obsah",
"imagePlaceholder": "Vybrat obrázek",
"imagePlaceholder": "Vyberte miniaturu",
"textPlaceholder": "Zadat textový obsah",
"imageDesc": "Vybrat obrázek, který spustí tuto akci, když bude detekován podobný obrázek.",
"imageDesc": "Je zobrazeno pouze posledních 100 miniatur. Pokud nemůžete najít požadovanou miniaturu, prosím zkontrolujte dřívější objekty v Prozkoumat a nastavte spouštěč ze tamějšího menu.",
"textDesc": "Zadejte text, který spustí tuto akci, když bude zjištěn podobný popis sledovaného objektu.",
"error": {
"required": "Obsah je povinný."
@@ -808,7 +815,7 @@
},
"actions": {
"title": "Akce",
"desc": "Ve výchozím nastavení Frigate odesílá MQTT zprávu pro všechny spouštěče. Zvolte dodatečnou akci, která se má provést, když se tento spouštěč aktivuje.",
"desc": "Ve výchozím nastavení Frigate odesílá MQTT zprávu pro všechny spouštěče. Podřazené popisky přidávají název spouštěče k popisku objektu. Atributy jsou prohledávatelná metadata uložená samostatně v metadatech sledovaného objektu.",
"error": {
"min": "Musí být vybrána alespoň jedna akce."
}
@@ -850,9 +857,9 @@
"createRole": "Role {{role}} byla úspěšně vytvořena",
"updateCameras": "Kamery byly aktualizovány pro roli {{role}}",
"deleteRole": "Role {{role}} byla úspěšně smazána",
"userRolesUpdated_one": "{{count}} uživatel(ů) přiřazených k této roli bylo aktualizováno na „Divák“, který má přístup ke všem kamerám.",
"userRolesUpdated_few": "",
"userRolesUpdated_other": ""
"userRolesUpdated_one": "{{count}} uživatel přiřazený k této roli byl aktualizován na „diváka“, který má přístup ke všem kamerám.",
"userRolesUpdated_few": "{{count}} uživatelé přiřazení k této roli bylo aktualizováno na „diváky“, kteří mají přístup ke všem kamerám.",
"userRolesUpdated_other": "{{count}} uživatelů přiřazených k této roli bylo aktualizováno na „diváky“, kteří mají přístup ke všem kamerám."
},
"error": {
"createRoleFailed": "Nepodařilo se vytvořit roli: {{errorMessage}}",
@@ -896,5 +903,36 @@
"title": "Správa role diváka",
"desc": "Spravujte vlastní role diváků a jejich oprávnění k přístupu ke kamerám pro tuto instanci Frigate."
}
},
"cameraWizard": {
"save": {
"success": "Nová kamera {{cameraName}} úspěšně uložena."
},
"step2": {
"testSuccess": "Test připojení v pořádku!",
"probeSuccessful": "Sonda úspěšná",
"probeNoSuccess": "Sonda neúspěšná"
},
"step3": {
"testSuccess": "Test streamu v pořádku!"
},
"step4": {
"reconnectionSuccess": "Opakované připojení úspěšné.",
"streamValidated": "Stream {{number}} úspěšně ověřený"
}
},
"cameraManagement": {
"cameraConfig": {
"toast": {
"success": "Kamera {{cameraName}} úspěšně uložena"
}
}
},
"cameraReview": {
"reviewClassification": {
"toast": {
"success": "Konfigurace Klasifikací Revizí byla uložena. Restartujte Frigate pro aplikování změn."
}
}
}
}

View File

@@ -112,12 +112,23 @@
"gpuUsage": "Využití CPU",
"gpuMemory": "Paměť GPU",
"gpuEncoder": "GPU kodér",
"gpuDecoder": "GPU Dekodér"
"gpuDecoder": "GPU Dekodér",
"intelGpuWarning": {
"title": "Upozornění Intel GPU Stats",
"message": "Statistiky GPU nedostupné",
"description": "Toto je známá chyba v nástrojích Intel pro hlášení statistik GPU (intel_gpu_top), která selhává a opakovaně vrací využití GPU 0 %, a to i v případech, kdy na (i)GPU správně běží hardwarová akcelerace a detekce objektů. Nejedná se o chybu Frigate. Můžete restartovat hostitele, abyste problém dočasně vyřešili a potvrdili, že GPU funguje správně. Toto neovlivňuje výkon."
}
},
"otherProcesses": {
"title": "Ostatní procesy",
"processCpuUsage": "Využití CPU procesy",
"processMemoryUsage": "Využití paměti procesy"
"processMemoryUsage": "Využití paměti procesy",
"series": {
"go2rtc": "go2rtc",
"recording": "nahrávání",
"review_segment": "revidovat segment",
"embeddings": "vložení"
}
},
"title": "Hlavní"
},

View File

@@ -84,5 +84,116 @@
"babbling": "Pludren",
"yell": "Råb",
"whoop": "Jubel",
"snicker": "Smålatter"
"snicker": "Smålatter",
"bird": "Fugl",
"cat": "Kat",
"dog": "Hund",
"horse": "Hest",
"sheep": "Får",
"mouse": "Mus",
"keyboard": "Tastatur",
"blender": "Mixer",
"hair_dryer": "Føntørrer",
"animal": "Dyr",
"bark": "Gø",
"goat": "Gæd",
"sigh": "Suk",
"singing": "Synger",
"choir": "Kor",
"yodeling": "Jodlen",
"chant": "Messe",
"mantra": "Meditationsmantra",
"child_singing": "Barn Synger",
"synthetic_singing": "Syntetisk Sang",
"rapping": "Rapper",
"humming": "Nynner",
"groan": "Støn",
"grunt": "Grynt",
"whistling": "Fløjter",
"breathing": "Vejrtrækning",
"wheeze": "Hæsende vejrtrækning",
"snoring": "Snorker",
"gasp": "Gisp",
"pant": "Anstrengende vejrtrækning",
"snort": "Fnyse",
"cough": "Hoster",
"throat_clearing": "Rømmer sig",
"sneeze": "Nyser",
"sniff": "Snøfter",
"run": "Løb",
"shuffle": "Trække fødderne",
"footsteps": "Fodtrin",
"chewing": "Tygger",
"biting": "Bider",
"gargling": "Gurgler",
"stomach_rumble": "Maverumlen",
"burping": "Bøvser",
"hiccup": "Hikke",
"fart": "Prut",
"hands": "Hænder",
"finger_snapping": "Knipse fingere",
"clapping": "Klapper",
"heartbeat": "Hjertebanken",
"heart_murmur": "Hjertemislyd",
"cheering": "Hujen",
"applause": "Bifald",
"chatter": "Snak",
"crowd": "Forsamling",
"children_playing": "Børn leger",
"pets": "Kæledyr",
"yip": "Jubel",
"howl": "Hyl",
"bow_wow": "Vov vov",
"growling": "Knurren",
"whimper_dog": "Hunde­klynk",
"purr": "Spinde",
"meow": "Meaw",
"hiss": "Hvæser",
"caterwaul": "Kattejammer",
"livestock": "Husdyr",
"oink": "Nøf",
"bleat": "Brægen",
"vibration": "Vibration",
"fowl": "Fjerkræ",
"chicken": "Kylling",
"cluck": "Kagle",
"cock_a_doodle_doo": "Kykeliky",
"turkey": "Kalkun",
"gobble": "Kalkunlyd",
"duck": "And",
"quack": "Rap",
"goose": "Gås",
"honk": "Dyt",
"wild_animals": "Vilde dyr",
"roaring_cats": "Brølende katte",
"roar": "Brøl",
"chirp": "Pip",
"squawk": "Skræppen",
"pigeon": "Due",
"coo": "Kurre",
"crow": "Krage",
"caw": "Kragelyd",
"owl": "Ugle",
"hoot": "Uglehyl",
"flapping_wings": "Vingeslag",
"dogs": "Hunde",
"rats": "Rotter",
"patter": "Dråbelyd",
"insect": "Insekt",
"cricket": "Cricket",
"guitar": "Guitar",
"electric_guitar": "Elektrisk Guitar",
"bass_guitar": "Basguitar",
"acoustic_guitar": "Akustisk Guitar",
"steel_guitar": "Stål Guitar",
"tapping": "Tapping på guitar",
"strum": "Slå an",
"banjo": "Banjo",
"sitar": "Sitar",
"mandolin": "Mandolin",
"snare_drum": "Lilletromme",
"rimshot": "Kantslag",
"drum_roll": "Trommehvirvel",
"bass_drum": "Stortromme",
"techno": "Techno"
}

View File

@@ -24,13 +24,13 @@
"am": "am",
"year_one": "{{time}} år",
"year_other": "{{time}} år",
"mo": "{{time}}mo",
"mo": "{{time}}må",
"month_one": "{{time}} måned",
"month_other": "{{time}} måneder",
"d": "{{time}}d",
"day_one": "{{time}} dag",
"day_other": "{{time}} dage",
"h": "{{time}}h",
"h": "{{time}}t",
"yr": "{{time}}yr",
"hour_one": "{{time}} time",
"hour_other": "{{time}} timer",
@@ -41,11 +41,11 @@
"second_one": "{{time}} sekund",
"second_other": "{{time}} sekunder",
"formattedTimestamp": {
"12hour": "MMM d, h:mm:ss aaa",
"24hour": "MMM d, HH:mm:ss"
"12hour": "d MMM, h:mm:ss aaa",
"24hour": "d. MMM, HH:mm:ss"
},
"formattedTimestamp2": {
"12hour": "MM/dd h:mm:ssa",
"12hour": "dd/MM h:mm:ss",
"24hour": "d MMM HH:mm:ss"
},
"formattedTimestampHourMinute": {
@@ -57,22 +57,26 @@
"24hour": "HH:mm:ss"
},
"formattedTimestampMonthDayHourMinute": {
"12hour": "MMM d, h:mm aaa",
"24hour": "MMM d, HH:mm"
"12hour": "d MMM, h:mm aaa",
"24hour": "d MMM, HH:mm"
},
"formattedTimestampMonthDayYear": {
"12hour": "MMM d, yyyy",
"24hour": "MMM d, yyyy"
"12hour": "d MMM, yyyy",
"24hour": "d MMM, yyyy"
},
"formattedTimestampMonthDayYearHourMinute": {
"12hour": "MMM d yyyy, h:mm aaa",
"24hour": "MMM d yyyy, HH:mm"
"12hour": "d MMM yyyy, h:mm aaa",
"24hour": "d MMM yyyy, HH:mm"
},
"formattedTimestampMonthDay": "MMM d",
"formattedTimestampMonthDay": "d MMM",
"formattedTimestampFilename": {
"12hour": "MM-dd-yy-h-mm-ss-a",
"24hour": "MM-dd-yy-HH-mm-ss"
}
"12hour": "dd-MM-yy-h-mm-ss-a",
"24hour": "dd-MM-yy-HH-mm-ss"
},
"never": "Aldrig",
"inProgress": "Under behandling",
"invalidStartTime": "Ugyldig starttid",
"invalidEndTime": "Ugyldig sluttid"
},
"unit": {
"speed": {
@@ -82,14 +86,28 @@
"length": {
"feet": "fod",
"meters": "meter"
},
"data": {
"kbps": "kB/s",
"mbps": "MB/s",
"gbps": "GB/s",
"kbph": "kB/time",
"mbph": "MB/time",
"gbph": "GB/time"
}
},
"label": {
"back": "Gå tilbage"
"back": "Gå tilbage",
"hide": "Skjul {{item}}",
"show": "Vis {{item}}",
"ID": "ID",
"none": "Ingen",
"all": "Alle",
"other": "Andet"
},
"button": {
"apply": "Anvend",
"reset": "Reset",
"reset": "Nulstil",
"done": "Udført",
"enabled": "Aktiveret",
"enable": "Aktiver",
@@ -116,21 +134,22 @@
"no": "Nej",
"download": "Download",
"info": "Info",
"suspended": "Suspenderet",
"unsuspended": "Ophæv suspendering",
"suspended": "Sat på pause",
"unsuspended": "Genoptag",
"play": "Afspil",
"unselect": "Fravælg",
"export": "Eksporter",
"deleteNow": "Slet nu",
"next": "Næste"
"next": "Næste",
"continue": "Fortsæt"
},
"menu": {
"system": "System",
"systemMetrics": "System metrics",
"systemMetrics": "Systemstatistik",
"configuration": "Konfiguration",
"systemLogs": "System logs",
"systemLogs": "Systemlogfiler",
"settings": "Indstillinger",
"configurationEditor": "Konfiguratons Editor",
"configurationEditor": "Konfigurationsværktøj",
"languages": "Sprog",
"language": {
"en": "English (Engelsk)",
@@ -165,8 +184,16 @@
"th": "ไทย (Thai)",
"ca": "Català (Katalansk)",
"withSystem": {
"label": "Brug system indstillinger for sprog"
}
"label": "Brug systemindstillinger for sprog"
},
"ptBR": "Português brasileiro (Brasiliansk Portugisisk)",
"sr": "Српски (Serbisk)",
"sl": "Slovenščina (Slovensk)",
"lt": "Lietuvių (Litauisk)",
"bg": "Български (Bulgarsk)",
"gl": "Galego (Galisisk)",
"id": "Bahasa Indonesia (Indonesisk)",
"ur": "اردو (Urdu)"
},
"appearance": "Udseende",
"darkMode": {
@@ -185,7 +212,7 @@
"nord": "Nord",
"red": "Rød",
"highcontrast": "Høj Kontrast",
"default": "Default"
"default": "Standard"
},
"help": "Hjælp",
"documentation": {
@@ -202,19 +229,20 @@
"count_other": "{{count}} Kameraer"
}
},
"review": "Review",
"review": "Gennemse",
"explore": "Udforsk",
"export": "Eksporter",
"uiPlayground": "UI sandkasse",
"faceLibrary": "Face Library",
"faceLibrary": "Ansigtsarkiv",
"user": {
"title": "Bruger",
"account": "Konto",
"current": "Aktiv bruger: {{user}}",
"anonymous": "anonym",
"logout": "Logout",
"logout": "Log ud",
"setPassword": "Set Password"
}
},
"classification": "Kategorisering"
},
"toast": {
"copyUrlToClipboard": "Kopieret URL til klippebord.",
@@ -252,8 +280,20 @@
"notFound": {
"documentTitle": "Ikke fundet - Frigate",
"title": "404",
"desc": "Side ikke fundet"
"desc": "Siden blev ikke fundet"
},
"selectItem": "Vælg {{item}}",
"readTheDocumentation": "Læs dokumentationen"
"readTheDocumentation": "Læs dokumentationen",
"list": {
"two": "{{0}} og {{1}}",
"many": "{{items}}, og {{last}}",
"separatorWithSpace": ", "
},
"field": {
"optional": "Valgfrit",
"internalID": "Det interne ID som Frigate bruger i konfigurationen og databasen"
},
"information": {
"pixels": "{{area}}px"
}
}

View File

@@ -8,7 +8,8 @@
"passwordRequired": "Kodeord kræves",
"loginFailed": "Login fejlede",
"unknownError": "Ukendt fejl. Tjek logs.",
"rateLimit": "Grænsen for forespørgsler er overskredet. Prøv igen senere."
"rateLimit": "Grænsen for forespørgsler er overskredet. Prøv igen senere.",
"webUnknownError": "Ukendt fejl. Tjek konsollogs."
},
"firstTimeLogin": "Forsøger du at logge ind for første gang? Loginoplysningerne står i Frigate-loggene."
}

View File

@@ -14,8 +14,73 @@
"label": "Navn",
"placeholder": "Indtast et navn…",
"errorMessage": {
"mustLeastCharacters": "Kameragruppens navn skal være mindst 2 tegn."
"mustLeastCharacters": "Kameragruppens navn skal være mindst 2 tegn.",
"exists": "Kameragruppenavn findes allerede.",
"nameMustNotPeriod": "Kameragruppenavn må ikke indeholde en periode.",
"invalid": "Ugyldigt kamera gruppenavn."
}
},
"cameras": {
"label": "Kameraer",
"desc": "Vælg kameraer til denne gruppe."
},
"icon": "Ikon",
"success": "Kameragruppe ({{name}}) er blevet gemt.",
"camera": {
"birdseye": "Fugleøje",
"setting": {
"label": "Kamera Streaming Indstillinger",
"title": "{{cameraName}} Streaming Indstillinger",
"desc": "Skift de live streaming muligheder for denne kameragruppes dashboard. <em> Disse indstillinger er enheds- og browserspecifikke.</em>",
"audioIsAvailable": "Lyd er tilgængelig for denne stream",
"audioIsUnavailable": "Lyd er ikke tilgængelig for denne strøm",
"audio": {
"tips": {
"title": "Lyd skal komme fra dit kamera og konfigureret i go2rtc til denne stream."
}
},
"stream": "Stream",
"placeholder": "Vælg en stream",
"streamMethod": {
"label": "Streaming Metode",
"placeholder": "Vælg en streaming metode",
"method": {
"noStreaming": {
"label": "Ingen Streaming",
"desc": "Kamerabilleder vil kun opdatere én gang i minuttet og ingen live streaming vil forekomme."
},
"smartStreaming": {
"label": "Smart Streaming (anbefalet)",
"desc": "Smart streaming vil opdatere dit kamerabillede én gang i minuttet, når der ikke sker noget, for at spare båndbredde og ressourcer. Når der registreres aktivitet, skifter billedet problemfrit til en live stream."
},
"continuousStreaming": {
"label": "Kontinuerlig Streaming",
"desc": {
"title": "Kamerabillede vil altid være en live stream, når det er synligt på instrumentbrættet, selv om der ikke registreres nogen aktivitet.",
"warning": "Kontinuerlig streaming kan forårsage højt båndbreddeforbrug og ydelsesproblemer. Brug med omtanke."
}
}
}
},
"compatibilityMode": {
"label": "Kompatibilitetstilstand",
"desc": "Aktivér kun denne mulighed, hvis kameraets live stream viser farve artefakter og har en diagonal linje på højre side af billedet."
}
}
}
},
"debug": {
"options": {
"label": "Indstillinger",
"title": "Valgmuligheder",
"showOptions": "Vis muligheder",
"hideOptions": "Skjul muligheder"
},
"boundingBox": "Afgrænsningsfelt",
"timestamp": "Tidsstempel",
"zones": "Zoner",
"mask": "Maske",
"motion": "Bevægelse",
"regions": "Regioner"
}
}

View File

@@ -2,7 +2,7 @@
"iconPicker": {
"selectIcon": "Vælg et ikon",
"search": {
"placeholder": "Søg efter ikoner…"
"placeholder": "Søg efter et ikon…"
}
}
}

View File

@@ -11,5 +11,28 @@
"streamOffline": {
"title": "Stream offline",
"desc": "Der er ikke modtaget nogen frames på {{cameraName}}-<code>detect</code>-streamen, tjek fejlloggene."
},
"stats": {
"streamType": {
"title": "Stream type:",
"short": "Type"
},
"bandwidth": {
"title": "Bandbredde:",
"short": "Bandbredde"
},
"latency": {
"title": "Latenstid:",
"value": "{{seconds}} sekunder",
"short": {
"title": "Latenstid",
"value": "{{seconds}} sek"
}
},
"droppedFrames": {
"short": {
"title": "Tabt"
}
}
}
}

View File

@@ -14,5 +14,107 @@
"sink": "Håndvask",
"toothbrush": "Tandbørste",
"scissors": "Saks",
"clock": "Ur"
"clock": "Ur",
"fire_hydrant": "Brandhane",
"street_sign": "Gadeskilt",
"stop_sign": "Stopskilt",
"parking_meter": "Parkeringsautomat",
"bench": "Bænk",
"bird": "Fugl",
"cat": "Kat",
"dog": "Hund",
"horse": "Hest",
"sheep": "Får",
"cow": "Ko",
"elephant": "Elefant",
"bear": "Bjørn",
"zebra": "Zebra",
"giraffe": "Giraf",
"hat": "Hat",
"backpack": "Rygsæk",
"umbrella": "Paraply",
"shoe": "Sko",
"eye_glasses": "Briller",
"handbag": "Håndtaske",
"tie": "Slips",
"suitcase": "Kuffert",
"frisbee": "Frisbee",
"skis": "Ski",
"snowboard": "Snowboard",
"sports_ball": "Bold",
"kite": "Drage",
"baseball_bat": "Baseball Bat",
"baseball_glove": "Baseball hanske",
"surfboard": "Surfbræt",
"tennis_racket": "Tennis ketcher",
"bottle": "Flaske",
"plate": "Tallerken",
"wine_glass": "Vinglas",
"cup": "Kop",
"fork": "Gaffel",
"knife": "Kniv",
"spoon": "Ske",
"bowl": "Skål",
"banana": "Banan",
"apple": "Æble",
"sandwich": "Sandwich",
"orange": "Appelsin",
"broccoli": "Broccoli",
"carrot": "Gulerod",
"hot_dog": "Hotdog",
"pizza": "Pizza",
"donut": "Donut",
"cake": "Kage",
"chair": "Stol",
"couch": "Sofa",
"potted_plant": "Potteplante",
"bed": "Seng",
"mirror": "Spejl",
"dining_table": "Spisebord",
"window": "Vindue",
"desk": "Bord",
"toilet": "Toilet",
"tv": "Fjernsyn",
"laptop": "Bærebar computer",
"mouse": "Mus",
"remote": "Fjernbetjening",
"keyboard": "Tastatur",
"cell_phone": "Mobiltelefon",
"microwave": "Mikrobølgeovn",
"oven": "Ovn",
"toaster": "Brødrister",
"refrigerator": "Køleskab",
"blender": "Mixer",
"book": "Bog",
"vase": "Vase",
"teddy_bear": "Bamse",
"hair_dryer": "Føntørrer",
"hair_brush": "Hårbørste",
"squirrel": "Egern",
"deer": "Hjort",
"animal": "Dyr",
"bark": "Gø",
"fox": "Ræv",
"goat": "Gæd",
"rabbit": "Kanin",
"raccoon": "Vaskebjørn",
"robot_lawnmower": "Robotplæneklipper",
"waste_bin": "Affaldsspand",
"on_demand": "Manuel optagelse",
"face": "Ansigt",
"license_plate": "Nummerplade",
"package": "Pakke",
"bbq_grill": "Grill",
"amazon": "Amazon levering",
"usps": "USPS levering",
"ups": "UPS levering",
"fedex": "FedEx levering",
"dhl": "DHL levering",
"an_post": "An Post levering",
"purolator": "Purolator levering",
"postnl": "PostNL levering",
"nzpost": "NZPost levering",
"postnord": "PostNord levering",
"gls": "GLS levering",
"dpd": "DPD levering"
}

View File

@@ -1,18 +1,187 @@
{
"documentTitle": "Klassifikationsmodeller",
"documentTitle": "Kategoriseringsmodeller - Frigate",
"details": {
"scoreInfo": "Scoren repræsenterer den gennemsnitlige klassifikationssikkerhed på tværs af alle registreringer af dette objekt.",
"unknown": "Ukendt"
"scoreInfo": "Scoren viser den gennemsnitlige sikkerhed for kategoriseringen på tværs af alle registreringer af dette objekt.",
"unknown": "Ukendt",
"none": "Ingen"
},
"description": {
"invalidName": "Ugyldigt navn. Navne må kun indeholde bogstaver, tal, mellemrum, apostroffer, understregninger og bindestreger."
},
"button": {
"deleteClassificationAttempts": "Slet klassifikationsbilleder",
"deleteClassificationAttempts": "Slet kategoriseringsbilleder",
"renameCategory": "Omdøb klasse",
"deleteCategory": "Slet klasse",
"deleteImages": "Slet billeder",
"trainModel": "Træn model",
"addClassification": "Tilføj klassifikation"
"addClassification": "Tilføj Kategori",
"deleteModels": "Slet modeller",
"editModel": "Rediger model"
},
"tooltip": {
"trainingInProgress": "Modellen er ved at blive trænet",
"noNewImages": "Der er ingen nye billeder at lære af. Kategorisér flere billeder i datasættet først.",
"noChanges": "Ingen ændringer i datasættet siden sidste træning.",
"modelNotReady": "Modellen er ikke klar til træning"
},
"toast": {
"success": {
"deletedCategory": "Slettet kategori",
"deletedImage": "Slettede billeder",
"deletedModel_one": "{{count}} model er nu slettet",
"deletedModel_other": "{{count}} modeller er nu slettet",
"categorizedImage": "Billedet er nu kategoriseret",
"trainedModel": "Modellen er klar.",
"trainingModel": "Modeltræning er started.",
"updatedModel": "Modellens indstillinger er opdateret",
"renamedCategory": "Kategorien er omdøbt til {{name}}"
},
"error": {
"deleteImageFailed": "Fejl under sletning: {{errorMessage}}",
"deleteCategoryFailed": "Sletning af kategori fejlede: {{errorMessage}}",
"deleteModelFailed": "Sletning af model fejlede: {{errorMessage}}",
"categorizeFailed": "Kategorisering af billedet fejlede: {{errorMessage}}",
"trainingFailed": "Træning af modellen fejlede. Check Frigate loggen.",
"trainingFailedToStart": "Opstart af modeltræning fejlede: {{errorMessage}}",
"updateModelFailed": "Ændring af modellen fejlede: {{errorMessage}}",
"renameCategoryFailed": "Kan ikke omdøbe kategorien: {{errorMessage}}"
}
},
"deleteCategory": {
"title": "Slet kategori",
"desc": "Er du sikker på at du vil slette kategorien {{name}}? Dette kan ikke fortrydes og sletter alle tilhørende billeder samt træning af modellen.",
"minClassesTitle": "Kan ikke slette Kategori",
"minClassesDesc": "Modellen skal have mindst 2 kategorier. Tilføj en kategori, før du sletter denne."
},
"deleteModel": {
"title": "Slet Kategoriseringsmodellen",
"desc_one": "Er du sikker på, at du vil slette {{count}} model? Dette vil permanent slette alle tilknyttede data, inkl. billeder og træningsdata. Denne handling kan ikke fortrydes.",
"desc_other": "Er du sikker på, at du vil slette {{count}} modeller? Dette vil permanent slette alle tilknyttede data, inkl. billeder og træningsdata. Denne handling kan ikke fortrydes.",
"single": "Er du sikker på, at du vil slette {{name}}? Dette vil permanent slette alle tilknyttede data, inklusive billeder og træningsdata. Denne handling kan ikke fortrydes."
},
"train": {
"title": "Nyeste kategorier",
"titleShort": "Nyeste",
"aria": "Vælg de nyeste kategorier"
},
"categories": "Kategorier",
"createCategory": {
"new": "Opret en ny kategori"
},
"categorizeImageAs": "Kategoriser billedet som:",
"categorizeImage": "Kategoriser billedet",
"menu": {
"objects": "Genstande",
"states": "Statestik"
},
"noModels": {
"object": {
"title": "Ingen kategoriseringsmodeller for genstande",
"description": "Opret en model, der kan kategorisere genstande.",
"buttonText": "Opret Genstands Model"
},
"state": {
"title": "Ingen modeller til genstandstilstande",
"description": "Opret en brugerdefineret model til at overvåge og kategorisere tilstandsændringer i specifikke kamerområder.",
"buttonText": "Opret tilstandsmodel"
}
},
"wizard": {
"step1": {
"type": "Type",
"typeState": "Tilstand",
"typeObject": "Genstand",
"objectLabel": "Genstands mærkat",
"objectLabelPlaceholder": "Vælg genstands type...",
"classificationType": "Kategoriseringstype",
"classificationTypeTip": "Udforsk kategoriseringstyper",
"errors": {
"nameLength": "Modellens navn må højst være 64 tegn",
"nameOnlyNumbers": "Modellens navn skal indeholde bogstaver",
"classRequired": "Der mangler en kategori",
"classesUnique": "Kategorinavne skal være unikke",
"noneNotAllowed": "Kategorinavnet 'none' er ikke tilladt",
"stateRequiresTwoClasses": "Tilstandsmodeller har brug for 2 kategorier",
"objectLabelRequired": "Vælg genstands mærkat",
"objectTypeRequired": "Vælg kategoriseringstype",
"nameRequired": "Modelnavn er påkrævet"
},
"description": "Tilstandsmodeller overvåger faste kameraområder for ændringer (f.eks. dør åben/lukket). Genstandsmodeller tilføjer kategoriseringer til detekterede genstande (f.eks. kendte dyr, leveringspersoner osv.).",
"name": "Navn",
"namePlaceholder": "Skriv modelnavn...",
"classificationTypeDesc": "Underetiketter tilføjer ekstra tekst til genstandens etiket (f.eks. 'Person: UPS'). Attributter er søgbare metadata, der opbevares separat i genstandens metadata.",
"classificationSubLabel": "Underetiketter",
"classificationAttribute": "Attribut",
"classes": "Kategori",
"states": "Tilstande",
"classesTip": "Lær om kategorier",
"classesStateDesc": "Definér de forskellige tilstande, dit kameraområde kan være i. For eksempel: 'åben' og 'lukket' for en garageport.",
"classesObjectDesc": "Definér de forskellige kategorier, som detekterede genstande skal kategoriseres i. For eksempel: 'leveringsperson', 'beboer', 'fremmed' til kategorisering af personer.",
"classPlaceholder": "Skriv kategorinavn..."
},
"step2": {
"description": "Vælg kameraer, og definer det område, der skal overvåges for hvert kamera. Modellen vil kategorisere tilstanden i disse områder.",
"cameras": "Kameraer",
"selectCamera": "Vælg Kamera",
"noCameras": "Klik + for at tilføje kamera",
"selectCameraPrompt": "Vælg et kamera fra listen for at definere dets overvågningsområde"
},
"step3": {
"selectImagesPrompt": "Vælg alle billeder med: {{className}}",
"selectImagesDescription": "Klik på billederne for at vælge dem. Klik på Fortsæt, når du er færdig med denne kategori.",
"allImagesRequired_one": "Venligst kategoriser alle billeder. {{count}} billede tilbage.",
"allImagesRequired_other": "Venligst kategoriser alle billeder. {{count}} billeder tilbage.",
"generating": {
"title": "Genererer testbilleder",
"description": "Frigate henter repræsentative billeder fra dine optagelser. Det kan tage et øjeblik..."
},
"training": {
"title": "Træningsmodel",
"description": "Din model trænes i baggrunden. Luk denne dialog, og din model vil begynde at køre, så snart træningen er færdig."
},
"retryGenerate": "Forsøg at generere igen",
"noImages": "Ingen prøvebilleder blev genereret",
"classifying": "Kategoriserer og træner...",
"trainingStarted": "Træningen er startet",
"modelCreated": "Model er oprettet. Brug visningen af nylige kategoriseringer til at tilføje billeder for de manglende tilstande, og træn modellen derefter.",
"errors": {
"noCameras": "Ingen kamera konfigureret",
"noObjectLabel": "Ingen genstandsmærkat valgt",
"generateFailed": "Kunne ikke generere eksempler: {{error}}",
"generationFailed": "Der opstod en fejl under genereringen. Prøv igen.",
"classifyFailed": "Kunne ikke kategorisere billederne: {{error}}"
},
"generateSuccess": "Eksempelbilleder er nu genereret",
"missingStatesWarning": {
"title": "Manglende tilstandseksempler",
"description": "Det anbefales at vælge eksempler for alle tilstande for at opnå de bedste resultater. Du kan fortsætte uden at vælge alle tilstande, men modellen bliver ikke trænet, før alle tilstande har billeder. Efter du fortsætter, kan du bruge visningen Seneste kategoriseringer til at kategorisere billeder for de manglende tilstande og derefter træne modellen."
}
},
"title": "Opret ny kategorisering",
"steps": {
"nameAndDefine": "Navn og definition",
"stateArea": "Tilstandsområde",
"chooseExamples": "Vælg Eksempler"
}
},
"edit": {
"title": "Rediger kategoriseringsmodel",
"descriptionState": "Rediger kategorierne for denne model til genstandstilstande. Ændringer kræver, at modellen trænes igen.",
"descriptionObject": "Rediger genstandstypen og kategoriseringstypen for denne genstandskategoriseringsmodel.",
"stateClassesInfo": "Bemærk: Ændring af tilstandskategorier kræver, at modellen trænes igen med de opdaterede kategorier."
},
"deleteDatasetImages": {
"title": "Slet billeder i datasættet",
"desc_one": "Er du sikker på, at du vil slette {{count}} billede fra {{dataset}}? Denne handling kan ikke fortrydes og kræver, at modellen trænes igen.",
"desc_other": "Er du sikker på, at du vil slette {{count}} billeder fra {{dataset}}? Denne handling kan ikke fortrydes og kræver, at modellen trænes igen."
},
"deleteTrainImages": {
"title": "Slet trænings billeder",
"desc_one": "Er du sikker på, at du vil slette {{count}} billede? Denne handling kan ikke fortrydes.",
"desc_other": "Er du sikker på, at du vil slette {{count}} billeder? Denne handling kan ikke fortrydes."
},
"renameCategory": {
"title": "Omdøb Kategori",
"desc": "Indtast et nyt navn til {{name}}. Modellen skal trænes igen, før navneændringen træder i kraft."
}
}

View File

@@ -3,8 +3,16 @@
"copyConfig": "Kopiér konfiguration",
"saveAndRestart": "Gem & Genstart",
"saveOnly": "Kun gem",
"configEditor": "Konfigurationseditor",
"safeConfigEditor": "Konfigurationseditor (Sikker tilstand)",
"safeModeDescription": "Frigate er i sikker tilstand på grund af en fejl ved validering af konfigurationen.",
"confirm": "Afslut uden at gemme?"
"configEditor": "Konfigurationsværktøj",
"safeConfigEditor": "Konfigurationsværktøj (Sikker tilstand)",
"safeModeDescription": "Frigate er i sikker tilstand på grund af valideringsfejl af konfigurationen.",
"confirm": "Afslut uden at gemme?",
"toast": {
"success": {
"copyToClipboard": "Konfigurationen er kopieret."
},
"error": {
"savingError": "Kan ikke gemme konfigurationen"
}
}
}

View File

@@ -11,6 +11,21 @@
"empty": {
"alert": "Der er ingen advarsler at gennemgå",
"detection": "Der er ingen registreringer at gennemgå",
"motion": "Ingen bevægelsesdata fundet"
"motion": "Ingen bevægelsesdata fundet",
"recordingsDisabled": {
"title": "Optagelser skal være aktiveret"
}
},
"documentTitle": "Gennemse - Frigate",
"recordings": {
"documentTitle": "Optagelser - Frigate"
},
"calendarFilter": {
"last24Hours": "Sidste 24 timer"
},
"markAsReviewed": "Marker som gennemset",
"markTheseItemsAsReviewed": "Marker disse som gennemset",
"detail": {
"aria": "Skift til detaljevisning"
}
}

View File

@@ -8,5 +8,11 @@
"desc": "Indtast et nyt navn for denne eksport."
},
"noExports": "Ingen eksporter fundet",
"deleteExport": "Slet eksport"
"deleteExport": "Slet eksport",
"tooltip": {
"shareExport": "Del eksport",
"downloadVideo": "Download video",
"editName": "Rediger navn",
"deleteExport": "Slette eksport"
}
}

View File

@@ -15,5 +15,8 @@
"uploadFaceImage": {
"title": "Upload ansigtsbillede",
"desc": "Upload et billede for at scanne efter ansigter og inkludere det for {{pageToggle}}"
},
"train": {
"titleShort": "Nyeste"
}
}

View File

@@ -8,5 +8,6 @@
"filterInformation": "Filter information",
"filterActive": "Filtre aktiv",
"clear": "Ryd søgning"
}
},
"trackedObjectId": "Sporet genstands-ID"
}

View File

@@ -84,7 +84,8 @@
},
"inProgress": "Im Gange",
"invalidStartTime": "Ungültige Startzeit",
"invalidEndTime": "Ungültige Endzeit"
"invalidEndTime": "Ungültige Endzeit",
"never": "Nie"
},
"button": {
"save": "Speichern",
@@ -130,7 +131,8 @@
"show": "Zeige {{item}}",
"ID": "ID",
"none": "Nichts",
"all": "Alle"
"all": "Alle",
"other": "andere"
},
"menu": {
"configurationEditor": "Konfigurationseditor",

View File

@@ -1,5 +1,5 @@
{
"documentTitle": "Klassifizierungsmodelle - Fregatte",
"documentTitle": "Klassifikationsmodelle - Frigate",
"details": {
"scoreInfo": "Die Punktzahl gibt die durchschnittliche Konfidenz aller Erkennungen dieses Objekts wieder.",
"none": "Keiner",
@@ -11,7 +11,7 @@
"deleteCategory": "Klasse löschen",
"deleteImages": "Bilder löschen",
"trainModel": "Modell trainieren",
"addClassification": "Klassifizierung hinzufügen",
"addClassification": "Klassifikationsmodell hinzufügen",
"deleteModels": "Modell löschen",
"editModel": "Modell bearbeiten"
},
@@ -58,7 +58,7 @@
},
"edit": {
"title": "Klassifikationsmodell bearbeiten",
"descriptionState": "Bearbeite die Klassen für dieses Zustandsklassifikationsmodell. Änderungen erfordern erneutes Trainieren des Modells.",
"descriptionState": "Bearbeite die Klassen für dieses Zustandsklassifikationsmodell. Änderungen erfordern ein erneutes Trainieren des Modells.",
"descriptionObject": "Bearbeite den Objekttyp und Klassifizierungstyp für dieses Objektklassifikationsmodell.",
"stateClassesInfo": "Hinweis: Die Änderung der Statusklassen erfordert ein erneutes Trainieren des Modells mit den aktualisierten Klassen."
},
@@ -97,49 +97,49 @@
"noModels": {
"object": {
"title": "Keine Objektklassifikationsmodelle",
"description": "Erstelle ein benutzerdefiniertes Modell, um erkannte Objekte zu klassifizieren.",
"buttonText": "Objektmodell erstellen"
"description": "Erstelle ein benutzerdefiniertes Objektklassifikationsmodell, um erkannte Objekte zu klassifizieren.",
"buttonText": "Objektklassifikationsmodell erstellen"
},
"state": {
"title": "Keine Statusklassifizierungsmodelle",
"description": "Erstellen Sie ein benutzerdefiniertes Modell, um Zustandsänderungen in bestimmten Kamerabereichen zu überwachen und zu klassifizieren.",
"buttonText": "Zustandsmodell erstellen"
"title": "Keine Zustandsklassifikationsmodelle",
"description": "Erstellen Sie ein benutzerdefiniertes Zustandsklassifikationsmodell, um Zustandsänderungen in bestimmten Kamerabereichen zu überwachen und zu klassifizieren.",
"buttonText": "Zustandsklassifikationsmodell erstellen"
}
},
"wizard": {
"title": "Neue Klassifizierung erstellen",
"title": "Neues Klassifikationsmodell erstellen",
"steps": {
"nameAndDefine": "Benennen und definieren",
"stateArea": "Gebiet",
"stateArea": "Überwachungsbereich",
"chooseExamples": "Beispiel auswählen"
},
"step1": {
"description": "Zustandsmodelle überwachen feste Kamerabereiche auf Veränderungen (z. B. Tür offen/geschlossen). Objektmodelle fügen den erkannten Objekten Klassifizierungen hinzu (z. B. bekannte Tiere, Lieferanten usw.).",
"description": "Zustandsmodelle überwachen fest definierte Kamerabereiche auf Veränderungen (z. B. Tür offen/geschlossen). Objektmodelle klassifizieren erkannte Objekte genauer (z. B. in bekannte Tiere, Lieferanten usw.).",
"name": "Name",
"namePlaceholder": "Eingeben Modell Name...",
"namePlaceholder": "Modellname eingeben ...",
"type": "Typ",
"typeState": "Zustand",
"typeObject": "Objekt",
"objectLabel": "Objekt Bezeichnung",
"objectLabel": "Objektbezeichnung",
"objectLabelPlaceholder": "Auswahl Objekt Typ...",
"classificationType": "Klassifizierungstyp",
"classificationTypeTip": "Etwas über Klassifizierungstyp lernen",
"classificationTypeDesc": "Unterbezeichnungen fügen dem Objektnamen zusätzlichen Text hinzu (z. B. „Person: UPS“). Attribute sind durchsuchbare Metadaten, die separat in den Objektmetadaten gespeichert sind.",
"classificationSubLabel": "Unterlabel",
"classificationAttribute": "Merkmal",
"classes": "Klasse",
"states": "Gebiet",
"classesTip": "Über Klassen lernen",
"classificationAttribute": "Attribut",
"classes": "Klassen",
"states": "Zustände",
"classesTip": "Mehr über Klassen erfahren",
"classesStateDesc": "Definieren Sie die verschiedenen Zustände, in denen sich Ihr Kamerabereich befinden kann. Beispiel: „offen” und „geschlossen” für ein Garagentor.",
"classesObjectDesc": "Definieren Sie die verschiedenen Kategorien, in die erkannte Objekte klassifiziert werden sollen. Beispiel: „Lieferant“, „Bewohner“, „Fremder“ für die Klassifizierung von Personen.",
"classPlaceholder": "Klassenbezeichnung eingeben...",
"errors": {
"nameRequired": "Modellname ist erforderlich",
"nameRequired": "Der Modellname ist erforderlich",
"nameLength": "Der Modellname darf maximal 64 Zeichen lang sein",
"nameOnlyNumbers": "Der Modellname darf nicht nur aus Zahlen bestehen",
"classRequired": "Mindestens eine Klasse ist erforderlich",
"classesUnique": "Klassenname muss eindeutig sein",
"stateRequiresTwoClasses": "Gebietsmodelle erfordern mindestens zwei Klassen",
"classesUnique": "Der Klassenname muss eindeutig sein",
"stateRequiresTwoClasses": "Zustandsmodelle erfordern mindestens zwei Klassen",
"objectLabelRequired": "Bitte wähle eine Objektbeschriftung",
"objectTypeRequired": "Bitte wählen Sie einen Klassifizierungstyp aus",
"noneNotAllowed": "Die Klasse „none“ ist nicht zulässig"
@@ -149,12 +149,12 @@
"description": "Wählen Sie Kameras aus und legen Sie für jede Kamera den zu überwachenden Bereich fest. Das Modell klassifiziert den Zustand dieser Bereiche.",
"cameras": "Kameras",
"selectCamera": "Kamera auswählen",
"noCameras": "Klick + zum hinzufügen der Kameras",
"noCameras": "Klicke + zum Hinzufügen von Kameras",
"selectCameraPrompt": "Wählen Sie eine Kamera aus der Liste aus, um ihren Überwachungsbereich festzulegen"
},
"step3": {
"selectImagesPrompt": "Wählen sie alle Bilder mit: {{className}}",
"selectImagesDescription": "Klicken Sie auf die Bilder, um sie auszuwählen. Klicken Sie auf „Weiter“, wenn Sie mit diesem Kurs fertig sind.",
"selectImagesPrompt": "Wählen Sie alle Bilder mit: {{className}}",
"selectImagesDescription": "Klicken Sie auf die Bilder, um sie auszuwählen. Klicken Sie auf „Weiter“, wenn Sie mit dieser Klasse fertig sind.",
"allImagesRequired_one": "Bitte klassifizieren Sie alle Bilder. {{count}} Bild verbleibend.",
"allImagesRequired_other": "Bitte klassifizieren Sie alle Bilder. {{count}} Bilder verbleiben.",
"generating": {
@@ -162,7 +162,7 @@
"description": "Frigate extrahiert repräsentative Bilder aus Ihren Aufnahmen. Dies kann einen Moment dauern..."
},
"training": {
"title": "Trainingsmodell",
"title": "Trainiere Modell",
"description": "Ihr Modell wird im Hintergrund trainiert. Schließen Sie diesen Dialog, und Ihr Modell wird ausgeführt, sobald das Training abgeschlossen ist."
},
"retryGenerate": "Generierung wiederholen",
@@ -177,7 +177,7 @@
"classifyFailed": "Bilder konnten nicht klassifiziert werden: {{error}}"
},
"generateSuccess": "Erfolgreich generierte Beispielbilder",
"modelCreated": "Modell erfolgreich erstellt. Verwenden Sie die Ansicht „Aktuelle Klassifizierungen“, um Bilder für fehlende Zustände hinzuzufügen, und trainieren Sie dann das Modell.",
"modelCreated": "Modell erfolgreich erstellt. Verwenden Sie die Ansicht „Aktuelle Klassifizierungen“, um Bilder für fehlende Zustände hinzuzufügen und trainieren Sie dann das Modell erneut.",
"missingStatesWarning": {
"title": "Beispiele für fehlende Zustände",
"description": "Es wird empfohlen für alle Zustände Beispiele auszuwählen. Das Modell wird erst trainiert, wenn für alle Zustände Bilder vorhanden sind. Fahren Sie fort und verwenden Sie die Ansicht „Aktuelle Klassifizierungen“, um Bilder für die fehlenden Zustände zu klassifizieren. Trainieren Sie anschließend das Modell."

View File

@@ -8,7 +8,11 @@
"empty": {
"alert": "Es gibt keine zu prüfenden Alarme",
"detection": "Es gibt keine zu prüfenden Erkennungen",
"motion": "Keine Bewegungsdaten gefunden"
"motion": "Keine Bewegungsdaten gefunden",
"recordingsDisabled": {
"title": "Aufzeichnungen müssen aktiviert sein",
"description": "Überprüfungselemente können nur für eine Kamera erstellt werden, wenn Aufzeichnungen für diese Kamera aktiviert sind."
}
},
"timeline": "Zeitleiste",
"timeline.aria": "Zeitleiste auswählen",

View File

@@ -79,7 +79,10 @@
"title": "Attribute bearbeiten",
"desc": "Wählen Sie Klassifizierungsattribute für dieses {{label}} aus"
},
"attributes": "Klassifizierungsattribute"
"attributes": "Klassifizierungsattribute",
"title": {
"label": "Titel"
}
},
"documentTitle": "Erkunde - Frigate",
"generativeAI": "Generative KI",

View File

@@ -1,7 +1,7 @@
{
"description": {
"placeholder": "Gib einen Name für diese Kollektion ein",
"addFace": "Füge der Gesichtsbibliothek eine neue Sammlung hinzu, indem ein Bild hinzufügst.",
"addFace": "Füge der Gesichtsbibliothek eine neue Sammlung hinzu, indem du ein Bild hochlädst.",
"invalidName": "Ungültiger Name. Namen dürfen nur Buchstaben, Zahlen, Leerzeichen, Apostrophe, Unterstriche und Bindestriche enthalten."
},
"details": {

View File

@@ -178,6 +178,16 @@
"restricted": {
"title": "Keine Kamera verfügbar",
"description": "Sie haben keine Berechtigung, Kameras in dieser Gruppe anzuzeigen."
},
"default": {
"title": "Keine Kameras konfiguriert",
"description": "Zum Start eine Kamera mit Frigate verbinden.",
"buttonText": "Kamera hinzufügen"
},
"group": {
"title": "Keine Kameras in der Gruppe",
"description": "Diese Kameragruppe hat keine zugewiesenen oder aktiven Kameras.",
"buttonText": "Gruppen verwalten"
}
},
"snapshot": {

View File

@@ -49,7 +49,7 @@
"desc": "Standardmäßig werden die letzten Warnmeldungen auf dem Live-Dashboard als kurze Videoschleifen abgespielt. Deaktiviere diese Option, um nur ein statisches Bild der letzten Warnungen auf diesem Gerät/Browser anzuzeigen."
},
"automaticLiveView": {
"desc": "Wechsle automatisch zur Live Ansicht der Kamera, wenn einen Aktivität erkannt wurde. Wenn du diese Option deaktivierst, werden die statischen Kamerabilder auf der Liveübersicht nur einmal pro Minute aktualisiert.",
"desc": "Zeigt automatisch das Live-Bild einer Kamera an, wenn eine Aktivität erkannt wird. Ist diese Option deaktiviert, werden Kamerabilder im Live-Dashboard nur einmal pro Minute aktualisiert.",
"label": "Automatische Live Ansicht"
},
"displayCameraNames": {
@@ -1265,11 +1265,11 @@
"title": "Kamera-Einstellungen überprüfen",
"object_descriptions": {
"title": "Generative KI Objektbeschreibungen",
"desc": "Aktiviere/deaktiviere vorübergehend die Objektbeschreibungen durch Generative KI für diese Kamera. Wenn diese Option deaktiviert ist, werden keine KI-generierten Beschreibungen für verfolgte Objekte dieser Kamera erstellt."
"desc": "Aktiviere/deaktiviere vorübergehend die Objektbeschreibungen durch generative KI für diese Kamera. Wenn diese Option deaktiviert ist, werden keine KI-generierten Beschreibungen für verfolgte Objekte dieser Kamera erstellt."
},
"review_descriptions": {
"title": "Generative KI Review Beschreibungen",
"desc": "Generative KI Review Beschreibungen für diese Kamera vorübergehend aktivieren/deaktivieren. Wenn diese Option deaktiviert ist, werden für die Review Elemente dieser Kamera keine KI-generierten Beschreibungen angefordert."
"desc": "Aktivieren/deaktivieren Sie vorübergehend die generativen KI-Überprüfungsbeschreibungen für diese Kamera, bis Frigate neu gestartet wird. Wenn diese Option deaktiviert ist, werden für Überprüfungselemente auf dieser Kamera keine KI-generierten Beschreibungen angefordert."
},
"review": {
"title": "Überprüfung",

View File

@@ -50,7 +50,14 @@
"otherProcesses": {
"title": "Andere Prozesse",
"processCpuUsage": "CPU Auslastung für Prozess",
"processMemoryUsage": "Prozessspeicherauslastung"
"processMemoryUsage": "Prozessspeicherauslastung",
"series": {
"go2rtc": "go2rtc",
"recording": "Aufnahme",
"audio_detector": "Geräuscherkennung",
"review_segment": "Überprüfungsteil",
"embeddings": "Einbettungen"
}
}
},
"documentTitle": {

View File

@@ -75,7 +75,8 @@
"s": "{{time}}δ",
"inProgress": "Σε εξέλιξη",
"invalidStartTime": "Μη έγκυρη ώρα έναρξης",
"invalidEndTime": "Μη έγκυρη ώρα λήξης"
"invalidEndTime": "Μη έγκυρη ώρα λήξης",
"never": "Ποτέ"
},
"menu": {
"live": {

View File

@@ -1 +1,14 @@
{}
{
"documentTitle": "Μοντέλα Ταξινόμησης - Frigate",
"details": {
"scoreInfo": "Η βαθμολογία αντιπροσωπεύει την κατά μέσο όρο ταξινομική εμπιστοσύνη μεταξύ όλων των ανιχνεύσεων αυτού του αντικειμένου.",
"none": "Καμία",
"unknown": "Άγνωστο"
},
"button": {
"deleteClassificationAttempts": "Διαγραφή Εικόνων Ταξινόμησης",
"deleteImages": "Διαγραφή Εικόνων",
"trainModel": "Εκπαίδευση Μοντέλου",
"addClassification": "Προσθήκη Ταξινόμησης"
}
}

Some files were not shown because too many files have changed in this diff Show More