Running your own Network Video Recorder (NVR) software is one of the most practical things you can self-host. You keep your footage private, avoid cloud subscription fees, and get features most commercial systems charge premium prices for — including AI-powered object detection. But which self-hosted NVR is the right fit for your setup?

This guide compares the three most popular open-source NVR solutions: Frigate NVR, Shinobi, and ZoneMinder. We’ll cover hardware requirements, ease of setup, AI detection capabilities, and the real trade-offs between them so you can make an informed choice.

💡 This article contains affiliate links. If you buy through them, we earn a small commission at no extra cost to you. Learn more.

Why Self-Host Your Video Surveillance?

Before diving into the comparison, let’s be clear about what you’re getting into:

  • Privacy: Your footage stays on your hardware, not a vendor’s cloud
  • No subscriptions: Avoid the $10–$30/month fees from Ring, Nest, or Arlo
  • Unlimited storage: Retention is limited only by your disk space
  • Local AI detection: Run object detection without phoning home
  • Integration: Connect to Home Assistant, Grafana, MQTT, and more

The trade-off is setup complexity and hardware investment. A capable NVR server doesn’t have to be expensive — a mini PC or old repurposed desktop will handle most home setups.

For a dedicated NVR server, a mini PC with decent performance and low power draw is ideal. The Beelink S12 Pro (N100 CPU, ~$170) handles 4–8 cameras easily with Frigate or Shinobi. For heavier setups with AI object detection, the Beelink SEi12 Pro with an Intel 12th-gen CPU gives you excellent iGPU performance for OpenVINO inference.

Storage is the other big investment. Security camera footage adds up fast. A 4-camera system recording 24/7 at 1080p will consume 1–2 TB per week. A good 4 TB or 8 TB surveillance HDD (Seagate SkyHawk or WD Purple series) is purpose-built for continuous write cycles.


The Contenders at a Glance

FeatureFrigate NVRShinobiZoneMinder
Primary focusAI object detectionMulti-camera monitoringFull-featured NVR
UIModern, cleanWeb-based, responsiveDated but functional
AI detectionNative (Coral/OpenVINO/GPU)Plugin-basedVia ZM-ML (external)
Home Assistant integrationFirst-classLimitedPlugin available
Install methodDockerDocker / nativeDocker / package
Active developmentVery activeModerateModerate
Learning curveModerateLow–ModerateHigh
Resource usageMedium–HighLow–MediumMedium–High

Frigate NVR

Frigate is the current gold standard for self-hosted NVR, especially if you use Home Assistant. It was built from the ground up with real-time object detection as a core feature — not an add-on.

What Makes Frigate Stand Out

Real-time object detection: Frigate integrates tightly with Google Coral TPU accelerators, but also supports OpenVINO (Intel iGPU), Rockchip NPU, TensorRT (NVIDIA), and CPU-based inference. The Google Coral USB Accelerator (~$60) lets Frigate run 100+ inferences per second while barely touching your CPU.

Motion + object-aware recording: Frigate records based on detected objects (person, car, dog), not just raw motion. This dramatically reduces false positives and storage consumption.

MQTT integration: Frigate publishes detection events via MQTT, which is the backbone of Home Assistant automation. Get a notification when a person enters your driveway — not every time a leaf blows by.

Sub-stream support: Frigate uses a low-resolution sub-stream for detection and a high-resolution stream for recording. Your camera does the heavy lifting, not your server CPU.

Frigate Hardware Requirements

CamerasRecommended Hardware
1–4Any modern x86 mini PC (N100 or better), with optional Coral USB
4–8i5/Ryzen 5 mini PC or Coral USB/PCIe
8–16Intel 12th+ gen iGPU for OpenVINO, or Coral M.2/PCIe
16+Dedicated GPU (NVIDIA) or multiple Coral accelerators

Without a Coral or hardware accelerator, Frigate can still do detection on CPU — but expect higher CPU usage and slight latency.

Installing Frigate with Docker Compose

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
version: "3.9"
services:
  frigate:
    container_name: frigate
    privileged: true
    restart: unless-stopped
    image: ghcr.io/blakeblackshear/frigate:stable
    shm_size: "128mb"
    devices:
      - /dev/bus/usb:/dev/bus/usb  # Coral USB
      - /dev/dri/renderD128        # Intel GPU (OpenVINO)
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /opt/frigate/config:/config
      - /data/frigate/recordings:/media/frigate
      - type: tmpfs
        target: /tmp/cache
        tmpfs:
          size: 1000000000
    ports:
      - "5000:5000"    # Web UI
      - "8554:8554"    # RTSP
      - "8555:8555/tcp" # WebRTC
      - "8555:8555/udp"
    environment:
      FRIGATE_RTSP_PASSWORD: "changeme"

Minimum config.yml:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
mqtt:
  host: 192.168.1.x  # Your MQTT broker

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:
            - record
    detect:
      width: 1280
      height: 720
      fps: 5
    objects:
      track:
        - person
        - car
        - dog
    record:
      enabled: true
      retain:
        days: 7
      events:
        retain:
          default: 14

