from typing import Optional from pydantic import Field from ..base import FrigateBaseModel from .record import RetainModeEnum __all__ = ["SnapshotsConfig", "RetainConfig"] class RetainConfig(FrigateBaseModel): default: float = Field( default=10, title="Default retention", description="Default number of days to retain snapshots.", ) mode: RetainModeEnum = Field( default=RetainModeEnum.motion, title="Retention mode", description="Mode for retention: all (save all segments), motion (save segments with motion), or active_objects (save segments with active objects).", ) objects: dict[str, float] = Field( default_factory=dict, title="Object retention", description="Per-object overrides for snapshot retention days.", ) class SnapshotsConfig(FrigateBaseModel): enabled: bool = Field( default=False, title="Enable snapshots", description="Enable or disable saving snapshots for all cameras; can be overridden per-camera.", ) timestamp: bool = Field( default=False, title="Timestamp overlay", description="Overlay a timestamp on snapshots from API.", ) bounding_box: bool = Field( default=True, title="Bounding box overlay", description="Draw bounding boxes for tracked objects on snapshots from API.", ) crop: bool = Field( default=False, title="Crop snapshot", description="Crop snapshots from API to the detected object's bounding box.", ) required_zones: list[str] = Field( default_factory=list, title="Required zones", description="Zones an object must enter for a snapshot to be saved.", ) height: Optional[int] = Field( default=None, title="Snapshot height", description="Height (pixels) to resize snapshots from API to; leave empty to preserve original size.", ) retain: RetainConfig = Field( default_factory=RetainConfig, title="Snapshot retention", description="Retention settings for snapshots including default days and per-object overrides.", ) quality: int = Field( default=60, title="Snapshot quality", description="Encode quality for saved snapshots (0-100).", ge=0, le=100, )