Running Frigate NVR on IncusOS?

Hello. Very new to Incus and attempting to jump in at the deep end with IncusOS.
I’ve seen a few posts referencing Frigate on the forums but nothing concrete - folks who are running Frigate on Incus - what is your setup? What is best practice?

I’ve attempted OCI instance and I can get it running with a CPU detector but can’t seem to get GPU settings right or any form of hardware accelleration.
I also attempted first as a debian container install but didn’t get too far, I put this down to lack of knowledge and learning curve for me with this system.

Would greatly appreciate if others could share details or examples of their setups with Frigate so I might figure out which tree to bark up.

Thanks!

Perhaps I should give some context myself:
Latest IncusOS 6.19.1 on a Beelink EQi12(Intel Core i3-1220P (Alder Lake-P) + UHD Graphics 1.10GHz
Frigate as OCI container from “ghcr.io/blakeblackshear/frigate:stable”
Have set to privileged while troubleshooting but also attempted without.
GPU added and seems to be visible in the container:

root@frigateNVR:~# cat /sys/class/drm/card0/device/vendor
0x8086
root@frigateNVR:~# cat /sys/class/drm/card0/device/device
0x46b3

driver fails to init tho:

libva info: VA-API version 1.22.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva error: /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so init failed
libva info: va_openDriver() returns 1
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_8
libva error: /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so init failed
libva info: va_openDriver() returns -1
vaInitialize failed with error code -1 (unknown libva error),exit

Here, I’m using:

stgraber@castiana:~$ incus config show --expanded s-shf-cluster:frigate01 --project stgraber
architecture: x86_64
config:
  boot.autorestart: "true"
  boot.autostart: "true"
  cluster.evacuate: stop
  environment.DEFAULT_FFMPEG_VERSION: "7.0"
  environment.HAILORT_LOGGER_PATH: NONE
  environment.HOME: /root
  environment.INCLUDED_FFMPEG_VERSIONS: 7.0:5.0
  environment.OPENCV_FFMPEG_LOGLEVEL: "8"
  environment.PATH: /usr/local/go2rtc/bin:/usr/local/tempio/bin:/usr/local/nginx/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  environment.S6_CMD_WAIT_FOR_SERVICES_MAXTIME: "0"
  environment.S6_LOGGING_SCRIPT: T 1 n0 s10000000 T
  environment.TERM: xterm
  environment.TOKENIZERS_PARALLELISM: "true"
  environment.TRANSFORMERS_NO_ADVISORY_WARNINGS: "1"
  environment.TZ: America/Toronto
  image.architecture: x86_64
  image.description: ghcr.io/blakeblackshear/frigate (OCI)
  image.id: blakeblackshear/frigate:stable
  image.type: oci
  limits.cpu: "8"
  limits.cpu.nodes: balanced
  limits.memory: 32GiB
  limits.processes: "50000"
  security.idmap.isolated: "true"
  security.protection.delete: "true"
  security.syscalls.intercept.sysinfo: "true"
  snapshots.expiry: 1w
  snapshots.pattern: snap-{{ creation_date|date:'2006-01-02_15-04-05' }}
  snapshots.schedule: '@daily'
  volatile.base_image: 4041ad318224500cf9513c513b1bb927d9dd252f63bbd3d11c92006c1172c86c
  volatile.cloud-init.instance-id: b22d372d-21c7-4476-b031-7ff53c7b73b3
  volatile.container.oci: "true"
  volatile.cpu.nodes: "0"
  volatile.eth0.host_name: vethb43462e6
  volatile.eth0.hwaddr: 00:16:3e:db:90:40
  volatile.idmap.base: "1720896"
  volatile.idmap.current: '[{"Isuid":true,"Isgid":false,"Hostid":1720896,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":1720896,"Nsid":0,"Maprange":65536}]'
  volatile.last_state.power: RUNNING
  volatile.last_state.ready: "false"
  volatile.uuid: 3766623e-d835-4314-8cdb-647de53224f5
  volatile.uuid.generation: 3766623e-d835-4314-8cdb-647de53224f5
devices:
  coral-early:
    productid: 089a
    required: "false"
    type: usb
    vendorid: 1a6e
  coral-late:
    productid: "9302"
    required: "false"
    type: usb
    vendorid: 18d1
  eth0:
    name: eth0
    network: default
    type: nic
  frigate-config:
    path: /config
    pool: ssd
    source: frigate-config/config/
    type: disk
  frigate-storage:
    path: /media/frigate
    pool: hdd
    source: frigate-storage
    type: disk
  gpu:
    type: gpu
    vendorid: "8086"
  root:
    path: /
    pool: ssd
    size: 50GiB
    type: disk
ephemeral: false
profiles:
- default
stateful: false
description: ""
3 Likes

Thank you for sharing your config, this lets me know that the way I am trying to run it is at least possible. However I am still having no luck with GPU.

With the container privileged I’m seeing the following dmesg output across multiple boots:

[ 8.382134] i915 0000:00:02.0: [drm] ERROR GT0: GuC firmware i915/adlp_guc_70.bin: fetch failed -ENOENT
[ 8.382947] i915 0000:00:02.0: [drm] ERROR GT0: GuC initialization failed -ENOENT
[ 8.382949] i915 0000:00:02.0: [drm] ERROR GT0: Failed to initialize GPU, declaring it wedged!

Is it possible there is firmware missing at the OS level for my particular GPU? Or a system config I might have got wrong?

Yeah, sounds like you don’t have the expected firmware files in /lib/firmware/.
Maybe you’re missing some distro package.

Any ideas how I might fix it or is it not possible?

Check if your distribution has a package that brings in the required files into /lib/firmware/

Sorry if I’m not following but - my distribution is IncusOS?
Which I dont believe I can install packages on and I don’t believe installing firmware inside the container will fix it?

Oh oops, sorry, I missed that somehow :slight_smile:

Alright, then it’s a known issue:

We’re looking at adding an extra application for gpu-support which will then bring in all the firmware bits. Doing that in the base install would literally double the entire OS size for everyone (some of those firmware files are huge).

1 Like

Thank you for the response and attention. I’ll follow the linked issue on github.
In the meantime is there a recommended hardware for an incusOS homelab type setup?
Despite the hiccups i’m enjoying the platform.

Anything that supports UEFI Secure Boot, has a TPM 2.0 module, some reliable storage and networking should be fine and when not, we’ve tried to be pretty quick to track down missing drivers and such and get things added as needed.

On the GPU front, currently none of them have working firmware so it’s a generic issue. Once that’s resolved, I suspect Intel and AMD will be the frontrunners as we can’t ship the binary NVIDIA driver, meaning that NVIDIA cards will have to contend with the nouveau driver.

I gather from the linked github issue that a fix is planned for early next year? So for now I think I will run frigate in a VM to get full gpu support and migrate to OCI hopefully later.

Yeah, it’s pretty high up on our priority list but we’re obviously on reduced staffing right now with the holidays…

1 Like

fantastic, I look forward to the future updates.

I see the github issue closed now and GPU support application added, although the documentation is a little sparse, I’m wondering is there anything I can look to for guidance on how to get up and running with GPU support?

incus admin os application add -d '{"name": "gpu-support"}' should get it added to your system.

Thanks Stéphane, I’d gotten as far as adding the application and it appears to be running, but I still seem to be encountering issues. Running frigate priviledged while I troubleshoot. Some info below, not sure if I have something setup incorrectly or if there is perhaps timing issues where the driver attempts to load before the gpu application.
Any insights greatly appreciated.

environment:

 hostname: fd183fd0-4585-374f-986e-a8595f986d1d

 os_name: IncusOS

 os_version: “202601100100”

 os_version_next: “”

incus admin os application show gpu-support

 WARNING: The IncusOS API and configuration is subject to change

 config: {}

 state:

 initialized: true

 version: “202601100100”

incus admin os application list

WARNING: The IncusOS API and configuration is subject to change

 ±------------+

 |    NAME     |

 ±------------+

 | gpu-support |

 ±------------+

 | incus       |

±------------+

incus admin os debug log -b0 | grep -E “i915|firmware|sysext|sd-merge|gpu-support” | head -40

WARNING: The IncusOS API and configuration is subject to change

[2026/01/12 14:42:18 GMT] kernel: faux_driver regulatory: Direct firmware load for regulatory.db failed with error -2

[2026/01/12 14:42:19 GMT] systemd: Listening on systemd-sysext.socket - System Extension Image Management.

[2026/01/12 14:42:19 GMT] systemd: systemd-sysext.service - Merge System Extension Images into /usr/ and /opt/ was skipped because no trigger condition checks were met.

[2026/01/12 14:42:20 GMT] systemd: systemd-sysext.socket: Deactivated successfully.

[2026/01/12 14:42:20 GMT] systemd: Closed systemd-sysext.socket - System Extension Image Management.

[2026/01/12 14:42:21 GMT] systemd: systemd-hibernate-clear.service - Clear Stale Hibernate Storage Info was skipped because of an unmet condition check (ConditionPathExists=/sys/firmware/efi/efivars/HibernateLocation-8cf2644b-4b0b-428f-9387-6d876050dc67).

[2026/01/12 14:42:21 GMT] kernel: iwlwifi 0000:ad:00.0: Direct firmware load for iwlwifi-cc-a0-77.ucode failed with error -2

[2026/01/12 14:42:21 GMT] kernel: iwlwifi 0000:ad:00.0: no suitable firmware found!

[2026/01/12 14:42:21 GMT] kernel: iwlwifi 0000:ad:00.0: check git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git

[2026/01/12 14:42:23 GMT] kernel: Bluetooth: hci0: Minimum firmware build 1 week 10 2014

[2026/01/12 14:42:23 GMT] kernel: Bluetooth: hci0: Failed to load Intel firmware file intel/ibt-20-1-3.sfi (-2)

[2026/01/12 14:42:23 GMT] kernel: i915 0000:00:02.0: [drm] Found alderlake_p (device ID 46b3) integrated display version 13.00 stepping D0

[2026/01/12 14:42:23 GMT] kernel: i915 0000:00:02.0: [drm] VT-d active for gfx access

[2026/01/12 14:42:23 GMT] kernel: i915 0000:00:02.0: vgaarb: deactivate vga console

[2026/01/12 14:42:23 GMT] kernel: i915 0000:00:02.0: [drm] Using Transparent Hugepages

[2026/01/12 14:42:23 GMT] kernel: i915 0000:00:02.0: vgaarb: VGA decodes changed: olddecodes=io+mem,decodes=io+mem:owns=io+mem

[2026/01/12 14:42:23 GMT] kernel: i915 0000:00:02.0: Direct firmware load for i915/adlp_dmc.bin failed with error -2

[2026/01/12 14:42:23 GMT] kernel: i915 0000:00:02.0: Direct firmware load for i915/adlp_dmc_ver2_16.bin failed with error -2

[2026/01/12 14:42:23 GMT] kernel: i915 0000:00:02.0: [drm] Failed to load DMC firmware i915/adlp_dmc.bin (-ENOENT). Disabling runtime power management.

[2026/01/12 14:42:23 GMT] kernel: i915 0000:00:02.0: [drm] DMC firmware homepage: https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git

[2026/01/12 14:42:23 GMT] kernel: i915 0000:00:02.0: [drm] *ERROR* GT0: GuC firmware i915/adlp_guc_70.bin: fetch failed -ENOENT

[2026/01/12 14:42:23 GMT] kernel: i915 0000:00:02.0: [drm] GT0: GuC firmware(s) can be downloaded from https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/i915

[2026/01/12 14:42:23 GMT] kernel: i915 0000:00:02.0: [drm] GT0: GuC firmware i915/adlp_guc_70.bin version 0.0.0

[2026/01/12 14:42:23 GMT] kernel: i915 0000:00:02.0: [drm] *ERROR* GT0: GuC initialization failed -ENOENT

[2026/01/12 14:42:23 GMT] kernel: i915 0000:00:02.0: [drm] *ERROR* GT0: Enabling uc failed (-5)

[2026/01/12 14:42:23 GMT] kernel: i915 0000:00:02.0: [drm] *ERROR* GT0: Failed to initialize GPU, declaring it wedged!

[2026/01/12 14:42:23 GMT] kernel: i915 0000:00:02.0: [drm] CI tainted: 0x9 by intel_gt_set_wedged_on_init+0x34/0x50 [i915]

[2026/01/12 14:42:23 GMT] kernel: [drm] Initialized i915 1.6.0 for 0000:00:02.0 on minor 0

[2026/01/12 14:42:25 GMT] kernel: i915 0000:00:02.0: [drm] Cannot find any crtc or sizes

[2026/01/12 14:42:25 GMT] kernel: snd_hda_intel 0000:00:1f.3: bound 0000:00:02.0 (ops intel_audio_component_bind_ops [i915])

[2026/01/12 14:42:26 GMT] systemd: Listening on systemd-sysext.socket - System Extension Image Management.

[2026/01/12 14:42:26 GMT] systemd: Starting systemd-sysext.service - Merge System Extension Images into /usr/ and /opt/...

[2026/01/12 14:42:26 GMT] (sd-merge): Using extensions 'gpu-support.raw', 'incus.raw'.

[2026/01/12 14:42:26 GMT] (sd-merge): Merged extensions into '/usr'.

[2026/01/12 14:42:26 GMT] (sd-merge): Merged extensions into '/opt'.

[2026/01/12 14:42:26 GMT] systemd: Finished systemd-sysext.service - Merge System Extension Images into /usr/ and /opt/.

[2026/01/12 14:42:26 GMT] kernel: i915 0000:00:02.0: [drm] Cannot find any crtc or sizes

[2026/01/12 14:42:27 GMT] systemd: Startup finished in 12.373s (firmware) + 5.053s (loader) + 1.145s (kernel) + 2.401s (initrd) + 5.943s (userspace) = 26.916s.

[2026/01/12 14:42:32 GMT] kernel: r8169 0000:ab:00.0: Unable to load firmware rtl_nic/rtl8168h-2.fw (-2)

[2026/01/12 14:42:32 GMT] kernel: r8169 0000:ac:00.0: Unable to load firmware rtl_nic/rtl8168h-2.fw (-2)

incus exec frigateNVR – dmesg | grep -i “i915|vaapi|renderD128”

[    6.378491] i915 0000:00:02.0: [drm] Found alderlake_p (device ID 46b3) integrated display version 13.00 stepping D0
[    6.379017] i915 0000:00:02.0: [drm] VT-d active for gfx access
[    6.379020] i915 0000:00:02.0: vgaarb: deactivate vga console
[    6.379057] i915 0000:00:02.0: [drm] Using Transparent Hugepages
[    6.379492] i915 0000:00:02.0: vgaarb: VGA decodes changed: olddecodes=io+mem,decodes=io+mem:owns=io+mem
[    6.379788] i915 0000:00:02.0: Direct firmware load for i915/adlp_dmc.bin failed with error -2
[    6.379800] i915 0000:00:02.0: Direct firmware load for i915/adlp_dmc_ver2_16.bin failed with error -2
[    6.379802] i915 0000:00:02.0: [drm] Failed to load DMC firmware i915/adlp_dmc.bin (-ENOENT). Disabling runtime power management.
[    6.379804] i915 0000:00:02.0: [drm] DMC firmware homepage: https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
[    6.382215] i915 0000:00:02.0: [drm] *ERROR* GT0: GuC firmware i915/adlp_guc_70.bin: fetch failed -ENOENT
[    6.382219] i915 0000:00:02.0: [drm] GT0: GuC firmware(s) can be downloaded from https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/i915
[    6.382984] i915 0000:00:02.0: [drm] GT0: GuC firmware i915/adlp_guc_70.bin version 0.0.0
[    6.383059] i915 0000:00:02.0: [drm] *ERROR* GT0: GuC initialization failed -ENOENT
[    6.383060] i915 0000:00:02.0: [drm] *ERROR* GT0: Enabling uc failed (-5)
[    6.383062] i915 0000:00:02.0: [drm] *ERROR* GT0: Failed to initialize GPU, declaring it wedged!
[    6.383348] i915 0000:00:02.0: [drm] CI tainted: 0x9 by intel_gt_set_wedged_on_init+0x34/0x50 [i915]
[    6.402152] [drm] Initialized i915 1.6.0 for 0000:00:02.0 on minor 0
[    8.319542] i915 0000:00:02.0: [drm] Cannot find any crtc or sizes
[    8.319689] snd_hda_intel 0000:00:1f.3: bound 0000:00:02.0 (ops intel_audio_component_bind_ops [i915])
[    9.233552] i915 0000:00:02.0: [drm] Cannot find any crtc or sizes

@stgraber I’ve been following the updates over on github, and my issues with gpu firmware now seem to be resolved. Thanks for the support.

Hopefully my last question here, but I’m wondering is it possible to get GPU stats in container?
The solution with proxmox lxc containers was CAP_PERFMON so I’ve tried adding:

  raw.lxc: |
    lxc.cap.keep = perfmon

to the config but that seems to cause further issues.
Any references to such I can find in the forums here seem to point to running privileged as the solution which is less ideal.