diff --git a/frigate/config/camera/updater.py b/frigate/config/camera/updater.py index 1965f3813..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" @@ -33,6 +34,7 @@ class CameraConfigUpdateEnum(str, Enum): lpr = "lpr" snapshots = "snapshots" timestamp_style = "timestamp_style" + ui = "ui" zones = "zones" 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( 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 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: