2025-03-16 18:36:20 +03:00
{
"time" : {
"untilForTime" : "Until {{time}}" ,
"untilForRestart" : "Until Frigate restarts." ,
"untilRestart" : "Until restart" ,
2026-01-18 16:36:27 +03:00
"never" : "Never" ,
2025-03-16 18:36:20 +03:00
"ago" : "{{timeAgo}} ago" ,
"justNow" : "Just now" ,
"today" : "Today" ,
"yesterday" : "Yesterday" ,
"last7" : "Last 7 days" ,
"last14" : "Last 14 days" ,
"last30" : "Last 30 days" ,
"thisWeek" : "This Week" ,
"lastWeek" : "Last Week" ,
"thisMonth" : "This Month" ,
"lastMonth" : "Last Month" ,
"5minutes" : "5 minutes" ,
"10minutes" : "10 minutes" ,
"30minutes" : "30 minutes" ,
"1hour" : "1 hour" ,
"12hours" : "12 hours" ,
"24hours" : "24 hours" ,
"pm" : "pm" ,
"am" : "am" ,
"yr" : "{{time}}yr" ,
2025-04-13 01:18:35 +03:00
"year_one" : "{{time}} year" ,
"year_other" : "{{time}} years" ,
2025-03-16 18:36:20 +03:00
"mo" : "{{time}}mo" ,
2025-04-13 01:18:35 +03:00
"month_one" : "{{time}} month" ,
"month_other" : "{{time}} months" ,
2025-03-16 18:36:20 +03:00
"d" : "{{time}}d" ,
2025-04-13 01:18:35 +03:00
"day_one" : "{{time}} day" ,
"day_other" : "{{time}} days" ,
2025-03-16 18:36:20 +03:00
"h" : "{{time}}h" ,
2025-04-13 01:18:35 +03:00
"hour_one" : "{{time}} hour" ,
"hour_other" : "{{time}} hours" ,
2025-03-16 18:36:20 +03:00
"m" : "{{time}}m" ,
2025-04-13 01:18:35 +03:00
"minute_one" : "{{time}} minute" ,
"minute_other" : "{{time}} minutes" ,
2025-03-19 19:22:02 +03:00
"s" : "{{time}}s" ,
2025-04-13 01:18:35 +03:00
"second_one" : "{{time}} second" ,
"second_other" : "{{time}} seconds" ,
2025-03-17 15:26:01 +03:00
"formattedTimestamp" : {
2025-04-23 00:50:21 +03:00
"12hour" : "MMM d, h:mm:ss aaa" ,
"24hour" : "MMM d, HH:mm:ss"
2025-03-17 15:26:01 +03:00
} ,
"formattedTimestamp2" : {
2025-04-23 00:50:21 +03:00
"12hour" : "MM/dd h:mm:ssa" ,
"24hour" : "d MMM HH:mm:ss"
2025-03-17 15:26:01 +03:00
} ,
2025-04-23 00:50:21 +03:00
"formattedTimestampHourMinute" : {
"12hour" : "h:mm aaa" ,
"24hour" : "HH:mm"
2025-03-17 15:26:01 +03:00
} ,
2025-04-23 00:50:21 +03:00
"formattedTimestampHourMinuteSecond" : {
"12hour" : "h:mm:ss aaa" ,
"24hour" : "HH:mm:ss"
2025-03-17 15:26:01 +03:00
} ,
2025-04-23 00:50:21 +03:00
"formattedTimestampMonthDayHourMinute" : {
"12hour" : "MMM d, h:mm aaa" ,
"24hour" : "MMM d, HH:mm"
} ,
2025-05-11 21:03:53 +03:00
"formattedTimestampMonthDayYear" : {
"12hour" : "MMM d, yyyy" ,
"24hour" : "MMM d, yyyy"
} ,
2025-04-23 00:50:21 +03:00
"formattedTimestampMonthDayYearHourMinute" : {
"12hour" : "MMM d yyyy, h:mm aaa" ,
"24hour" : "MMM d yyyy, HH:mm"
} ,
"formattedTimestampMonthDay" : "MMM d" ,
"formattedTimestampFilename" : {
"12hour" : "MM-dd-yy-h-mm-ss-a" ,
"24hour" : "MM-dd-yy-HH-mm-ss"
2025-11-12 02:23:30 +03:00
} ,
"inProgress" : "In progress" ,
"invalidStartTime" : "Invalid start time" ,
"invalidEndTime" : "Invalid end time"
2025-03-16 18:36:20 +03:00
} ,
"unit" : {
"speed" : {
"mph" : "mph" ,
"kph" : "kph"
2025-05-20 00:45:02 +03:00
} ,
"length" : {
"feet" : "feet" ,
"meters" : "meters"
2025-10-13 19:52:08 +03:00
} ,
"data" : {
"kbps" : "kB/s" ,
"mbps" : "MB/s" ,
"gbps" : "GB/s" ,
"kbph" : "kB/hour" ,
"mbph" : "MB/hour" ,
"gbph" : "GB/hour"
2025-03-16 18:36:20 +03:00
}
} ,
"label" : {
2025-10-27 22:58:31 +03:00
"back" : "Go back" ,
"hide" : "Hide {{item}}" ,
"show" : "Show {{item}}" ,
2025-11-08 22:26:30 +03:00
"ID" : "ID" ,
"none" : "None" ,
2026-01-09 00:28:18 +03:00
"all" : "All" ,
"other" : "Other"
2025-10-27 22:58:31 +03:00
} ,
2025-10-28 02:53:18 +03:00
"list" : {
"two" : "{{0}} and {{1}}" ,
2025-11-01 21:20:32 +03:00
"many" : "{{items}}, and {{last}}" ,
"separatorWithSpace" : ", "
2025-10-28 02:53:18 +03:00
} ,
2025-10-27 22:58:31 +03:00
"field" : {
"optional" : "Optional" ,
"internalID" : "The Internal ID Frigate uses in the configuration and database"
2025-03-16 18:36:20 +03:00
} ,
"button" : {
2026-02-27 18:55:36 +03:00
"add" : "Add" ,
2025-03-16 18:36:20 +03:00
"apply" : "Apply" ,
2026-03-04 19:07:34 +03:00
"applying" : "Applying…" ,
2025-03-16 18:36:20 +03:00
"reset" : "Reset" ,
2026-02-27 18:55:36 +03:00
"undo" : "Undo" ,
2025-03-17 22:50:13 +03:00
"done" : "Done" ,
2025-03-16 18:36:20 +03:00
"enabled" : "Enabled" ,
"enable" : "Enable" ,
"disabled" : "Disabled" ,
"disable" : "Disable" ,
"save" : "Save" ,
2025-04-28 21:55:36 +03:00
"saving" : "Saving…" ,
2025-03-16 18:36:20 +03:00
"cancel" : "Cancel" ,
"close" : "Close" ,
"copy" : "Copy" ,
2026-02-27 19:07:30 +03:00
"copiedToClipboard" : "Copied to clipboard" ,
2025-03-16 18:36:20 +03:00
"back" : "Back" ,
"history" : "History" ,
"fullscreen" : "Fullscreen" ,
"exitFullscreen" : "Exit Fullscreen" ,
"pictureInPicture" : "Picture in Picture" ,
2025-03-17 15:26:01 +03:00
"twoWayTalk" : "Two Way Talk" ,
"cameraAudio" : "Camera Audio" ,
2025-03-16 18:36:20 +03:00
"on" : "ON" ,
"off" : "OFF" ,
"edit" : "Edit" ,
"copyCoordinates" : "Copy coordinates" ,
"delete" : "Delete" ,
"yes" : "Yes" ,
"no" : "No" ,
"download" : "Download" ,
"info" : "Info" ,
"suspended" : "Suspended" ,
"unsuspended" : "Unsuspend" ,
"play" : "Play" ,
"unselect" : "Unselect" ,
"export" : "Export" ,
2025-03-17 22:50:13 +03:00
"deleteNow" : "Delete Now" ,
2025-11-12 02:23:30 +03:00
"next" : "Next" ,
2026-02-27 18:55:36 +03:00
"continue" : "Continue" ,
"modified" : "Modified" ,
"overridden" : "Overridden" ,
"resetToGlobal" : "Reset to Global" ,
"resetToDefault" : "Reset to Default" ,
"saveAll" : "Save All" ,
"savingAll" : "Saving All…" ,
"undoAll" : "Undo All"
2025-03-16 18:36:20 +03:00
} ,
"menu" : {
"system" : "System" ,
"systemMetrics" : "System metrics" ,
"configuration" : "Configuration" ,
"systemLogs" : "System logs" ,
Camera profile support (#22482)
* add CameraProfileConfig model for named config overrides
* add profiles field to CameraConfig
* add active_profile field to FrigateConfig
Runtime-only field excluded from YAML serialization, tracks which
profile is currently active.
* add ProfileManager for profile activation and persistence
Handles snapshotting base configs, applying profile overrides via
deep_merge + apply_section_update, publishing ZMQ updates, and
persisting active profile to /config/.active_profile.
* add profile API endpoints (GET /profiles, GET/PUT /profile)
* add MQTT and dispatcher integration for profiles
- Subscribe to frigate/profile/set MQTT topic
- Publish profile/state and profiles/available on connect
- Add _on_profile_command handler to dispatcher
- Broadcast active profile state on WebSocket connect
* wire ProfileManager into app startup and FastAPI
- Create ProfileManager after dispatcher init
- Restore persisted profile on startup
- Pass dispatcher and profile_manager to FastAPI app
* add tests for invalid profile values and keys
Tests that Pydantic rejects: invalid field values (fps: "not_a_number"),
unknown section keys (ffmpeg in profile), invalid nested values, and
invalid profiles in full config parsing.
* formatting
* fix CameraLiveConfig JSON serialization error on profile activation
refactor _publish_updates to only publish ZMQ updates for
sections that actually changed, not all sections on affected cameras.
* consolidate
* add enabled field to camera profiles for enabling/disabling cameras
* add zones support to camera profiles
* add frontend profile types, color utility, and config save support
* add profile state management and save preview support
* add profileName prop to BaseSection for profile-aware config editing
* add profile section dropdown and wire into camera settings pages
* add per-profile camera enable/disable to Camera Management view
* add profiles summary page with card-based layout and fix backend zone comparison bug
* add active profile badge to settings toolbar
* i18n
* add red dot for any pending changes including profiles
* profile support for mask and zone editor
* fix hidden field validation errors caused by lodash wildcard and schema gaps
lodash unset does not support wildcard (*) segments, so hidden fields like
filters.*.mask were never stripped from form data, leaving null raw_coordinates
that fail RJSF anyOf validation. Add unsetWithWildcard helper and also strip
hidden fields from the JSON schema itself as defense-in-depth.
* add face_recognition and lpr to profile-eligible sections
* move profile dropdown from section panes to settings header
* add profiles enable toggle and improve empty state
* formatting
* tweaks
* tweak colors and switch
* fix profile save diff, masksAndZones delete, and config sync
* ui tweaks
* ensure profile manager gets updated config
* rename profile settings to ui settings
* refactor profilesview and add dots/border colors when overridden
* implement an update_config method for profile manager
* fix mask deletion
* more unique colors
* add top-level profiles config section with friendly names
* implement profile friendly names and improve profile UI
- Add ProfileDefinitionConfig type and profiles field to FrigateConfig
- Use ProfilesApiResponse type with friendly_name support throughout
- Replace Record<string, unknown> with proper JsonObject/JsonValue types
- Add profile creation form matching zone pattern (Zod + NameAndIdFields)
- Add pencil icon for renaming profile friendly names in ProfilesView
- Move Profiles menu item to first under Camera Configuration
- Add activity indicators on save/rename/delete buttons
- Display friendly names in CameraManagementView profile selector
- Fix duplicate colored dots in management profile dropdown
- Fix i18n namespace for overridden base config tooltips
- Move profile override deletion from dropdown trash icon to footer
button with confirmation dialog, matching Reset to Global pattern
- Remove Add Profile from section header dropdown to prevent saving
camera overrides before top-level profile definition exists
- Clean up newProfiles state after API profile deletion
- Refresh profiles SWR cache after saving profile definitions
* remove profile badge in settings and add profiles to main menu
* use icon only on mobile
* change color order
* docs
* show activity indicator on trash icon while deleting a profile
* tweak language
* immediately create profiles on backend instead of deferring to Save All
* hide restart-required fields when editing a profile section
fields that require a restart cannot take effect via profile switching,
so they are merged into hiddenFields when profileName is set
* show active profile indicator in desktop status bar
* fix profile config inheritance bug where Pydantic defaults override base values
The /config API was dumping profile overrides with model_dump() which included
all Pydantic defaults. When the frontend merged these over
the camera's base config, explicitly-set base values were
lost. Now profile overrides are re-dumped with exclude_unset=True so only
user-specified fields are returned.
Also fixes the Save All path generating spurious deletion markers for
restart-required fields that are hidden during profile
editing but not excluded from the raw data sanitization in
prepareSectionSavePayload.
* docs tweaks
* docs tweak
* formatting
* formatting
* fix typing
* fix test pollution
test_maintainer was injecting MagicMock() into sys.modules["frigate.config.camera.updater"] at module load time and never restoring it. When the profile tests later imported CameraConfigUpdateEnum and CameraConfigUpdateTopic from that module, they got mock objects instead of the real dataclass/enum, so equality comparisons always failed
* remove
* fix settings showing profile-merged values when editing base config
When a profile is active, the in-memory config contains effective
(profile-merged) values. The settings UI was displaying these merged
values even when the "Base Config" view was selected.
Backend: snapshot pre-profile base configs in ProfileManager and expose
them via a `base_config` key in the /api/config camera response when a
profile is active. The top-level sections continue to reflect the
effective running config.
Frontend: read from `base_config` when available in BaseSection,
useConfigOverride, useAllCameraOverrides, and prepareSectionSavePayload.
Include formData labels in Object/Audio switches widgets so that labels
added only by a profile override remain visible when editing that profile.
* use rasterized_mask as field
makes it easier to exclude from the schema with exclude=True
prevents leaking of the field when using model_dump for profiles
* fix zones
- Fix zone colors not matching across profiles by falling back to base zone color when profile zone data lacks a color field
- Use base_config for base-layer values in masks/zones view so profile-merged values don't pollute the base config editing view
- Handle zones separately in profile manager snapshot/restore since ZoneConfig requires special serialization (color as private attr, contour generation)
- Inherit base zone color and generate contours for profile zone overrides in profile manager
* formatting
* don't require restart for camera enabled change for profiles
* publish camera state when changing profiles
* formatting
* remove available profiles from mqtt
* improve typing
2026-03-19 17:47:57 +03:00
"profiles" : "Profiles" ,
2025-03-16 18:36:20 +03:00
"settings" : "Settings" ,
"configurationEditor" : "Configuration Editor" ,
"languages" : "Languages" ,
"language" : {
2025-04-13 21:11:28 +03:00
"en" : "English (English)" ,
2025-04-11 15:38:36 +03:00
"es" : "Español (Spanish)" ,
2025-03-16 20:13:34 +03:00
"zhCN" : "简体中文 (Simplified Chinese)" ,
2025-04-11 15:38:36 +03:00
"hi" : "हिन्दी (Hindi)" ,
"fr" : "Français (French)" ,
"ar" : "العربية (Arabic)" ,
"pt" : "Português (Portuguese)" ,
2025-08-10 15:27:47 +03:00
"ptBR" : "Português brasileiro (Brazilian Portuguese)" ,
2025-04-11 15:38:36 +03:00
"ru" : "Русский (Russian)" ,
"de" : "Deutsch (German)" ,
"ja" : "日本語 (Japanese)" ,
"tr" : "Türkçe (Turkish)" ,
"it" : "Italiano (Italian)" ,
"nl" : "Nederlands (Dutch)" ,
"sv" : "Svenska (Swedish)" ,
"cs" : "Čeština (Czech)" ,
"nb" : "Norsk Bokmål (Norwegian Bokmål)" ,
"ko" : "한국어 (Korean)" ,
"vi" : "Tiếng Việt (Vietnamese)" ,
"fa" : "فارسی (Persian)" ,
"pl" : "Polski (Polish)" ,
"uk" : "Українська (Ukrainian)" ,
"he" : "עברית (Hebrew)" ,
"el" : "Ελληνικά (Greek)" ,
"ro" : "Română (Romanian)" ,
"hu" : "Magyar (Hungarian)" ,
"fi" : "Suomi (Finnish)" ,
"da" : "Dansk (Danish)" ,
"sk" : "Slovenčina (Slovak)" ,
2025-04-29 02:54:31 +03:00
"yue" : "粵語 (Cantonese)" ,
2025-05-21 01:47:05 +03:00
"th" : "ไทย (Thai)" ,
2025-06-11 21:08:46 +03:00
"ca" : "Català (Catalan)" ,
2026-02-03 22:29:52 +03:00
"hr" : "Hrvatski (Croatian)" ,
2025-08-10 15:27:47 +03:00
"sr" : "Српски (Serbian)" ,
"sl" : "Slovenščina (Slovenian)" ,
"lt" : "Lietuvių (Lithuanian)" ,
"bg" : "Български (Bulgarian)" ,
"gl" : "Galego (Galician)" ,
"id" : "Bahasa Indonesia (Indonesian)" ,
"ur" : "اردو (Urdu)" ,
2025-03-17 15:26:01 +03:00
"withSystem" : {
"label" : "Use the system settings for language"
}
2025-03-16 18:36:20 +03:00
} ,
"appearance" : "Appearance" ,
"darkMode" : {
"label" : "Dark Mode" ,
"light" : "Light" ,
"dark" : "Dark" ,
2025-03-17 15:26:01 +03:00
"withSystem" : {
"label" : "Use the system settings for light or dark mode"
}
2025-03-16 18:36:20 +03:00
} ,
"withSystem" : "System" ,
"theme" : {
2025-03-16 20:13:34 +03:00
"label" : "Theme" ,
"blue" : "Blue" ,
"green" : "Green" ,
"nord" : "Nord" ,
"red" : "Red" ,
2025-04-29 15:47:19 +03:00
"highcontrast" : "High Contrast" ,
2025-03-16 20:13:34 +03:00
"default" : "Default"
2025-03-16 18:36:20 +03:00
} ,
"help" : "Help" ,
2025-03-17 15:26:01 +03:00
"documentation" : {
"title" : "Documentation" ,
"label" : "Frigate documentation"
} ,
2025-03-16 18:36:20 +03:00
"restart" : "Restart Frigate" ,
2025-03-17 15:26:01 +03:00
"live" : {
"title" : "Live" ,
"allCameras" : "All Cameras" ,
"cameras" : {
"title" : "Cameras" ,
"count_one" : "{{count}} Camera" ,
"count_other" : "{{count}} Cameras"
}
} ,
2025-03-16 18:36:20 +03:00
"review" : "Review" ,
"explore" : "Explore" ,
"export" : "Export" ,
2026-03-04 19:07:34 +03:00
"actions" : "Actions" ,
2025-03-16 18:36:20 +03:00
"uiPlayground" : "UI Playground" ,
"faceLibrary" : "Face Library" ,
2025-11-12 02:23:30 +03:00
"classification" : "Classification" ,
2026-02-27 19:07:30 +03:00
"chat" : "Chat" ,
2025-03-16 18:36:20 +03:00
"user" : {
2025-03-17 15:26:01 +03:00
"title" : "User" ,
2025-03-16 18:36:20 +03:00
"account" : "Account" ,
"current" : "Current User: {{user}}" ,
"anonymous" : "anonymous" ,
"logout" : "Logout" ,
"setPassword" : "Set Password"
}
} ,
"toast" : {
"copyUrlToClipboard" : "Copied URL to clipboard." ,
"save" : {
2025-03-17 15:26:01 +03:00
"title" : "Save" ,
"error" : {
"title" : "Failed to save config changes: {{errorMessage}}" ,
"noMessage" : "Failed to save config changes"
}
2025-03-16 18:36:20 +03:00
}
} ,
"role" : {
"title" : "Role" ,
"admin" : "Admin" ,
"viewer" : "Viewer" ,
"desc" : "Admins have full access to all features in the Frigate UI. Viewers are limited to viewing cameras, review items, and historical footage in the UI."
} ,
"pagination" : {
"label" : "pagination" ,
2025-03-17 15:26:01 +03:00
"previous" : {
"title" : "Previous" ,
"label" : "Go to previous page"
} ,
"next" : {
"title" : "Next" ,
"label" : "Go to next page"
} ,
2025-03-16 18:36:20 +03:00
"more" : "More pages"
} ,
"accessDenied" : {
"documentTitle" : "Access Denied - Frigate" ,
"title" : "Access Denied" ,
"desc" : "You don't have permission to view this page."
} ,
"notFound" : {
"documentTitle" : "Not Found - Frigate" ,
"title" : "404" ,
"desc" : "Page not found"
} ,
2025-08-23 01:19:00 +03:00
"selectItem" : "Select {{item}}" ,
2025-10-07 22:43:06 +03:00
"readTheDocumentation" : "Read the documentation" ,
"information" : {
"pixels" : "{{area}}px"
}
2025-03-16 18:36:20 +03:00
}