{ config, tools, ... }: let hostname = tools.build_hostname "frigate"; mask_cidr = tools.mask_cidr; camera = tools.build_ip "camera-entree-4"; user = "admin"; # use yours pass = "admin"; # use yours in { services.frigate = { enable = true; hostname = hostname; checkConfig = false; settings = { auth = { enabled = false; trusted_proxies = [ mask_cidr ]; }; proxy = { header_map = { user = "X-authentik-name"; role = "X-authentik-groups"; }; separator = "|"; default_role = "admin"; }; # database.path => postgres ?? mqtt = { enabled = true; host = tools.build_hostname "mqtt"; user = "frigate"; password = "pouet"; # Auth ??? }; detect = { enabled = true; fps = 5; }; detectors.cpu.type = "cpu"; objects.track = [ "person" "car" "bird" "cat" "dog" ]; motion.enabled = true; # genai => ollama semantic_search = { enabled = true; model_size = "small"; }; review.detections = { enabled = true; labels = [ "car" "person" "cat" "dog" ]; }; record = { enabled = true; retain.days = 2; preview.quality = "medium"; }; snapshots = { enabled = true; retain.default = 7; }; # face_recognition = { # enabled = true; # model_size = "small"; # }; # lpr.enabled = true; # classification.bird.enabled = true; cameras = { front = { enabled = true; ffmpeg.inputs = [ { # TODO: Move this elsewhere path = "rtsp://${user}:${pass}@${camera}:554/?streamtype=0&subtype=1"; roles = [ "audio" "detect" "record" ]; } ]; onvif = { host = camera; port = 8899; user = user; password = pass; }; zones = { ZoneA = { coordinates = "0,0.036,0.985,0.041,0.985,0.494,0.01,0.496"; loitering_time = 0; }; ZoneB = { coordinates = "0,0.502,0,1,1,1,1,0.501"; inertia = 3; loitering_time = 0; }; }; # review.alerts.required_zones = [ # "ZoneA" # "ZoneB" # ]; }; }; }; # vaapiDriver ... }; }