You Just Want Your Cameras to Work
You bought a handful of IP cameras. Maybe some Reolinks, maybe a couple of cheap ONVIF-compatible units off AliExpress. You want them in Apple Home so your doorbell camera works like a normal person’s Ring — without paying $10/month per camera to some cloud that’ll get sunset in three years.
Or maybe you want your NVR to actually think. You want a notification that says “person detected at front door” instead of “motion: a leaf blew past your camera at 3 AM.”
Either way, you’ve landed on two names: Scrypted and Frigate. They’re both self-hosted, both Docker-friendly, and both deeply loved by the homelab community. They also do pretty different things, and picking the wrong one wastes an afternoon.
Let’s fix that.
What Scrypted Actually Is
Scrypted (from Koushik Dutta, same guy who wrote ClockworkMod back in the day) is a smart home camera hub. Its job is to take your weird IP cameras — the ones with ONVIF support, RTSP streams, proprietary apps — and make them speak Apple HomeKit Secure Video, Google Home, Alexa, and Home Assistant.
The big sell is HomeKit Secure Video. HKSV does end-to-end encrypted recording to iCloud. It’s genuinely good — facial recognition, activity zones, 10 days of clips on a $3/month iCloud plan. The problem is that Apple only natively supports maybe a dozen camera manufacturers. Scrypted bridges the gap. Any ONVIF or RTSP camera becomes an HKSV camera. This is the feature people pay for (the HKSV plugin requires a one-time license — currently $19).
Beyond HKSV, Scrypted also has:
- An NVR plugin (continuous recording, event clips, timeline view)
- Object detection plugins (Movement Alerts, NVR Detection) — runs locally using ONNX/TensorFlow Lite
- ONVIF/RTSP autodiscovery — finds cameras on your network
- A slick web UI and mobile app
Scrypted is Node.js-based, runs its plugins in isolated workers, and the whole thing sits behind a web UI at port 10443 (HTTPS).
What Frigate Actually Is
Frigate (from Blake Blackshear) is an NVR built around AI object detection. It records 24/7 or on motion, but the whole philosophy is that dumb motion alerts are useless — you want to know what moved.
Frigate uses real-time object detection via a detector backend:
- Google Coral TPU (USB or PCIe) — the OG, cheap, fast, low power
- Intel iGPU via OpenVINO — great if you’re already running an Intel box
- NVIDIA GPU via TensorRT — for the homelab overclockers
- Hailo — newer, solid option
- CPU fallback — works, but slower and power-hungry
It runs a Python+Go stack, integrates tightly with Home Assistant via MQTT, and exposes a REST API for everything. Frigate stores clips and snapshots in a local SQLite database. The web UI shows live streams, event timelines, and detection stats.
Frigate does not natively bridge to HomeKit, Google Home, or Alexa. That’s not its job.
The Core Difference (In One Sentence Each)
Scrypted: “Make my cameras work with [smart home platform X].”
Frigate: “Tell me what’s happening in front of my cameras using AI, store the evidence, and fire events to Home Assistant.”
Compose Files — Let’s Get Practical
Scrypted
services: scrypted: image: ghcr.io/koush/scrypted:latest container_name: scrypted restart: unless-stopped network_mode: host volumes: - /path/to/scrypted/data:/server/volume environment: - SCRYPTED_INSECURE_PORT=10080 logging: driver: json-file options: max-size: "10m" max-file: "3"network_mode: host is essentially required — ONVIF discovery uses multicast, and bridge networking kills it. After docker compose up -d, hit https://your-host-ip:10443 to set up your admin account.
A few notes on the Scrypted setup flow:
- Install the ONVIF Plugin to auto-discover cameras
- Install the HomeKit Plugin and pair via the QR code in the app
- Install the HKSV Plugin (requires license) to enable encrypted iCloud recording
- Add cameras, assign streams (high-res for recording, sub-stream for live view)
Frigate
Frigate’s compose is a bit more involved because you need to think about your detector upfront.
services: frigate: container_name: frigate image: ghcr.io/blakeblackshear/frigate:stable restart: unless-stopped privileged: true shm_size: "128mb" devices: # Coral USB TPU — comment out if not using - /dev/bus/usb:/dev/bus/usb # Intel iGPU for hardware decode - /dev/dri/renderD128:/dev/dri/renderD128 volumes: - /etc/localtime:/etc/localtime:ro - /path/to/frigate/config:/config - /path/to/frigate/storage:/media/frigate - type: tmpfs target: /tmp/cache tmpfs: size: 1000000000 ports: - "5000:5000" - "8554:8554" # RTSP re-streams - "8555:8555/tcp" # WebRTC - "8555:8555/udp" environment: - FRIGATE_RTSP_PASSWORD=changemeAnd the config file at /path/to/frigate/config/config.yml:
mqtt: host: 192.168.1.10 # your MQTT broker port: 1883 user: frigate password: changeme
detectors: coral: type: edgetpu device: usb # OR: Intel OpenVINO # ov: # type: openvino # device: GPU
ffmpeg: hwaccel_args: preset-intel-vaapi # or preset-nvidia, preset-rpi-64-h264
cameras: front_door: ffmpeg: inputs: roles: - detect - record roles: - record detect: width: 1920 height: 1080 fps: 5 record: enabled: true retain: days: 7 mode: motion events: retain: default: 14 snapshots: enabled: true retain: default: 14 objects: track: - person - car - dogFrigate’s web UI lives at http://your-host:5000. First run takes a minute to download the detection model.
Object Detection: Where They Actually Overlap
Here’s where people get confused: Scrypted does have detection now.
Scrypted’s NVR Detection plugin can run object detection locally using ONNX models. It’s gotten better in recent versions. But it’s not the primary reason people use Scrypted — it’s a bonus feature layered on top of the bridging capability.
Frigate’s detection is the whole point. It’s built from the ground up around efficient frame sampling, zone configuration, and firing precise MQTT events. If you want to know “a person entered zone A at 2:14 AM and stayed for 30 seconds,” Frigate gives you that out of the box with a few lines of YAML. Scrypted can do approximate versions of this, but it’s not where its energy goes.
If AI-driven events are your primary use case, Frigate wins on depth. If you just want something to catch the obvious stuff and you’re already in Scrypted for HomeKit, the built-in detection is probably fine.
Hardware Acceleration: Different Goals
Frigate needs acceleration for detection (the model inference) and optionally for transcoding. The Coral TPU at $60 USB or $35 PCIe is the classic choice — it handles 10+ simultaneous camera streams at full frame rates without breaking a sweat. Intel iGPU via OpenVINO is solid if you’re on an Intel NUC or N100 mini PC. NVIDIA TensorRT works great but requires the -tensorrt variant image and more setup.
Scrypted uses hardware acceleration primarily for transcoding — converting your camera’s H.264/H.265 streams into the format HomeKit needs, scaling resolutions, doing thumbnail extraction. It uses Intel iGPU (VAAPI/QuickSync) or NVIDIA (NVENC/NVDEC) for this. The detection plugins benefit from hardware too, but transcoding is where it matters most because every camera stream running through Scrypted needs it.
Storage and Retention
Both tools have retention systems that work similarly in concept:
| Scrypted NVR | Frigate | |
|---|---|---|
| Continuous recording | Yes (NVR plugin) | Yes |
| Event clips | Yes | Yes |
| Database | SQLite | SQLite |
| Retention config | Web UI | YAML |
| Remote access | Built-in (paid) or self-reverse-proxy | Self-reverse-proxy |
Frigate writes clips, snapshots, and the database to your storage path. Plan for about 2-5 GB per camera per day for 1080p continuous recording. With motion-only retention, dramatically less.
Scrypted stores its data in the volume you mount to /server/volume. The NVR plugin has its own recording paths — configure them in the plugin settings.
Running Both Side by Side (Yes, This Works)
This is actually a popular setup and it doesn’t cause conflicts. Here’s why it works:
Your cameras expose RTSP streams. Both Scrypted and Frigate can pull from those streams simultaneously. Your camera will handle the additional RTSP connection without issues (most cameras support 2-4 simultaneous RTSP clients).
The typical dual-stack setup:
IP Camera (RTSP) ──┬──> Scrypted ──> HomeKit Secure Video (iCloud) │ Google Home │ └──> Frigate ───> MQTT ──> Home Assistant (automations, alerts)Scrypted handles your Apple/Google integration. Frigate handles detection, HA automations, and local recording with AI events. They literally don’t know about each other.
If you want to be efficient with camera connections, you can point Scrypted at Frigate’s RTSP re-streams (port 8554) instead of directly at the camera — Frigate re-streams already-decoded frames, which reduces camera load. Configure this by pointing Scrypted’s camera input at rtsp://your-frigate-host:8554/front_door.
Home Assistant Integration
Frigate has a proper Frigate HA integration available via HACS. It auto-discovers cameras, creates binary sensors for each object class (person, car, etc.), exposes the camera entity, and fires events you can trigger automations on. It’s genuinely well-built.
Scrypted integrates with HA via the Home Assistant plugin — cameras show up as entities you can use in dashboards and automations. The integration is solid for streaming/viewing but less rich on the event/sensor side compared to Frigate’s MQTT approach.
If you’re a Home Assistant household, Frigate’s HA integration is deeper and more useful for automations. Scrypted’s HA support is there, but it’s not the primary focus.
The Part Nobody Talks About: Maintenance
Scrypted updates frequently and the plugin ecosystem is community-maintained. Breaking changes happen. The Discord is active and helpful, but expect to occasionally chase a plugin update after a core update.
Frigate is more stable release-to-release but the config schema changes between major versions. The 0.12 to 0.13 migration required config rewrites. Read the release notes before pulling stable.
Both are actively maintained projects with real communities. Neither is abandonware. For production homelab use, pin your image tags and update deliberately.
Quick Decision Matrix
Choose Scrypted if:
- HomeKit Secure Video is the goal — full stop
- You want camera events in the Apple Home app
- You’re bridging to Google Home or Alexa
- Your cameras are ONVIF-compatible and you want autodiscovery
- You don’t need deep AI detection
Choose Frigate if:
- Home Assistant is your smart home platform
- You want precise object detection (person, car, animal) with zones
- You’re buying a Coral TPU or have Intel/NVIDIA hardware to utilize
- You want granular MQTT events to drive complex HA automations
- Local AI on your own hardware is non-negotiable
Run both if:
- You want HKSV and HA object detection events
- You’re already invested in both Apple and HA ecosystems
- You have the hardware headroom (each pulls CPU/RAM but they coexist cleanly)
The Bottom Line
These tools solved different problems and grew toward each other — Scrypted added detection, Frigate added better streaming. But the centers of gravity haven’t moved.
If you’re setting up cameras primarily to appear in Apple Home or Google Home without a monthly subscription, Scrypted is the tool. It’s purpose-built for bridging, the HKSV experience is genuinely excellent, and $19 for the HKSV plugin is a one-time cost versus $120/year per camera to Ring or Nest.
If you want your NVR to think — to know there’s a person in the driveway versus a raccoon, to fire HA automations based on detected objects, to have a clip library organized by what was detected rather than just when motion happened — Frigate is the tool. Grab a Coral TPU, point it at your cameras, and your 2 AM motion alerts will actually mean something.
And if you want both? Run them side by side. They’re not fighting for the same RTSP stream. Let Scrypted handle your Apple tax, let Frigate handle your AI paranoia, and let your cameras work for you instead of the other way around.