Frigate Pros and Cons

Pros:

  • Best-in-class AI object detection
  • Native Home Assistant integration
  • Actively maintained, strong community
  • Modern, fast web UI
  • Efficient storage use with event-based recording

Cons:

  • Configuration is YAML-heavy (no GUI config editor)
  • Requires learning Frigate-specific concepts (sub-streams, detect vs record roles)
  • Hardware accelerator strongly recommended for 4+ cameras

Shinobi

Shinobi is a lightweight, Node.js-based NVR that prioritizes simplicity and ease of use. It’s a great choice for users who want a clean web interface without the YAML configuration overhead of Frigate.

What Makes Shinobi Stand Out

Ease of setup: Shinobi’s web UI lets you add cameras, configure recording modes, and manage retention all from the browser. No config files required.

Multi-user support: Shinobi has proper user/group management built in, making it suitable for shared installations or small offices.

Low resource overhead: Without heavy AI processing, Shinobi can run on modest hardware. A Raspberry Pi 5 handles 2–4 cameras; a small mini PC easily manages 8–16.

Flexible recording modes: Continuous, motion-triggered, scheduled, or manual. Stream from RTSP, RTMP, HTTP, or USB cameras.

Plugin ecosystem: AI detection via a Shinobi AI plugin (requires separate setup — Python-based, less seamless than Frigate’s native integration).

Installing Shinobi with Docker Compose

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
version: "3"
services:
  shinobi:
    image: shinobisystems/shinobi:latest
    container_name: shinobi
    restart: unless-stopped
    ports:
      - "8080:8080"
    volumes:
      - /opt/shinobi/config:/config
      - /opt/shinobi/database:/var/lib/mysql
      - /data/shinobi/recordings:/opt/shinobi/videos
      - /data/shinobi/streams:/dev/shm/streams
    environment:
      - ADMIN_USER=admin
      - ADMIN_PASSWORD=changeme
      - ADMIN_EMAIL=admin@example.com
      - MYSQL_ROOT_PASSWORD=rootpass
      - MYSQL_DATABASE=shinobi
      - MYSQL_USER=shinobi
      - MYSQL_PASSWORD=shinobipass

After starting, access Shinobi at http://your-server:8080 and log in with admin@example.com / changeme.

Adding a camera is as simple as clicking Add Monitor, entering your RTSP URL, and selecting a recording mode. No YAML editing required.

Motion Detection in Shinobi

Shinobi uses FFmpeg’s built-in motion detection by default. It’s basic — pixel difference-based — but works for simple use cases. For AI-powered detection, you’ll need the Shinobi AI plugin or an external detector like CodeProject.AI.

Motion zones can be drawn directly in the UI, which is more accessible than Frigate’s YAML-based zone configuration.

Shinobi Pros and Cons

Pros:

  • Easiest setup of the three
  • Full web-based configuration
  • Multi-user support built in
  • Low resource usage
  • Works well on modest hardware including Raspberry Pi

Cons:

  • AI detection requires additional setup (not native)
  • Home Assistant integration is limited
  • Less active development than Frigate
  • UI can feel inconsistent in places

ZoneMinder

ZoneMinder is the veteran of self-hosted NVR software — it’s been around since 2002. It has an enormous feature set, but that comes with a steeper learning curve and a UI that hasn’t aged gracefully.

What Makes ZoneMinder Stand Out

Mature and battle-tested: ZoneMinder has been running in production deployments for over two decades. It’s stable, well-documented, and handles edge cases that newer software hasn’t encountered yet.

Deep configuration: Almost every aspect of ZoneMinder is configurable — from codec settings to database behavior to event lifecycle. This is a double-edged sword, but power users will appreciate the control.

ZM-ML for AI detection: The community-developed ZM-ML (ZoneMinder Machine Learning) addon adds object detection via models like YOLOv8. It’s not as seamless as Frigate’s integration but gets the job done.

Scalability: ZoneMinder is designed to scale. Enterprise deployments with 50+ cameras exist. If you’re running a small business or have a large property, ZoneMinder’s architecture handles it.

Installing ZoneMinder with Docker

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
version: "3"
services:
  zoneminder:
    image: dlandon/zoneminder:latest
    container_name: zoneminder
    restart: unless-stopped
    ports:
      - "8443:443"
      - "9000:9000"
    environment:
      - TZ=America/New_York
      - MYSQL_PASSWORD=zoneminder
      - ZM_DB_HOST=db
      - ZM_DB_USER=zm
      - ZM_DB_PASS=zoneminder
      - ZM_DB_NAME=zm
    volumes:
      - /opt/zoneminder/data:/var/cache/zoneminder
      - /data/zoneminder/recordings:/var/cache/zoneminder/events
      - /data/zoneminder/images:/var/cache/zoneminder/images

  db:
    image: mariadb:10.6
    container_name: zoneminder-db
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=rootpass
      - MYSQL_DATABASE=zm
      - MYSQL_USER=zm
      - MYSQL_PASSWORD=zoneminder
    volumes:
      - /opt/zoneminder/db:/var/lib/mysql

