Add VM config examples and Frigate NVR setup

vm-configs/:
- 100-frigate.conf.example: Frigate VM with Quadro P2200 #1, Coral USB, bays 1-8
- 101.conf.example: GPU VM with Quadro P2200 #2, bays 9-10
- 102.conf.example: Utility VM, bays 11-12

frigate/:
- docker-compose.yml: nvidia runtime + Coral USB passthrough, healthcheck
- config.yml: NVDEC hwaccel (preset-nvidia-h264), Coral USB detector,
  motion-based recording retain, per-object score thresholds

https://claude.ai/code/session_01TxTSnxDjgEVuNztdsWQjMD
This commit is contained in:
Claude
2026-04-24 01:07:21 +00:00
parent c0604be087
commit 273d6191bd
5 changed files with 253 additions and 0 deletions
+94
View File
@@ -0,0 +1,94 @@
# Frigate NVR configuration — VM 100 (Quadro P2200 + Google Coral USB)
# Docs: https://docs.frigate.video/configuration/
mqtt:
enabled: false # set to true and fill in host/port if you use Home Assistant or MQTT
# ── Object detection ─────────────────────────────────────────────────────────
# Coral USB handles all inference; CPU usage for detection is near zero.
detectors:
coral:
type: edgetpu
device: usb
# ── FFmpeg hardware decode (Quadro P2200 NVDEC) ───────────────────────────────
# These presets tell ffmpeg to use the GPU for H.264/H.265 decode.
# CPU usage per stream drops from ~1530% to ~12%.
ffmpeg:
hwaccel_args: preset-nvidia-h264 # default for H.264 cameras
# Per-camera override available if some cameras use H.265 — see cameras section below
# ── Global detect settings ───────────────────────────────────────────────────
detect:
enabled: true
width: 1280
height: 720
fps: 5 # Coral processes 5 fps for detection; recording captures full stream
# ── Recording ────────────────────────────────────────────────────────────────
record:
enabled: true
retain:
days: 7
mode: motion # only keep segments with motion (saves disk)
events:
retain:
default: 14 # keep event clips for 14 days regardless of motion-only rule
mode: active_objects
# ── Snapshots ────────────────────────────────────────────────────────────────
snapshots:
enabled: true
timestamp: true
bounding_box: true
retain:
default: 14
# ── Object filter defaults ────────────────────────────────────────────────────
objects:
track:
- person
- car
- dog
- cat
filters:
person:
min_area: 1500 # ignore very small detections (reduces false positives)
min_score: 0.6
threshold: 0.7
# ── Cameras ──────────────────────────────────────────────────────────────────
# Add one entry per camera. Duplicate and adjust as needed.
# Use {FRIGATE_RTSP_PASSWORD} to reference the env var from docker-compose.yml.
cameras:
front_door:
ffmpeg:
inputs:
- path: rtsp://admin:{FRIGATE_RTSP_PASSWORD}@192.168.1.XXX/stream1
roles:
- detect
- record
# Uncomment to override hwaccel for H.265 cameras:
# ffmpeg:
# hwaccel_args: preset-nvidia-h265
# back_yard:
# ffmpeg:
# inputs:
# - path: rtsp://admin:{FRIGATE_RTSP_PASSWORD}@192.168.1.XXX/stream1
# roles:
# - detect
# - record
# ── Birdseye view (optional multi-camera overview) ────────────────────────────
birdseye:
enabled: true
mode: motion # only show cameras with recent motion
# ── Telemetry / stats ─────────────────────────────────────────────────────────
telemetry:
stats:
amd_gpu_stats: false
intel_gpu_stats: false
network_bandwidth: false
+39
View File
@@ -0,0 +1,39 @@
services:
frigate:
container_name: frigate
image: ghcr.io/blakeblackshear/frigate:stable
restart: unless-stopped
privileged: true # needed for Coral USB device access
runtime: nvidia # NVIDIA Container Toolkit — enables NVDEC in ffmpeg
shm_size: "256mb" # shared memory for decoded frame buffers
# increase to 512mb if running 8+ cameras
environment:
NVIDIA_VISIBLE_DEVICES: all
NVIDIA_DRIVER_CAPABILITIES: compute,utility,video
# Set RTSP credentials here and reference as {FRIGATE_RTSP_PASSWORD} in config.yml
FRIGATE_RTSP_PASSWORD: "changeme"
devices:
# Coral USB — exposes full USB bus so both pre/post-init VID:PIDs work
- /dev/bus/usb:/dev/bus/usb
volumes:
- /etc/localtime:/etc/localtime:ro
- ./config.yml:/config/config.yml:ro
- /mnt/frigate:/media/frigate # recordings and snapshots — point at your drive mount
ports:
- "5000:5000" # Frigate web UI
- "8554:8554" # RTSP restream
- "8555:8555/tcp" # WebRTC
- "8555:8555/udp" # WebRTC
# healthcheck so docker knows when Frigate is actually ready
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5000/api/version"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s