how to set up Frigate NVR in proxmox including coral.ai
why Frigate?
If you need to save security camera video getting tooled up for the Frigate NVR app is easy to justify. Frigate records, finds and plays the video whenever there’s motion in front of a camera. I use this flexibly to check on bird and pet feeding, to see if the post arrived or if the gutter copes with the rain. A nearby air show flies over us with a mix of interesting and annoying planes that can be worth catching on video.
Frigate can distinguish between specific objects so you can set it to respond to people and cars or ignore birds and cats and dogs as you wish. This requires a lot of processing power such that if you’ve more than one or two cameras you’ll want to offload that effort to a Google coral.ai processor or the machine’s GPU. The coral.ai comes in USB/PCI/M2 versions which are equally fabulous at allowing Frigate to run on a low power computer.
For a first attempt I’d recommend using an old PC or laptop. Later you can move to modern, less power hungry hardware based on an Intel N95 or N355 CPU. (For the record my old system used £12/month of electricity. The N355 system uses £4 / month).
links to nearby posts about Frigate:
- reasons to have cameras; what Frigate can do; how to set up Frigate on Ubuntu or openmediavault
- how to setup Frigate and get the GPU and Coral working in Proxmox
- how to set up Frigate on Proxmox on an old PC
- example ‘core’ camera setup for Frigate NVR and how to get your images sizes
- how to start using Proxmox and virtualization
outline: how to put Frigate in proxmox
- install proxmox 8 on any old PC and have >500GB of free space to store your camera ‘feed’ recordings.
- ensure that your security camera can supply a RTSP feed url (in other words rtsp://admin:password@192.168.1.165:554/live/ch1). A ‘cloud camera’ or video doorbell is unlikely to have an accessible RTSP camera feed.
- in proxmox install Docker and portainer in a privileged LXC container. There is a Proxmox Helper script to set up an LXC running Docker with Portainer and I’d start with this.
FRIGATE: create a Docker container running Frigate
- The thing I did (2025) was to install a LXC container with debian linux 12 bookworm and Docker. You do not want to make a Virtual Machine because this would be a ‘full fat’ version needing different instructions and tweaks to those that follow. You’ll find an install script to do an LXC with Docker here.
- when the script runs choose ‘Advanced’.
- choose Debian linux 12 bookworm
- choose 115 for the container ID – it helps me to match it to my IP address 192.168.1.115
- specify the password for root
- say yes to SSH access
- specify an IP address on your home network eg 192.168.1.115/24.
- accept the option to install Portainer.
- In proxmox, run your Docker LXC and immediately login to portainer via the web browser on your PC. The url will be the one you specified plus a 9443 port number. This will be like https://192.168.1.115:9443/ or https://192.168.1.115:9000/. You can only set up portainer’s login details if you access it within a few minutes of starting the LXC container. When you’re ‘in’ a freshly made portainer increase the session length (in authentication); add the IP (eg 192.168.1.115) as the public IP address to local (in environments). Take a look at Containers; Application templates and finally Stacks.
- in proxmox, login to your Docker LXC console as root. Before you install Frigate as a stack in portainer you really must create a config.yml file in this console. The command line will be nano /home/frigate/config.yml See the Frigate docs for an idea of what goes in config.yml – you just need a few lines for now (eg detectors: cpu1: type: cpu). Find the youtube instructions to install Frigate as a stack in portainer.
FRIGATE: passthrough the coral.ai USB to the container eg 115
- if you have a coral.ai processor you need to configure the container to connect with the version that you have. The instructions that I used for my USB coral are on this page. (The instructions for connecting a coral PCI card to this LXC container are very different to those). My 115.conf in the proxmox shell is as follows. If you have issues don’t confuse the solutions for Coral USB / M2 / PCIe.
Which USB bus am I using? Go to the console for the docker/frigate LXC:
apt-get install usbutils
lsusb # this lists the USB devices
ls -la /dev/bus/usb/002/ # this is meant to tell which cgroup has the coral i.e cgroup2.devices.allow (proxmox 8) or cgroup.devices.allow
IN THE PROMOX SHELL enter:
root# nano /etc/pve/lxc/115.conf
arch: amd64
cores: 4
features: fuse=1,nesting=1
hostname: frigate-docker
memory: 4096
mp0: /mnt/nvme0n1p1,mp=/mnt/nvme0n1p1
net0: name=eth0,bridge=vmbr1,gw=192.168.1.1,hwaddr=BC:24:11:17:67:6B,ip=192.168.1.115/24,type=veth
onboot: 1
ostype: debian
rootfs: local-lvm:vm-140-disk-0,size=24G
swap: 512
lxc.cgroup2.devices.allow: a
lxc.cap.drop:
lxc.cgroup2.devices.allow: c 226:0 rwm
lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.cgroup2.devices.allow: c 29:0 rwm
lxc.cgroup2.devices.allow: c 188:* rwm
add a mount point to store FRIGATE recordings outside the container
- In short you need to mkdir a folder in mnt in the proxmox shell and mount your hard disk partition device in this folder. Finally a pct set command in the proxmox shell also copies that mount action into the LXC container. You’ll now be able to see the mounted drive and its files in both the proxmox shell and the container.
IN THE PROMOX SHELL add the mount point to your container ID - mine is 115
pct set 115 -mp0 /mnt/nvme0n1p1,mp=/mnt/nvme0n1p1
FRIGATE example compose.yaml for portainer stack
version: "3.8"
services:
frigate:
container_name: frigate
privileged: true #may not be necessary
restart: unless-stopped
image: ghcr.io/blakeblackshear/frigate:stable
shm_size: "128mb" #based on camera calculation
cap_add:
- CAP_PERFMON #may not be necessary if privileged
devices:
- /dev/bus/usb:/dev/bus/usb # USB Coral
- /dev/dri/renderD128:/dev/dri/renderD128 # hwaccel
volumes:
- /etc/localtime:/etc/localtime:ro
- /home/config/config.yml:/config/config.yml
- /mnt/nvme0n1p1/frigate115:/media/frigate
- /home/config:/config
- type: tmpfs
target: /tmp/cache
tmpfs:
size: 1000000000
ports:
- 5000:5000
- 8554:8554
- 8555:8555/tcp
- 8555:8555/udp
FRIGATE example config.yml
# yaml-language-server: $schema=http://192.168.1.115:5000/api/config/schema
version: 0.14
database:
path: /media/frigate/frigate.db
mqtt:
enabled: false
ffmpeg:
hwaccel_args: preset-vaapi
detectors:
coral:
type: edgetpu
device: usb
model:
width: 320
height: 320
auth:
enabled: False
birdseye:
enabled: false
objects:
track:
- person
- cat
- car
- dog
- sheep
- mouse
detect:
enabled: true
motion:
enabled: true
record:
enabled: True
retain:
days: 2
mode: all
events:
pre_capture: 1
post_capture: 5
retain:
default: 30
mode: motion
objects:
- person
- cat
- car
- dog
- sheep
- mouse
- bicycle
- motorcycle
timestamp_style:
format: '%DDD %d/%m %H:%M:%S'
color:
red: 255
green: 255
blue: 10
go2rtc:
streams:
# --------------------------------
frontbees155reo_sub:
- rtsp://USER:PASSWORD@192.168.1.155:554/h264Preview_01_sub # <--LOWRES stream 1280x720
frontbees155reo:
- rtsp://USER:PASSWORD@192.168.1.155:554/h264Preview_01_main # <--HIGHRES stream 1920x1080
# --------------------------------
cameras:
frontbees155reo: # this config is for starters not optimal
ffmpeg:
inputs:
- path: rtsp://127.0.0.1:8554/frontbees155reo # <-- ip of frigate go2rtc
input_args: preset-rtsp-restream
roles:
- detect
- record
detect:
width: 1920 # camera resolution
height: 1080 # camera resolution
fps: 4
objects:
track:
- person
- car
- dog
links to nearby posts about Frigate:
- reasons to have cameras; what Frigate can do; how to set up Frigate on Ubuntu or openmediavault
- how to setup Frigate and get the GPU and Coral working in Proxmox
- how to set up Frigate on Proxmox on an old PC
- example ‘core’ camera setup for Frigate NVR and how to get your images sizes
- how to start using Proxmox and virtualization
Hello Roger,
Have you come across how to run “docker compose up -d” after adding the frigate + API key to your docker-compose.yml file?
Would truly appreciate a comment if you have done this and have a moment.
Many thanks
Dan
Hello Dan,
To explain to others: the ‘API key’ is the string or password needed to use Frigate+ (I have no experience of Frigate+). But I have used docker-compose.yml endlessly and might suggest, because you’re trying over and over, to install dockge first and use dockge to do the up / edit / down. This is a straightforward way to make the many tweaks you’ll want to try out. In short: it’s not your solution but it is a less painful way to do trial and error. All best
rgr
I should probably mention that I used this script to install frigate, and it is working great so far.
I just can not run “docker compose up -d” after adding the Frigate + API token to the docker-compose.yml file.
It is needed for the API token to take and be seen by Frigate,
Many thanks!
Sorry, this script is what I meant to add:
https://community-scripts.org/scripts/frigate
Thank you. I’ve often used and and could recommend those community scripts. I think my current Frigate install is a plain Docker LXC > then Dockge > then enter the Frigate docker-compose details.
Thanks for your kind reply, appreciated.
Are you saying one can install dockge on the LXC and then run stuff like “docker compose up -d”on that same console?
Have never used dockge but had a look and not sure where that fits into a proxmox install?
Id did find this which looks like it could help: https://community-scripts.org/scripts?q=dockge
Nearly. They run the command for you in a more helpful interface. DOCKGE is a docker manager PORTAINER is another docker manager. My Frigate install is create a Docker LXC with communty script > then install DOCKGE. Then get Dockge to install Frigate. This is life changing.
I see. News to me, will give it a go. Kudos!