Self-Hosted Camera Systems: The Complete Frigate + Home Assistant Guide (2026)
Security Cameras

Self-Hosted Camera Systems: The Complete Frigate + Home Assistant Guide (2026)

Build a private, subscription-free camera system with Frigate and Home Assistant — hardware picks, detector choices, camera compatibility, and storage math.

18 min read

Disclosure: Some links in this article are affiliate links. We may earn a commission on qualifying purchases at no extra cost to you.

Cloud cameras have a subscription problem, and anyone who has priced out a five-camera Ring or Nest plan already knows it. Frigate flips that model: it's a free, open-source network video recorder that runs entirely on hardware you own, does its own object detection instead of streaming your footage to someone else's servers, and plugs directly into Home Assistant for automations that never touch the internet.

The catch is that Frigate has a reputation problem left over from its early years — namely, that you need a Google Coral USB accelerator to make it usable. That advice is now outdated. Frigate's own documentation has quietly walked it back, and the object-detection hardware landscape in 2026 looks very different: integrated Intel graphics can run detection for free, and dedicated accelerators like the Hailo-8L now outperform Coral for roughly the same money.

This guide walks through the entire build in order — host hardware, OS and Docker, Frigate itself, the Home Assistant integration, camera setup over RTSP, and the detector decision that determines how many cameras your system can actually handle. Along the way it covers the configuration mistakes (masks vs. zones, shared memory limits, RTSP quirks) that generate most of the frustrated forum posts on this topic.

This is written for the DIY smart-home crowd already comfortable with Home Assistant, Docker, or at least willing to get comfortable with both. If you want a system where your camera footage never leaves your network and never depends on a company staying in business, this is the build.

As an Amazon Associate, smarthomegearhq earns from qualifying purchases. We only link to hardware we'd actually install in our own setup.

What You'll Need

  • A dedicated host machine (a mini PC, NAS, or old desktop — not the same device running Home Assistant OS, if avoidable)
  • Docker installed on that host (or Home Assistant OS with the Frigate Add-on, with caveats below)
  • An MQTT broker (Mosquitto) — required for the Home Assistant integration, optional for Frigate alone
  • One or more ONVIF/RTSP-capable IP cameras (wired, not battery-powered)
  • A storage plan: SSD/NVMe for the Frigate database and snapshots, plus HDD or NAS storage for continuous recording
  • Optionally, an object detection accelerator (Coral, Hailo-8L/8, or an NVIDIA GPU) — not mandatory if your host has a recent Intel integrated GPU
  • HACS installed in Home Assistant (for the Frigate integration/card)

Before You Start — Prerequisites & Considerations

Frigate ships as a Docker container — the official image (stable tag, currently on version 0.17.2, MIT-licensed) runs on any Docker host, including as a Home Assistant Add-on. That last option is tempting because it's one click, but it comes with real limits: an Add-on is confined to whatever storage the Home Assistant OS VM can see, it has no path to an NVIDIA GPU, and it can't access an Intel NPU. If you're running more than one or two cameras, install Frigate as a standalone Docker container on separate hardware and connect it to Home Assistant through the integration — not the Add-on.

Two components get confused constantly, so it's worth separating them clearly: the Frigate Add-on runs Frigate itself, while the Frigate integration (installed through HACS) is what connects Frigate to Home Assistant's entities, cards, and automations. You need the integration either way, whether Frigate is running as an Add-on or as an independent container.

MQTT is the other prerequisite people skip. Frigate can technically run without a broker, but the Home Assistant integration requires one — install Mosquitto as its own Add-on or container before going further.

Step 1 — Choose Your Host Hardware

The host is where object detection actually happens, and it's the single decision that determines how many cameras you can run smoothly. A device running Home Assistant OS — Green, Yellow, or similar — is a poor Frigate host beyond one or two low-activity cameras: no NVMe expansion, USB 2.0 on some models, and no real path to a GPU or NPU. Keep Frigate off your Home Assistant device and run it on dedicated hardware instead.

Mini PC (recommended default): An Intel N100-based mini PC is the pick that shows up repeatedly in Frigate's own hardware guidance, specifically because of its efficient CPU and — on some models — dual gigabit NICs. That second network port matters for privacy: it lets you put your cameras on their own isolated network segment, physically separated from your main LAN and blocked from reaching the internet at all. For an enthusiast building a privacy-first camera system, that's not a nice-to-have, it's the point.

