Frigate
Local NVR that runs real object detection on your camera streams, with no cloud account
Frigate records RTSP cameras and runs object detection on every frame locally, so it alerts on a person or a car rather than on a moth crossing the lens. It replaces Ring Protect, Nest Aware and the motion detection in most camera vendor apps, and it keeps footage and detections on your own disk.
Our verdict on Frigate#
Frigate's stable line is 0.17.2 (June 2026) with 0.18 in release candidates as of early September, and it is still pre-1.0: every minor moves config keys, and 0.17 alone re-tiered recording retention and reorganized the genai block. Choose hardware after reading the detector page, not before. The docs no longer recommend a Coral TPU for new installs outside low-power builds; a modern Intel iGPU on OpenVINO runs inference in roughly 4 to 15 ms against the Coral's 10 ms, and unlike the Coral it also does the video decode, which is where your CPU actually goes. Two settings decide whether the install survives its first week. Docker's default 64 MB of shared memory is too small: use the documented formula, about 67 MB for one 720p detect stream and 512 MB as a sane starting point. And plan the disk before you enable continuous recording, at roughly 43 GB per camera per day for a 4 Mbit/s stream.
Who Frigate is for#
Choose it if
- Anyone with RTSP cameras who wants person and car alerts instead of every shadow at dusk
- People cancelling Nest Aware or Ring Protect who still want searchable clips
- Home Assistant users who want camera events as real entities to drive automations
- Anyone with a spare Intel N100 or an eighth-generation-or-later desktop sitting idle
Look elsewhere if
- Your cameras are cloud-only with no RTSP or ONVIF stream, which rules out most doorbell brands
- You want to run it on a Raspberry Pi with semantic search, which the docs say will not work reliably
- You have no plan for 2 TB or more of storage and are not willing to give up continuous recording
What running it actually looks like#
One container that needs unusual Docker settings. shm_size has to be raised from the default 64 MB using the per-camera formula, /tmp/cache should be a 1 GB tmpfs so segment assembly does not hammer the disk, and hardware acceleration means passing /dev/dri for Intel or the Coral device through. Mount /config (config.yml plus frigate.db) and /media/frigate (recordings, clips, exports). Port 8971 is the authenticated UI and 5000 is a deliberately unauthenticated admin API for trusted networks only, so never publish 5000. go2rtc is bundled for restreaming on 8554 and WebRTC on 8555. A valid config must exist before first start, though 0.17 added a safe mode and an add-camera wizard for the first run. Upgrades migrate the database in place and do not go backwards.
Resource profile#
- Memory
- 700 MB idle, around 2500 MB in ordinary use. Two ffmpeg processes per camera plus the detector. Enabling semantic search changes the class of machine entirely: the docs require 8 GB of RAM and recommend 16 GB. Shared memory for decoded frames is separate again.
- CPU and acceleration
- Decoding costs more than detecting. A Coral or an Intel iGPU takes inference off the CPU (about 10 ms per inference on a Coral, 4 to 15 ms on OpenVINO) but only the GPU path also accelerates decode. Feed detection a low resolution substream, never the 4K main stream.
- Storage growth
- Recordings dominate everything else. Stream bitrate in Mbit/s times 10.8 gives GB per camera per day, so a 4 Mbit/s camera on 24/7 continuous is about 43 GB a day and six of them for a week is roughly 1.8 TB.
- Operational load
- 3 of 5, Moderate. One container, but a real config file, a SQLite database that migrates on upgrade, hardware acceleration that breaks when the host kernel or driver changes, and retention math you have to get right or the disk fills. Still pre-1.0, so config keys move between minors.
Figures describe a small single-household install and are the working assumptions behind our stack planner. Your numbers will differ with library size, user count and hardware. See methodology.
Data and backup surface#
The backup set is small and lives in /config: config.yml and frigate.db, the SQLite database holding events, tracked object metadata, review items, users and the embeddings index. Copying frigate.db from a running instance can give you a torn file, so stop the container or use sqlite3 .backup. Take both before any minor upgrade, since schema migrations are one-way. /media/frigate/recordings is the bulk and almost nobody backs it up; treat it as expendable and size it instead. /config/model_cache and the exported timelapses are regenerable. Snapshots under /media/frigate/clips are small and worth keeping if the events matter to you.
Derived backup shape
SQLite backup. sqlite3 <db> ".backup out.db" while running, or stop the container and copy. A live cp of a WAL-mode SQLite file can restore corrupt.
Traps and surprises#
Docker's default 64 MB of shared memory is too small
Frigate keeps decoded frames in /dev/shm, and the Docker default of 64 MB is below what even two cameras need. The symptom is ffmpeg processes dying and cameras flapping offline, not a clear error. The documented minimum per camera is (width x height x 1.5 x 20 + 270480) / 1048576 plus 40 MB for logs, about 67 MB for one 1280x720 detect stream. Set shm_size explicitly in compose and recompute when you add cameras.
Port 5000 is unauthenticated admin access
Frigate exposes two HTTP ports on purpose. 8971 enforces login and role checks; 5000 is the internal API with admin rights and no authentication at all, intended for other containers on a trusted Docker network. Publishing 5000 to your LAN or, worse, reverse-proxying it hands anyone your cameras and your config. Publish 8971 only, and point your proxy at it.
Detecting on the main stream instead of a substream
The single most common cause of a Frigate install that pegs every core is pointing the detect role at a 4K 20 Mbit/s main stream. Detection runs at a fixed model input size anyway, so configure the camera's second stream at around 640x640 and a low frame rate for the detect role, and reserve the high resolution stream for the record role. Fixing this often turns 90 percent CPU into 15.
A Coral no longer buys what people think it does
The docs stopped recommending Coral for new installs except in low-power builds. It offloads inference (about 10 ms) but does nothing for video decode, which is the larger cost. An Intel iGPU on OpenVINO does both, at 4 to 15 ms depending on generation, and 0.17 also dropped support for Nvidia GTX 900 series cards. Check the detector page against the hardware you own before you buy a USB accelerator you do not need.
The disk fills faster than the retention config suggests
Retention was fully re-tiered in 0.17 with separate continuous and motion fields, and continuous recording is off by default. Turn it on across six cameras and you can add well over a terabyte a week. Frigate does have a safety net: when under one hour of space remains it deletes the oldest recordings regardless of your retention rules, which protects the host but silently discards footage you thought you had.
Specifications#
- Category
- Home automation
- Licence
- MIT (Permissive)
- Written in
- Python / TypeScript
- First release
- 2019
- Maturity
- Stable
- Datastore
- SQLite (frigate.db) for metadata, video segments on disk
- Default ports
8971,5000,8554,8555- Ships as
- docker, home assistant app
- arm64 builds
- Yes
- Identity
- Trusted proxy header. Built-in users with PBKDF2 hashing, or disable that and trust `X-Forwarded-User` and `X-Forwarded-Groups` from Authelia or Authentik in front.
- Replaces
- Ring Protect, Nest Aware, Blue Iris, Synology Surveillance Station
- Project site
- frigate.video
- Source
- github.com/blakeblackshear/frigate
- Documentation
- docs.frigate.video
Alternatives to Frigate#
Everything else in home automation, closest in operational weight first.
| Tool | Ops load | Idle RAM | Licence |
|---|---|---|---|
| ESPHome | 2, Light | 150 MB | MIT (Python tooling) and GPL-3.0 (C++ device runtime) |
| Home Assistant | 4, Heavy | 600 MB | Apache-2.0 |
| Node-RED | 2, Light | 110 MB | Apache-2.0 |
| Zigbee2MQTT | 2, Light | 90 MB | GPL-3.0 |
Where Frigate comes up elsewhere#
Migration guides
Guides
Calculators
Reference
Sources#
Facts on this page were checked against the project's own material. Where a number is our own estimate rather than a published figure, the text says so.
Published . Last reviewed . Found something out of date? Tell us and we will fix it and log the change.