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() 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(