Specs to look for: N100 (4C/4T, up to ~3.4GHz), 16GB RAM, at least 500GB of NVMe storage (with room to add a second M.2 drive), dual gigabit LAN, and an integrated GPU capable of hardware-accelerated decoding and OpenVINO detection.

Check Price on Amazon

Pros:

  • Efficient enough to run 24/7 without a meaningful power bill
  • Dual NIC models allow full network isolation for cameras
  • Integrated GPU handles both video decoding and OpenVINO object detection

Cons:

  • Not every N100 mini PC has dual NICs — check the spec sheet before buying
  • Some sibling models in the same product line have known compatibility issues; verify the specific SKU against current Frigate hardware notes before purchasing

Verdict: this is the sensible default host for most builds of two to six cameras, and it doesn't require an accelerator to get usable detection speeds.

Perfect for: anyone starting a Frigate build from scratch who wants one box that handles decoding, detection, and network isolation without extra parts.

NAS (Synology/QNAP): A NAS is excellent for long-term recording storage but a rough fit for running Frigate itself. Some NAS Docker environments can't reach the container registry Frigate publishes to and don't expose the shared-memory settings Frigate needs, which forces a command-line install instead of the GUI app store. The more common pattern in the community: use the NAS purely for continuous-recording storage (in a mirrored array), and run Frigate's detection workload on a separate mini PC.

Home Assistant Green/Yellow: Fine for hosting the Home Assistant integration side of things, not for running Frigate itself once you're past a camera or two. Treat these as the automation brain, not the camera brain.

Step 2 — Set Up the OS and Docker

Install a Debian-based Linux distribution directly on the host — bare metal gives Frigate the most reliable access to hardware acceleration (GPU passthrough, Coral USB, Hailo M.2) compared to running inside a VM. Install Docker and Docker Compose, then confirm the host can see any accelerator hardware before writing the Frigate config (for Intel GPUs, check that /dev/dri/renderD128 exists; for Coral, confirm the USB device is detected).

One setting trips up almost everyone on their first install: Docker's default shared-memory size (shm-size) is 64MB, which is not enough for Frigate. The commonly cited default of 128MB works for a couple of 720p streams, but anything larger — more cameras, higher resolution — needs a bigger allocation in your docker-compose.yml, or you'll hit a "Bus error" crash. Set shm_size explicitly rather than relying on defaults.

Step 3 — Install Frigate

Pull the image tag that matches your hardware path: stable for CPU/Coral/OpenVINO builds on most architectures, stable-tensorrt if you're running an NVIDIA GPU. A minimal docker-compose.yml needs volume mounts for your config file and your media/storage path, the shared-memory override from Step 2, and — if you're using hardware acceleration — the relevant device passthrough (/dev/dri for Intel, /dev/bus/usb for Coral USB, /dev/apex_0 for Coral M.2).

Frigate's config file (config.yml) is where cameras, detectors, recording, and MQTT settings all live. Start minimal: one camera stream, CPU-only detection, recording disabled, get the container running and the web UI reachable, then layer in detection and recording once the basics are confirmed working.

Step 4 — Connect Frigate to Home Assistant (MQTT + HACS)

With Mosquitto running, point Frigate's config.yml at the broker (host, port, credentials). Frigate publishes camera state, detected objects, and events over MQTT topics, which is what Home Assistant listens to.

On the Home Assistant side, install the Frigate integration through HACS (not the Home Assistant App Store — that only handles the Add-on side if you went that route). Once added, Frigate exposes camera entities, binary sensors for detected object types, and a media browser card for reviewing recorded events and clips directly in the Home Assistant dashboard. This is also the point where Frigate-triggered automations become possible — a person detected at the front door can flip on porch lights or fire a mobile notification with a snapshot attached, entirely on your local network.

Step 5 — Add and Configure Your Cameras (RTSP)

Frigate works with any camera that exposes an ONVIF or RTSP stream — it doesn't care about brand as long as the stream is accessible. That said, compatibility quality varies a lot in practice, and Wi-Fi cameras are worth avoiding in general since wireless streams are less reliable for continuous recording.