Access ZoneMinder at https://your-server:8443/zm. The initial configuration wizard will guide you through database setup and first run.

ZoneMinder’s Quirks

ZoneMinder uses a “monitor” concept where each camera feed is a monitor with a specific mode:

  • Monitor: View only, no recording
  • Modect: Record on motion detection
  • Record: Continuous recording
  • Mocord: Continuous + flag motion events
  • Nodect: For external detectors

The web UI is functional but dated — expect a lot of form-based configuration. Mobile access works but isn’t optimized. Third-party apps like ZMNinja improve the mobile experience significantly.

ZoneMinder Pros and Cons

Pros:

  • Most mature and feature-rich option
  • Excellent scalability
  • Huge community and documentation
  • Handles edge cases well
  • Multiple recording modes

Cons:

  • Dated UI requires adjustment
  • Steep learning curve
  • AI detection requires external ZM-ML addon
  • Heavier resource usage than Shinobi
  • Home Assistant integration via community plugin (less polished)

Head-to-Head: Storage and Performance

Storage Consumption (4 cameras, 1080p)

ModeFrigateShinobiZoneMinder
Event-only recording~50–100 GB/week~200–400 GB/week~200–400 GB/week
Continuous recording~500 GB–1 TB/week~500 GB–1 TB/week~500 GB–1 TB/week

Frigate’s AI-gated recording is the clear winner for storage efficiency. It only records clips with detected objects — a day with no motion events might generate just a few gigabytes.

For continuous recording on any platform, budget accordingly. A pair of 8 TB WD Purple surveillance drives in RAID-1 gives you ~8 TB usable with redundancy — enough for weeks of footage from a 4-camera setup.

CPU Usage (4 cameras, 1080p, Intel N100)

TaskFrigateShinobiZoneMinder
Recording + decode30–50%20–40%40–60%
With AI detection (CPU)70–90%+20–30% (plugin)+30–40% (ZM-ML)
With Coral USB10–20%N/A nativeN/A native
With Intel iGPU (OpenVINO)15–25%N/A nativeN/A native

Camera Compatibility

All three systems support any camera that exposes an RTSP stream — which covers virtually all IP cameras sold today.

Popular cameras that work well with all three:

  • Reolink RLC-810A / RLC-823A: PoE, 4K, dual-stream RTSP. The Reolink RLC-810A is a favorite in the homelab community (~$50 each).
  • Amcrest cameras: Wide selection, reliable RTSP, good value. Amcrest 4K PoE cameras start around $60.
  • Hikvision / Dahua: Professional-grade, excellent performance, but require careful network isolation due to privacy concerns.

For PoE cameras, you’ll also want a PoE switch. An 8-port PoE+ switch runs $40–80 and cleanly powers up to 8 cameras from a single cable run.


Which Should You Choose?

Choose Frigate if:

  • You use Home Assistant and want tight automation integration
  • AI object detection is important (person/car/pet detection)
  • You want efficient, event-based recording to save storage
  • You’re willing to write YAML configuration
  • You have (or plan to buy) a Coral TPU or have Intel iGPU available

Choose Shinobi if:

  • You want the easiest setup experience
  • You’re running on modest hardware (Raspberry Pi, older mini PC)
  • You need multi-user access management
  • Basic motion detection is sufficient for your needs
  • You want GUI-based camera management without config files

Choose ZoneMinder if:

  • You have 16+ cameras and need proven scalability
  • You need maximum configurability and control
  • You’re comfortable with a steeper learning curve
  • You want the most battle-tested option available
  • You’re running a small business or commercial deployment

Quick Start: Which Hardware to Buy

If you’re starting fresh:

Budget build (~$200 total):

Mid-range build (~$500 total):

Power user build:

  • Dedicated server or NAS with GPU passthrough or Google Coral M.2 accelerator
  • 8–16 cameras
  • RAID storage array
  • NVR software: Frigate or ZoneMinder

Final Verdict

Frigate NVR is the best choice for most homelab users in 2026. Its AI detection, Home Assistant integration, and active development make it the most capable and future-proof option. The YAML configuration has a learning curve, but the payoff is worth it.

Shinobi earns its place as the most beginner-friendly option. If you want cameras up and recording in under an hour with minimal fuss, Shinobi delivers.

ZoneMinder remains the go-to for large-scale deployments or users who need maximum control. Don’t let the dated UI scare you off — under the hood, it’s the most feature-complete platform of the three.

Whatever you choose, self-hosting your surveillance gives you capabilities commercial cloud systems reserve for their most expensive plans — while keeping your footage entirely private, on hardware you own and control.


Have questions about your specific NVR setup? Drop them in the comments below.