Skip to content
Go back

Scrypted vs Frigate for Self-Hosted Cameras

By SumGuy 10 min read
Scrypted vs Frigate for Self-Hosted Cameras

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:

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:

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

docker-compose.yml
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:

  1. Install the ONVIF Plugin to auto-discover cameras
  2. Install the HomeKit Plugin and pair via the QR code in the app
  3. Install the HKSV Plugin (requires license) to enable encrypted iCloud recording
  4. 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.

docker-compose.yml
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=changeme

And the config file at /path/to/frigate/config/config.yml:

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:
- path: rtsp://admin:[email protected]:554/stream1
roles:
- detect
- record
- path: rtsp://admin:[email protected]:554/stream2
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
- dog

Frigate’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 NVRFrigate
Continuous recordingYes (NVR plugin)Yes
Event clipsYesYes
DatabaseSQLiteSQLite
Retention configWeb UIYAML
Remote accessBuilt-in (paid) or self-reverse-proxySelf-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:

Choose Frigate if:

Run both if:


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.


Share this post on:

Send a Webmention

Written about this post on your own site? Send a webmention and it'll show up above once verified.


Previous Post
rclone vs Restic: Sync vs Backup
Next Post
mtr vs traceroute: Packet Loss

Discussion

Powered by Garrul . Sign in with GitHub or Google, or post anonymously.

Related Posts