mirror of
https://github.com/blakeblackshear/frigate.git
synced 2024-11-21 19:07:46 +01:00
ac8ddada0b
* Fix not retaining custom events * Fix media apis
104 lines
3.0 KiB
Python
104 lines
3.0 KiB
Python
from enum import Enum
|
|
from typing import Optional
|
|
|
|
from pydantic import Field
|
|
|
|
from frigate.const import MAX_PRE_CAPTURE
|
|
|
|
from ..base import FrigateBaseModel
|
|
|
|
__all__ = [
|
|
"RecordConfig",
|
|
"RecordExportConfig",
|
|
"RecordPreviewConfig",
|
|
"RecordQualityEnum",
|
|
"EventsConfig",
|
|
"ReviewRetainConfig",
|
|
"RecordRetainConfig",
|
|
"RetainModeEnum",
|
|
]
|
|
|
|
DEFAULT_TIME_LAPSE_FFMPEG_ARGS = "-vf setpts=0.04*PTS -r 30"
|
|
|
|
|
|
class RetainModeEnum(str, Enum):
|
|
all = "all"
|
|
motion = "motion"
|
|
active_objects = "active_objects"
|
|
|
|
|
|
class RecordRetainConfig(FrigateBaseModel):
|
|
days: float = Field(default=0, title="Default retention period.")
|
|
mode: RetainModeEnum = Field(default=RetainModeEnum.all, title="Retain mode.")
|
|
|
|
|
|
class ReviewRetainConfig(FrigateBaseModel):
|
|
days: float = Field(default=10, title="Default retention period.")
|
|
mode: RetainModeEnum = Field(default=RetainModeEnum.motion, title="Retain mode.")
|
|
|
|
|
|
class EventsConfig(FrigateBaseModel):
|
|
pre_capture: int = Field(
|
|
default=5, title="Seconds to retain before event starts.", le=MAX_PRE_CAPTURE
|
|
)
|
|
post_capture: int = Field(default=5, title="Seconds to retain after event ends.")
|
|
retain: ReviewRetainConfig = Field(
|
|
default_factory=ReviewRetainConfig, title="Event retention settings."
|
|
)
|
|
|
|
|
|
class RecordQualityEnum(str, Enum):
|
|
very_low = "very_low"
|
|
low = "low"
|
|
medium = "medium"
|
|
high = "high"
|
|
very_high = "very_high"
|
|
|
|
|
|
class RecordPreviewConfig(FrigateBaseModel):
|
|
quality: RecordQualityEnum = Field(
|
|
default=RecordQualityEnum.medium, title="Quality of recording preview."
|
|
)
|
|
|
|
|
|
class RecordExportConfig(FrigateBaseModel):
|
|
timelapse_args: str = Field(
|
|
default=DEFAULT_TIME_LAPSE_FFMPEG_ARGS, title="Timelapse Args"
|
|
)
|
|
|
|
|
|
class RecordConfig(FrigateBaseModel):
|
|
enabled: bool = Field(default=False, title="Enable record on all cameras.")
|
|
sync_recordings: bool = Field(
|
|
default=False, title="Sync recordings with disk on startup and once a day."
|
|
)
|
|
expire_interval: int = Field(
|
|
default=60,
|
|
title="Number of minutes to wait between cleanup runs.",
|
|
)
|
|
retain: RecordRetainConfig = Field(
|
|
default_factory=RecordRetainConfig, title="Record retention settings."
|
|
)
|
|
detections: EventsConfig = Field(
|
|
default_factory=EventsConfig, title="Detection specific retention settings."
|
|
)
|
|
alerts: EventsConfig = Field(
|
|
default_factory=EventsConfig, title="Alert specific retention settings."
|
|
)
|
|
export: RecordExportConfig = Field(
|
|
default_factory=RecordExportConfig, title="Recording Export Config"
|
|
)
|
|
preview: RecordPreviewConfig = Field(
|
|
default_factory=RecordPreviewConfig, title="Recording Preview Config"
|
|
)
|
|
enabled_in_config: Optional[bool] = Field(
|
|
default=None, title="Keep track of original state of recording."
|
|
)
|
|
|
|
@property
|
|
def event_pre_capture(self) -> int:
|
|
return max(
|
|
self.alerts.pre_capture,
|
|
self.detections.pre_capture,
|
|
)
|