diff --git a/web/src/views/events/MotionPreviewsPane.tsx b/web/src/views/events/MotionPreviewsPane.tsx index 37cf9e261e..913548139c 100644 --- a/web/src/views/events/MotionPreviewsPane.tsx +++ b/web/src/views/events/MotionPreviewsPane.tsx @@ -348,6 +348,19 @@ function MotionPreviewClip({ } }, [clipStart, clipEnd, playbackRate, preview]); + useEffect(() => { + if (!videoRef.current || !preview || !videoPlaying) { + return; + } + + if (isSafari || (isFirefox && isMobile)) { + // These browsers step frames manually; rebuild the interval at the new rate + resetPlayback(); + } else { + videoRef.current.playbackRate = playbackRate; + } + }, [playbackRate, preview, videoPlaying, resetPlayback]); + const drawDimOverlay = useCallback(() => { if (!dimOverlayCanvasRef.current) { return;