Frigate Hardware & Detector Fit — methodology
Method version 1.0 · dataset frigate-fit 2026-09-08 · engine: /engines/frigate-fit/ · dataset: datasets/frigate-fit.json
Every software fact here is Frigate's own documentation, quoted. Every capacity number is Frigate's own rule applied to the inference speeds the Frigate project publishes. Decode is the platform's decode datasheet through Camera Stream Capacity. Nothing is measured by EdgeAIStack, and nothing is guessed.
Contents
1. What it decides, and what it does not
The engine answers one procurement question: for this platform, this many cameras, this detect substream and this detect frame rate, does Frigate fit? It returns FIT, FIT WITH RISKS, NEEDS VALIDATION or NO FIT, together with the Frigate detector the platform runs, the image tag it needs, the detections per second the deployment demands against the detections per second the detector delivers, the camera ceiling, the decode budget, the ffmpeg hardware-acceleration preset and a config snippet.
It does not predict Frigate's frame rate, its recording throughput, its CPU load in your ffmpeg configuration, or the accuracy of a model on your scene. It does not model the go2rtc restream, birdseye, semantic search or the review pipeline. Detection load in the real world follows motion, not camera count; the engine sizes the worst case by default and lets you scale it with a motion share.
2. Inputs
| Input | Values | Default | Used by |
|---|---|---|---|
platform | platform id (Jetson Orin Nano / NX / AGX Orin / Thor, Hailo-8 and 8L, Coral, RK3588, Intel N100 and Nuvo-9531, NVIDIA A2 / L4 / A10 / L40S servers) | required | all checks |
cameras | 1–128 | 4 | detector capacity, decode |
detect_resolution | 480p · 720p · 1080p · 1440p · 4k · WxH | 720p | decode |
detect_fps | 1–60 | 5 (Frigate's recommendation) | detector capacity |
source_fps | camera stream frame rate feeding the decoder | 15 | decode |
codec | h264 · h265 · av1 · mjpeg | h264 | decode, preset selection |
motion_share | 0–1, the share of frames with motion | 1 (worst case) | detector capacity |
host | raspberry_pi_5 · x86_mini_pc · rk3588_integrated — for an accelerator (Hailo, Coral) | the accelerator's default host | decode, host CPU / link / pre-processing, preset |
recording | passthrough (copy) · re-encode | passthrough | assumption line on the decode check |
The detect substream is the only stream the engine decodes. Frigate's recommended architecture records the high-resolution stream as a passthrough copy — no decode, no encode — and detects on a small substream, which is why detect resolution and detect fps, not the record stream, drive the budget.
3. Frigate's sizing rule
The capacity rule is not ours. Frigate's recommended-hardware page states it directly:
“You can calculate the maximum performance of your Coral based on the inference speed reported by Frigate.”
“With an inference speed of 10, your Coral will top out at 1000/10=100, or 100 frames per second.” Frigate · Recommended hardware · docs.frigate.video/frigate/hardware
So available detections/s = 1000 / inference ms. Where Frigate publishes a band rather than a single figure —
20–40 ms for every Jetson module — the engine sizes on the slow end (ms_max) and reports the fast end beside it
as the best case. The load is required detections/s = cameras × detect fps × motion share, and the camera
ceiling is floor(available / (detect fps × motion share)).
The detect frame rate default is also Frigate's:
“Optional: desired fps for your camera for the input with the detect role (default: shown below). NOTE: Recommended value of 5.” Frigate · Full Reference Config · docs.frigate.video/configuration/reference
A motion share of 1 means every camera is detecting at the detect fps at the same instant. That is the number a deployment has to survive, so it is the default; 50 % or 30 % model a site whose cameras are mostly still.
4. The checks
| Check | Compares | Status | Class |
|---|---|---|---|
detector | The Frigate detector type the platform runs, its default and supported models, and the image tag the detector needs | PASS when the documentation names the detector for the platform; NEEDS VALIDATION when the mapping carries a caveat (Thor on JetPack 7 against a -tensorrt-jp6 image) | A |
inference | Required detections/s against 1000 / the worst published inference ms | PASS below capacity; NEAR LIMIT close to it; FAIL above | C (published Frigate measurement); D where a server GPU maps to the nearest published row |
decode | Detect-stream decode load against the platform's decode datasheet, through Camera Stream Capacity | PASS / NEAR LIMIT / FAIL from that engine, unchanged; UNKNOWN when the platform has no decode datasheet in the catalog | A / D from Camera Stream Capacity; E when UNKNOWN |
host_cpu, host_link, host_preprocessing | For an accelerator (Hailo, Coral): the host board's CPU decode cost, the PCIe / USB link and the pre-processing budget | from Camera Stream Capacity's host budget, unchanged | A / D |
decode_preset | The ffmpeg hardware-acceleration preset Frigate documents for the platform, or for the resolved host | PASS when a documented preset applies; NEAR LIMIT for a Raspberry Pi 5 host on H.264 (software decode); NEEDS VALIDATION when the preset is host-dependent and no host was given | A (E when undocumented) |
The checks always open with detector, inference, decode and close with decode_preset; the host checks appear between them only when an accelerator sits on a host board.
5. Verdict rule
- NO FIT — any check FAILs. Most often the detector cannot hold the detections per second.
- NEEDS VALIDATION — no FAIL, but a check is UNKNOWN or needs validation: the platform has no decode datasheet on record (Intel N100), or the documented Frigate image does not name this hardware generation (Jetson Thor).
- FIT WITH RISKS — no FAIL and nothing unknown, but a check is NEAR LIMIT (a Raspberry Pi 5 host decoding H.264 in software, a detector close to its ceiling), or the platform is a Coral, which Frigate documents as “no longer recommended for new Frigate installations, except in deployments with particularly low power requirements.”
- FIT — every check passes.
The verdict never softens a FAIL and never hardens an UNKNOWN into a FAIL: a limit Frigate does not publish is reported as unknown, not guessed.
6. Platform → detector table
| Platform | Detector | Model Frigate benchmarks | Inference | Detections/s | Image tag | Class |
|---|---|---|---|---|---|---|
| Jetson Orin Nano 8GB / Orin Nano Super / Orin NX 8GB / Orin NX 16GB / AGX Orin 32GB / AGX Orin 64GB | tensorrt | YOLO (v3 / v4 / v7) | 20–40 ms | 25–50 | -tensorrt-jp6 | C |
| Jetson Thor T5000 / T4000 | tensorrt | YOLO (v3 / v4 / v7) | 20–40 ms | 25–50 | -tensorrt-jp6 (JetPack 7 — validate) | C |
| Hailo-8 (M.2 / HAT) | hailo8l | YOLOv6n | 7 ms | 142.9 | standard image | C |
| Hailo-8L (M.2 / AI Kit) | hailo8l | YOLOv6n | 11 ms | 90.9 | standard image | C |
| Google Coral Edge TPU | edgetpu | MobileDet | 10 ms | 100 | standard image | C |
| Rockchip RK3588 | rknn | YOLOv9 small | 20 ms | 50 | standard image | C |
| Intel N100 mini PC | openvino | MobileNet v2 / YOLOv9 | 15 ms | 66.7 | standard image | C |
| Neousys Nuvo-9531 (Intel UHD 770) | openvino | MobileNet v2 / YOLOv9 | 15 ms | 66.7 | standard image | C |
| NVIDIA A2 server | onnx | YOLOv9 t-320 (RTX 3050 row) | 8–10 ms | 100–125 | standard image | D |
| NVIDIA L4 / A10 / L40S server | onnx | YOLOv9 t-320 (RTX 3070 row) | 6–8 ms | 125–166.7 | standard image | D |
Every inference figure is a verbatim quote from a Frigate documentation page, at most 25 words, with the URL and retrieval
date, in datasets/frigate-fit.json. Frigate publishes one band for every Jetson
module and no figure for datacentre GPUs; the four server GPUs are mapped to the nearest published consumer row and marked
class D so a reader can see the substitution rather than inherit it silently. The registry also holds detector types the
catalog has no platform for yet (cpu, memryx) and inference rows for hardware outside the catalog
(RK3566, Intel Arc A750, Intel NPU, AMD 780M, GTX 1070, MemryX MX3).
7. Decode presets and the config snippet
| Preset | Hardware Frigate names |
|---|---|
preset-vaapi | Intel (gen1–gen7), AMD — “VAAPI supports automatic profile selection so it will work automatically with both H.264 and H.265 streams.” |
preset-intel-qsv-h264 / preset-intel-qsv-h265 | Intel (gen8+) |
preset-nvidia | NVIDIA GPU — “ffmpeg will automatically select the necessary profile for the incoming video.” |
preset-jetson-h264 / preset-jetson-h265 | NVIDIA Jetson |
preset-rpi-64-h264 / preset-rpi-64-h265 | Raspberry Pi 3/4 |
preset-rkmpp | Rockchip SoC |
An accelerator card has no decoder of its own, so it inherits the preset of the host it sits on: a Hailo or Coral on a
Raspberry Pi 5 gets the Pi preset, on a mini-PC the Intel presets. The Pi 5 has no H.264 hardware decoder, so an H.264
detect stream on that host is flagged NEAR LIMIT and the CPU cost shows in the host CPU check — Frigate's Video Decoding page
documents Raspberry Pi 3/4 presets and does not state the Pi 5 case, so the engine says so rather than inventing a preset.
Frigate's own default is hwaccel_args “(default: auto detect)”.
The config snippet names the detector block, the device line where the detector needs one (edgetpu,
openvino), the preset chosen for the codec, and the detect frame rate and size. It is a starting point, not a
complete config.yml: cameras, go2rtc, record and object filters are yours.
8. Alternatives and remediation
Every result lists every mapped platform with its detector, published inference milliseconds, the cameras it holds at your detect fps and motion share, whether it holds this load, and its evidence class — sorted by camera ceiling, so the substitution is visible at a glance. A failing or near-limit check names the change that flips it: a lower detect fps, a smaller camera count on this node, a faster detector, or a lower-resolution detect substream when decode is the binding constraint. A detector that needs validation names the documented fallback.
The headroom ladder re-runs both the detector capacity and the decode budget across camera counts and reports where the node is comfortable, where it is likely viable, and where it fails.
9. Evidence classes and confidence
- A — Frigate's software documentation: detector types, supported hardware and models, image tags, the ffmpeg presets, the recommended detect fps, the capacity rule and the Coral status statement; and the vendor decode datasheets Camera Stream Capacity uses.
- C — the inference-speed rows the Frigate project publishes for each hardware family. These are measurements by the project, not by a vendor and not by EdgeAIStack.
- D — a server GPU mapped to the nearest published consumer GPU row, and modelled decode where Camera Stream Capacity has no datasheet row.
- E — an UNKNOWN decode or an undocumented preset: reported as unknown, never as a number.
Confidence: HIGH on the detector and preset checks (Frigate documentation); MEDIUM on a class C inference check; LOW on a class D mapping or any UNKNOWN. The overall confidence is the lowest of the checks.
10. What invalidates a result
- A different detection model from the one Frigate benchmarked — a larger YOLO variant runs slower than the published row, so the capacity falls with it.
- Re-encoding the record stream instead of passing it through: that is an encode budget this engine does not size.
- Running detection on the full-resolution stream rather than a substream — the decode check is sized on the detect stream you entered.
- A Jetson at a lower power mode: Frigate publishes one 20–40 ms band for every Jetson module with no per-module or per-power-mode figure, so a capped module sits at the slow end or below it.
- A motion share entered below what the site actually produces — detection load follows motion, and a busy scene runs at the worst case.
- Anything Frigate runs beyond detection: semantic search, face and licence-plate recognition, birdseye and the go2rtc restream all take resources this engine does not budget.
- Wi-Fi cameras, which Frigate's own hardware page advises against.
11. Method changelog
| Method | Dataset | Date | Change |
|---|---|---|---|
| 1.0 | 2026-09-08 | 2026-09-08 | First release. Eighteen platforms mapped to eight Frigate detector types, fifteen published inference rows and nine hardware-acceleration presets from the Frigate documentation; Frigate's capacity rule and recommended detect fps; the detector, inference, decode, host budget and preset checks; the four-state verdict; the config snippet and the platform comparison. |
Method changes bump the method version; new or re-verified Frigate documentation bumps the dataset version. Both are in every result and in the citation block.