Migration
Replace Ring or Nest cameras with a local NVR
Frigate does local object detection on RTSP cameras and keeps everything on your disk. It is one of the higher-effort migrations on this site, and it is mainly worth it if your objection is to cloud video specifically.
Can you replace Ring Protect or Nest Aware with self-hosted cameras?
Frigate replaces the subscription: it records RTSP camera streams to your own disk and runs real object detection locally, so you get person and car alerts rather than motion alerts. The prerequisite is cameras that expose an RTSP or ONVIF stream, which rules out most Ring and Nest hardware outright, so this is usually a camera replacement and not just a software change. What you take on is storage sizing, retention policy and false-alarm tuning: a single 4 Mbit/s camera recording continuously is about 43 GB per day. Budget a box with an Intel iGPU, at least 2 TB of disk and a weekend.
Check one thing before you read the rest of this page: does your camera expose an RTSP or ONVIF stream? If it does not, this is not a software migration. It is a hardware replacement with a software migration attached, and most Ring and Nest devices fall on that side. Their video path is designed to end at the vendor.
What you are actually giving up#
The subscription was not buying you storage. It was buying you somebody else's operations team, and here is the itemized list of what you take back.
The storage, and sizing it correctly. Recordings dominate everything else on a local NVR. Bitrate in Mbit/s times 10.8 gives GB per camera per day, which is just 86,400 seconds divided by 8 bits and scaled: a 4 Mbit/s stream is 0.5 MB/s, which is 43.2 GB a day. Six cameras for a week is roughly 1.8 TB. Nobody sends you a bill when you get this wrong. The disk simply fills.
The retention policy. Cloud plans hand you a number of days and enforce it. Locally you write the rule, and Frigate re-tiered retention in 0.17 with separate continuous and motion fields, continuous off by default. There is a safety net: under one hour of remaining space, Frigate deletes the oldest recordings regardless of your rules. That protects the host and silently discards footage you thought you had.
The false-alarm tuning. Cloud NVRs ship with someone else's tuned thresholds and a support queue. Locally you own the zones, the object filters, the minimum area, the required ratio and the score thresholds, and you will spend a fortnight being told about cats at 3am. Frigate's detection is genuinely good, which is the point of it over motion detection, but good still means you draw the zones.
The offsite copy. Cloud video was, incidentally, off-premises. Recordings that live in the same building as the camera are recordings an intruder can carry away. Almost nobody backs up NVR footage and that is defensible, but decide it on purpose. See Backups that actually restore: here the thing worth copying is /config, not the video.
Someone else's uptime. Frigate is still pre-1.0, every minor moves config keys, and database migrations are one-way. If the box is down there is no cloud recording of the hour you missed.
If that reads as work you do not want, keep the subscription. This is the highest-effort migration in the home category and it pays back for one specific objection: you do not want video of the inside and outside of your house held by a company that can hand it on or change its policy. Without that objection the value is thin.
Get your recordings out first#
Retention is tied to the subscription. When it ends, the history goes with it, and there is no export button that gives you the whole archive.
Do this before you cancel:
- Download every clip you would be upset to lose, one at a time. There is no bulk export. Budget an evening.
- Note the retention window you are actually on. That is the target the local system has to match, and it is usually shorter than people assume.
- Inventory the hardware: model, RTSP or ONVIF support, whether it has a configurable second substream, PoE or Wi-Fi. That table decides your budget.
- Test a stream before buying anything.
ffprobe rtsp://user:pass@camera/streamgives you the resolution, codec and bitrate to plan around.
Step 3's substream question is not a detail. Detection runs at a fixed model input size regardless of what you feed it, so pointing the detect role at a 4K 20 Mbit/s main stream is the commonest reason a Frigate install pegs every core. Give detection a second stream at around 640x640 and a low frame rate, and reserve the high-resolution stream for recording. Fixing that on an existing install routinely turns 90 percent CPU into 15.
Frigate
Local NVR that runs real object detection on your camera streams, with no cloud account
700 MB idle · ops load 3/5 · MITHome automationHome Assistant
Local-first automation hub that speaks nearly every smart home protocol without a vendor cloud
600 MB idle · ops load 4/5 · Apache-2.0Which one to pick#
These two are not alternatives. Frigate is the NVR and the detector; Home Assistant turns a detection into a notification, a light and a rule about when not to bother you. Most people who finish this migration run both.
| Your situation | What to run | Why |
|---|---|---|
| PoE cameras with RTSP, you want person alerts | Frigate alone first | Get detection right before adding automation |
| You want notifications, arming schedules, presence | Frigate plus Home Assistant | Camera events become entities you can write rules against |
| You already run Home Assistant OS | Frigate as an app, then move it | Convenient start, but it competes for the same CPU |
| Cameras are Wi-Fi and cloud-only | Do not start | No RTSP stream means nothing to record |
| One doorbell and nothing else | Keep the subscription | The hardware and disk cost will not pay back |
| Raspberry Pi as the host | Frigate without semantic search | The docs say semantic search will not work reliably there |
Run Frigate on a box you are not asking to do much else. An idle Intel N100 or an eighth-generation-or-later desktop is the sweet spot; Choosing home server hardware covers sizing.
What it actually costs#
Storage. Do the arithmetic before you buy the disk, not after.
| Cameras | Stream bitrate | Mode | Per day | Per 14 days |
|---|---|---|---|---|
| 1 | 4 Mbit/s | continuous | 43 GB | 605 GB |
| 4 | 4 Mbit/s | continuous | 173 GB | 2.4 TB |
| 6 | 4 Mbit/s | continuous | 259 GB | 3.6 TB |
| 6 | 4 Mbit/s | motion and objects only | 25 to 60 GB | 0.35 to 0.85 TB |
The last row is a range because it depends on your street, and it is where the honest trade lives: detection-only recording is far cheaper and leaves you nothing when the detector misses. Two 4 TB drives in a mirror is the boring right answer for six cameras on continuous; ZFS, btrfs, mdadm or one disk covers whether to mirror at all.
The detector. A Coral TPU offloads inference at about 10 ms and does nothing for decode. A modern Intel iGPU on OpenVINO does inference in roughly 4 to 15 ms and also does the decode, which is the larger cost. The Frigate docs no longer recommend Coral for new installs outside low-power builds, and 0.17 dropped support for Nvidia GTX 900 series cards. Buy the iGPU, pass /dev/dri through, skip the USB stick.
Memory. Frigate idles around 700 MB and sits near 2.5 GB with a few cameras, because there are two ffmpeg processes per camera plus the detector. Semantic search changes the class of machine: the docs require 8 GB and recommend 16 GB.
Shared memory, which is not optional. Docker's default 64 MB is below what two cameras need. The formula is (width x height x 1.5 x 20 + 270480) / 1048576 plus 40 MB for logs, about 67 MB for one 1280x720 detect stream.
services:
frigate:
image: ghcr.io/blakeblackshear/frigate:stable
shm_size: "512mb"
devices:
- /dev/dri/renderD128:/dev/dri/renderD128
volumes:
- ./config:/config
- /srv/frigate:/media/frigate
- type: tmpfs
target: /tmp/cache
tmpfs: { size: 1000000000 }
ports:
- "8971:8971"Note what is missing: port 5000. Frigate exposes two HTTP ports deliberately. 8971 enforces login and role checks; 5000 is the internal admin API with no authentication at all, meant for containers on a trusted Docker network. Publishing or reverse-proxying it hands anyone your cameras and your config. For single sign-on, Frigate trusts X-Forwarded-User and X-Forwarded-Groups from Authelia or authentik; see Reverse proxy and TLS.
What breaks and how to tell early#
Notification latency, in week one. Walk up your own driveway with a stopwatch. The chain is camera, Frigate, detection, Home Assistant, push transport, phone. Detection is milliseconds; the seconds go to segment assembly and your automation. Over about ten seconds means a problem to find now, not the first time it matters.
False alarms, in week two. They come at night, from headlights, spiders on the lens and a flag. Draw zones and set object filters rather than raising the score threshold globally, because a threshold high enough to silence a moth silences a person in the rain too. The failure you are avoiding is someone in the household muting the notifications, and it is silent.
Cameras flapping offline. That is shm_size. Fix it before you look at the network.
The disk, in month two. Watch free space with Beszel or Uptime Kuma and alert on it. The safety net deleting your oldest footage is not an error you will see.
The point of no return#
Cancelling the subscription is not it. Running down the vendor retention window is: once the cloud history has aged out, the only copy of last month is the one on your disk, and if the disk was sized wrong or the retention config was wrong, you find out by needing footage that is not there.
So sequence it. Run Frigate in parallel with the subscription for one full retention cycle. Each week, look up one event in Frigate that you know happened and confirm the clip exists at the quality you would need. Only then cancel. And copy /config, meaning config.yml plus frigate.db, before every upgrade, because migrations do not go backwards.
What to do next#
Run ffprobe against one camera today; that answer decides whether this migration is possible at all. Then read the Frigate profile, size the disk from the table above and pair it with Home Assistant. If you are also leaving a cloud hub, Replacing SmartThings is the same weekend's work, and Home automation has the rest.
Questions#
Can I keep my Ring or Nest cameras and just use Frigate?
Almost certainly not. Frigate needs an RTSP or ONVIF stream, and cloud-first doorbell and camera brands generally do not expose one; the video path is designed to go to the vendor. Check your exact model before you plan anything else, because if the answer is no, this migration means buying cameras. Look for cameras that advertise RTSP and ONVIF in the spec sheet, and prefer ones with a configurable second substream, which you will need for detection.
How much disk does a local NVR need?
Take the stream bitrate in Mbit/s and multiply by 10.8 to get GB per camera per day. A 4 Mbit/s camera recording continuously is about 43 GB a day; six of them for a week is roughly 1.8 TB. That is the number to design around before you enable continuous recording. Recording only on detected objects cuts it dramatically but leaves you with no footage of the thing the detector missed, which is the trade you are actually making.
Do I still need a Coral TPU for Frigate?
For most new builds, no. The Frigate docs stopped recommending Coral outside low-power builds. A Coral runs inference in about 10 ms but does nothing for video decode, which is where your CPU actually goes. A modern Intel iGPU on OpenVINO runs inference in roughly 4 to 15 ms and also handles decode, so one piece of hardware covers both jobs. Read the detector page against the hardware you already own before buying a USB accelerator.
Why do my cameras keep dropping offline in Frigate?
Usually shared memory. Frigate keeps decoded frames in /dev/shm, and Docker's default 64 MB is below what even two cameras need. The symptom is ffmpeg processes dying and cameras flapping, not a clear error message. 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, start at 512 MB, and recompute when you add cameras.
Will notifications be as fast as Ring?
Close, but the path is longer and it is yours to keep working. The chain is camera to Frigate to detection to Home Assistant to a push service to your phone, and any link can add seconds or fail silently. Detection itself is milliseconds; the delay is video segment assembly, your automation and the notification transport. Budget a few seconds and test it deliberately by walking up your own driveway, because nobody notices a broken notification until they need it.
Is Frigate stable enough to depend on?
It is well used and still pre-1.0. The stable line is 0.17.2 from June 2026 with 0.18 in release candidates as of early September, and every minor moves config keys: 0.17 alone re-tiered recording retention and reorganized the genai block. Database migrations are one-way, so take a copy of /config before any upgrade. Treat release notes as mandatory reading rather than optional.
Sources#
- Frigate installation docs, shm-size formula, ports and mounts
- Frigate hardware recommendations and detector inference speeds
- Frigate authentication, roles and the port 5000 warning
- Frigate recording retention configuration
- Frigate semantic search RAM requirements
- Frigate 0.17.0 release notes and breaking changes
- Home Assistant installation docs and method comparison
- Home Assistant backup integration, supported install types
Published . Last reviewed . Found something out of date? Tell us and we will fix it and log the change.