mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-10-19 21:22:50 +03:00
* limit concurrent motion search jobs and search range Any viewer could start unlimited motion search jobs over an unbounded time range, and finished jobs were never dropped from memory. Each user now gets one active job (409), at most 3 run at once (429), the range is capped at 48 hours, and finished jobs are evicted 10 minutes after they end. Jobs are no longer filed in the shared job manager, which kept every finished job forever. * show translated errors for motion search limits * release the motion search slot if the runner fails to start * keep wedged or shared-identity motion searches from locking out users A stalled VOD read blocked the runner forever, so a wedged job held its user and global slot until restart, and on installs without per-user identity (internal port, or auth disabled without a proxy user header) everyone shared one per-user slot. VOD ffmpeg and ffprobe inputs now use a 30 s rw_timeout, a cancel also drops queued parallel runs, a cancelled job stops counting after 60 s, and the per-user limit only applies when the request carries a real username. A failed runner start also stops its requestor. * treat timed-out VOD segments as motion search errors With rw_timeout, the HLS demuxer skipped a timed-out segment and exited cleanly, so a run reported success with a hole in it, and when the keyframe probe and the decode lost different segments the equal frame counts paired frames with the wrong timestamps. The keyframe path now requires the probe to cover the whole run without a gap over 5 s, a decode whose stderr shows a skipped segment fails the run, and a cadence decode more than 5 s short of the run's duration fails it too, so these runs land in segments_with_errors. The keyframe probe polls should_stop and is killed on cancel, probe_video_dimensions gets the read timeout, and a user's own cancelled job no longer blocks their next search while it still counts toward the global cap. * drop motion search stall detection and range cap * remove motion search range check from the UI
81 lines
3.1 KiB
JSON
81 lines
3.1 KiB
JSON
{
|
|
"documentTitle": "Motion Search - Frigate",
|
|
"title": "Motion Search",
|
|
"description": "Draw a polygon to define the region of interest, and specify a time range to search for motion changes within that region.",
|
|
"selectCamera": "Motion Search is loading",
|
|
"startSearch": "Start Search",
|
|
"searchStarted": "Search started",
|
|
"searchCancelled": "Search cancelled",
|
|
"cancelSearch": "Cancel",
|
|
"searching": "Search in progress.",
|
|
"scanning": "Scanning {{time}}",
|
|
"searchComplete": "Search complete",
|
|
"noResultsYet": "Run a search to find motion changes in the selected region",
|
|
"noChangesFound": "No pixel changes detected in the selected region",
|
|
"changesFound_one": "Found {{count}} motion change",
|
|
"changesFound_other": "Found {{count}} motion changes",
|
|
"framesProcessed": "{{count}} frames processed",
|
|
"jumpToTime": "Jump to this time",
|
|
"results": "Results",
|
|
"showSegmentHeatmap": "Heatmap",
|
|
"newSearch": "New Search",
|
|
"clearResults": "Clear Results",
|
|
"clearROI": "Clear polygon",
|
|
"polygonControls": {
|
|
"points_one": "{{count}} point",
|
|
"points_other": "{{count}} points",
|
|
"undo": "Undo last point",
|
|
"reset": "Reset polygon",
|
|
"drawMode": "Draw",
|
|
"moveMode": "Move"
|
|
},
|
|
"motionHeatmapLabel": "Motion Heatmap",
|
|
"dialog": {
|
|
"title": "Motion Search",
|
|
"cameraLabel": "Camera",
|
|
"previewAlt": "Camera preview for {{camera}}"
|
|
},
|
|
"timeRange": {
|
|
"title": "Search Range",
|
|
"start": "Start time",
|
|
"end": "End time"
|
|
},
|
|
"settings": {
|
|
"title": "Search Settings",
|
|
"parallelMode": "Parallel mode",
|
|
"parallelModeDesc": "Scan multiple recording ranges at the same time (faster; uses more decoding resources)",
|
|
"threshold": "Sensitivity Threshold",
|
|
"thresholdDesc": "Lower values detect smaller changes (1-255)",
|
|
"minArea": "Minimum Change Area",
|
|
"minAreaDesc": "Minimum size of a single moving region, as a percentage of the region of interest",
|
|
"maxResults": "Maximum Results",
|
|
"maxResultsDesc": "Stop after this many matching timestamps"
|
|
},
|
|
"errors": {
|
|
"noCamera": "Please select a camera",
|
|
"noROI": "Please draw a region of interest",
|
|
"noTimeRange": "Please select a time range",
|
|
"invalidTimeRange": "End time must be after start time",
|
|
"alreadyRunning": "You already have a motion search running. Wait for it to finish or cancel it.",
|
|
"tooManySearches": "Too many motion searches are running. Try again when one finishes.",
|
|
"searchFailed": "Search failed: {{message}}",
|
|
"polygonTooSmall": "Polygon must have at least 3 points",
|
|
"unknown": "Unknown error"
|
|
},
|
|
"changePercentage": "{{percentage}}% changed",
|
|
"metrics": {
|
|
"title": "Search Metrics",
|
|
"segmentsScanned": "Segments scanned",
|
|
"segmentsProcessed": "Processed",
|
|
"segmentsSkippedInactive": "Skipped (no activity)",
|
|
"segmentsSkippedHeatmap": "Skipped (no ROI overlap)",
|
|
"fallbackFullRange": "Fallback full-range scan",
|
|
"framesDecoded": "Frames decoded",
|
|
"wallTime": "Search time",
|
|
"segmentErrors": "Segment errors",
|
|
"seconds": "{{seconds}}s",
|
|
"minutesSeconds": "{{minutes}}m {{seconds}}s",
|
|
"scanSummary": "{{segments}} segments · {{time}}"
|
|
}
|
|
}
|