mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-10-26 00:14:41 +03:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a0300864ca | ||
|
|
f236b1a0c0 | ||
|
|
22e478cd82 | ||
|
|
7738f022e7 | ||
|
|
ba6e3717f4 | ||
|
|
197ed252d2 | ||
|
|
14ddaf9df3 | ||
|
|
113d499a61 |
@@ -4,7 +4,7 @@ click == 8.5.*
|
||||
aiohttp == 3.14.*
|
||||
starlette == 1.9.*
|
||||
starlette-context == 0.5.*
|
||||
fastapi[standard-no-fastapi-cloud-cli] == 0.153.*
|
||||
fastapi[standard-no-fastapi-cloud-cli] == 0.159.*
|
||||
uvicorn == 0.54.*
|
||||
slowapi == 0.1.*
|
||||
joserfc == 1.7.*
|
||||
@@ -28,7 +28,7 @@ git+https://github.com/fbcotter/py3nvml#egg=py3nvml
|
||||
tzdata == 2026.5
|
||||
pyzmq == 27.2.*
|
||||
ruamel.yaml == 0.19.*
|
||||
tzlocal == 5.4.4
|
||||
tzlocal == 5.4.5
|
||||
requests == 2.34.*
|
||||
types-requests == 2.33.*
|
||||
norfair == 2.3.*
|
||||
@@ -43,13 +43,13 @@ opencv-contrib-python == 4.11.0.*
|
||||
scipy == 1.17.*
|
||||
# OpenVino & ONNX
|
||||
openvino == 2026.4.*
|
||||
onnxruntime == 1.30.*
|
||||
onnxruntime == 1.31.*
|
||||
# Embeddings
|
||||
transformers == 5.20.*
|
||||
# Generative AI
|
||||
google-genai == 2.31.*
|
||||
google-genai == 2.32.*
|
||||
ollama == 0.6.*
|
||||
openai == 3.35.*
|
||||
openai == 3.36.*
|
||||
# push notifications
|
||||
py-vapid == 1.9.6
|
||||
pywebpush == 2.5.*
|
||||
|
||||
+1
-1
@@ -1315,7 +1315,7 @@ def nvinfo():
|
||||
dependencies=[Depends(require_role(["admin"]))],
|
||||
)
|
||||
async def logs(
|
||||
service: str = Path(enum=["frigate", "nginx", "go2rtc"]),
|
||||
service: str = Path(json_schema_extra={"enum": ["frigate", "nginx", "go2rtc"]}),
|
||||
download: str | None = None,
|
||||
stream: bool | None = False,
|
||||
start: int | None = 0,
|
||||
|
||||
@@ -337,7 +337,7 @@ async def get_snapshot_from_recording(
|
||||
request: Request,
|
||||
camera_name: str,
|
||||
frame_time: float,
|
||||
format: str = Path(enum=["png", "jpg"]),
|
||||
format: str = Path(json_schema_extra={"enum": ["png", "jpg"]}),
|
||||
height: int = None,
|
||||
):
|
||||
if camera_name not in request.app.frigate_config.cameras:
|
||||
@@ -1061,7 +1061,7 @@ async def event_thumbnail(
|
||||
max_cache_age: int = Query(
|
||||
2592000, description="Max cache age in seconds. Default 30 days in seconds."
|
||||
),
|
||||
format: str = Query(default="ios", enum=["ios", "android"]),
|
||||
format: str = Query(default="ios", json_schema_extra={"enum": ["ios", "android"]}),
|
||||
):
|
||||
thumbnail_bytes = None
|
||||
event_complete = False
|
||||
@@ -1858,7 +1858,7 @@ async def preview_mp4(
|
||||
async def review_preview(
|
||||
request: Request,
|
||||
event_id: str,
|
||||
format: str = Query(default="gif", enum=["gif", "mp4"]),
|
||||
format: str = Query(default="gif", json_schema_extra={"enum": ["gif", "mp4"]}),
|
||||
):
|
||||
try:
|
||||
review: ReviewSegment = ReviewSegment.get(ReviewSegment.id == event_id)
|
||||
|
||||
@@ -2,10 +2,11 @@
|
||||
|
||||
import logging
|
||||
import queue
|
||||
import random
|
||||
import threading
|
||||
import time
|
||||
from collections import deque
|
||||
from datetime import UTC, datetime
|
||||
from datetime import UTC, datetime, timedelta
|
||||
from multiprocessing import Queue
|
||||
from multiprocessing.synchronize import Event as MpEvent
|
||||
from typing import Any
|
||||
@@ -255,7 +256,9 @@ def process_frames(
|
||||
region_grid: list[list[dict[str, Any]]],
|
||||
exit_on_empty: bool = False,
|
||||
):
|
||||
next_region_update = get_tomorrow_at_time(2)
|
||||
# cameras share one dispatcher, so stagger the daily grid rebuilds
|
||||
region_update_offset = timedelta(seconds=random.randrange(3600))
|
||||
next_region_update = get_tomorrow_at_time(2) + region_update_offset
|
||||
config_subscriber = CameraConfigUpdateSubscriber(
|
||||
None,
|
||||
{camera_config.name: camera_config},
|
||||
@@ -344,7 +347,7 @@ def process_frames(
|
||||
if updated_grid:
|
||||
region_grid = updated_grid
|
||||
|
||||
next_region_update = get_tomorrow_at_time(2)
|
||||
next_region_update = get_tomorrow_at_time(2) + region_update_offset
|
||||
|
||||
try:
|
||||
if exit_on_empty:
|
||||
|
||||
@@ -474,10 +474,10 @@ class CameraWatchdog(threading.Thread):
|
||||
if not self.capture_thread.is_alive():
|
||||
self.detect_status.send("offline", now)
|
||||
self.camera_fps.value = 0
|
||||
self.logger.error(
|
||||
f"Ffmpeg process crashed unexpectedly for {self.config.name}."
|
||||
)
|
||||
if can_restart:
|
||||
self.logger.error(
|
||||
f"Ffmpeg process crashed unexpectedly for {self.config.name}."
|
||||
)
|
||||
self.reset_capture_thread(terminate=False)
|
||||
last_restart_time = now
|
||||
elif self.camera_fps.value >= (self.config.detect.fps + 10):
|
||||
@@ -498,10 +498,10 @@ class CameraWatchdog(threading.Thread):
|
||||
elif now - self.capture_thread.current_frame.value > 20:
|
||||
self.detect_status.send("offline", now)
|
||||
self.camera_fps.value = 0
|
||||
self.logger.info(
|
||||
f"No frames received from {self.config.name} in 20 seconds. Exiting ffmpeg..."
|
||||
)
|
||||
if can_restart:
|
||||
self.logger.info(
|
||||
f"No frames received from {self.config.name} in 20 seconds. Exiting ffmpeg..."
|
||||
)
|
||||
self.reset_capture_thread()
|
||||
last_restart_time = now
|
||||
else:
|
||||
|
||||
Generated
+14
-4
@@ -83,7 +83,7 @@
|
||||
"vaul": "^1.1.2",
|
||||
"virtua": "^0.53.6",
|
||||
"vite-plugin-monaco-editor": "^1.1.0",
|
||||
"zod": "^4.6.7"
|
||||
"zod": "^3.25.76"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/js": "^10.0.1",
|
||||
@@ -5115,6 +5115,16 @@
|
||||
"eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-plugin-react-hooks/node_modules/zod": {
|
||||
"version": "4.6.5",
|
||||
"resolved": "https://registry.npmjs.org/zod/-/zod-4.6.5.tgz",
|
||||
"integrity": "sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/colinhacks"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-plugin-react-hooks/node_modules/zod-validation-error": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz",
|
||||
@@ -10645,9 +10655,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/zod": {
|
||||
"version": "4.6.7",
|
||||
"resolved": "https://registry.npmjs.org/zod/-/zod-4.6.7.tgz",
|
||||
"integrity": "sha512-g8W2D2kU6a8untc053fX1uVBKzM7yqAxW/3zwk83+6RyF2+SKOuV+c0wBDhUwzV1PaGapmZH+rmcUzPf+3CGwg==",
|
||||
"version": "3.25.76",
|
||||
"resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
|
||||
"integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
|
||||
"license": "MIT",
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/colinhacks"
|
||||
|
||||
+1
-1
@@ -95,7 +95,7 @@
|
||||
"vaul": "^1.1.2",
|
||||
"virtua": "^0.53.6",
|
||||
"vite-plugin-monaco-editor": "^1.1.0",
|
||||
"zod": "^4.6.7"
|
||||
"zod": "^3.25.76"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/js": "^10.0.1",
|
||||
|
||||
@@ -332,7 +332,9 @@ function PreviewVideoPlayer({
|
||||
{t("noPreviewFoundFor", { cameraName: cameraName })}
|
||||
</div>
|
||||
)}
|
||||
{firstLoad && <Skeleton className="absolute aspect-video size-full" />}
|
||||
{firstLoad && (
|
||||
<Skeleton className="absolute aspect-video size-full rounded-lg md:rounded-2xl" />
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -555,7 +557,9 @@ function PreviewFramesPlayer({
|
||||
{t("noPreviewFoundFor", { cameraName: cameraName })}
|
||||
</div>
|
||||
)}
|
||||
{firstLoad && <Skeleton className="absolute aspect-video size-full" />}
|
||||
{firstLoad && (
|
||||
<Skeleton className="absolute aspect-video size-full rounded-lg md:rounded-2xl" />
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user