Skip to content

Add your first camera

Once the app is activated, the next step is to point it at one camera and verify the whole pipeline — capture, decode, detect, record — is working.

  • An IP camera that speaks RTSP with valid credentials and a network path between it and your Mac.
  • The camera’s RTSP URL.

The Frigate project has a thorough camera setup primer covering codec choice, resolution, bitrate, FPS, and the per-brand URL shapes for Reolink, Amcrest, Dahua, Hikvision, UniFi, and others. Everything there applies to Fregata unchanged. For a quick brand-by-brand URL cheatsheet, see also Cameras.

  1. Open the Fregata web UI from the menu-bar tray (Open Frigate Web UI, or ⌘O). It opens https://localhost:8971 in your default browser. The first visit shows a “Not Private” warning — that’s expected (Fregata uses a self-signed certificate for localhost); click through to continue. Then sign in with the admin username and the password from first-run setup — see Your dashboard sign-in if you need to find or reset it.
  2. In the web UI, go to Settings → Camera Management.
  3. Click + Add camera. The camera wizard opens.
  4. Give the camera a short, lowercase name (front_porch, driveway, garage — whatever you want it called in URLs and recordings).
  5. Paste the RTSP URL of your main stream.
  6. (Optional) If your camera exposes a separate sub-stream URL, you can paste that too — but on Fregata you usually don’t need to. See the tip below.
  7. Save. Fregata reloads its config and the camera tile appears on the live dashboard.

The camera should appear in the live tile grid within a few seconds. Detection runs automatically on every camera by default; you’ll see green bounding boxes around moving objects with the class label and confidence score.

The first time a model runs, Fregata times two warmup inferences and classifies the result. Look at the Detector row in the menu-bar tray (or the System tab in the web UI):

  • ~1–4 ms per frame — detection is on the Apple Neural Engine. This is the correct, intended path.
  • 5–15 ms per frame — detection is on the GPU (Metal). This happens if the bundled model uses ops the ANE doesn’t support, or if you forced inference_backend: gpu in config.
  • 50+ ms per frame — detection has fallen back to CPU. Something went wrong; restart the app and check the log via the tray’s Settings → Open Frigate Logs for an ane_init or coreml_session error.

For a deeper look, see Performance.

By default, recordings live under:

~/Fregata/media/recordings/

with sub-paths organized by camera and date. Event clips live under ~/Fregata/media/clips/ and exports under ~/Fregata/media/exports/.

You can change the Media location at any time from Settings → Folders → Change Media Location… in the tray menu. Fregata will move existing files for you on the next launch.

Retention is per-camera and configured in config.yml; defaults are 14 days for recordings and longer for event clips. See Recordings & retention to tune this for your disk budget.

Fregata stores its settings in ~/Fregata/config/config.yml — a plain YAML file you can edit by hand (the web UI’s Config editor, or any text editor; restart Fregata to apply). Out of the box it enables the headline features globally, and the camera wizard adds your cameras and their go2rtc streams. A basic, complete config looks like this:

detectors:
coreml:
type: coreml
inference_backend: ane # ane = Apple Neural Engine (default) · gpu = Metal
# Object detection on every camera. The bundled model uses COCO labels.
detect:
enabled: true
objects:
track:
- person
- car
- dog
- cat
# Tiered recording: 1 day continuous, 14 days motion, 30 days of events.
record:
enabled: true
continuous:
days: 1
motion:
days: 14
alerts:
retain:
days: 30
detections:
retain:
days: 30
snapshots:
enabled: true
retain:
default: 30
# NOTE: Cameras can be set up completely from the Frigate WebUI, but if you want to configure them manually:
# Live view + single-connection re-streaming. Point this at your real
# camera URL; ffmpeg below pulls from go2rtc rather than the camera.
go2rtc:
streams:
front_door:
- rtsp://USERNAME:PASSWORD@CAMERA_IP:554/your-main-stream
cameras:
front_door:
live:
streams:
Main: front_door # must match the go2rtc.streams key above
ffmpeg:
inputs:
- path: rtsp://127.0.0.1:8554/front_door
input_args: preset-rtsp-restream
roles:
- detect
- record
# ── Home Assistant / MQTT (optional, off by default) ─────────────────────────
# Uncomment and point at your broker to use the Frigate HACS integration.
mqtt:
enabled: false
# host: 192.168.1.10
# user: mqtt_user
# password: mqtt_pass

What’s turned on, and the parts worth knowing:

  • Object detection (detect.enabled) runs on every camera, tracking person, car, dog, and cat. The bundled model uses the COCO label set; detecting packages, license plates, and the like needs a custom / Frigate+ model — see Detection tuning.
  • Recording (record.enabled) is tiered: 1 day of continuous 24/7 footage, 14 days of motion-only segments, and 30 days of event clips (alerts and detections). Continuous is the disk-hungry tier (~25–40 GB per 1080p camera per day) — set continuous.days: 0 for event-only recording, or raise any tier if you have the disk. See Recordings & retention.
  • Snapshots (snapshots.enabled) saves a JPEG per tracked object, kept 30 days.
  • Live view uses go2rtc: each camera has one go2rtc.streams entry pointing at the real camera URL, and ffmpeg pulls from go2rtc (127.0.0.1:8554) so a single connection feeds detection, recording, and the browser. The live.streams key maps the camera’s friendly stream name(s) to their go2rtc stream name(s) — the web UI uses this to serve MSE/WebRTC live tiles. If it’s missing or the name doesn’t match a go2rtc stream, the live view silently falls back to low-quality jsmpeg.

Each of these is a global default; set the same key under a specific cameras.<name>: block to override it for one camera.

For every option not shown here, Frigate’s full configuration reference documents the complete schema and its stock defaults. One caveat when reading it: on a new install only, Fregata seeds a handful of features that stock Frigate ships off, so the defaults in that reference won’t match what a fresh Fregata install writes for you:

SettingStock FrigateFregata (new install)
detect.enabledfalsetrue
record.enabledfalsetrue
record.continuous.days01
record.motion.days014
record.alerts / record.detections retain10 days30 days
snapshots.enabledfalsetrue
snapshots.retain.default10 days30 days
objects.track["person"]["person", "car", "dog", "cat"]

These are written only when Fregata creates a config for the first time. An existing config.yml — or one imported from Frigate — is left exactly as-is: Fregata never flips these on a returning user, and every other default matches upstream Frigate.