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 with a network path between it and your Mac — RTSP is the protocol Fregata ultimately speaks either way.
  • Its host/IP address and login credentials. If it supports ONVIF (most modern IP cameras do), that’s all the wizard needs — it discovers the actual stream URLs for you. If not, you’ll pick your camera’s brand from a template list instead, or paste a known RTSP URL directly.

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 — useful background on what the wizard is doing for you, or for working around an unusual camera. 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. Add the camera. The camera wizard in Settings is the easiest way; if you would rather edit the file, the YAML tab shows a minimal hand-written equivalent for a single-stream camera.
  1. In the web UI, go to Settings → Global configuration → Camera management and click Add New Camera to open the camera wizard.
  2. Step 1 of 4, name and connection. Give the camera a short, lowercase Camera Name (front_porch, driveway, garage), then choose a Stream Detection Method:
    • Probe camera (the default): enter the camera’s Host/IP Address, Username, and Password; the wizard queries the camera over ONVIF for its stream profiles, so you never need to know the RTSP URL shape. If your camera uses a non-default ONVIF port or digest-only authentication, set ONVIF Port or turn on Use digest authentication.
    • Manual selection: pick your Camera Brand (Dahua/Amcrest/ EmpireTech, Hikvision/Uniview/Annke, Ubiquiti, Reolink, Axis, TP-Link, Foscam) and the wizard builds that brand’s known RTSP URL from your host and credentials. Choose Other to paste a full RTSP URL you already have.
  3. Step 2 of 4, probe or snapshot. With Probe camera, the wizard lists the RTSP URLs it found; Test Connection on a URL shows that stream’s details. With Manual selection, the wizard tests the URL it built and shows a snapshot preview, so you can confirm it’s actually pointed at this camera. Click Next.
  4. Step 3 of 4, stream configuration. It starts with the first stream the wizard found or built; use its URL drop-down to pick a different one, and Test Connection to check it. Under Roles, the Detect, Record, and Audio switches choose what the stream is used for (Detect and Record start on). Leave Reduce connections to camera on (see the tip below). Add Another Stream adds a second stream.
  5. Step 4 of 4, validation and testing. Connect each stream and let the wizard measure live bandwidth and flag common problems (a resolution unfit for detection, non-AAC audio that recording can’t mux, brand-specific quirks), then click Save New Camera.

The wizard also fills in the camera’s Detect width and Detect height from the stream it tested, at that stream’s full resolution. Higher resolutions use more memory per camera; see Detection resolution and FPS. Cameras the wizard added in Fregata v0.18.0 were capped at 720 pixels on the shorter side and keep that until you raise them under Settings → Camera configuration → Object detection.

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

Fregata already knows — you don’t have to work it out yourself. Look at the Detector row in the menu-bar tray (or the System tab in the web UI): it reads something like “1.8 ms/frame (ANE)”. That (ANE) — or (GPU) / (CPU) — is a real measurement Fregata took at startup, not a range you need to interpret.

Here’s how: at startup, Fregata runs a few warmup inferences and briefly samples the detector process to see which engine, the ANE, the GPU or the CPU, the model was actually running on. If that sample can’t be taken, Fregata falls back to a timing-based estimate instead. Either way, the tray row is always populated with a tier, not raw milliseconds you’d have to interpret.

  • ANE — the correct, intended path.
  • GPU (Metal) — happens if the bundled model uses ops the ANE doesn’t support, or if you set inference_backend: gpu in config. Still fast enough for any reasonable number of cameras, just not the ANE.
  • CPU — something’s wrong, most likely CoreML couldn’t compile the model at all. Restart the app, then check Settings → Open Frigate Logs in the tray for the CoreML: warmup inference… line — a CPU result always comes with a reason attached there.

That same log line has the full detail behind the tray’s tier: what the sample saw on each engine, what the timing estimate said, and which of the two decided. For example: CoreML: warmup inference 2 ms: ANE via frames [why: ANE frames dominated the forward pass] [frames: ANE 27, GPU 0, CPU 0 (ANE frames dominated the forward pass)] [latency: 2 ms -> ANE] ✓

