-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathconfig.example.yml
More file actions
128 lines (115 loc) · 4.45 KB
/
config.example.yml
File metadata and controls
128 lines (115 loc) · 4.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
cameras:
- name: front_door
url: rtsp://user:pass@192.168.1.100:554/stream1
record_url: rtsp://user:pass@192.168.1.100:554/stream0 # optional high-res stream
# Optional per-camera override for retain_days. Unset = use recording.retain_days.
# retain_days: 3
detect:
enabled: true
width: 640
height: 480
fps: 5
record:
width: 1920
height: 1080
fps: 15
zones:
- name: driveway
points:
- [0.10, 0.50]
- [0.90, 0.50]
- [0.90, 1.00]
- [0.10, 1.00]
labels: [person, car]
track_presence: true
face_recognition: false
detect:
model_path: "" # path to ONNX model (e.g., yolov8n.onnx)
score_threshold: 0.5
object_match_threshold: 0.65 # cosine similarity threshold for object re-ID (0.0-1.0)
motion:
pixel_threshold: 25
min_area: 200
background_alpha: 0.05
min_region_score: 0.02
recording:
path: ./recordings
continuous: true # record continuously, not just events
segment_length: 10m # length of each continuous segment
pre_capture: 5s # seconds before event to include in clip
post_capture: 10s # seconds after event to include in clip
retain_days: 7 # delete continuous segments after N days
event_retain_days: 30 # keep event clips longer
# Maximum total storage used by segments+clips. Triggers proactive trimming
# of the oldest segments. Recommended: 80-90% of the recording disk size.
# Default: empty (unlimited — relies purely on retain_days, risky on constrained disks).
# max_storage: "400GB"
# Minimum free space required to continue recording. Recording pauses below
# this floor. The effective threshold is max(min_disk_free, 2x largest recent segment).
# Should be at least 2x your largest segment size. Default: "2GB".
min_disk_free: "2GB"
# Emergency mode: when disk drops below min_disk_free and normal age-based
# cleanup cannot recover space, drop the oldest segments regardless of
# retain_days, preserving only min_retention. Prevents silent recording
# pause when the disk fills completely.
urgent_cleanup:
enabled: true
min_retention: 1h # keep at least this much, even in emergency
batch_size: 50 # max segments dropped per emergency pass
# Tiered storage: scheduled overnight recompression of old segments to
# smaller resolutions, freeing disk while preserving history.
tiered_storage:
enabled: false
after_days: 3 # only recompress segments older than this
target_width: 1280
target_height: 720
schedule: "22:00-06:00" # local time; may span midnight
interval: 30s # how often the worker processes one segment in-window
priority: largest # "largest" reclaims disk fastest; "oldest" processes FIFO
events:
cooldown_seconds: 30
retain_days: 90
snapshot_path: ./snapshots
snapshot_quality: 85
storage:
db_path: ./vedetta.db
mqtt:
enabled: false
host: 127.0.0.1
port: 1883
topic: vedetta
updates:
check_enabled: true
check_interval: 24h
api:
host: 0.0.0.0
port: 5050
exposure: lan
# allowed_origins:
# - https://vedetta.example.com
# trusted_proxies:
# - 127.0.0.1/32
# tls_cert: /etc/vedetta/tls.crt
# tls_key: /etc/vedetta/tls.key
auth:
users:
- username: admin
# example only: replace with `vedetta auth hash-password <password>`
password_hash: "$2a$10$7EqJtq98hPqEX7fNZaFWoOHi8V6I5WJFlQ7Y7S6d6n9zQ0jD4S3yu"
# proxy:
# header: "Remote-User" # trust this header from reverse proxies (Authelia, Authentik, oauth2-proxy)
# # requires api.trusted_proxies to be set
# # Authelia: "Remote-User" (default)
# # Authentik: "X-authentik-username"
# # oauth2-proxy: "X-Forwarded-User"
notifications:
# Web push VAPID subscriber claim (RFC 8292 "sub"). Used by the push
# service operator (Apple, Google, Mozilla) to reach you about abuse.
# Must be a raw email address (e.g. "admin@example.com") — do NOT
# include the "mailto:" prefix, the push library adds it. You can also
# use an https:// URL like "https://vedetta.example.com/contact".
#
# Apple's push relay rejects the JWT with HTTP 403 BadJwtToken if the
# value is not well-formed. Unset = fallback to "admin@example.com"
# with a startup warning; set a real contact for production.
vapid_subscriber: admin@example.com