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
| Feature | Moonfire NVR 0.7.30 | Frigate 0.17.0 |
|---|---|---|
| Primary function | Passthrough recording | AI detection + recording |
| Object detection | No | Yes (person, car, animal, etc.) |
| Motion detection | No | Via AI models |
| Hardware acceleration | None needed (no processing) | Coral TPU, OpenVINO, ROCm |
| Transcoding | None (passthrough to disk) | FFmpeg (for sub-streams, playback) |
| Live streaming | Web UI playback | go2rtc (WebRTC, MSE, HLS, RTSP) |
| RTSP restreaming | No | Yes (reduces camera load) |
| Home Assistant | No | Deep integration (companion add-on) |
| MQTT | No | Yes (native) |
| Audio detection | No | Yes (speech, bark, car horn) |
| Zone-based detection | No | Yes |
| Birdseye view | No | Yes (combined multi-camera) |
| Web UI | Clean, minimal playback UI | Full event browser + live view |
| API | RESTful | RESTful + WebSocket |
| Configuration | TOML file | YAML file |
| Database | SQLite3 | SQLite |
| Language | Rust | Python + Go |
| Docker image size | ~50 MB | ~1.5 GB |
| Minimum RAM | 512 MB | 2 GB |
| CPU usage (4 cameras, 1080p) | <10% | 15-80% (depends on acceleration) |
| Sub-stream support | No (records what camera sends) | Yes (detect on sub, record on main) |
| Recording modes | Continuous only | Continuous, event-based, snapshot |
| Raspberry Pi support | Yes (Pi 2+) | Pi 4+ with Coral TPU |
| GitHub stars | 1,100+ | 18,000+ |
| License | GPL-3.0 | MIT |
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.
| Scenario | Moonfire NVR | Frigate |
|---|---|---|
| 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 efficiency | Minimal 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
| Metric | Moonfire NVR | Frigate |
|---|---|---|
| GitHub stars | 1,100+ | 18,000+ |
| Contributors | 15+ | 300+ |
| Documentation | Basic README, sparse | Extensive docs site (frigate.video) |
| Community size | Small (GitHub issues only) | Large (Reddit, HA forums, Discord) |
| Third-party integrations | None | Frigate card, Double Take, HA blueprints |
| Camera configs shared | Very few | Hundreds of community examples |
| YouTube tutorials | <5 | 50+ |
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.
Related
Get self-hosting tips in your inbox
Get the Docker Compose configs, hardware picks, and setup shortcuts we don't put in articles. Weekly. No spam.
Comments