Moonfire NVR vs Frigate: NVR Compared

Quick Verdict

Frigate and Moonfire NVR solve different problems. Frigate is an AI-powered NVR that detects people, cars, and animals in your camera feeds — it tells you what moved. Moonfire NVR is a lightweight recorder that captures RTSP streams directly to disk with near-zero CPU usage — it tells you that something was recorded. If you want smart detection and Home Assistant integration, choose Frigate. If you want efficient 24/7 recording on minimal hardware, choose Moonfire.

Overview

Moonfire NVR started as a personal project by Scott Lamb to solve a specific problem: record RTSP camera feeds as efficiently as possible. Written in Rust, it avoids transcoding entirely — H.264 streams go straight from camera to disk. The result is an NVR that runs six 1080p cameras on a Raspberry Pi 2 at under 10% CPU usage. No AI, no object detection, no integrations — just reliable recording with a clean web UI for playback.

Frigate (v0.17.0) takes the opposite approach. It runs AI object detection models on every frame using Google Coral TPUs or Intel OpenVINO, classifies detected objects, integrates deeply with Home Assistant, and includes go2rtc for live streaming. It’s a smart surveillance platform, not just a recorder.

Feature Comparison

FeatureMoonfire NVR 0.7.30Frigate 0.17.0
Primary functionPassthrough recordingAI detection + recording
Object detectionNoYes (person, car, animal, etc.)
Motion detectionNoVia AI models
Hardware accelerationNone needed (no processing)Coral TPU, OpenVINO, ROCm
TranscodingNone (passthrough to disk)FFmpeg (for sub-streams, playback)
Live streamingWeb UI playbackgo2rtc (WebRTC, MSE, HLS, RTSP)
RTSP restreamingNoYes (reduces camera load)
Home AssistantNoDeep integration (companion add-on)
MQTTNoYes (native)
Audio detectionNoYes (speech, bark, car horn)
Zone-based detectionNoYes
Birdseye viewNoYes (combined multi-camera)
Web UIClean, minimal playback UIFull event browser + live view
APIRESTfulRESTful + WebSocket
ConfigurationTOML fileYAML file
DatabaseSQLite3SQLite
LanguageRustPython + Go
Docker image size~50 MB~1.5 GB
Minimum RAM512 MB2 GB
CPU usage (4 cameras, 1080p)<10%15-80% (depends on acceleration)
Sub-stream supportNo (records what camera sends)Yes (detect on sub, record on main)
Recording modesContinuous onlyContinuous, event-based, snapshot
Raspberry Pi supportYes (Pi 2+)Pi 4+ with Coral TPU
GitHub stars1,100+18,000+
LicenseGPL-3.0MIT

Installation Complexity

Moonfire NVR

Moonfire uses a TOML config and a lightweight container:

services:
  moonfire:
    image: ghcr.io/scottlamb/moonfire-nvr:v0.7.31
    container_name: moonfire-nvr
    restart: unless-stopped
    ports:
      - "8080:8080"
    volumes:
      - moonfire-config:/var/lib/moonfire-nvr
      - /path/to/recordings:/recordings
    environment:
      - TZ=America/New_York

volumes:
  moonfire-config:

Initial setup requires running moonfire-nvr init to create the database, then configuring cameras via CLI or config file. Each camera needs its RTSP URL, retention policy, and stream details. The setup is minimal but documentation is sparse compared to Frigate.

Frigate

Frigate requires more configuration but has extensive documentation:

services:
  frigate:
    image: ghcr.io/blakeblackshear/frigate:0.17.0
    container_name: frigate
    restart: unless-stopped
    privileged: true
    shm_size: 256mb
    ports:
      - "5000:5000"
      - "8554:8554"
      - "8555:8555/tcp"
      - "8555:8555/udp"
    volumes:
      - ./config:/config
      - /path/to/recordings:/media/frigate
      - type: tmpfs
        target: /tmp/cache
        tmpfs:
          size: 1000000000
    devices:
      - /dev/bus/usb:/dev/bus/usb  # Coral USB
    environment:
      - FRIGATE_RTSP_PASSWORD=your_password

volumes: {}

Frigate’s config.yml defines cameras, detection parameters, zones, recording rules, and go2rtc settings. The config file is larger but well-documented with community examples for hundreds of camera models.

Performance and Resource Usage

This is where the comparison is most dramatic.

ScenarioMoonfire NVRFrigate
1 camera, 1080p/30fps~50 MB RAM, <2% CPU~500 MB RAM, 5-15% CPU
4 cameras, 1080p/30fps~100 MB RAM, <5% CPU~1 GB RAM, 15-40% CPU
6 cameras, 1080p/30fps~150 MB RAM, <10% CPU~1.5 GB RAM, 25-60% CPU
Power consumption (RPi 4)~3W total~5W + Coral USB (~1W)
Docker image size~50 MB~1.5 GB
Storage efficiencyMinimal overhead (passthrough)Slight overhead (segment files + metadata)

