From d6a00938007db25d87f038b64c22c3e325a86183 Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Tue, 5 May 2026 18:56:03 -0500 Subject: [PATCH 1/2] use continuous expire date when loading reviews for recording cleanup --- frigate/record/cleanup.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/frigate/record/cleanup.py b/frigate/record/cleanup.py index e41a5bf39..71097f1d9 100644 --- a/frigate/record/cleanup.py +++ b/frigate/record/cleanup.py @@ -351,9 +351,11 @@ class RecordingCleanup(threading.Thread): ) .where( ReviewSegment.camera == camera, - # need to ensure segments for all reviews starting - # before the expire date are included - ReviewSegment.start_time < motion_expire_date, + # candidate recordings can extend up to continuous_expire_date + # (the no-motion no-audio branch of the recordings query), + # so reviews must cover that full range to avoid deleting + # segments that overlap recent alerts/detections. + ReviewSegment.start_time < continuous_expire_date, ) .order_by(ReviewSegment.start_time) .namedtuples() From 3180230c4698635c664b01d627f8ec57c22a951e Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Tue, 5 May 2026 19:45:01 -0500 Subject: [PATCH 2/2] reset heatmap filter when motion preview camera changes --- web/src/views/events/EventView.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/web/src/views/events/EventView.tsx b/web/src/views/events/EventView.tsx index b5aa8532f..edf144f88 100644 --- a/web/src/views/events/EventView.tsx +++ b/web/src/views/events/EventView.tsx @@ -1136,6 +1136,12 @@ function MotionReview({ ); const [isRegionFilterOpen, setIsRegionFilterOpen] = useState(false); + // reset filter when camera changes + useEffect(() => { + setMotionFilterCells(new Set()); + setPendingFilterCells(new Set()); + }, [motionPreviewsCamera]); + const objectReviewItems = useMemo( () => (overlapReviewSegments ?? []).filter(