From af2435a7958bfe11ce1725136b8c7c024b13eaee Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Mon, 27 Apr 2026 07:13:23 -0500 Subject: [PATCH 1/5] add ui to camera config update topics enum --- frigate/config/camera/updater.py | 1 + 1 file changed, 1 insertion(+) diff --git a/frigate/config/camera/updater.py b/frigate/config/camera/updater.py index 1965f3813..8da33a3ec 100644 --- a/frigate/config/camera/updater.py +++ b/frigate/config/camera/updater.py @@ -33,6 +33,7 @@ class CameraConfigUpdateEnum(str, Enum): lpr = "lpr" snapshots = "snapshots" timestamp_style = "timestamp_style" + ui = "ui" zones = "zones" From 18354aef6ca64d0727a550f346688ff9faa659f8 Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Mon, 27 Apr 2026 07:20:46 -0500 Subject: [PATCH 2/5] add mqtt to camera config update enum --- frigate/config/camera/updater.py | 1 + 1 file changed, 1 insertion(+) diff --git a/frigate/config/camera/updater.py b/frigate/config/camera/updater.py index 8da33a3ec..a07d51b8e 100644 --- a/frigate/config/camera/updater.py +++ b/frigate/config/camera/updater.py @@ -20,6 +20,7 @@ class CameraConfigUpdateEnum(str, Enum): ffmpeg = "ffmpeg" live = "live" motion = "motion" # includes motion and motion masks + mqtt = "mqtt" notifications = "notifications" objects = "objects" object_genai = "object_genai" From 508f4509e17bcb6c75b3c07f2b9fa92b5e25c4d3 Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Mon, 27 Apr 2026 09:32:00 -0500 Subject: [PATCH 3/5] ensure cleanup runs when an event end skips post-processing --- frigate/embeddings/maintainer.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/frigate/embeddings/maintainer.py b/frigate/embeddings/maintainer.py index 33bef38f2..1a998febe 100644 --- a/frigate/embeddings/maintainer.py +++ b/frigate/embeddings/maintainer.py @@ -517,10 +517,16 @@ class EmbeddingMaintainer(threading.Thread): try: event: Event = Event.get(Event.id == event_id) except DoesNotExist: + for processor in self.post_processors: + if isinstance(processor, ObjectDescriptionProcessor): + processor.cleanup_event(event_id) continue # Skip the event if not an object if event.data.get("type") != "object": + for processor in self.post_processors: + if isinstance(processor, ObjectDescriptionProcessor): + processor.cleanup_event(event_id) continue # Extract valid thumbnail From 0de804892ba44499a0fdfe455e631b692b6f336e Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Mon, 27 Apr 2026 11:33:22 -0500 Subject: [PATCH 4/5] end any in-progress audio events when audio detection is disabled we already end in-progress audio events when we disable a camera, but this mirrors that logic for specifically disabling audio detection --- frigate/events/audio.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/frigate/events/audio.py b/frigate/events/audio.py index f6c41fa30..6a22b2251 100644 --- a/frigate/events/audio.py +++ b/frigate/events/audio.py @@ -205,6 +205,7 @@ class AudioEventMaintainer(threading.Thread): self.transcription_thread.start() self.was_enabled = camera.enabled + self.was_audio_enabled = camera.audio.enabled def detect_audio(self, audio: np.ndarray) -> None: if not self.camera_config.audio.enabled or self.stop_event.is_set(): @@ -363,6 +364,17 @@ class AudioEventMaintainer(threading.Thread): time.sleep(0.1) continue + audio_enabled = self.camera_config.audio.enabled + if audio_enabled != self.was_audio_enabled: + if not audio_enabled: + self.logger.debug( + f"Disabling audio detections for {self.camera_config.name}, ending events" + ) + self.requestor.send_data( + EXPIRE_AUDIO_ACTIVITY, self.camera_config.name + ) + self.was_audio_enabled = audio_enabled + self.read_audio() if self.audio_listener: From b0f4fcd6767a8ba7f4eac3282322c6d656fe0c13 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Mon, 27 Apr 2026 15:16:14 -0600 Subject: [PATCH 5/5] Improve GenAI metadata --- frigate/data_processing/post/types.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frigate/data_processing/post/types.py b/frigate/data_processing/post/types.py index 41887a20e..0344c7616 100644 --- a/frigate/data_processing/post/types.py +++ b/frigate/data_processing/post/types.py @@ -27,7 +27,7 @@ class ReviewMetadata(BaseModel): ) title: str = Field( max_length=80, - description="A short title characterizing what took place and where, under 10 words.", + description="Under 10 words. Name the apparent purpose or outcome of the activity together with the location involved. Do not narrate or list the sequence of actions step by step.", ) scene: str = Field( min_length=150, @@ -36,7 +36,7 @@ class ReviewMetadata(BaseModel): ) shortSummary: str = Field( min_length=70, - max_length=100, + max_length=120, description="A brief 2-sentence summary of the scene, suitable for notifications.", ) confidence: float = Field(