Camera Resolution Notable specs Positioning Amazon
Reolink RLC-810A 4K (3840×2160) PoE, 100ft IR, on-camera person/vehicle/animal detection, no subscription, up to 512GB microSD Budget/mid Check Price
Amcrest IP8M-2496EB-V2 4K (3840×2160) H.265/H.264, ONVIF, 3 simultaneous streams, IP67 Mid Check Price
Dahua / Loryta / Hikvision ColorVu Varies (up to 8MP) On-camera AI pre-filtering (SMD Plus / AcuSense), professional-grade optics Premium Search on Amazon
TP-Link Tapo (wired models: C120/C210/C320WS, etc.) Varies RTSP + ONVIF Profile S available on wired models only, requires a dedicated camera account in the Tapo app Budget Check current wired Tapo listings on Amazon

A few compatibility notes worth knowing before you buy:

  • Order of preference in Frigate's own hardware guidance runs Dahua, then Hikvision, then Amcrest — Amcrest is a Dahua-adjacent rebrand with smaller sensors on entry-level models, which is why it lands third rather than being ruled out.
  • Reolink RTSP streams are notoriously unstable in their native form. The community workaround is routing through go2rtc's HTTP-FLV support, or using a bridge like Neolink, rather than fighting the native RTSP implementation directly.
  • Battery-powered and Wi-Fi doorbell-style cameras (Tapo's battery lineup, for example) do not support RTSP at all — regardless of brand, if it's battery-powered, assume it won't work with Frigate until proven otherwise.
  • Every camera should expose two streams: a high-resolution main stream for record, and a low-resolution substream (roughly 640×480 at 5fps) for detect. Feeding a 4K stream into the detector wastes accelerator throughput for zero accuracy gain.

Step 6 — Choose and Configure Object Detection Hardware

This is the decision that used to default to "buy a Coral," and no longer should. Frigate's own documentation now states plainly that Coral is not recommended for new installations except in low-power scenarios — OpenVINO, NVIDIA GPUs, and Hailo accelerators are the current recommended paths.

Detector Throughput Power Cost tier Best for
Intel iGPU (OpenVINO) ~12-30ms per inference depending on load and CPU generation Included in host CPU Free 2-4 cameras, no extra hardware
Google Coral USB ~10ms/inference, ~100 FPS ceiling 2W Budget/mid, increasingly scarce Low-power setups, legacy builds
Google Coral M.2 Dual Edge TPU ~10ms/inference per TPU, dual-chip ~2W Mid 6+ camera setups needing headroom
Hailo-8L (M.2, e.g. Raspberry Pi AI Kit) 7ms inference, up to 350 FPS ~2.5W Mid Modern Coral replacement, Raspberry Pi 5 builds
Hailo-8 (M.2) 7ms inference, up to 580 FPS ~2.5W Premium High camera counts, GenAI features
NVIDIA GPU (ONNX/TensorRT image) Highest throughput, ~20 concurrent streams on consumer cards Highest Premium 8+ cameras, 4K, face recognition/LPR, GenAI descriptions

Intel integrated GPU (OpenVINO) — the free option. If your host mini PC has a recent Intel iGPU, you may not need to buy anything. OpenVINO runs directly on the integrated graphics (or the CPU, or an Intel NPU on newer Core Ultra chips) and handles the default SSDLite MobileNet v2 model at speeds fast enough for a handful of cameras. The tradeoff versus a dedicated accelerator: inference time is not constant — it degrades under heavy simultaneous activity across multiple cameras, where a dedicated chip stays flat.

Google Coral USB — legacy, not dead. The Coral is still a capable, extremely power-efficient chip. It's simply no longer the default recommendation, and availability has gotten tighter as stock has thinned out. It remains a sensible pick if you specifically want the lowest possible power draw and don't need GenAI features that newer detectors support. Note the labelmap limitation: Coral only recognizes the fixed set of classes in its bundled SSD/MobileNet model.

Check Price on Amazon

Google Coral M.2 Dual Edge TPU — more headroom, more setup. The dual-chip M.2 card requires installing a driver on the host (unlike the plug-and-play USB version) and throttles under sustained load, where the USB version doesn't. Frigate only uses one Edge TPU per detector instance, so the second chip only pays off if you're running parallel detector processes.

Check Price on Amazon

Hailo-8L / Hailo-8 — the modern Coral replacement. Native support landed in Frigate 0.17, and a Raspberry Pi 5 plus a Hailo-8L HAT is now frequently cheaper than a Coral USB accelerator during stock shortages, while outperforming it on both latency and frame throughput. This is the pick if you're starting fresh in 2026 and want dedicated accelerator hardware without NVIDIA's power and complexity overhead.

Check Price on Amazon

Pros:

  • Meaningfully faster than Coral at similar power draw
  • Native Frigate support, no manual driver compilation
  • Works well paired with a Raspberry Pi 5 for a compact, low-power build

Cons:

  • Newer hardware means less community troubleshooting history than Coral
  • M.2 installation and PCIe passthrough is more involved than a USB accelerator

Verdict: this is the accelerator to buy new in 2026 if you've decided you need one — it beats Coral on every performance metric that matters.

Perfect for: builders assembling a Raspberry Pi 5 or M.2-equipped mini PC who want dedicated detection hardware without going the NVIDIA route.

NVIDIA GPU — for high camera counts and extra features. This is the highest-throughput and highest-complexity path, requiring drivers, the NVIDIA Container Toolkit, and (for the Home Assistant Add-on route) noting that GPU passthrough isn't supported there at all — GPU builds need standalone Docker. Worth it if you're running eight or more cameras, want 4K detection, or plan to use GenAI-based scene descriptions, face recognition, or license plate recognition, all of which lean on additional compute.

One important rule regardless of which path you pick: detectors cannot be mixed. You can't run Coral and OpenVINO simultaneously for object detection in the same Frigate instance — pick one detector type per deployment.

Step 7 — Tune Detection: Zones, Masks, and Reducing False Positives

This is where most Frigate frustration actually lives, and it's a configuration problem, not a hardware one.

Masks and zones are not the same tool, and conflating them is the single most common source of confusion. A motion mask suppresses motion-triggered activity in a region of the frame — it does not prevent object detection there. If you want Frigate to only alert when something enters a specific area (a driveway, not the sidewalk beyond it), the correct tool is a zone combined with required_zones, not a mask. Over-masking a frame to "reduce noise" often breaks object tracking instead of fixing false positives.

Before reaching for masks at all, adjust threshold, min_score, and min_area in your camera's detect configuration — Frigate already requires multiple consecutive frames and a minimum median confidence score before it registers a detection, and most false-positive complaints are resolved by tightening these values rather than masking the frame.

Remember also that your accelerator only handles detection, not video decoding — the CPU (or hardware decode via QSV/VAAPI/NVDEC) does the work of decompressing the H.264/H.265 stream itself. Feeding full-resolution main streams into the detect pipeline instead of a proper low-res substream wastes decoding capacity for no benefit.

Step 8 — Dial In Storage and Retention

Storage sizing is simple math once you know your bitrate: daily storage in GB ≈ bitrate in Mbps × 10.8.

Resolution / Codec Typical bitrate Storage per camera per day
1080p H.265 2-3 Mbps ~22-32 GB
1080p H.264 4-6 Mbps ~43-65 GB
4K H.264 12-16 Mbps ~130-170 GB
4K H.265 ~1.4-1.9 Mbps equivalent ~15-20 GB

A rough rule of thumb: one 4K camera recording continuously eats about 1TB per week. Eight 4K cameras over a 30-day retention window lands around 20TB. Switching from continuous recording to motion-only cuts that by roughly half to four-fifths, which is why most builds separate retention policies by type — continuous, motion, alerts, and detections each get their own retention window in Frigate's recording config.

On the hardware side, split the workload: an SSD or NVMe drive for Frigate's database, snapshots, and cache (this is write-intensive and benefits from SSD speed), and dedicated surveillance-rated HDDs for continuous 24/7 recording, where the sustained-write endurance of a consumer SSD isn't the right fit.

Check Price on Amazon

Storage pricing has been unusually volatile recently due to NAND supply constraints — worth checking current pricing directly rather than assuming historical figures still hold before finalizing a storage budget.

Step 9 — Fix the Live View (go2rtc, WebRTC)

Frigate's default live view (jsmpeg) is functional but noticeably laggy for real-time monitoring. The fix is configuring go2rtc, which Frigate bundles, to serve the stream over MSE by default or WebRTC for the lowest latency (sub-200ms is achievable, though WebRTC needs port 8555 open for both TCP and UDP plus properly configured ICE candidates). Audio compatibility differs by protocol — AAC works with MSE, while WebRTC needs Opus — so check your camera's audio codec before assuming live audio will just work.

Common Mistakes to Avoid

  • Assuming Coral is required. It isn't anymore — check whether your host's integrated GPU can handle OpenVINO detection before buying anything.
  • Running Frigate as a Home Assistant Add-on with more than a couple of cameras. The Add-on's storage and hardware access are both limited to what the HA OS VM can see.
  • Leaving shm_size at Docker's default. This is the single most common cause of Frigate crashing with a "Bus error."
  • Using motion masks to solve zone problems. Masks suppress motion triggers, not object detection — use zones with required_zones for area-specific alerting.
  • Feeding full-resolution streams into the detector. Always route a low-resolution substream to detect and reserve the high-resolution stream for record.
  • Buying a battery-powered or Wi-Fi camera and expecting RTSP support. Confirm wired power and RTSP/ONVIF support before purchasing, not after.
  • Setting MQTT to localhost inside a Docker container. Use the host's actual network address or a Docker service name the container can resolve.
  • No retention policy. Continuous recording without differentiated retention windows for motion, alerts, and detections will fill a drive far faster than expected.

Frequently Asked Questions

Q: Do I still need a Coral USB accelerator for Frigate in 2026?

No. Frigate's official hardware guidance no longer recommends Coral for new installations except in specific low-power scenarios. A modern Intel integrated GPU running OpenVINO handles two to four cameras without any additional hardware purchase, and the Hailo-8L accelerator now outperforms Coral for builds that need dedicated detection hardware.

Q: Can I run Frigate directly on my Home Assistant device?

You can, but it's not recommended beyond one or two low-activity cameras. Home Assistant OS devices like Green have limited storage, no GPU passthrough, and no NPU access. Run Frigate as a standalone Docker container on separate hardware and connect it to Home Assistant through the integration instead.

Q: Why does my container crash with a "Bus error"?

This almost always means Docker's shared-memory allocation (shm-size) is too small for your camera count and resolution. The 64MB Docker default is insufficient; increase it explicitly in your compose file rather than relying on Frigate's built-in 128MB default once you add more than a couple of cameras.

Q: Will my Reolink or Tapo cameras work with Frigate?

Wired Reolink cameras work but are known for unstable native RTSP streams — routing through go2rtc's HTTP-FLV support or a bridge tool resolves most of the instability. Wired Tapo models (C120, C210, C320WS, and similar) support RTSP and ONVIF Profile S, but battery-powered and doorbell-style Tapo devices do not support RTSP at all, regardless of firmware.

Q: How much storage do I actually need?

Use the formula: daily storage in GB ≈ bitrate in Mbps × 10.8. A single 4K camera recording continuously uses roughly 1TB per week. Motion-only recording cuts that significantly, and splitting retention policies by recording type (continuous, motion, alerts) is the standard way to control long-term storage growth.

Q: What's the difference between a motion mask and a zone?

A motion mask suppresses motion-based triggers in a region of the frame but does not stop object detection there. A zone, combined with required_zones, is the correct tool for restricting alerts to a specific area of a camera's view. Confusing the two is the most common source of both missed detections and false positives.

Conclusion

A self-hosted camera system built around Frigate and Home Assistant delivers something cloud cameras structurally can't: footage and detection that never leave your network, with no monthly fee attached to any of it. The build has more moving parts than plugging in a Ring camera — host hardware, Docker, MQTT, an accelerator decision, camera compatibility — but none of those parts are exotic, and the 2026 hardware landscape has actually gotten friendlier, not harder, now that a Coral accelerator is optional rather than assumed.

Start with the host: an N100 mini PC with dual NICs covers most builds without an accelerator at all, and gives you the option to isolate your cameras on their own network segment from day one. Add detection hardware only once you've confirmed your integrated GPU can't keep up, and lean toward Hailo-8L over Coral if you're buying new. From there, the configuration details — shared memory, zones vs. masks, substream routing, retention policy — are what separate a system that works reliably from one that generates false alerts and fills a hard drive by the end of the month.

Get the fundamentals right once, and the result is a camera system that answers to no one but you.

Share:

Article Topics

#home assistant frigate#frigate nvr setup#self-hosted security camera#coral tpu frigate#frigate object detection hardware