diff --git a/docs/docs/configuration/review.md b/docs/docs/configuration/review.md index 9f160c9487..00b18219ce 100644 --- a/docs/docs/configuration/review.md +++ b/docs/docs/configuration/review.md @@ -153,7 +153,7 @@ Clicking a preview clip seeks the recording player to that timestamp so you can Motion Search lets you scan recorded footage for changes inside a region of interest you draw on the camera. Unlike Motion Previews, which surfaces what Frigate's motion detector flagged in real time, Motion Search re-analyzes the saved recordings, so it can find changes that were missed (for example, an object that appeared while motion detection was paused by `lightning_threshold`, or in a region that is normally motion-masked). -To start a search, click the kebab menu on a camera in the page and choose **Motion Search**. In the dialog: +To start a search, open the Actions menu in History or click the kebab menu on a camera in the page and choose **Motion Search**. In the dialog: 1. Pick the camera and time range to scan. 2. Draw a polygon on the camera frame to define the region of interest. @@ -170,3 +170,21 @@ To start a search, click the kebab menu on a camera in the { if (!selectedCamera) return undefined; return config.cameras[selectedCamera]; }, [config, selectedCamera]); + const aspectRatio = useMemo(() => { + if (!cameraConfig) { + return 16 / 9; + } + + return cameraConfig.detect.width / cameraConfig.detect.height; + }, [cameraConfig]); + + // Determine camera aspect ratio category + const cameraAspect = useMemo(() => { + if (!aspectRatio) { + return "normal"; + } else if (aspectRatio > ASPECT_WIDE_LAYOUT) { + return "wide"; + } else if (aspectRatio < ASPECT_PORTRAIT_LAYOUT) { + return "tall"; + } else { + return "normal"; + } + }, [aspectRatio]); + const polygonClosed = useMemo( () => !isDrawingROI && polygonPoints.length >= 3, [isDrawingROI, polygonPoints.length], @@ -144,6 +168,7 @@ export default function MotionSearchDialog({ useEffect(() => { setImageLoaded(false); + setPanMode(false); }, [selectedCamera]); const Overlay = isDesktop ? Dialog : Drawer; @@ -218,7 +243,13 @@ export default function MotionSearchDialog({ )} - +
-
+
{selectedCamera && cameraConfig ? (
) : ( @@ -282,11 +322,41 @@ export default function MotionSearchDialog({ {polygonClosed && }
+ {!isDesktop && ( + + + + + + {panMode + ? t("polygonControls.moveMode") + : t("polygonControls.drawMode")} + + + )}