Files
frigate/frigate/config/camera/mask.py
T

86 lines
2.9 KiB
Python
Raw Normal View History

2026-02-28 08:04:43 -06:00
"""Mask configuration for motion and object masks."""
2026-07-06 09:28:02 -08:00
from typing import Any
2026-02-28 08:04:43 -06:00
from pydantic import Field, field_serializer
from ..base import FrigateBaseModel
__all__ = ["MotionMaskConfig", "ObjectMaskConfig"]
class MotionMaskConfig(FrigateBaseModel):
"""Configuration for a single motion mask."""
2026-07-06 09:28:02 -08:00
friendly_name: str | None = Field(
2026-02-28 08:04:43 -06:00
default=None,
title="Friendly name",
description="A friendly name for this motion mask used in the Frigate UI",
)
enabled: bool = Field(
default=True,
title="Enabled",
description="Enable or disable this motion mask",
)
2026-07-06 09:28:02 -08:00
coordinates: str | list[str] = Field(
2026-02-28 08:04:43 -06:00
default="",
title="Coordinates",
description="Ordered x,y coordinates defining the motion mask polygon used to include/exclude areas.",
)
2026-07-06 09:28:02 -08:00
raw_coordinates: str | list[str] = ""
enabled_in_config: bool | None = Field(
2026-02-28 08:04:43 -06:00
default=None, title="Keep track of original state of motion mask."
)
def get_formatted_name(self, mask_id: str) -> str:
"""Return the friendly name if set, otherwise return a formatted version of the mask ID."""
if self.friendly_name:
return self.friendly_name
return mask_id.replace("_", " ").title()
@field_serializer("coordinates", when_used="json")
def serialize_coordinates(self, value: Any, info):
return self.raw_coordinates if self.raw_coordinates else value
@field_serializer("raw_coordinates", when_used="json")
def serialize_raw_coordinates(self, value: Any, info):
return None
class ObjectMaskConfig(FrigateBaseModel):
"""Configuration for a single object mask."""
2026-07-06 09:28:02 -08:00
friendly_name: str | None = Field(
2026-02-28 08:04:43 -06:00
default=None,
title="Friendly name",
description="A friendly name for this object mask used in the Frigate UI",
)
enabled: bool = Field(
default=True,
title="Enabled",
description="Enable or disable this object mask",
)
2026-07-06 09:28:02 -08:00
coordinates: str | list[str] = Field(
2026-02-28 08:04:43 -06:00
default="",
title="Coordinates",
description="Ordered x,y coordinates defining the object mask polygon used to include/exclude areas.",
)
2026-07-06 09:28:02 -08:00
raw_coordinates: str | list[str] = ""
enabled_in_config: bool | None = Field(
2026-02-28 08:04:43 -06:00
default=None, title="Keep track of original state of object mask."
)
@field_serializer("coordinates", when_used="json")
def serialize_coordinates(self, value: Any, info):
return self.raw_coordinates if self.raw_coordinates else value
@field_serializer("raw_coordinates", when_used="json")
def serialize_raw_coordinates(self, value: Any, info):
return None
def get_formatted_name(self, mask_id: str) -> str:
"""Return the friendly name if set, otherwise return a formatted version of the mask ID."""
if self.friendly_name:
return self.friendly_name
return mask_id.replace("_", " ").title()