For a deeper look, see Performance.

By default, recordings live under:

~/Fregata/media/recordings/

with sub-paths organized by date, hour, and camera. Snapshots and thumbnails live under ~/Fregata/media/clips/ and exports under ~/Fregata/media/exports/. Event clips aren’t stored as separate files: Frigate cuts them from the recordings when you ask for one.

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 can be set for every camera at once or per camera, in the web UI’s Settings or in config.yml; defaults are 1 day of continuous footage and 14 days of motion footage, with 30 days kept around alerts and detections. 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 it by hand (any text editor, or the web UI’s Configuration Editor), or change the same settings from the web UI’s Settings pages, which write to the file for you. 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:

Each block of the file has its own page in the web UI’s Settings:

Block Where to change it
detectors Settings → Fregata (macOS) → Global configuration → Apple Silicon Detector
detect Settings → Global configuration → Object detection
objects Settings → Global configuration → Objects
record Settings → Global configuration → Recording
snapshots Settings → Global configuration → Snapshots
go2rtc Settings → System → go2rtc streams
cameras Settings → Global configuration → Camera management to add cameras, Settings → Camera configuration for per-camera settings
mqtt Settings → System → MQTT

Saving on a Settings page writes the change into config.yml. If the page asks for a restart, see Reloading config.

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 standard COCO label set, in which trucks and buses are reported as car; 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 footage around alerts and detections. Continuous is the disk-hungry tier (~25–40 GB per 1080p camera per day) — set continuous.days and motion.days to 0 to keep only alerts and detections, or raise any tier if you have the disk. See Recordings & retention.
  • Snapshots (snapshots.enabled) saves one clean, unannotated WebP per tracked object to ~/Fregata/media/clips/<camera>-<event-id>-clean.webp, kept 30 days. The annotated version (timestamp, bounding box, object crop) is not stored separately: it is rendered on request via /api/events/<event-id>/snapshot.jpg, which uses your snapshots.timestamp, snapshots.bounding_box, snapshots.crop, snapshots.height and snapshots.quality settings as its defaults.
  • 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), which the web UI uses to serve MSE/WebRTC live tiles. Leave it out and Frigate looks for a go2rtc stream named like the camera. If there is none, or a 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 (or on the matching page under Settings → Camera configuration) 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.

On a new install only, Fregata seeds a handful of features that stock Frigate ships off, so the defaults in Frigate’s reference won’t match what a fresh Fregata install writes for you:

Setting Stock Frigate Fregata (new install)
detect.enabled false true
record.enabled false true
record.continuous.days 0 1
record.motion.days 0 14
record.alerts / record.detections retain 10 days 30 days
snapshots.enabled false true
snapshots.retain.default 10 days 30 days
objects.track ["person"] ["person", "car", "dog", "cat"]

The same changes as a diff against Frigate’s defaults for these keys:

detect:
enabled: false
enabled: true
objects:
track:
- person
- car
- dog
- cat
record:
enabled: false
enabled: true
continuous:
days: 0
days: 1
motion:
days: 0
days: 14
alerts:
retain:
days: 10
days: 30
detections:
retain:
days: 10
days: 30
snapshots:
enabled: false
enabled: true
retain:
default: 10
default: 30

The table and diff above are seeded into config.yml once, on a brand-new install — edit or delete those lines and Fregata leaves them alone from then on. A separate, smaller set of defaults works differently: they’re not written into your config file at all, they’re what Fregata falls back to whenever the key is left unset — so they apply to every install, new or upgraded, for as long as you leave the key out:

Setting Stock Frigate Fregata
semantic_search.model_size small large
face_recognition.model_size small large

Both exist to reach the GPU by default, rather than the CPU-only path stock Frigate’s own small default takes on a Mac — see AI Models for Frigate Enrichments for what each size actually runs and why.

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.