
Frigate Configurator
- 102 installs
- 14 repo stars
- Updated April 20, 2026
- nodnarbnitram/claude-code-extensions
Helps with ai & agent building tasks during AI-assisted development.
About
frigate-configurator is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.
- frigate-configurator
- AI & Agent Building
- AI-coding skill
Frigate Configurator by the numbers
- 102 all-time installs (skills.sh)
- Ranked #4,307 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/nodnarbnitram/claude-code-extensions --skill frigate-configuratorAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 102 |
|---|---|
| repo stars | ★ 14 |
| Last updated | April 20, 2026 |
| Repository | nodnarbnitram/claude-code-extensions ↗ |
What it does
Helps with ai & agent building tasks during AI-assisted development.
Files
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
1. Bus errors from insufficient shared memory allocation 2. Green/distorted video from incorrect resolution configuration 3. Database locked errors when using network storage for SQLite 4. Missing audio in recordings due to default audio stripping 5. MQTT connection failures from using localhost in Docker 6. Coral TPU not detected due to missing device passthrough 7. High CPU usage from missing hardware acceleration 8. False positives from missing motion masks on timestamps 9. No alerts triggered due to misconfigured required_zones 10. Recording corruption from h265 streams without transcoding 11. go2rtc WebRTC failures from missing STUN configuration 12. 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: 5Why 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
# OR for Intel with OpenVINO:
detectors:
ov:
type: openvino
device: GPUWhy 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:
- recordWhy 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
widthandheightthat match your camera's ACTUAL resolution (verify with VLC) - Set
detectfps between 5-10 (higher wastes resources, lower misses events) - Use separate streams for
detect(sub-stream) andrecord(main stream) - Allocate adequate
shm-sizein 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
localhostor127.0.0.1for MQTT inside Docker containers - Never set detect resolution higher than 1280x720 (wastes detector capacity)
- Never enable recording without specifying retention policy
- Never mount
/media/frigateon 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: 30Correct:
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: 5Why: 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 Configuration (optional but recommended)
mqtt:
enabled: true
host: 192.168.1.50
port: 1883
user: "{FRIGATE_MQTT_USER}"
password: "{FRIGATE_MQTT_PASSWORD}"
# Detector Configuration
detectors:
coral:
type: edgetpu
device: usb # or pci for M.2/PCIe
# Global Object Settings
objects:
track:
- person
- car
- dog
- cat
filters:
person:
min_area: 5000
max_area: 100000
threshold: 0.7
# Recording Settings
record:
enabled: true
retain:
days: 1
mode: motion
alerts:
retain:
days: 14
detections:
retain:
days: 7
# Snapshot Settings
snapshots:
enabled: true
retain:
default: 7
# Camera Configuration
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 # Timestamp area
zones:
front_yard:
coordinates: 100,500,400,500,400,720,100,720
objects:
- person
- car
review:
alerts:
required_zones:
- front_yardKey settings:
detect.fps: 5 is optimal for most cameras (reduces detector load)detect.width/height: Must match actual camera sub-stream resolutionrecord.retain.mode: Usemotionoractive_objectsto save storagemotion.mask: Define polygons as comma-separated coordinateszones.coordinates: Bottom-center of bounding box determines zone presence
Hardware Acceleration Presets
Intel (6th Gen+)
# For Intel gen8+ (prefer QSV)
ffmpeg:
hwaccel_args: preset-intel-qsv-h264 # or preset-intel-qsv-h265
# For Intel gen1-gen7 (use VAAPI)
ffmpeg:
hwaccel_args: preset-vaapiNVIDIA GPU
ffmpeg:
hwaccel_args: preset-nvidiaRequires NVIDIA Container Toolkit:
# docker-compose.yml
services:
frigate:
runtime: nvidia
environment:
- NVIDIA_VISIBLE_DEVICES=allAMD GPU
ffmpeg:
hwaccel_args: preset-vaapi
# docker-compose.yml
environment:
- LIBVA_DRIVER_NAME=radeonsiRaspberry Pi
# Raspberry Pi 4/5
ffmpeg:
hwaccel_args: preset-rpi-64-h264 # or preset-rpi-64-h265Requires: gpu_mem=128 in /boot/config.txt and device mapping in Docker.
Object Detector Types
USB Coral TPU
detectors:
coral:
type: edgetpu
device: usb # Single USB Coral
# device: usb:0 # First of multiple USB CoralsDocker device mapping:
devices:
- /dev/bus/usb:/dev/bus/usbM.2/PCIe Coral TPU
detectors:
coral:
type: edgetpu
device: pci
# device: pci:0 # First of multiple PCIe CoralsOpenVINO (Intel)
detectors:
ov:
type: openvino
device: GPU # or CPU
model:
path: /openvino-model/ssdlite_mobilenet_v2.xml
width: 300
height: 300ONNX (Multi-GPU)
detectors:
onnx:
type: onnx
# Automatically uses: ROCm (AMD), OpenVINO (Intel), TensorRT (NVIDIA)Advanced Features
Zone-Based Speed Estimation
zones:
driveway:
coordinates: 100,500,400,500,400,720,100,720
distances:
- "100,500|400,500|20ft" # 20 feet between points
speed:
threshold: 15 # Minimum mph to registerAudio Detection
audio:
enabled: true
listen:
- bark
- fire_alarm
- scream
- speech
cameras:
front_door:
ffmpeg:
inputs:
- path: rtsp://camera/stream
roles:
- audioGenAI Event Descriptions
genai:
enabled: true
provider: ollama
base_url: http://192.168.1.100:11434
model: llavaFace Recognition (Frigate+)
face_recognition:
enabled: true
threshold: 0.6
cameras:
front_door:
detect:
width: 1280 # Higher res improves face detectionLicense Plate Recognition
lpr:
enabled: true
cameras:
driveway:
lpr:
enabled: truego2rtc 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:8555Docker 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 # USB Coral
- /dev/dri/renderD128:/dev/dri/renderD128 # Intel GPU
volumes:
- ./config:/config
- ./storage:/media/frigate
- type: tmpfs
target: /tmp/cache
tmpfs:
size: 1000000000
ports:
- "8971:8971" # Web UI
- "8554:8554" # RTSP feeds
- "8555:8555/tcp" # WebRTC
- "8555:8555/udp" # WebRTC
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/:
- `docker-compose.yml` - Production-ready compose file
- `config-minimal.yml` - Minimal starter config
- `config-full.yml` - Full-featured config template
References
Located in references/:
- `detector-comparison.md` - Detector performance comparison
- `ffmpeg-presets.md` - All available FFmpeg presets
- `mqtt-topics.md` - MQTT topic reference
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:
# Test RTSP URL directly
ffprobe -rtsp_transport tcp "rtsp://user:pass@ip:554/stream"
# Check Docker logs
docker logs frigate 2>&1 | grep -i "camera_name"High CPU Usage
Symptoms: CPU consistently above 80%, system becomes unresponsive
Solution: 1. Enable hardware acceleration (see presets above) 2. Reduce detect fps from 10 to 5 3. Lower detect resolution to 720p or below 4. Add Coral TPU for object detection
No Objects Detected
Symptoms: Motion detected but no object events created
Solution: 1. Verify detector is configured and running: check /api/stats 2. Check object filters aren't too restrictive (min_area, threshold) 3. Ensure detect stream resolution is correct 4. Verify objects list includes desired types
Recording Not Working
Symptoms: Events show but no recordings available
Solution:
# Ensure record role is assigned
cameras:
cam1:
ffmpeg:
inputs:
- path: rtsp://camera/stream
roles:
- record # Must be explicitly set
record:
enabled: true # Must be trueSetup Checklist
Before deploying Frigate, verify:
- [ ] Docker and docker-compose installed
- [ ] RTSP URLs tested in VLC (note actual resolution)
- [ ] Camera credentials ready for environment variables
- [ ] Storage volume has adequate space (100GB+ recommended)
- [ ] Shared memory size configured (64MB per camera minimum)
- [ ] Hardware acceleration device mapped (if applicable)
- [ ] Coral TPU device mapped (if using)
- [ ] MQTT broker accessible (if integrating with Home Assistant)
- [ ] Port 8971 available for web UI
- [ ] Firewall allows required ports (8554, 8555 for streaming)
Frigate NVR Configuration Expert
Configure Frigate NVR with optimized YAML, object detection, recording, zones, and hardware acceleration.
| Status | Active |
| Version | 1.0.0 |
| Last Updated | 2025-12-27 |
| Confidence | 5/5 |
| Production Tested | https://docs.frigate.video/ |
What This Skill Does
This skill provides expert-level assistance for configuring and troubleshooting Frigate NVR, an AI-powered network video recorder with real-time object detection.
Core Capabilities
- Generate optimized Frigate YAML configurations for any camera setup
- Configure object detectors (Coral TPU, OpenVINO, ONNX, CPU)
- Set up hardware-accelerated video decoding (Intel QSV/VAAPI, NVIDIA, AMD, Raspberry Pi)
- Configure recording with intelligent retention policies
- Create zones for location-aware detection and speed estimation
- Troubleshoot common issues (bus errors, green video, high CPU)
- Integrate with Home Assistant via MQTT
- Configure go2rtc for WebRTC live streaming
- Set up advanced features: face recognition, LPR, audio detection, GenAI descriptions
Auto-Trigger Keywords
Primary Keywords
Exact terms that strongly trigger this skill:
- frigate
- frigate config
- frigate yaml
- frigate nvr
- frigate camera
- frigate detector
- frigate recording
- frigate zones
- coral tpu
- edgetpu
Secondary Keywords
Related terms that may trigger in combination:
- object detection nvr
- ai camera recording
- rtsp object detection
- home assistant camera
- nvr configuration
- video surveillance ai
- birdseye view
- motion mask
- detection zone
- go2rtc
Error-Based Keywords
Common error messages that should trigger this skill:
- "Fatal Python error: Bus error"
- "database is locked"
- "shm_size"
- "green video frigate"
- "coral not detected"
- "mqtt connection failed"
- "camera offline frigate"
- "no objects detected"
- "recording not working frigate"
- "high cpu usage frigate"
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 local storage for database |
| Green/Distorted Video | Wrong resolution in config | Match camera's actual output resolution |
| Coral Not Detected | Missing device passthrough | Add /dev/bus/usb to Docker devices |
| High CPU Usage | Missing hardware acceleration | Configure hwaccel preset |
| No Audio in Recordings | Default audio stripping | Use preset-record-generic-audio-aac |
When to Use
Use This Skill For
- Initial Frigate NVR setup and configuration
- Adding new cameras to existing Frigate installation
- Configuring Coral TPU or OpenVINO detectors
- Setting up recording with retention policies
- Creating detection zones and motion masks
- Troubleshooting camera connectivity issues
- Optimizing performance and reducing CPU usage
- Integrating Frigate with Home Assistant
- Configuring hardware acceleration (Intel/NVIDIA/AMD/RPi)
- Setting up go2rtc for live streaming
Don't Use This Skill For
- General RTSP camera troubleshooting (not Frigate-specific)
- Home Assistant automations (use ha-dashboard skill)
- Generic Docker troubleshooting
- Network configuration unrelated to Frigate
- Non-Frigate NVR software (ZoneMinder, Blue Iris, etc.)
Quick Usage
# Minimal Frigate config with Coral TPU
mqtt:
enabled: false
detectors:
coral:
type: edgetpu
device: usb
cameras:
front_door:
ffmpeg:
inputs:
- path: rtsp://user:pass@192.168.1.100:554/stream1
roles:
- detect
detect:
width: 1280
height: 720
fps: 5Token Efficiency
| Approach | Estimated Tokens | Time |
|---|---|---|
| Manual Implementation | ~15,000 | 2-4 hours |
| With This Skill | ~6,000 | 30-45 min |
| Savings | 60% | 75% |
File Structure
frigate-configurator/
├── SKILL.md # Detailed instructions and patterns
├── README.md # This file - discovery and quick reference
├── templates/ # Docker-compose and config templates
│ ├── docker-compose.yml
│ ├── config-minimal.yml
│ └── config-full.yml
├── references/ # Supporting documentation
│ ├── detector-comparison.md
│ ├── ffmpeg-presets.md
│ └── mqtt-topics.md
└── scripts/ # Validation utilities
└── validate-config.shDependencies
| Package | Version | Verified |
|---|---|---|
| Frigate | 0.14+ | 2025-12-27 |
| Docker | 20.10+ | 2025-12-27 |
| docker-compose | 2.0+ | 2025-12-27 |
Official Documentation
- Frigate Documentation
- Configuration Reference
- Object Detectors
- Hardware Acceleration
- Troubleshooting FAQs
Related Skills
ha-dashboard- Home Assistant Lovelace dashboard configurationesphome-config-helper- ESPHome device configuration
---
License: MIT
Frigate Object Detector Comparison
Detector Types Overview
| Detector | Hardware | Performance | Power | Cost | Best For |
|---|---|---|---|---|---|
| USB Coral | Coral TPU | Excellent | ~2W | $60 | Most users |
| PCIe Coral | Coral TPU | Excellent | ~2W | $40 | Servers with PCIe |
| OpenVINO GPU | Intel iGPU | Very Good | Varies | Free | Intel systems |
| OpenVINO CPU | Any CPU | Poor | High | Free | Testing only |
| ONNX | Multi-GPU | Very Good | Varies | Free | Multi-vendor |
| TensorRT | NVIDIA Jetson | Excellent | Low | $200+ | Jetson devices |
| Hailo-8L | Hailo NPU | Excellent | ~1.5W | $70 | RPi 5 AI Kit |
| RKNN | Rockchip SoC | Good | Low | Varies | ARM SBCs |
| CPU | Any CPU | Poor | High | Free | Not recommended |
Detailed Comparison
USB Coral TPU
Pros:
- Best performance per watt
- Simple USB connection
- Works on any system with USB
- Handles 10+ cameras easily
Cons:
- Can be hard to find in stock
- USB bandwidth can be limiting with many cameras
- Generates some heat
Configuration:
detectors:
coral:
type: edgetpu
device: usbPCIe/M.2 Coral TPU
Pros:
- Same performance as USB
- No USB bandwidth limitations
- Lower latency
- Dual-edge TPU available for double throughput
Cons:
- Requires PCIe slot or M.2 slot
- Harder to install
- Limited to desktop/server systems
Configuration:
detectors:
coral:
type: edgetpu
device: pciOpenVINO (Intel)
Pros:
- Uses existing Intel GPU (free)
- Good performance on modern Intel CPUs
- Supports multiple model architectures
Cons:
- Requires Intel 6th Gen (Skylake) or newer
- GPU mode requires compatible integrated graphics
- CPU mode is inefficient
Configuration:
detectors:
ov:
type: openvino
device: GPU # or CPU for testingONNX Runtime
Pros:
- Automatically uses available GPU acceleration
- Works with AMD ROCm, Intel OpenVINO, NVIDIA TensorRT
- Flexible model support (YOLO variants)
Cons:
- Requires compatible GPU drivers
- Performance varies by hardware
Configuration:
detectors:
onnx:
type: onnx
device: auto # Automatically selects best availableTensorRT (NVIDIA Jetson)
Pros:
- Optimized for Jetson hardware
- Low power consumption
- Good for edge deployments
Cons:
- Only works on Jetson devices
- Requires model preprocessing on target hardware
- Limited to NVIDIA ecosystem
Configuration:
detectors:
tensorrt:
type: tensorrt
device: 0Hailo-8L (Raspberry Pi 5 AI Kit)
Pros:
- Designed for Raspberry Pi 5
- Low power consumption
- Good performance for edge
Cons:
- Limited to specific hardware
- Newer, less tested
Configuration:
detectors:
hailo:
type: hailo8lCPU Detector
Pros:
- Works on any hardware
- No additional hardware needed
Cons:
- Very high CPU usage
- Not suitable for production
- Slow inference times
Configuration:
detectors:
cpu:
type: cpu
num_threads: 3Capacity Guidelines
| Detector | Cameras @ 5fps | Cameras @ 10fps |
|---|---|---|
| Single USB Coral | 10-15 | 5-8 |
| Dual USB Coral | 20-30 | 10-15 |
| PCIe Coral (single) | 10-15 | 5-8 |
| PCIe Coral (dual) | 20-30 | 10-15 |
| OpenVINO GPU | 5-10 | 3-5 |
| OpenVINO CPU | 2-3 | 1-2 |
Important Notes
1. Cannot mix detector types for object detection - You can't use Coral for some cameras and OpenVINO for others. Pick one detector type for all object detection.
2. Other tasks can use different hardware - Semantic search, face recognition, and other features can use different hardware than the main object detector.
3. USB bandwidth matters - If using multiple USB Coral TPUs, ensure they're on different USB controllers.
4. Temperature affects performance - Coral TPUs throttle at high temperatures. Consider cooling for sustained workloads.
Recommendations
| Scenario | Recommended Detector |
|---|---|
| Home user, 1-4 cameras | USB Coral TPU |
| Home user, Intel system | OpenVINO GPU |
| Power user, 5-15 cameras | USB Coral TPU |
| Server, 10+ cameras | Dual PCIe Coral |
| Raspberry Pi 5 | Hailo-8L |
| NVIDIA Jetson | TensorRT |
| Budget/Testing | OpenVINO CPU (temporary only) |
Frigate FFmpeg Presets Reference
Hardware Acceleration Presets
Intel Platforms
| Preset | Use Case | Requirements |
|---|---|---|
preset-intel-qsv-h264 | H.264 decode via QSV | Intel gen8+ |
preset-intel-qsv-h265 | H.265 decode via QSV | Intel gen8+ |
preset-vaapi | H.264/H.265 via VAAPI | Intel gen1-gen12 |
Example:
ffmpeg:
hwaccel_args: preset-intel-qsv-h264NVIDIA Platforms
| Preset | Use Case | Requirements |
|---|---|---|
preset-nvidia | H.264/H.265 decode | NVIDIA GPU + Container Toolkit |
Example:
ffmpeg:
hwaccel_args: preset-nvidiaDocker Requirements:
services:
frigate:
runtime: nvidia
environment:
- NVIDIA_VISIBLE_DEVICES=allAMD Platforms
| Preset | Use Case | Requirements |
|---|---|---|
preset-vaapi | H.264/H.265 via VAAPI | AMD GPU with radeonsi driver |
Example:
ffmpeg:
hwaccel_args: preset-vaapiEnvironment Variable:
environment:
- LIBVA_DRIVER_NAME=radeonsiRaspberry Pi
| Preset | Use Case | Requirements |
|---|---|---|
preset-rpi-64-h264 | H.264 decode | RPi 4/5, 64-bit OS |
preset-rpi-64-h265 | H.265 decode | RPi 4/5, 64-bit OS |
Requirements:
gpu_mem=128in/boot/config.txt- Device mapping:
/dev/video10,/dev/video11,/dev/video12
Input Presets
RTSP Transport
| Preset | Use Case |
|---|---|
preset-rtsp-restream | Default RTSP with TCP transport |
preset-rtsp-udp | RTSP with UDP transport |
preset-rtsp-blue-iris | Optimized for Blue Iris |
Example:
cameras:
cam1:
ffmpeg:
inputs:
- path: rtsp://camera/stream
input_args: preset-rtsp-restreamHTTP/MJPEG
| Preset | Use Case |
|---|---|
preset-http-jpeg-generic | Generic MJPEG over HTTP |
preset-http-reolink | Reolink HTTP MJPEG |
Output Presets
Recording Output
| Preset | Use Case |
|---|---|
preset-record-generic | Default recording (no audio) |
preset-record-generic-audio-aac | Recording with AAC audio |
preset-record-generic-audio-copy | Recording with original audio |
preset-record-mjpeg | MJPEG recording |
preset-record-ubiquiti | Ubiquiti camera optimization |
Example:
cameras:
cam1:
ffmpeg:
output_args:
record: preset-record-generic-audio-aacCommon Configurations
Intel System with Audio Recording
ffmpeg:
hwaccel_args: preset-intel-qsv-h264
cameras:
front_door:
ffmpeg:
inputs:
- path: rtsp://camera/substream
input_args: preset-rtsp-restream
roles:
- detect
- path: rtsp://camera/mainstream
input_args: preset-rtsp-restream
roles:
- record
output_args:
record: preset-record-generic-audio-aacNVIDIA with go2rtc Restream
ffmpeg:
hwaccel_args: preset-nvidia
go2rtc:
streams:
front_door:
- rtsp://camera/mainstream
- "ffmpeg:front_door#video=copy#audio=opus"
cameras:
front_door:
ffmpeg:
inputs:
- path: rtsp://127.0.0.1:8554/front_door
input_args: preset-rtsp-restream
roles:
- detect
- recordRaspberry Pi with H.265 Camera
ffmpeg:
hwaccel_args: preset-rpi-64-h265
cameras:
front_door:
ffmpeg:
inputs:
- path: rtsp://camera/h265stream
input_args: preset-rtsp-restream
roles:
- detect
- recordUDP Transport for Unreliable Networks
cameras:
outdoor_cam:
ffmpeg:
inputs:
- path: rtsp://camera/stream
input_args: preset-rtsp-udp
roles:
- detectTroubleshooting
RTSP URL Works in VLC but Not Frigate
Frigate defaults to TCP transport, while VLC auto-switches between UDP and TCP.
Solution:
input_args: preset-rtsp-udpNo Audio in Recordings
Default presets strip audio to prevent corruption.
Solution:
output_args:
record: preset-record-generic-audio-aacHigh CPU Despite Hardware Acceleration
1. Verify hardware acceleration is active in Frigate logs 2. Check Docker device mappings are correct 3. Ensure using correct preset for your hardware
Green/Corrupted Video
Usually indicates wrong codec or resolution mismatch.
Solutions: 1. Verify camera actually outputs H.264 or H.265 2. Match detect.width and detect.height exactly to camera output 3. Try software decoding temporarily to rule out hwaccel issues
Custom FFmpeg Arguments
For advanced use cases, you can specify raw FFmpeg arguments:
cameras:
cam1:
ffmpeg:
inputs:
- path: rtsp://camera/stream
input_args:
- -avoid_negative_ts
- make_zero
- -fflags
- +genpts+discardcorrupt
- -rtsp_transport
- tcp
- -use_wallclock_as_timestamps
- "1"See FFmpeg documentation for all available options.
Frigate MQTT Topics Reference
Topic Prefix
All topics are prefixed with the configured topic_prefix (default: frigate).
Example: frigate/available or frigate/front_door/person
Availability Topics
| Topic | Payload | Description |
|---|---|---|
frigate/available | online / offline | Frigate availability status |
Camera Topics
Camera State
| Topic | Payload | Description |
|---|---|---|
frigate/{camera}/recordings/state | ON / OFF | Recording state |
frigate/{camera}/snapshots/state | ON / OFF | Snapshot state |
frigate/{camera}/detect/state | ON / OFF | Detection state |
frigate/{camera}/motion/state | ON / OFF | Motion detection state |
frigate/{camera}/improve_contrast/state | ON / OFF | Contrast enhancement state |
frigate/{camera}/ptz_autotracker/state | ON / OFF | PTZ autotracker state |
Camera Control
| Topic | Payload | Description |
|---|---|---|
frigate/{camera}/recordings/set | ON / OFF | Enable/disable recording |
frigate/{camera}/snapshots/set | ON / OFF | Enable/disable snapshots |
frigate/{camera}/detect/set | ON / OFF | Enable/disable detection |
frigate/{camera}/motion/set | ON / OFF | Enable/disable motion detection |
frigate/{camera}/improve_contrast/set | ON / OFF | Enable/disable contrast |
frigate/{camera}/ptz_autotracker/set | ON / OFF | Enable/disable autotracker |
Object Detection
| Topic | Payload | Description |
|---|---|---|
frigate/{camera}/{object} | Count (integer) | Current object count |
frigate/{camera}/{object}/snapshot | JPEG binary | Latest snapshot with object |
Example: frigate/front_door/person = 1
Motion Detection
| Topic | Payload | Description |
|---|---|---|
frigate/{camera}/motion | ON / OFF | Motion currently detected |
Audio Detection
| Topic | Payload | Description |
|---|---|---|
frigate/{camera}/audio/{audio_type} | ON / OFF | Audio event detected |
Audio Types: bark, fire_alarm, scream, speech, yell, etc.
Event Topics
New Events
| Topic | Payload | Description |
|---|---|---|
frigate/events | JSON object | New event notification |
Event Payload Structure:
{
"before": {
"id": "1234567890.123456-abc123",
"camera": "front_door",
"frame_time": 1234567890.123456,
"snapshot_time": 1234567890.123456,
"label": "person",
"sub_label": null,
"top_score": 0.89,
"false_positive": false,
"start_time": 1234567890.123456,
"end_time": null,
"score": 0.89,
"box": [100, 200, 300, 400],
"area": 40000,
"ratio": 1.5,
"region": [0, 0, 640, 480],
"stationary": false,
"motionless_count": 0,
"position_changes": 5,
"current_zones": ["front_yard"],
"entered_zones": ["front_yard"],
"thumbnail": null,
"has_clip": true,
"has_snapshot": true
},
"after": {
// Same structure with updated values
},
"type": "new" // "new", "update", or "end"
}Event Types
| Type | Description |
|---|---|
new | Object first detected |
update | Object tracking updated |
end | Object tracking ended |
Review Topics
| Topic | Payload | Description |
|---|---|---|
frigate/reviews | JSON object | Review event notification |
Statistics Topics
| Topic | Payload | Description |
|---|---|---|
frigate/stats | JSON object | System statistics |
Stats Payload Example:
{
"cpu_usages": {"python_frigate": 15.2},
"detectors": {
"coral": {
"detection_start": 0.0,
"inference_speed": 8.5,
"pid": 1234
}
},
"cameras": {
"front_door": {
"camera_fps": 5.0,
"detection_fps": 5.0,
"capture_pid": 1235,
"ffmpeg_pid": 1236,
"process_fps": 5.0
}
},
"service": {
"uptime": 86400,
"version": "0.14.0",
"storage": {
"/media/frigate/recordings": {
"free": 500000000000,
"total": 1000000000000
}
}
}
}Home Assistant Integration
Auto-Discovery
Frigate publishes Home Assistant MQTT discovery messages automatically when configured:
mqtt:
enabled: true
host: 192.168.1.50Created Entities
| Entity Type | Entity ID Pattern | Description |
|---|---|---|
| Camera | camera.{camera}_frigate | Live camera feed |
| Binary Sensor | binary_sensor.{camera}_motion | Motion detection |
| Binary Sensor | binary_sensor.{camera}_person | Person detection |
| Binary Sensor | binary_sensor.{camera}_car | Car detection |
| Switch | switch.{camera}_detect | Detection toggle |
| Switch | switch.{camera}_recordings | Recording toggle |
| Switch | switch.{camera}_snapshots | Snapshot toggle |
| Sensor | sensor.{camera}_fps | Camera FPS |
| Sensor | sensor.{camera}_detection_fps | Detection FPS |
Example Automations
Notification on Person Detection
automation:
- alias: "Frigate Person Alert"
trigger:
- platform: mqtt
topic: frigate/front_door/person
condition:
- condition: template
value_template: "{{ trigger.payload | int > 0 }}"
action:
- service: notify.mobile_app
data:
title: "Person Detected"
message: "Person detected at front door"
data:
image: "http://frigate:8971/api/front_door/latest.jpg"Track Events
automation:
- alias: "Frigate Event Logger"
trigger:
- platform: mqtt
topic: frigate/events
action:
- service: logbook.log
data:
name: "Frigate"
message: >
{{ trigger.payload_json.after.label }} detected on
{{ trigger.payload_json.after.camera }}Control Recording
# Enable recording
service: mqtt.publish
data:
topic: frigate/front_door/recordings/set
payload: "ON"
# Disable detection
service: mqtt.publish
data:
topic: frigate/front_door/detect/set
payload: "OFF"Debugging MQTT
Subscribe to All Frigate Topics
mosquitto_sub -h 192.168.1.50 -u user -P password -t "frigate/#" -vSubscribe to Specific Camera Events
mosquitto_sub -h 192.168.1.50 -u user -P password -t "frigate/front_door/person" -vTest Publishing
mosquitto_pub -h 192.168.1.50 -u user -P password -t "frigate/front_door/detect/set" -m "OFF"#!/bin/bash
# Frigate Configuration Validator
# Validates Frigate YAML configuration for common issues
#
# Usage: ./validate-config.sh /path/to/config.yml
#
# Checks performed:
# - YAML syntax validation
# - Required fields presence
# - Common misconfiguration patterns
# - Resolution format validation
# - Credential exposure warnings
set -e
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
CONFIG_FILE="${1:-config.yml}"
if [[ ! -f "$CONFIG_FILE" ]]; then
echo -e "${RED}Error: Configuration file not found: $CONFIG_FILE${NC}"
echo "Usage: $0 /path/to/config.yml"
exit 1
fi
echo "Validating Frigate configuration: $CONFIG_FILE"
echo "================================================"
ERRORS=0
WARNINGS=0
# Check for YAML validity
echo -n "Checking YAML syntax... "
if command -v python3 &> /dev/null; then
if python3 -c "import yaml; yaml.safe_load(open('$CONFIG_FILE'))" 2>/dev/null; then
echo -e "${GREEN}OK${NC}"
else
echo -e "${RED}FAILED${NC}"
echo " YAML syntax error detected. Run: python3 -c \"import yaml; yaml.safe_load(open('$CONFIG_FILE'))\""
((ERRORS++))
fi
else
echo -e "${YELLOW}SKIPPED${NC} (python3 not available)"
fi
# Check for cameras section
echo -n "Checking for cameras section... "
if grep -q "^cameras:" "$CONFIG_FILE"; then
echo -e "${GREEN}OK${NC}"
else
echo -e "${RED}MISSING${NC}"
echo " Configuration must have a 'cameras:' section"
((ERRORS++))
fi
# Check for detect settings in cameras
echo -n "Checking detect settings... "
if grep -q "detect:" "$CONFIG_FILE"; then
echo -e "${GREEN}OK${NC}"
else
echo -e "${YELLOW}WARNING${NC}"
echo " No detect settings found. Cameras need detect width/height/fps configured"
((WARNINGS++))
fi
# Check for hardcoded credentials
echo -n "Checking for exposed credentials... "
if grep -Eq "rtsp://[^{]*:[^{]*@" "$CONFIG_FILE"; then
echo -e "${YELLOW}WARNING${NC}"
echo " Hardcoded RTSP credentials detected. Consider using environment variables:"
echo " rtsp://{FRIGATE_USER}:{FRIGATE_PASSWORD}@camera_ip:554/stream"
((WARNINGS++))
else
echo -e "${GREEN}OK${NC}"
fi
# Check for localhost in MQTT config
echo -n "Checking MQTT host configuration... "
if grep -Eq "host:.*localhost|host:.*127\.0\.0\.1" "$CONFIG_FILE"; then
echo -e "${RED}ERROR${NC}"
echo " MQTT host set to localhost. This won't work in Docker containers."
echo " Use the actual host IP address instead."
((ERRORS++))
else
echo -e "${GREEN}OK${NC}"
fi
# Check for unreasonably high detect resolution
echo -n "Checking detect resolution... "
if grep -Eq "width:\s*(1920|2560|3840|4096)" "$CONFIG_FILE"; then
if grep -B5 "width:\s*(1920|2560|3840|4096)" "$CONFIG_FILE" | grep -q "detect:"; then
echo -e "${YELLOW}WARNING${NC}"
echo " High detect resolution detected (>1280). This wastes detector capacity."
echo " Recommended: 1280x720 or lower for detection"
((WARNINGS++))
else
echo -e "${GREEN}OK${NC}"
fi
else
echo -e "${GREEN}OK${NC}"
fi
# Check for detect fps > 10
echo -n "Checking detect FPS... "
if grep -Eq "fps:\s*([1-9][0-9]|[2-9][0-9])" "$CONFIG_FILE"; then
if grep -B5 "fps:\s*([1-9][0-9]|[2-9][0-9])" "$CONFIG_FILE" | grep -q "detect:"; then
echo -e "${YELLOW}WARNING${NC}"
echo " Detect FPS may be too high (>10). Recommended: 5 fps for most use cases"
((WARNINGS++))
else
echo -e "${GREEN}OK${NC}"
fi
else
echo -e "${GREEN}OK${NC}"
fi
# Check for detectors section
echo -n "Checking detectors configuration... "
if grep -q "^detectors:" "$CONFIG_FILE"; then
echo -e "${GREEN}OK${NC}"
else
echo -e "${YELLOW}WARNING${NC}"
echo " No detectors section found. Will use CPU detection (not recommended for production)"
((WARNINGS++))
fi
# Check for record enabled but no retain
echo -n "Checking recording retention... "
if grep -q "enabled:\s*[Tt]rue" "$CONFIG_FILE" && grep -q "^record:" "$CONFIG_FILE"; then
if ! grep -q "retain:" "$CONFIG_FILE"; then
echo -e "${YELLOW}WARNING${NC}"
echo " Recording enabled but no retention policy set. Storage may fill up."
((WARNINGS++))
else
echo -e "${GREEN}OK${NC}"
fi
else
echo -e "${GREEN}OK${NC}"
fi
# Summary
echo ""
echo "================================================"
echo "Validation Summary"
echo "================================================"
if [[ $ERRORS -eq 0 && $WARNINGS -eq 0 ]]; then
echo -e "${GREEN}All checks passed!${NC}"
exit 0
elif [[ $ERRORS -eq 0 ]]; then
echo -e "${YELLOW}$WARNINGS warning(s) found${NC}"
echo "Configuration should work but review warnings above."
exit 0
else
echo -e "${RED}$ERRORS error(s), $WARNINGS warning(s) found${NC}"
echo "Please fix errors before deploying."
exit 1
fi
# Frigate Full Configuration Template
# Production-ready configuration with all common features
#
# Features included:
# - MQTT integration (for Home Assistant)
# - USB Coral TPU detector
# - Hardware-accelerated video decoding
# - Separate detect and record streams
# - Recording with retention policies
# - Snapshots
# - Zones with required_zones for alerts
# - Motion masks
# - go2rtc for WebRTC streaming
#
# Usage:
# 1. Update all RTSP paths and credentials
# 2. Adjust hardware acceleration preset for your system
# 3. Modify zones coordinates using the Frigate UI zone editor
# 4. Save as config.yml
# ============================================
# MQTT CONFIGURATION
# ============================================
mqtt:
enabled: true
host: 192.168.1.50 # Your MQTT broker IP
port: 1883
user: "{FRIGATE_MQTT_USER}"
password: "{FRIGATE_MQTT_PASSWORD}"
topic_prefix: frigate
# ============================================
# DATABASE
# ============================================
database:
path: /config/frigate.db
# ============================================
# DETECTOR CONFIGURATION
# ============================================
# USB Coral TPU (recommended)
detectors:
coral:
type: edgetpu
device: usb
# Alternative: OpenVINO for Intel GPUs
# detectors:
# ov:
# type: openvino
# device: GPU
# ============================================
# HARDWARE ACCELERATION
# ============================================
ffmpeg:
# Intel QSV (gen8+)
hwaccel_args: preset-intel-qsv-h264
# Intel VAAPI (gen1-gen7)
# hwaccel_args: preset-vaapi
# NVIDIA
# hwaccel_args: preset-nvidia
# AMD
# hwaccel_args: preset-vaapi
# Raspberry Pi
# hwaccel_args: preset-rpi-64-h264
# ============================================
# OBJECT DETECTION SETTINGS
# ============================================
objects:
track:
- person
- car
- dog
- cat
- package
filters:
person:
min_area: 5000
max_area: 100000
min_score: 0.5
threshold: 0.7
car:
min_area: 10000
min_score: 0.5
threshold: 0.7
# ============================================
# RECORDING CONFIGURATION
# ============================================
record:
enabled: true
retain:
days: 1
mode: motion # Only keep segments with motion
alerts:
retain:
days: 14 # Keep alert clips longer
detections:
retain:
days: 7 # Keep detection clips
export:
timelapse_args: "-vf setpts=PTS/60 -r 25"
# ============================================
# SNAPSHOT CONFIGURATION
# ============================================
snapshots:
enabled: true
clean_copy: true
timestamp: true
bounding_box: true
retain:
default: 7
# ============================================
# GO2RTC CONFIGURATION
# ============================================
go2rtc:
streams:
front_door:
- "rtsp://{FRIGATE_RTSP_USER}:{FRIGATE_RTSP_PASSWORD}@192.168.1.100:554/stream1"
back_yard:
- "rtsp://{FRIGATE_RTSP_USER}:{FRIGATE_RTSP_PASSWORD}@192.168.1.101:554/stream1"
webrtc:
candidates:
- 192.168.1.50:8555 # Your Frigate server IP
- stun:8555
# ============================================
# CAMERA CONFIGURATIONS
# ============================================
cameras:
# -----------------------------------------
# FRONT DOOR CAMERA
# -----------------------------------------
front_door:
enabled: true
ffmpeg:
inputs:
# Sub-stream for detection (lower resolution, less bandwidth)
- path: "rtsp://{FRIGATE_RTSP_USER}:{FRIGATE_RTSP_PASSWORD}@192.168.1.100:554/stream1"
input_args: preset-rtsp-restream
roles:
- detect
# Main stream for recording (full resolution)
- 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
# Live view source
live:
stream_name: front_door
# Detection settings
detect:
width: 1280
height: 720
fps: 5
# Motion detection tuning
motion:
threshold: 30
contour_area: 10
mask:
# Mask the timestamp overlay area (top-left corner)
- 0,0,200,0,200,50,0,50
# Detection zones
zones:
front_porch:
coordinates: 100,500,400,500,400,720,100,720
objects:
- person
- package
driveway:
coordinates: 500,400,1280,400,1280,720,500,720
objects:
- person
- car
# Review settings
review:
alerts:
required_zones:
- front_porch
- driveway
# Camera-specific object filters
objects:
filters:
person:
min_area: 3000
mask:
# Mask area where tree causes false positives
- 800,0,1000,0,1000,300,800,300
# -----------------------------------------
# BACK YARD CAMERA
# -----------------------------------------
back_yard:
enabled: true
ffmpeg:
inputs:
- path: "rtsp://{FRIGATE_RTSP_USER}:{FRIGATE_RTSP_PASSWORD}@192.168.1.101:554/stream1"
input_args: preset-rtsp-restream
roles:
- detect
- path: "rtsp://{FRIGATE_RTSP_USER}:{FRIGATE_RTSP_PASSWORD}@192.168.1.101:554/stream0"
input_args: preset-rtsp-restream
roles:
- record
output_args:
record: preset-record-generic-audio-aac
live:
stream_name: back_yard
detect:
width: 1280
height: 720
fps: 5
motion:
threshold: 30
mask:
- 0,0,150,0,150,40,0,40
zones:
patio:
coordinates: 0,400,600,400,600,720,0,720
objects:
- person
- dog
- cat
review:
alerts:
required_zones:
- patio
# ============================================
# UI SETTINGS
# ============================================
ui:
timezone: America/Los_Angeles
time_format: "%I:%M %p"
date_style: short
live:
stream_name: front_door
# ============================================
# BIRDSEYE VIEW
# ============================================
birdseye:
enabled: true
mode: continuous
width: 1920
height: 1080
quality: 8
# Frigate Minimal Configuration
# Start with this to verify camera connectivity
#
# Usage:
# 1. Update the RTSP path with your camera's URL
# 2. Set width/height to match your camera's sub-stream resolution
# 3. Save as config.yml in your Frigate config directory
# 4. Start Frigate and verify video appears in web UI
# Disable MQTT for initial testing
mqtt:
enabled: false
# Use CPU detector initially (add Coral/OpenVINO later)
detectors:
cpu:
type: cpu
num_threads: 3
# Single camera configuration
cameras:
# Rename to match your camera (lowercase, no spaces)
front_door:
enabled: true
ffmpeg:
inputs:
# Replace with your camera's RTSP URL
# Use the SUB-STREAM for detection (lower resolution)
- path: rtsp://admin:password@192.168.1.100:554/stream1
roles:
- detect
# Detection settings
# IMPORTANT: Match these to your camera's actual resolution
detect:
width: 1280 # Camera sub-stream width
height: 720 # Camera sub-stream height
fps: 5 # 5 fps is optimal for detection
# Objects to detect
objects:
track:
- person
- car
- dog
- cat
# Frigate NVR Docker Compose Template
# Production-ready configuration with common options
#
# Usage:
# 1. Copy this file to your Frigate directory
# 2. Create a .env file with your credentials
# 3. Uncomment hardware-specific sections as needed
# 4. Run: docker-compose up -d
#
# Required .env variables:
# RTSP_PASSWORD=your_camera_password
# MQTT_PASSWORD=your_mqtt_password (optional)
services:
frigate:
container_name: frigate
image: ghcr.io/blakeblackshear/frigate:stable
restart: unless-stopped
# Shared memory - increase if you have many cameras
# Rule of thumb: 64MB per camera minimum
shm_size: "256mb"
# ============================================
# DEVICE MAPPING - Uncomment what you need
# ============================================
devices:
# USB Coral TPU
- /dev/bus/usb:/dev/bus/usb
# Intel GPU (VAAPI/QSV)
- /dev/dri/renderD128:/dev/dri/renderD128
# PCIe/M.2 Coral TPU (uncomment if using)
# - /dev/apex_0:/dev/apex_0
# Raspberry Pi GPU (uncomment on RPi)
# - /dev/video10:/dev/video10
# - /dev/video11:/dev/video11
# - /dev/video12:/dev/video12
# ============================================
# NVIDIA GPU SUPPORT (uncomment if using)
# ============================================
# runtime: nvidia
# environment:
# - NVIDIA_VISIBLE_DEVICES=all
# - NVIDIA_DRIVER_CAPABILITIES=compute,video,utility
volumes:
# Configuration directory
- ./config:/config
# Media storage (recordings, snapshots, exports)
- ./storage:/media/frigate
# RAM-based cache for performance
- type: tmpfs
target: /tmp/cache
tmpfs:
size: 1000000000 # 1GB
ports:
# Web UI (HTTPS)
- "8971:8971"
# RTSP feeds (for external players)
- "8554:8554"
# WebRTC (for low-latency live view)
- "8555:8555/tcp"
- "8555:8555/udp"
environment:
# Camera credentials (used in config with {FRIGATE_RTSP_USER})
FRIGATE_RTSP_USER: admin
FRIGATE_RTSP_PASSWORD: ${RTSP_PASSWORD}
# MQTT credentials (optional, for Home Assistant)
FRIGATE_MQTT_USER: frigate
FRIGATE_MQTT_PASSWORD: ${MQTT_PASSWORD:-}
# AMD GPU driver (uncomment for AMD)
# LIBVA_DRIVER_NAME: radeonsi
# ============================================
# HEALTH CHECK
# ============================================
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5000/api/version"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
# ============================================
# RESOURCE LIMITS (optional, uncomment to enable)
# ============================================
# deploy:
# resources:
# limits:
# memory: 4G
# reservations:
# memory: 2G