From 425fc95e04408bb6d7ec78e69fca05961bb3ee95 Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Thu, 7 May 2026 11:00:51 -0500 Subject: [PATCH] add more config messages --- web/public/locales/en/views/settings.json | 15 +++++++++++---- .../config-form/section-configs/detect.ts | 9 +++++++++ .../section-configs/face_recognition.ts | 10 ++++++++++ .../config-form/section-configs/lpr.ts | 10 ++++++++++ .../config-form/section-configs/review.ts | 18 ++++++++++++++++++ .../section-configs/semantic_search.ts | 12 ++++++++++++ 6 files changed, 70 insertions(+), 4 deletions(-) diff --git a/web/public/locales/en/views/settings.json b/web/public/locales/en/views/settings.json index 2c1884c053..5f534cf371 100644 --- a/web/public/locales/en/views/settings.json +++ b/web/public/locales/en/views/settings.json @@ -1651,7 +1651,8 @@ "review": { "recordDisabled": "Recording is disabled, review items will not be generated.", "detectDisabled": "Object detection is disabled. Review items require detected objects to categorize alerts and detections.", - "allNonAlertDetections": "All non-alert activity will be included as detections." + "allNonAlertDetections": "All non-alert activity will be included as detections.", + "genaiImageSourceRecordingsRecordDisabled": "Image source is set to 'recordings', but recording is disabled. Frigate will fall back to preview images." }, "audio": { "noAudioRole": "No streams have the audio role defined. You must enable the audio role for audio detection to function." @@ -1660,18 +1661,21 @@ "audioDetectionDisabled": "Audio detection is not enabled for this camera. Audio transcription requires audio detection to be active." }, "detect": { - "fpsGreaterThanFive": "Setting the detect FPS higher than 5 is not recommended. Higher values may cause performance issues and will not provide any benefit." + "fpsGreaterThanFive": "Setting the detect FPS higher than 5 is not recommended. Higher values may cause performance issues and will not provide any benefit.", + "disabled": "Object detection is disabled. Snapshots, review items, and enrichments such as face recognition, license plate recognition, and Generative AI will not function." }, "objects": { "genaiNoDescriptionsProvider": "You must configure a GenAI provider with the 'descriptions' role for descriptions to be generated." }, "faceRecognition": { "globalDisabled": "The face recognition enrichment must be enabled for face recognition features to function on this camera.", - "personNotTracked": "Face recognition requires the 'person' object to be tracked. Enable 'person' in Objects for this camera." + "personNotTracked": "Face recognition requires the 'person' object to be tracked. Enable 'person' in Objects for this camera.", + "modelSizeLarge": "The 'large' model requires a GPU or NPU for reasonable performance. Use 'small' on CPU-only systems." }, "lpr": { "globalDisabled": "The license plate recognition enrichment must be enabled for LPR features to function on this camera.", - "vehicleNotTracked": "License plate recognition requires 'car' or 'motorcycle' to be tracked. Enable 'car' or 'motorcycle' in Objects for this camera." + "vehicleNotTracked": "License plate recognition requires 'car' or 'motorcycle' to be tracked. Enable 'car' or 'motorcycle' in Objects for this camera.", + "modelSizeLarge": "The 'large' model is optimized for multi-line license plates. The 'small' model provides better performance over 'large' and should be used unless your region uses multi-line plate formats." }, "record": { "noRecordRole": "No streams have the record role defined. Recording will not function." @@ -1685,6 +1689,9 @@ "detectors": { "mixedTypes": "All detectors must use the same type. Remove existing detectors to use a different type.", "mixedTypesSuggestion": "All detectors must use the same type. Remove existing detectors or select {{type}}." + }, + "semanticSearch": { + "jinav2SmallModelSize": "The 'small' size with the Jina V2 model has high RAM and inference cost. The 'large' model with a discrete GPU is recommended." } } } diff --git a/web/src/components/config-form/section-configs/detect.ts b/web/src/components/config-form/section-configs/detect.ts index df0664273b..ac42b85b2e 100644 --- a/web/src/components/config-form/section-configs/detect.ts +++ b/web/src/components/config-form/section-configs/detect.ts @@ -3,6 +3,15 @@ import type { SectionConfigOverrides } from "./types"; const detect: SectionConfigOverrides = { base: { sectionDocs: "/configuration/camera_specific", + messages: [ + { + key: "detect-disabled", + messageKey: "configMessages.detect.disabled", + severity: "warning", + condition: (ctx) => + ctx.level === "camera" && ctx.formData?.enabled === false, + }, + ], fieldMessages: [ { key: "fps-greater-than-five", diff --git a/web/src/components/config-form/section-configs/face_recognition.ts b/web/src/components/config-form/section-configs/face_recognition.ts index 47344930aa..9d346b26c6 100644 --- a/web/src/components/config-form/section-configs/face_recognition.ts +++ b/web/src/components/config-form/section-configs/face_recognition.ts @@ -53,6 +53,16 @@ const faceRecognition: SectionConfigOverrides = { "device", ], restartRequired: ["enabled", "model_size", "device"], + fieldMessages: [ + { + key: "model-size-large", + field: "model_size", + messageKey: "configMessages.faceRecognition.modelSizeLarge", + severity: "info", + position: "after", + condition: (ctx) => ctx.formData?.model_size === "large", + }, + ], uiSchema: { model_size: { "ui:options": { size: "xs" }, diff --git a/web/src/components/config-form/section-configs/lpr.ts b/web/src/components/config-form/section-configs/lpr.ts index 1237172f0f..8df2d7d8bc 100644 --- a/web/src/components/config-form/section-configs/lpr.ts +++ b/web/src/components/config-form/section-configs/lpr.ts @@ -65,6 +65,16 @@ const lpr: SectionConfigOverrides = { "replace_rules", ], restartRequired: ["model_size", "enhancement", "device"], + fieldMessages: [ + { + key: "model-size-large", + field: "model_size", + messageKey: "configMessages.lpr.modelSizeLarge", + severity: "info", + position: "after", + condition: (ctx) => ctx.formData?.model_size === "large", + }, + ], uiSchema: { format: { "ui:options": { size: "md" }, diff --git a/web/src/components/config-form/section-configs/review.ts b/web/src/components/config-form/section-configs/review.ts index 83c49d6a75..9d6e5e1e86 100644 --- a/web/src/components/config-form/section-configs/review.ts +++ b/web/src/components/config-form/section-configs/review.ts @@ -55,6 +55,24 @@ const review: SectionConfigOverrides = { ); }, }, + { + key: "genai-image-source-recordings-record-disabled", + field: "genai.image_source", + messageKey: + "configMessages.review.genaiImageSourceRecordingsRecordDisabled", + severity: "warning", + position: "after", + condition: (ctx) => { + const genai = ctx.formData?.genai as + | Record + | undefined; + if (genai?.image_source !== "recordings") return false; + if (ctx.level === "camera" && ctx.fullCameraConfig) { + return ctx.fullCameraConfig.record?.enabled === false; + } + return ctx.fullConfig.record?.enabled === false; + }, + }, ], fieldDocs: { "alerts.labels": "/configuration/review/#alerts-and-detections", diff --git a/web/src/components/config-form/section-configs/semantic_search.ts b/web/src/components/config-form/section-configs/semantic_search.ts index 34c1e149fa..f464e637f4 100644 --- a/web/src/components/config-form/section-configs/semantic_search.ts +++ b/web/src/components/config-form/section-configs/semantic_search.ts @@ -18,6 +18,18 @@ const semanticSearch: SectionConfigOverrides = { advancedFields: ["reindex", "device"], restartRequired: ["enabled", "model", "model_size", "device"], hiddenFields: ["reindex"], + fieldMessages: [ + { + key: "jinav2-small-model-size", + field: "model_size", + messageKey: "configMessages.semanticSearch.jinav2SmallModelSize", + severity: "warning", + position: "after", + condition: (ctx) => + ctx.formData?.model === "jinav2" && + ctx.formData?.model_size === "small", + }, + ], uiSchema: { model: { "ui:widget": "semanticSearchModel",