Frigate NVR: local object detection for IP cameras, and how to install it
NVR with realtime local object detection for IP cameras. Frigate NVR - Realtime Object Detection for IP Cameras \[English\] | 简体中文 A complete and local NVR designed for Home Assistant with AI object detection.
At a glance
- What is it?
- Frigate is an MIT-licensed NVR that runs motion-gated TensorFlow object detection on your own hardware and talks to Home Assistant over MQTT. The install is Docker-first, and the detection quality depends far more on your accelerator than on your CPU.
- Who is it for?
- Adopt Frigate if you already run Home Assistant, have an Intel iGPU, a Google Coral or an NVIDIA card to give it, and are comfortable editing a YAML config that the project documents on docs.frigate.video rather than in the README. Do not adopt it if you want a CPU-only appliance on a small mini PC, or if you need a vendor to sell you a supported box with a phone number.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What Frigate solves, and who is actually supposed to run it
Most camera software either pushes your footage to someone else's servers or asks you to watch every frame yourself. Frigate takes a third position: keep the video local, and only spend compute on the frames that matter. The README describes it as "a complete and local NVR designed for Home Assistant with AI object detection", using OpenCV and Tensorflow to detect objects in real time on IP cameras.
The target user is specific. You already run Home Assistant, you already have RTSP cameras, and you want automations that fire on "a person is on the driveway" rather than "motion was detected". The README lists tight integration through a custom component, MQTT communication, retention rules based on detected objects, 24/7 recording, RTSP re-streaming and WebRTC or MSE live view. That is a Home Assistant-shaped feature list, not a generic surveillance suite.
The uncomfortable part is hardware. The README states plainly that a GPU or AI accelerator is "highly recommended" and that accelerators outperform even the best CPUs with little overhead. If you were hoping to run this on whatever spare machine you have, the project is telling you not to.
Motion first, detection second: the mechanism that keeps Frigate cheap
Frigate's architecture is a pipeline, and the first stage is deliberately dumb. The README says it uses "a very low overhead motion detection to determine where to run object detection". Frames are not classified wholesale. Motion narrows the region, and only then does the detector look.
That is why the README can claim it is "designed to minimize resource use and maximize performance by only looking for objects when and where it is necessary", and why it "leverages multiprocessing heavily with an emphasis on realtime over processing every frame". TensorFlow detection runs in separate processes, which the README gives as the reason maximum FPS is possible. The trade-off is explicit: this is not a system that guarantees every frame is examined. It is a system that guarantees you see what matters quickly.
Output leaves through MQTT, which is what makes it usable from anything that speaks the protocol, not just Home Assistant. Video is re-streamed over RTSP so your cameras serve fewer connections, and live view uses WebRTC or MSE when you want low latency. The web UI ships a mask and zone editor, which is where you tell the motion stage to ignore the tree branch that waves all day.
Installing Frigate in Docker and getting a first camera running
The README points to https://docs.frigate.video for installation; the repository itself ships a docker-compose.yml aimed at development. The Makefile shows the image repository used for published builds, ghcr.io/blakeblackshear/frigate, and a run target that publishes ports 5000 and 8971.
A minimal service definition, following the shape of the repository's own compose file, looks like this. The /config volume is where Frigate reads config.yml and writes its database and recordings metadata.
services:
frigate:
container_name: frigate
image: ghcr.io/blakeblackshear/frigate:stable
restart: unless-stopped
shm_size: "256mb"
ports:
- "5000:5000"
- "8971:8971"
volumes:
- ./config:/config
- ./media:/media/frigate
- /etc/localtime:/etc/localtime:roIf you want MQTT without an existing broker, the repository's compose file runs Eclipse Mosquitto 2.0 on port 1883 with authentication disabled, which is fine on a trusted LAN and wrong anywhere else.
mqtt:
container_name: mqtt
image: eclipse-mosquitto:2.0
command: mosquitto -c /mosquitto-no-auth.conf
ports:
- "1883:1883"Accelerator passthrough is the step people skip. The repository's compose file carries a comment telling you to check the host's group IDs with getent group render, getent group video and getent group plugdev, and to add those exact IDs under group_add, or "OpenVINO GPU acceleration will fail". For a Coral USB stick you uncomment the /dev/bus/usb mapping; for Intel hardware acceleration you uncomment /dev/dri. The same file notes that an NVIDIA GPU needs the deploy.resources.reservations.devices block with driver nvidia and capabilities gpu.
Once the container is up, the web UI is on port 5000 and the authenticated port is 8971. Add a camera to config.yml, give it a detect role, and watch the debug view to confirm detections rather than assuming they work.
Where Frigate is the wrong tool
The clearest failure mode is hardware mismatch. The README recommends an accelerator and warns that even the best CPUs lose to one. A CPU-only deployment is possible in the sense that nothing forbids it, but the project's own framing tells you the experience will be poor. If your plan is a fanless mini PC with no iGPU passthrough and no Coral, Frigate is the wrong choice and a plain RTSP recorder with motion alerts will serve you better.
The second limitation is configurability. The README documents features, not configuration; it sends you to docs.frigate.video. That means the repository alone will not tell you how to write a zone, tune motion thresholds or set retention per object type. Anyone expecting a guided setup wizard from the README will be disappointed.
The third is that "realtime over processing every frame" is a real trade. Fast-moving objects between motion triggers can be missed, and the motion stage itself needs tuning per camera. A waving flag, a rainstorm or headlights sweeping a wall can all keep the detector busy. The mask and zone editor exists precisely because this happens, and it is work you will do camera by camera.
Finally, the licence covers the code, not the name. The README states the Frigate name, the "Frigate NVR" brand and the logo are trademarks of Frigate, Inc. and are not covered by the MIT License, with a separate TRADEMARK.md. If you plan to redistribute a modified build under the same name, read that file before you do anything else.
Frigate against a conventional NVR: the actual difference
A conventional NVR, the kind sold with cameras, records continuously and flags motion. Detection means pixel change, and a notification means something in the frame moved. Storage and bandwidth are the design constraints, and the box is usually closed.
Frigate inverts that. Detection means a TensorFlow model classifying a region that motion pointed at, and the event carries a label such as person or car rather than a generic alarm. Recording retention is then driven by what was detected, which the README lists as a feature alongside plain 24/7 recording. The output is structured data on MQTT, so a Home Assistant automation can react to the label instead of to a motion flag.
The cost of that inversion is the accelerator. A conventional NVR is a finished appliance. Frigate is a container you place on hardware you choose, with group_add entries, device mappings and a YAML file to maintain. You are trading vendor support for control over what the model sees and where the footage lives.
Maintenance, upgrades and what the licence does and does not give you
The repository's last push was on 2026-08-08, and the most recent releases listed are v0.18.0-beta3 on the same date, v0.18.0-beta2 on 2026-07-26 and v0.18.0-beta1 on 2026-07-12. The 0.18 line is in beta. The Makefile meanwhile declares VERSION = 0.19.0, so the tree is already ahead of the published betas. If you run a stable tag, you are not on the code the repository is currently developing.
Upgrade cost is mostly the config file. Frigate keeps configuration in /config/config.yml, and the repository contains a migrations/ directory, which indicates config and database migrations ship with releases. That is the practical risk: a container image bump can require a config change, and the README does not document rollback. Read the release notes for the version you are moving to before pulling a new tag, and keep a copy of config.yml outside the container.
The licence is MIT for the source code, configuration files and documentation, provided you include the original copyright notice. That is permissive. The trademark carve-out is the part people miss: the name and logo sit outside the licence. Nothing here is legal advice, and the TRADEMARK.md file in the repository is the document that governs brand use.
Editorial conclusion
Adopt Frigate if you already run Home Assistant, have an Intel iGPU, a Google Coral or an NVIDIA card to give it, and are comfortable editing a YAML config that the project documents on docs.frigate.video rather than in the README. Do not adopt it if you want a CPU-only appliance on a small mini PC, or if you need a vendor to sell you a supported box with a phone number. Before you commit, verify three things on your own hardware: that your accelerator appears in the container, that port 5000 is free (it is a common default for other services), and that your cameras expose a stream Frigate can actually decode. The repository's own docker-compose.yml expects you to look up your host's render, video and plugdev group IDs with getent group before OpenVINO GPU acceleration will work, and that is the first thing that goes wrong.
Frequently asked questions
How do I install Frigate on Home Assistant?
Frigate itself runs as a container, and Home Assistant connects to it through a custom component linked from the README. The README sends you to docs.frigate.video for installation steps rather than documenting them in the repository.
How do I use Frigate with Home Assistant?
The README lists tight integration via a custom component and communication over MQTT. That MQTT channel is what carries detected-object events into Home Assistant automations.
How do I use Frigate NVR?
You give it IP camera streams, let a low overhead motion stage decide where to run TensorFlow object detection, and read the results from the web UI on port 5000 or from MQTT. The README recommends a GPU or AI accelerator rather than a CPU.
How do I install Frigate?
The README points to https://docs.frigate.video for installation. The repository's own docker-compose.yml builds from docker/main/Dockerfile, and the Makefile's run target publishes ports 5000 and 8971 with the config directory mounted at /config.
How do I use Frigate?
The README describes a pipeline where motion detection locates where to run object detection, and TensorFlow detection runs in separate processes. Results are published over MQTT and video is re-streamed over RTSP.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/blakeblackshear-frigate)
Community notes