## frigate-notify config ## Docs: https://frigate-notify.0x2142.com ## ## Secrets and per-deployment values come from .env via the FN_* env vars. ## frigate-notify uses Viper-style env var lookup with DOUBLE underscores ## between YAML levels: ## frigate.server -> FN_FRIGATE__SERVER ## frigate.public_url -> FN_FRIGATE__PUBLIC_URL ## frigate.mqtt.password -> FN_FRIGATE__MQTT__PASSWORD ## alerts.ntfy.server -> FN_ALERTS__NTFY__SERVER frigate: server: # FN_FRIGATE__SERVER ignoressl: true public_url: # FN_FRIGATE__PUBLIC_URL headers: startup_check: attempts: 5 interval: 30 webapi: enabled: false # MQTT below is the primary event source interval: 5 mqtt: enabled: true server: mosquitto # docker DNS name; constant for this stack port: 1883 clientid: frigate-notify username: frigate password: # FN_FRIGATE__MQTT__PASSWORD topic_prefix: frigate cameras: exclude: alerts: general: # Title shows the recognized name (face recognition or LPR) when present, # otherwise the generic label. Camera names are auto-titlecased by # frigate-notify. title: 'Frigate - {{ if .SubLabel }}{{ .SubLabel }}{{ else }}{{ .Label }}{{ end }} at {{ .Camera }}' timeformat: nosnap: allow snap_bbox: snap_timestamp: snap_crop: # Face recognition runs slightly AFTER the initial event. Without this # delay, .SubLabel is empty and notifications always say "person". recheck_delay: 10 quiet: start: end: zones: unzoned: allow allow: block: labels: min_score: allow: block: sublabels: # Once face recognition reliably IDs household members, list their names # here to silence pings on them: # block: # - alex # - bob allow: block: discord: enabled: false webhook: template: gotify: enabled: false server: token: ignoressl: template: smtp: enabled: false server: port: tls: user: password: recipient: template: telegram: enabled: false chatid: token: template: pushover: enabled: false token: userkey: devices: priority: retry: expire: ttl: template: ntfy: enabled: true server: # FN_ALERTS__NTFY__SERVER topic: "frigate" ignoressl: false # Priority + emoji change based on whether the person is recognized. # Recognized -> priority 3 (normal) + wave; unknown -> priority 4 + alarm. headers: - X-Priority: '{{ if .SubLabel }}3{{ else }}4{{ end }}' - X-Tags: '{{ if .SubLabel }}wave{{ else }}rotating_light{{ end }}' template: | {{ if .SubLabel -}} {{ .SubLabel }} at {{ .Camera }} {{- else -}} {{ .Label }} at {{ .Camera }} {{- end }} {{ if gt (len .CurrentZones) 0 }} Zone: {{ range $i, $z := .CurrentZones }}{{ if $i }}, {{ end }}{{ $z }}{{ end }} {{- end }} Score: {{ printf "%.0f" (mul .TopScore 100) }}% Time: {{ .StartTime.Format "Mon 3:04 PM" }} webhook: enabled: false server: ignoressl: headers: template: monitor: enabled: false url: interval: ignoressl: