How-To
Proxmox LXC Coral TPU Passthrough for Frigate NVR
Pass Google Coral USB or PCIe TPU into a Proxmox privileged LXC for Frigate NVR: cgroup rules, lxc.mount.entry, QSV pairing, Scrypted notes, and fixes—June 2026.
Frigate NVR Proxmox Coral TPU passthrough means binding the host’s Google Coral USB Accelerator (or routing PCIe Coral through a VM) into a privileged Proxmox LXC where Frigate runs under Docker—without sending detection to the cloud. As of 15 June 2026, the working pattern is: create LXC 201 (or your CTID), add lxc.mount.entry lines for /dev/bus/usb and /dev/dri/renderD128, install Docker inside the LXC, map the same devices into ghcr.io/blakeblackshear/frigate:stable, and set detectors.coral.type: edgetpu with device: usb. Coral handles object detection; Intel QuickSync on the same LXC still handles RTSP decode—skipping either layer leaves CPU pegged.
Quick answer: How do you pass a Coral TPU into Proxmox LXC for Frigate NVR?
Edit the LXC config to bind-mount /dev/bus/usb (and /dev/dri/renderD128 for QuickSync), restart the container, install Docker inside, map both device paths in Compose, and configure detectors.coral with device usb in Frigate config.yml. Snapshot the LXC before Proxmox kernel updates.
Source: Frigate recommended hardware
Executive summary
Privacy-conscious builders searching frigate nvr proxmox coral tpu usually already run Proxmox VE 8.4+ on a Beelink EQ13 or Ugreen NASync and hit the same wall: Frigate logs show CPU detection while a Coral USB blinks on the host. Frigate’s hardware docs (accessed 15 June 2026) treat decode (QuickSync/VAAPI) and detect (Coral, Hailo, OpenVINO) as separate layers12—Proxmox LXC only changes how many bind-mount hops sit between the stick and the container.
We compiled the Coral form-factor × passthrough matrix below by cross-walking Proxmox LXC wiki device rules, Frigate Edge TPU configuration, the RiceMunk/frigate-proxmox-script community pattern, and fourteen r/Frigate and Home Assistant threads dated January–June 2026 that mention Coral disappearing after Proxmox point releases345.
Verdict: Elena (N100, six Reolink PoE cams, USB Coral, Home Assistant in VM 100) should use privileged LXC 201 + Docker with USB and renderD128 bind-mounts—one evening if she snapshots first. James (PCIe Coral Dual Edge TPU M.2, ten cameras) should not force LXC; deploy Frigate in a VM with PCIe passthrough or on the Proxmox host Docker layer instead.
Methodology: how the Coral passthrough matrix was built
- Form factor — USB stick vs M.2 PCIe vs Dual Edge TPU module, per Google Coral product pages (June 2026)5.
- LXC viability — mapped to Proxmox
lxc.mount.entryandlxc.cgroup2.devices.allowexamples from the official LXC wiki4. - Frigate config —
detectors.coral.devicevalues (usb,pci,auto) from Frigate 0.15 hardware docs2. - Friction score — editorial 1–5 scale from forum breakage reports after Proxmox 8.3→8.4 kernel bumps through June 2026.
- Inference baseline — Frigate published ~10 ms MobileDet on Coral USB vs ~7 ms Hailo-8 YOLOv6n2.
Where I’m less sure — exact USB major:minor numbers after host reboot on every N100 board; always re-run ls -l /dev/bus/usb/*/ inside the LXC after pct start. Anecdotally, binding the whole USB bus survives reboot better than mapping a single /dev/bus/usb/00X/00Y node that re-enumerates.
Original research: Coral form factor × Proxmox passthrough path (June 2026)
| Coral hardware | Street price (USD, Jun 2026) | LXC bind-mount | VM PCIe passthrough | Host Docker | Frigate device | Friction /5 | Best fit |
|---|---|---|---|---|---|---|---|
| USB Accelerator | ~$59–65 | Yes — /dev/bus/usb | USB filter to VM | Direct map | usb | 2 | Default homelab |
| USB Accelerator Mini | ~$25–35 (limited stock) | Yes — same USB bus | USB filter | Direct map | usb | 2 | Low-power N100 |
| M.2 Dual Edge TPU | ~$70–90 | No — use VM/host | Yes — IOMMU group | Native slot | pci / auto | 4 | Dense camera count |
| Dev Board Mini | ~$79 | Partial — single USB | Possible | Unusual | usb | 3 | Lab only |
| Hailo-8 M.2 (alt) | ~$70–110 | No — same as PCIe Coral | Yes | M.2 on host | Hailo driver | 4 | YOLO headroom |
Stat: Frigate documents ~10 ms inference on Coral MobileDet—detection stays local on your LAN; passthrough only affects whether the TPU is visible to the container, not where footage is stored.
Dataset (JSON-LD)
USB Coral passthrough — privileged LXC step by step
Google Coral USB Accelerator is the form factor most frigate nvr proxmox coral tpu searches assume. The passthrough chain is Proxmox host → LXC → Docker → Frigate process—four layers, but only the first two need Proxmox-specific config.
Working example: Elena, Beelink EQ13, LXC 201
Profile: Elena runs Proxmox 8.4 on a Beelink EQ13 (Intel N100, 16 GB RAM). Home Assistant OS lives in VM 100. Frigate runs in privileged LXC 201 with Docker. Six Reolink RLC-810A cameras sit on VLAN 40 with WAN blocked6. One Coral USB Accelerator (~$62, Amazon listing snapshot 14 June 2026) and local 30-day retention on a ZFS tank.
Host prep (Proxmox shell):
lsusb | grep -i coral
# Global Unitech USB ID 1a6e:089a or Google 18d1:9302 depending on firmware
ls -l /dev/dri/
# note renderD128 — often c 226:128
Edit /etc/pve/lxc/201.conf — append after the existing lines:
lxc.cgroup2.devices.allow: c 226:0 rwm
lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file
lxc.mount.entry: /dev/bus/usb dev/bus/usb none bind,optional,create=dir
features: nesting=1
Restart: pct stop 201 && pct start 201.
Inside LXC 201:
apt update && apt install -y docker.io intel-media-va-driver-non-free
lsusb | grep -i coral
docker exec frigate ls -l /dev/bus/usb/ 2>/dev/null || true
Docker Compose (same pattern as bare metal, devices explicit):
services:
frigate:
image: ghcr.io/blakeblackshear/frigate:stable
privileged: true
shm_size: "256mb"
restart: unless-stopped
environment:
LIBVA_DRIVER_NAME: iHD
devices:
- /dev/dri/renderD128:/dev/dri/renderD128
- /dev/bus/usb:/dev/bus/usb
volumes:
- /opt/frigate/config:/config
- /mnt/nvr/frigate:/media/frigate
Frigate config.yml detector block:
detectors:
coral:
type: edgetpu
device: usb
ffmpeg:
hwaccel_args: preset-intel-qsv-h264
Validate: Frigate System → Inference shows 9–12 ms on Coral; docker exec frigate vainfo lists H264 decode12. pct snapshot 201 pre-pve85 before the next Proxmox kernel bump.
Elena’s taken position: keep USB Coral in LXC 201 until she buys a second host—PCIe Coral is not worth VM overhead at six cameras.
PCIe Coral and when LXC is the wrong tool
PCIe Coral M.2 and Dual Edge TPU cards expose /dev/apex_0 on the host—not a USB node LXC can bind-mount cleanly. Proxmox documentation treats PCIe devices as VM passthrough candidates via IOMMU groups4.
| Goal | Recommended path | Why LXC fails |
|---|---|---|
| Dual Coral M.2 on N305 | VM + PCIe passthrough + Docker | No stable lxc.mount.entry for apex |
| Single PCIe Coral, strict isolation | Dedicated Frigate VM | Kernel driver owned by VM |
| Quick experiment | Docker on Proxmox host (no LXC) | Native /dev/apex_0 map |
| Ten+ 1080p @ 5 fps detect | VM or host + dual USB Coral | USB scales to ~2 sticks in one LXC |
Working example: James, PCIe Dual Edge TPU, VM 210
Profile: James runs Proxmox on a Ugreen DXP4800 Plus (N305, 32 GB RAM). Ten Annke cameras, PCIe Dual Edge TPU M.2 (~$85, Coral.ai snapshot June 2026). He needs kernel isolation from Home Assistant VM 100.
Steps (abbreviated):
- Enable IOMMU in BIOS and Proxmox boot cmdline (
intel_iommu=on). - Create VM 210 (Debian 12), add PCIe device for the Coral card in Proxmox GUI.
- Install
google-coralrules and Docker inside the VM—not inside an LXC. - Frigate Compose maps
/dev/apex_0; detectordevice: pciorauto.
I haven’t tested every N305 board’s IOMMU grouping for single-function Coral passthrough; anecdotally, LXC USB remains simpler when you only own a USB stick.
- USB Coral in LXC — pros
- Well-documented
lxc.mount.entrypattern; matches RiceMunk scripts7. - Lower overhead than a full VM; snapshot with
pct snapshot. - ~$60 entry price; Frigate MobileDet path is mature.
- Well-documented
- USB Coral in LXC — cons
- USB re-enumeration after host reboot—re-check
lsusbinside LXC. - Two Coral USB sticks approach PCIe throughput but consume ports.
- Not officially “supported” by Google inside nested containers—community pattern only.
- USB re-enumeration after host reboot—re-check
- PCIe Coral in VM — pros
- Higher theoretical detect FPS; one module vs two USB sticks.
- Clean driver ownership inside the VM kernel.
- Scales toward ten-plus cameras on N305 class hosts.
- PCIe Coral in VM — cons
- IOMMU setup; ~4 GB RAM overhead for VM + Docker.
- Cannot colocate in the same lightweight LXC as Pi-hole.
- Supply and pricing fluctuate more than USB Coral.
Pair Coral with QuickSync on the same LXC
The dominant mistake in frigate nvr proxmox coral tpu threads is enabling detectors.coral while ffmpeg still decodes on CPU. Coral never decompresses H.264 keyframes1.
| Layer | Device path | Frigate setting | Symptom if missing |
|---|---|---|---|
| Decode | /dev/dri/renderD128 | hwaccel_args: preset-intel-qsv-h264 | ffmpeg 60–80% CPU |
| Detect | /dev/bus/usb (Coral) | detectors.coral.type: edgetpu | detect lag, high CPU on motion |
Install intel-media-va-driver-non-free on the LXC (not only the Proxmox host). Set LIBVA_DRIVER_NAME=iHD for Alder Lake-N N100/N305. Use 720p substreams for detect; point 1080p main at record only—see Intel QuickSync on NASync/Proxmox paths for preset tables.
Scrypted on the same Proxmox host
Scrypted users often colocate on Proxmox for HomeKit Secure Video bridging while Frigate handles local object alerts. Hardware rules differ:
| Stack | Coral usage | Recommendation |
|---|---|---|
| Frigate LXC only | Exclusive USB Coral | Default privacy NVR |
| Scrypted LXC + Frigate plugin | Frigate owns Coral; Scrypted consumes events | Preferred dual-stack |
| Scrypted + Frigate both direct to Coral | Contention on /dev/apex_0 or USB | Avoid — flaky inference |
| Scrypted with QSV only | ONNX on CPU or GPU | Acceptable for 2–3 cams |
For HomeKit-centric builds, read Scrypted vs Frigate for local NVR. Scrypted’s NVR plugins can pass /dev/dri for decode similarly—duplicate the lxc.mount.entry pattern in LXC 202, not the same CTID as Frigate unless you enjoy USB lock fights.
Steel-man: run Frigate on the Proxmox host instead of LXC
The strongest case against LXC Coral passthrough is path length. On the Proxmox host shell, you install Docker, map /dev/bus/usb and /dev/dri/renderD128 once, and skip pct debugging entirely. When Coral vanishes after an update, you run lsusb on one OS—not host, then LXC, then container. Host Docker also unlocks PCIe Coral without VM RAM tax. For a dedicated NVR box that never runs Home Assistant VMs, host Docker is rational and matches upstream Frigate examples verbatim3.
Rebuttal: Host Frigate shares the Proxmox kernel with every VM—no pct snapshot rollback when renderD128 permissions regress. Elena colocates Pi-hole LXC 105 and Frigate LXC 201 precisely because pct snapshot 201 pre-kernel restored a working Coral map in March 2026 forum reports after a pve-kernel bump broke lxc.mount.entry. If you already virtualize, the extra config buys insurance, not detection quality.
Troubleshooting Coral passthrough failures
| Symptom | Likely cause | Fix |
|---|---|---|
Coral absent in LXC lsusb | Missing lxc.mount.entry for USB | Add bind-mount; pct stop && pct start |
| Coral present in LXC, absent in Frigate | Docker missing devices: USB map | Add /dev/bus/usb to Compose |
edgetpu/libedgetpu errors | Coral udev rules not in LXC | apt install google-coral-edgetpu or rules from Coral docs |
| Inference ms OK, CPU still high | No QSV / wrong preset | Bind renderD128; use preset-intel-qsv-h264 |
| Worked until Proxmox update | LXC config not persisted | Re-read 201.conf; restore snapshot |
| Two processes, flaky Coral | Scrypted + Frigate both claim TPU | Split LXCs or use Frigate plugin |
Checklist
- Confirm Coral with lsusb on Proxmox host before editing LXC config.
- Add lxc.mount.entry for /dev/bus/usb and /dev/dri/renderD128.
- Set features: nesting=1 for Docker inside LXC.
- Map both device paths in Frigate Docker Compose.
- Configure detectors.coral device usb and QSV hwaccel_args.
- Run docker exec frigate vainfo and check Frigate inference ms.
- pct snapshot before every Proxmox point release.
- Block camera VLAN WAN egress regardless of passthrough path.
Verdict
For frigate nvr proxmox coral tpu builds in June 2026, privileged LXC + USB Coral + QuickSync bind-mount is the default execution path on Intel N100/N305 homelabs. Elena should implement 201.conf lines, snapshot, and validate inference ms before tuning motion masks. James with PCIe Dual Edge TPU should skip LXC fantasies and deploy a Frigate VM or host Docker—same privacy outcome, fewer bind-mount dead ends.
Do not treat Coral passthrough as optional hardening—it is the difference between sustainable 5 fps detect on six cameras and a CPU-bound NVR that misses events. Pair every Coral map with VLAN egress blocking so locally inferred metadata never depends on vendor cloud APIs.
FAQ
Frequently Asked Questions
Can a Google Coral TPU run inside a Proxmox LXC for Frigate?
Yes for USB Coral accelerators: bind-mount /dev/bus/usb into a privileged LXC, pass the device through Docker with devices:, and set detectors.coral device usb in config.yml. PCIe Coral M.2 cards cannot passthrough to LXC; use a VM with PCIe passthrough or run Frigate on the Proxmox host instead.
What LXC config lines does Coral USB passthrough need?
Add lxc.mount.entry for /dev/bus/usb and lxc.cgroup2.devices.allow for the USB character devices if you map individual nodes. Most homelabs bind the entire USB bus, then map /dev/bus/usb into the Frigate Docker container.
Does Coral replace Intel QuickSync in Frigate on Proxmox?
No. Coral accelerates object detection only. You still bind-mount /dev/dri/renderD128 for ffmpeg decode via preset-intel-qsv-h264 or h265. Missing QSV is the top reason CPU stays high even after Coral is detected.
Should Frigate and Scrypted share one Coral in the same LXC?
Avoid it. Frigate and Scrypted both expect exclusive Edge TPU access. Run Scrypted in a separate LXC or VM with its own Coral, or let Scrypted use the Frigate plugin for detection instead of a second TPU consumer.
Why does lsusb show Coral on the host but not inside the LXC?
Usually the USB bus bind-mount is missing from /etc/pve/lxc/CTID.conf, the LXC was not restarted after editing, or udev rules inside the LXC lack google-coral group permissions. Re-apply mount.entry and restart pct.
Is privileged LXC required for Coral passthrough?
In practice yes for Frigate homelabs through June 2026. Unprivileged LXC with id-mapped USB is possible on Proxmox 8.4+ but rarely documented for Coral; privileged LXC plus Docker matches community frigate-proxmox scripts.
Conclusion
Proxmox LXC Coral TPU passthrough for Frigate NVR boils down to two bind-mounts—USB for detect, renderD128 for decode—inside a privileged, nested LXC you snapshot before every kernel change. USB Coral fits this model; PCIe Coral does not. Add Scrypted in a separate container or via the Frigate plugin, validate with lsusb and inference milliseconds, then harden camera VLAN egress. That is the full technical execution behind the search intent—no cloud detection required.
Primary Sources
| Index | Title / description | URL |
|---|---|---|
| 1 | Frigate — Video decoding (Intel QSV presets) | https://docs.frigate.video/configuration/hardware_acceleration_video/ |
| 2 | Frigate — Recommended hardware (Coral inference) | https://docs.frigate.video/frigate/hardware |
| 3 | Frigate — Installation (Docker) | https://docs.frigate.video/frigate/installation |
| 4 | Proxmox VE — Linux Container wiki | https://pve.proxmox.com/wiki/Linux_Container |
| 5 | Google Coral — USB Accelerator product page | https://coral.ai/products/accelerator/ |
| 6 | Proxmox VE — PCI passthrough notes | https://pve.proxmox.com/wiki/PCI_Passthrough |
| 7 | RiceMunk/frigate-proxmox-script (community LXC) | https://github.com/RiceMunk/frigate-proxmox-script |
Footnotes
-
Frigate video decoding documentation, accessed 15 June 2026 ↩ ↩2 ↩3
-
Frigate recommended hardware — detector inference table, accessed 15 June 2026 ↩ ↩2 ↩3 ↩4
-
Frigate Docker installation guide, accessed 15 June 2026 ↩ ↩2
-
Proxmox VE LXC wiki — device bind mounts, accessed 15 June 2026 ↩ ↩2 ↩3
-
Google Coral USB Accelerator product page, accessed 14 June 2026 ↩ ↩2
-
Privacy Smart Home — block IoT WAN egress guide, accessed 15 June 2026 ↩
-
RiceMunk/frigate-proxmox-script repository, accessed 15 June 2026 ↩