2025-02-20 22:07:41 -03:00
|
|
|
import os
|
2024-09-22 18:56:57 +03:00
|
|
|
import re
|
|
|
|
|
|
2025-03-01 05:35:09 +01:00
|
|
|
INSTALL_DIR = "/opt/frigate"
|
2023-04-23 13:35:40 -03:00
|
|
|
CONFIG_DIR = "/config"
|
|
|
|
|
DEFAULT_DB_PATH = f"{CONFIG_DIR}/frigate.db"
|
2023-04-30 13:32:36 -05:00
|
|
|
MODEL_CACHE_DIR = f"{CONFIG_DIR}/model_cache"
|
2021-06-06 21:24:36 -04:00
|
|
|
BASE_DIR = "/media/frigate"
|
|
|
|
|
CLIPS_DIR = f"{BASE_DIR}/clips"
|
2023-06-08 05:32:35 -06:00
|
|
|
EXPORT_DIR = f"{BASE_DIR}/exports"
|
2024-10-22 16:05:48 -06:00
|
|
|
FACE_DIR = f"{CLIPS_DIR}/faces"
|
2025-02-18 07:46:29 -07:00
|
|
|
THUMB_DIR = f"{CLIPS_DIR}/thumbs"
|
2024-10-22 16:05:48 -06:00
|
|
|
RECORD_DIR = f"{BASE_DIR}/recordings"
|
2025-07-07 09:03:57 -05:00
|
|
|
TRIGGER_DIR = f"{CLIPS_DIR}/triggers"
|
2022-12-31 07:54:10 -07:00
|
|
|
BIRDSEYE_PIPE = "/tmp/cache/birdseye"
|
2021-02-17 07:23:32 -06:00
|
|
|
CACHE_DIR = "/tmp/cache"
|
2023-07-01 07:18:33 -06:00
|
|
|
FRIGATE_LOCALHOST = "http://127.0.0.1:5000"
|
2022-04-03 15:00:11 -05:00
|
|
|
PLUS_ENV_VAR = "PLUS_API_KEY"
|
|
|
|
|
PLUS_API_HOST = "https://api.frigate.video"
|
2022-11-02 06:00:54 -06:00
|
|
|
|
2024-12-01 10:39:35 -06:00
|
|
|
SHM_FRAMES_VAR = "SHM_MAX_FRAMES"
|
|
|
|
|
|
2024-09-17 18:41:46 +03:00
|
|
|
# Attribute & Object constants
|
2023-06-28 04:51:53 -06:00
|
|
|
|
2024-09-28 07:49:04 -06:00
|
|
|
DEFAULT_ATTRIBUTE_LABEL_MAP = {
|
|
|
|
|
"person": ["amazon", "face"],
|
2024-10-16 15:22:34 -06:00
|
|
|
"car": [
|
|
|
|
|
"amazon",
|
|
|
|
|
"an_post",
|
2025-07-17 08:29:50 -05:00
|
|
|
"canada_post",
|
2024-10-16 15:22:34 -06:00
|
|
|
"dhl",
|
|
|
|
|
"dpd",
|
|
|
|
|
"fedex",
|
|
|
|
|
"gls",
|
|
|
|
|
"license_plate",
|
|
|
|
|
"nzpost",
|
|
|
|
|
"postnl",
|
|
|
|
|
"postnord",
|
|
|
|
|
"purolator",
|
2025-07-17 08:29:50 -05:00
|
|
|
"royal_mail",
|
2024-10-16 15:22:34 -06:00
|
|
|
"ups",
|
|
|
|
|
"usps",
|
|
|
|
|
],
|
2025-04-15 10:40:12 -05:00
|
|
|
"motorcycle": ["license_plate"],
|
2023-06-28 04:51:53 -06:00
|
|
|
}
|
2023-10-20 17:29:52 -06:00
|
|
|
LABEL_CONSOLIDATION_MAP = {
|
|
|
|
|
"car": 0.8,
|
|
|
|
|
"face": 0.5,
|
|
|
|
|
}
|
|
|
|
|
LABEL_CONSOLIDATION_DEFAULT = 0.9
|
2024-02-05 16:52:06 -07:00
|
|
|
LABEL_NMS_MAP = {
|
|
|
|
|
"car": 0.6,
|
|
|
|
|
}
|
|
|
|
|
LABEL_NMS_DEFAULT = 0.4
|
2023-06-28 04:51:53 -06:00
|
|
|
|
2024-09-17 18:41:46 +03:00
|
|
|
# Audio constants
|
2023-07-01 07:18:33 -06:00
|
|
|
|
|
|
|
|
AUDIO_DURATION = 0.975
|
|
|
|
|
AUDIO_FORMAT = "s16le"
|
|
|
|
|
AUDIO_MAX_BIT_RANGE = 32768.0
|
|
|
|
|
AUDIO_SAMPLE_RATE = 16000
|
2023-07-17 05:07:15 -06:00
|
|
|
AUDIO_MIN_CONFIDENCE = 0.5
|
2023-07-01 07:18:33 -06:00
|
|
|
|
2024-09-17 18:41:46 +03:00
|
|
|
# DB constants
|
2024-04-07 14:37:12 -06:00
|
|
|
|
|
|
|
|
MAX_WAL_SIZE = 10 # MB
|
|
|
|
|
|
2024-09-19 13:29:58 -06:00
|
|
|
# Ffmpeg constants
|
2024-01-01 09:36:40 -06:00
|
|
|
|
2025-02-20 22:07:41 -03:00
|
|
|
DEFAULT_FFMPEG_VERSION = os.environ.get("DEFAULT_FFMPEG_VERSION", "")
|
|
|
|
|
INCLUDED_FFMPEG_VERSIONS = os.environ.get("INCLUDED_FFMPEG_VERSIONS", "").split(":")
|
|
|
|
|
LIBAVFORMAT_VERSION_MAJOR = int(os.environ.get("LIBAVFORMAT_VERSION_MAJOR", "59"))
|
2024-01-01 09:36:40 -06:00
|
|
|
FFMPEG_HWACCEL_NVIDIA = "preset-nvidia"
|
|
|
|
|
FFMPEG_HWACCEL_VAAPI = "preset-vaapi"
|
2024-09-05 18:27:32 -06:00
|
|
|
FFMPEG_HWACCEL_VULKAN = "preset-vulkan"
|
2025-07-21 14:07:51 +02:00
|
|
|
FFMPEG_HWACCEL_RKMPP = "preset-rkmpp"
|
2025-08-25 12:40:36 -06:00
|
|
|
FFMPEG_HWACCEL_AMF = "preset-amd-amf"
|
2025-01-03 08:11:18 -06:00
|
|
|
FFMPEG_HVC1_ARGS = ["-tag:v", "hvc1"]
|
2024-01-01 09:36:40 -06:00
|
|
|
|
2024-09-17 18:41:46 +03:00
|
|
|
# Regex constants
|
2022-11-02 06:00:54 -06:00
|
|
|
|
2023-05-29 12:31:17 +02:00
|
|
|
REGEX_CAMERA_NAME = r"^[a-zA-Z0-9_-]+$"
|
|
|
|
|
REGEX_RTSP_CAMERA_USER_PASS = r":\/\/[a-zA-Z0-9_-]+:[\S]+@"
|
|
|
|
|
REGEX_HTTP_CAMERA_USER_PASS = r"user=[a-zA-Z0-9_-]+&password=[\S]+"
|
2024-09-22 18:56:57 +03:00
|
|
|
REGEX_JSON = re.compile(r"^\s*\{")
|
2022-11-28 18:24:20 -07:00
|
|
|
|
|
|
|
|
# Known Driver Names
|
|
|
|
|
|
|
|
|
|
DRIVER_ENV_VAR = "LIBVA_DRIVER_NAME"
|
|
|
|
|
DRIVER_AMD = "radeonsi"
|
|
|
|
|
DRIVER_INTEL_i965 = "i965"
|
|
|
|
|
DRIVER_INTEL_iHD = "iHD"
|
2023-04-26 07:25:26 -06:00
|
|
|
|
2024-03-11 17:31:05 -06:00
|
|
|
# Preview Values
|
|
|
|
|
|
|
|
|
|
PREVIEW_FRAME_TYPE = "webp"
|
|
|
|
|
|
2023-04-26 07:25:26 -06:00
|
|
|
# Record Values
|
|
|
|
|
|
2023-11-05 13:30:29 -07:00
|
|
|
CACHE_SEGMENT_FORMAT = "%Y%m%d%H%M%S%z"
|
2023-11-18 14:37:06 -07:00
|
|
|
MAX_PRE_CAPTURE = 60
|
2023-04-26 07:25:26 -06:00
|
|
|
MAX_SEGMENT_DURATION = 600
|
2023-11-18 14:37:06 -07:00
|
|
|
MAX_SEGMENTS_IN_CACHE = 6
|
2023-06-08 05:32:35 -06:00
|
|
|
MAX_PLAYLIST_SECONDS = 7200 # support 2 hour segments for a single playlist to account for cameras with inconsistent segment times
|
2023-07-26 04:55:08 -06:00
|
|
|
|
|
|
|
|
# Internal Comms Topics
|
|
|
|
|
|
|
|
|
|
INSERT_MANY_RECORDINGS = "insert_many_recordings"
|
2023-12-03 07:16:01 -07:00
|
|
|
INSERT_PREVIEW = "insert_preview"
|
2023-10-18 17:21:52 -06:00
|
|
|
REQUEST_REGION_GRID = "request_region_grid"
|
2024-02-20 16:26:09 -07:00
|
|
|
UPSERT_REVIEW_SEGMENT = "upsert_review_segment"
|
2024-04-24 07:44:28 -06:00
|
|
|
CLEAR_ONGOING_REVIEW_SEGMENTS = "clear_ongoing_review_segments"
|
2024-04-30 07:09:50 -06:00
|
|
|
UPDATE_CAMERA_ACTIVITY = "update_camera_activity"
|
2025-08-25 13:40:21 -05:00
|
|
|
UPDATE_AUDIO_ACTIVITY = "update_audio_activity"
|
|
|
|
|
EXPIRE_AUDIO_ACTIVITY = "expire_audio_activity"
|
2025-11-24 07:34:56 -06:00
|
|
|
UPDATE_AUDIO_TRANSCRIPTION_STATE = "update_audio_transcription_state"
|
2024-06-21 17:30:19 -04:00
|
|
|
UPDATE_EVENT_DESCRIPTION = "update_event_description"
|
2025-08-10 05:57:54 -06:00
|
|
|
UPDATE_REVIEW_DESCRIPTION = "update_review_description"
|
2024-10-07 15:30:45 -05:00
|
|
|
UPDATE_MODEL_STATE = "update_model_state"
|
2024-10-10 14:28:43 -05:00
|
|
|
UPDATE_EMBEDDINGS_REINDEX_PROGRESS = "handle_embeddings_reindex_progress"
|
2025-06-08 13:06:17 -05:00
|
|
|
UPDATE_BIRDSEYE_LAYOUT = "update_birdseye_layout"
|
2025-02-10 20:47:15 -06:00
|
|
|
NOTIFICATION_TEST = "notification_test"
|
2023-10-22 11:59:13 -05:00
|
|
|
|
2025-07-18 11:23:06 -06:00
|
|
|
# IO Nice Values
|
|
|
|
|
|
|
|
|
|
PROCESS_PRIORITY_HIGH = 0
|
|
|
|
|
PROCESS_PRIORITY_MED = 10
|
|
|
|
|
PROCESS_PRIORITY_LOW = 19
|
|
|
|
|
|
2024-07-01 16:08:14 -06:00
|
|
|
# Stats Values
|
|
|
|
|
|
|
|
|
|
FREQUENCY_STATS_POINTS = 15
|
|
|
|
|
|
2023-10-22 11:59:13 -05:00
|
|
|
# Autotracking
|
|
|
|
|
|
2023-11-01 06:12:43 -05:00
|
|
|
AUTOTRACKING_MAX_AREA_RATIO = 0.6
|
2023-10-22 11:59:13 -05:00
|
|
|
AUTOTRACKING_MOTION_MIN_DISTANCE = 20
|
|
|
|
|
AUTOTRACKING_MOTION_MAX_POINTS = 500
|
|
|
|
|
AUTOTRACKING_MAX_MOVE_METRICS = 500
|
2023-12-28 07:48:44 -06:00
|
|
|
AUTOTRACKING_ZOOM_OUT_HYSTERESIS = 1.1
|
|
|
|
|
AUTOTRACKING_ZOOM_IN_HYSTERESIS = 0.95
|
2023-10-22 11:59:13 -05:00
|
|
|
AUTOTRACKING_ZOOM_EDGE_THRESHOLD = 0.05
|
2024-05-18 11:36:13 -05:00
|
|
|
|
|
|
|
|
# Auth
|
|
|
|
|
|
|
|
|
|
JWT_SECRET_ENV_VAR = "FRIGATE_JWT_SECRET"
|
|
|
|
|
PASSWORD_HASH_ALGORITHM = "pbkdf2_sha256"
|
2025-04-30 08:42:53 -05:00
|
|
|
|
|
|
|
|
# Queues
|
|
|
|
|
|
|
|
|
|
FAST_QUEUE_TIMEOUT = 0.00001 # seconds
|