Moonfire NVR is an order of magnitude more efficient because it does almost nothing — no decoding, no processing, no AI inference. It copies bytes from the camera’s RTSP stream to disk. Frigate decodes frames, runs them through AI models, manages events, generates thumbnails, and handles live streaming.

The trade-off: Moonfire uses 10x fewer resources but gives you zero intelligence about what’s in the footage. Frigate uses 10x more resources but tells you exactly who’s in your driveway.

Recording and Playback

Moonfire NVR:

  • Records continuously — no event-based recording
  • H.264 passthrough — exact copy of camera output
  • MP4 files constructed on-demand during playback (no pre-built files)
  • Web UI shows a timeline — scrub to any point in the retention window
  • No thumbnails, no event clips, no snapshots
  • SQLite database tracks recording segments

Frigate:

  • Continuous, event-based, or snapshot-only recording
  • Records main stream while detecting on sub-stream
  • Event clips with pre/post-roll around detections
  • Thumbnail generation for each event
  • Timeline view with event markers
  • Searchable event database (filter by object type, camera, time)

If you need to find “the person who was at the front door at 3 PM,” Frigate takes you directly to the event with a thumbnail. Moonfire NVR requires scrubbing through the timeline manually.

Community and Ecosystem

MetricMoonfire NVRFrigate
GitHub stars1,100+18,000+
Contributors15+300+
DocumentationBasic README, sparseExtensive docs site (frigate.video)
Community sizeSmall (GitHub issues only)Large (Reddit, HA forums, Discord)
Third-party integrationsNoneFrigate card, Double Take, HA blueprints
Camera configs sharedVery fewHundreds of community examples
YouTube tutorials<550+

Frigate’s community is roughly 16x larger. This matters when troubleshooting camera compatibility, optimizing detection zones, or finding configs for specific camera models.

Use Cases

Choose Moonfire NVR If…

  • Pure recording is your only requirement — no detection needed
  • You run cameras on a Raspberry Pi or very low-power hardware
  • Resource efficiency matters more than smart features
  • You review footage manually when incidents occur
  • You want the smallest possible Docker footprint
  • Your cameras already handle motion detection internally (some cameras have on-device detection)
  • Power consumption is a constraint (off-grid, solar, UPS-limited)

Choose Frigate If…

  • You want AI-based object detection (person, car, animal)
  • Home Assistant integration is important
  • You want event-based recording instead of 24/7 continuous
  • You need real-time alerts when specific objects are detected
  • Live streaming to a dashboard matters
  • You’re willing to invest in a Coral TPU (~$30) for efficient detection
  • Searchable event history is useful (filter by object type, camera, time)

Why Not Both?

Some users run Moonfire NVR for 24/7 continuous recording (cheap storage, zero CPU) alongside Frigate for AI detection on a subset of cameras. Frigate detects events and sends alerts; Moonfire keeps the full unprocessed recording as evidence. This requires cameras that support dual RTSP streams or a separate RTSP restreamer.

Final Verdict

These NVRs serve different audiences. Moonfire NVR is a recording appliance — remarkably efficient, written in Rust, zero processing overhead. It’s the right choice when your cameras connect to constrained hardware and you don’t need AI intelligence. Frigate is a smart surveillance platform — AI detection, Home Assistant integration, event management, live streaming. It’s the right choice when you want your cameras to tell you what’s happening, not just record everything.

For most self-hosters building a home security system, Frigate with a Coral TPU provides more practical value. The ability to get a “person detected at front door” notification, with a snapshot, that triggers a Home Assistant automation, is worth the extra resources. Moonfire NVR earns its spot for users who want pure, efficient recording on minimal hardware — particularly Raspberry Pi or NAS deployments where every watt and megabyte counts.

Frequently Asked Questions

Can Moonfire NVR do any kind of detection?

No. Moonfire NVR is strictly a recorder — it captures RTSP streams and stores them. It has no motion detection, no object detection, no alerting. If you need any form of detection, you need Frigate, Viseron, or camera-side detection.

Does Moonfire NVR work on a Raspberry Pi?

Yes, and it’s one of the best NVRs for Pi hardware. Moonfire’s passthrough recording means a Raspberry Pi 2 (1 GB RAM) can handle six 1080p cameras at under 10% CPU. Frigate needs at least a Pi 4 with a Coral USB Accelerator to be useful.

Can Frigate record without detection?

Yes. You can configure Frigate to record continuously without running detection on specific cameras. However, Frigate still decodes streams for recording management, so it uses more resources than Moonfire even without detection enabled.

Which uses less storage?

Nearly identical. Both record the same H.264 RTSP streams from cameras. Moonfire is slightly more efficient because it writes raw stream data without re-muxing. Frigate adds some overhead for segment files and event metadata. The difference is under 5% for the same cameras and retention settings.

Is Moonfire NVR still maintained?

Yes, though development is slow. Scott Lamb (the sole primary developer) maintains the project and pushes updates periodically. v0.7.31 is the latest release. Given the small scope (recording only), there’s less to maintain — but the bus factor of a single-developer project is a real concern for long-term reliability.

Comments