| name | frigate-configurator |
| description | Configure Frigate NVR with optimized YAML, object detection, recording, zones, and hardware acceleration. Use when setting up Frigate cameras, troubleshooting detection issues, configuring Coral TPU/OpenVINO, or integrating with Home Assistant. |
Frigate NVR Configuration Expert
Comprehensive Frigate NVR configuration assistance with optimized YAML generation, detector setup, and troubleshooting.
BEFORE YOU START
This skill prevents 12+ common errors and saves ~60% tokens on Frigate configuration.
| Metric | Without Skill | With Skill |
|---|
| Setup Time | 2-4 hours | 30-45 min |
| Common Errors | 12+ | 0 |
| Token Usage | ~15,000 | ~6,000 |
Known Issues This Skill Prevents
- Bus errors from insufficient shared memory allocation
- Green/distorted video from incorrect resolution configuration
- Database locked errors when using network storage for SQLite
- Missing audio in recordings due to default audio stripping
- MQTT connection failures from using localhost in Docker
- Coral TPU not detected due to missing device passthrough
- High CPU usage from missing hardware acceleration
- False positives from missing motion masks on timestamps
- No alerts triggered due to misconfigured required_zones
- Recording corruption from h265 streams without transcoding
- go2rtc WebRTC failures from missing STUN configuration
- Object detection misses from wrong detect stream resolution
Quick Start
Step 1: Create Minimal Configuration
mqtt:
enabled: false
cameras:
front_door:
ffmpeg:
inputs:
- path: rtsp://user:pass@192.168.1.100:554/stream1
roles:
- detect
detect:
width: 1280
height: 720
fps: 5
Why this matters: Start with the absolute minimum to verify camera connectivity before adding complexity. Frigate requires explicit detect stream role assignment.
Step 2: Add Hardware-Accelerated Detector
detectors:
coral:
type: edgetpu
device: usb
detectors:
ov:
type: openvino
device: GPU
Why this matters: CPU detection is not recommended for production. Even a single USB Coral TPU dramatically reduces CPU usage and improves detection latency.
Step 3: Enable Recording with Retention
record:
enabled: true
retain:
days: 1
mode: motion
alerts:
retain:
days: 14
detections:
retain:
days: 7
cameras:
front_door:
ffmpeg:
inputs:
- path: rtsp://user:pass@192.168.1.100:554/stream1
roles:
- detect
- path: rtsp://user:pass@192.168.1.100:554/stream2
roles:
- record
Why this matters: Use separate streams for detect (low-res) and record (high-res) to optimize performance. Retention modes prevent storage from filling up.
Critical Rules
Always Do
- Use
width and height that match your camera's ACTUAL resolution (verify with VLC)
- Set
detect fps between 5-10 (higher wastes resources, lower misses events)
- Use separate streams for
detect (sub-stream) and record (main stream)
- Allocate adequate
shm-size in Docker (64MB minimum per camera)
- Create motion masks for timestamp overlays and areas with constant motion
- Use environment variables for credentials:
{FRIGATE_RTSP_PASSWORD}
- Test RTSP URLs in VLC first before adding to Frigate config
Never Do
- Never use
localhost or 127.0.0.1 for MQTT inside Docker containers
- Never set detect resolution higher than 1280x720 (wastes detector capacity)
- Never enable recording without specifying retention policy
- Never mount
/media/frigate on network storage without relocating database
- Never mix multiple detector types for object detection (e.g., Coral + OpenVINO)
- Never use UDP RTSP transport without explicit configuration (TCP is default)
Common Mistakes
Wrong:
cameras:
cam1:
ffmpeg:
inputs:
- path: rtsp://192.168.1.100/stream
roles:
- detect
- record
detect:
width: 1920
height: 1080
fps: 30
Correct:
cameras:
cam1:
ffmpeg:
inputs:
- path: rtsp://192.168.1.100/substream
roles:
- detect
- path: rtsp://192.168.1.100/mainstream
roles:
- record
detect:
width: 1280
height: 720
fps: 5
Why: Using 1080p@30fps for detection wastes resources. Detection works best at 720p or lower at 5fps. Always use the camera's sub-stream for detection and main stream for recording.
Known Issues Prevention
| Issue | Root Cause | Solution |
|---|
| Bus Error | Insufficient shared memory | Set shm-size: 256mb in docker-compose |
| Database Locked | SQLite on network storage | Use database.path: /config/frigate.db |
| Green/Distorted Video | Wrong resolution in config | Match camera's actual output resolution |
| No Audio in Recordings | Default audio removal | Use preset-record-generic-audio-aac |
| MQTT Connection Failed | localhost in Docker | Use host IP address instead |
| Coral Not Detected | Missing device passthrough | Add /dev/bus/usb to Docker devices |
| High CPU Usage | Missing hwaccel | Add appropriate preset (vaapi/qsv/nvidia) |
| Missing Alerts | No required_zones | Configure zones with review.alerts.required_zones |
| UDP Stream Failures | TCP is default in Frigate | Add preset-rtsp-udp to input args |
Configuration Reference
config.yml Structure
mqtt:
enabled: true
host: 192.168.1.50
port: 1883
user: "{FRIGATE_MQTT_USER}"
password: "{FRIGATE_MQTT_PASSWORD}"
detectors:
coral:
type: edgetpu
device: usb
objects:
track:
- person
- car
- dog
- cat
filters:
person:
min_area: 5000
max_area: 100000
threshold: 0.7
record:
enabled: true
retain:
days: 1
mode: motion
alerts:
retain:
days: 14
detections:
retain:
days: 7
snapshots:
enabled: true
retain:
default: 7
cameras:
front_door:
enabled: true
ffmpeg:
inputs:
- path: "rtsp://{FRIGATE_RTSP_USER}:{FRIGATE_RTSP_PASSWORD}@192.168.1.100:554/stream1"
input_args: preset-rtsp-restream
roles:
- detect
- path: "rtsp://{FRIGATE_RTSP_USER}:{FRIGATE_RTSP_PASSWORD}@192.168.1.100:554/stream0"
input_args: preset-rtsp-restream
roles:
- record
output_args:
record: preset-record-generic-audio-aac
detect:
width: 1280
height: 720
fps: 5
motion:
mask:
- 0,0,200,0,200,100,0,100
zones:
front_yard:
coordinates: 100,500,400,500,400,720,100,720
objects:
- person
- car
review:
alerts:
required_zones:
- front_yard
Key settings:
detect.fps: 5 is optimal for most cameras (reduces detector load)
detect.width/height: Must match actual camera sub-stream resolution
record.retain.mode: Use motion or active_objects to save storage
motion.mask: Define polygons as comma-separated coordinates
zones.coordinates: Bottom-center of bounding box determines zone presence
Hardware Acceleration Presets
Intel (6th Gen+)
ffmpeg:
hwaccel_args: preset-intel-qsv-h264
ffmpeg:
hwaccel_args: preset-vaapi
NVIDIA GPU
ffmpeg:
hwaccel_args: preset-nvidia
Requires NVIDIA Container Toolkit:
services:
frigate:
runtime: nvidia
environment:
- NVIDIA_VISIBLE_DEVICES=all
AMD GPU
ffmpeg:
hwaccel_args: preset-vaapi
environment:
- LIBVA_DRIVER_NAME=radeonsi
Raspberry Pi
ffmpeg:
hwaccel_args: preset-rpi-64-h264
Requires: gpu_mem=128 in /boot/config.txt and device mapping in Docker.
Object Detector Types
USB Coral TPU
detectors:
coral:
type: edgetpu
device: usb
Docker device mapping:
devices:
- /dev/bus/usb:/dev/bus/usb
M.2/PCIe Coral TPU
detectors:
coral:
type: edgetpu
device: pci
OpenVINO (Intel)
detectors:
ov:
type: openvino
device: GPU
model:
path: /openvino-model/ssdlite_mobilenet_v2.xml
width: 300
height: 300
ONNX (Multi-GPU)
detectors:
onnx:
type: onnx
Advanced Features
Zone-Based Speed Estimation
zones:
driveway:
coordinates: 100,500,400,500,400,720,100,720
distances:
- "100,500|400,500|20ft"
speed:
threshold: 15
Audio Detection
audio:
enabled: true
listen:
- bark
- fire_alarm
- scream
- speech
cameras:
front_door:
ffmpeg:
inputs:
- path: rtsp://camera/stream
roles:
- audio
GenAI Event Descriptions
genai:
enabled: true
provider: ollama
base_url: http://192.168.1.100:11434
model: llava
Face Recognition (Frigate+)
face_recognition:
enabled: true
threshold: 0.6
cameras:
front_door:
detect:
width: 1280
License Plate Recognition
lpr:
enabled: true
cameras:
driveway:
lpr:
enabled: true
go2rtc Integration
go2rtc:
streams:
front_door:
- rtsp://user:pass@192.168.1.100:554/stream1
- "ffmpeg:front_door#video=copy#audio=opus"
webrtc:
candidates:
- 192.168.1.50:8555
- stun:8555
Docker Compose Template
services:
frigate:
container_name: frigate
image: ghcr.io/blakeblackshear/frigate:stable
restart: unless-stopped
shm_size: "256mb"
devices:
- /dev/bus/usb:/dev/bus/usb
- /dev/dri/renderD128:/dev/dri/renderD128
volumes:
- ./config:/config
- ./storage:/media/frigate
- type: tmpfs
target: /tmp/cache
tmpfs:
size: 1000000000
ports:
- "8971:8971"
- "8554:8554"
- "8555:8555/tcp"
- "8555:8555/udp"
environment:
FRIGATE_RTSP_USER: admin
FRIGATE_RTSP_PASSWORD: ${RTSP_PASSWORD}
FRIGATE_MQTT_USER: frigate
FRIGATE_MQTT_PASSWORD: ${MQTT_PASSWORD}
Bundled Resources
Templates
Located in templates/:
References
Located in references/:
Scripts
Located in scripts/:
validate-config.sh - Validate config syntax before applying
Dependencies
Required
| Package | Version | Purpose |
|---|
| Docker | 20.10+ | Container runtime |
| docker-compose | 2.0+ | Service orchestration |
Optional
| Package | Version | Purpose |
|---|
| NVIDIA Container Toolkit | Latest | NVIDIA GPU support |
| Coral Edge TPU runtime | Latest | Coral TPU support |
Official Documentation
Troubleshooting
Camera Shows Offline
Symptoms: Camera fps shows 0, web UI shows offline status
Solution:
ffprobe -rtsp_transport tcp "rtsp://user:pass@ip:554/stream"
docker logs frigate 2>&1 | grep -i "camera_name"
High CPU Usage
Symptoms: CPU consistently above 80%, system becomes unresponsive
Solution:
- Enable hardware acceleration (see presets above)
- Reduce detect fps from 10 to 5
- Lower detect resolution to 720p or below
- Add Coral TPU for object detection
No Objects Detected
Symptoms: Motion detected but no object events created
Solution:
- Verify detector is configured and running: check
/api/stats
- Check object filters aren't too restrictive (min_area, threshold)
- Ensure detect stream resolution is correct
- Verify objects list includes desired types
Recording Not Working
Symptoms: Events show but no recordings available
Solution:
cameras:
cam1:
ffmpeg:
inputs:
- path: rtsp://camera/stream
roles:
- record
record:
enabled: true
Setup Checklist
Before deploying Frigate, verify: