VAAPI Not Detected
VAAPI is Alchemist's preferred path for both Intel and AMD GPUs on Linux. When it isn't being used, the issue is almost always one of:
/dev/driisn't exposed to the process (common in Docker).- The container user lacks access to the
video/rendergroups. vainforeports no usable profiles — the VAAPI driver is missing, wrong, or broken.- The startup probe failed with a codec-specific error.
Start with Settings → Hardware → Probe Log. Each VAAPI probe records the full FFmpeg stderr when it fails, and that's the authoritative answer to "why didn't VAAPI work?". The steps below narrow down what the probe log already says.
1. Is /dev/dri exposed?
On the host:
ls -l /dev/dri
You should see at least one renderD128 (or similar) device
node. If the directory is empty or missing, the GPU driver
isn't loaded on the host — fix that before worrying about
the container.
In Docker, the device must be passed in:
devices:
- /dev/dri:/dev/dri
group_add:
- video
- render
The group_add entries matter — without them, the
container user can see the device nodes but not open them.
See GPU Passthrough for full examples.
2. Does vainfo report profiles?
Inside the container (or on the host for binary installs):
vainfo --display drm --device /dev/dri/renderD128
On newer systems, Intel may use renderD129. Check
ls -l /dev/dri to identify which render node is which.
Expected output includes a block like VAProfileH264...,
VAProfileHEVCMain..., and so on. If vainfo errors with
"no valid VA driver", the VAAPI driver isn't present or the
wrong one is selected.
Set LIBVA_DRIVER_NAME explicitly:
iHD— modern Intel iGPUs (8th gen+)i965— older Intel hardwareradeonsi— AMD on Mesa
Pass it in the container environment:
environment:
- LIBVA_DRIVER_NAME=iHD # or radeonsi for AMD
3. Does FFmpeg expose VAAPI encoders?
ffmpeg -encoders | grep vaapi
You should see at least h264_vaapi, hevc_vaapi, and — on
sufficiently new Intel/AMD hardware with a compatible
driver/FFmpeg stack — av1_vaapi. If the list is empty,
FFmpeg wasn't built with VAAPI. Use the Alchemist Docker
image or install an FFmpeg package that enables VAAPI.
4. Read the probe log
Settings → Hardware → Probe Log shows each probed backend with the full FFmpeg stderr for failures. Common patterns:
- "Failed to get any profile / no valid profile" —
vainfowould show the same thing. Driver is missing or mis-selected (step 2). - "Permission denied" on
/dev/dri/renderD128— the container user isn't in therendergroup (step 1). av1_vaapifails buthevc_vaapiworks — the driver or FFmpeg version lacks AV1 VAAPI encode. This is driver and FFmpeg-stack sensitive. Either update the stack or target HEVC. See AV1.- "Probe succeeded" but Alchemist still uses CPU — a different vendor scored higher, or Preferred Vendor is pinned elsewhere. See Hardware Acceleration.
5. Multi-GPU Linux hosts
If the host has multiple GPUs (iGPU + dGPU, or two dGPUs), VAAPI auto-selection may pick the wrong one. Override:
- Settings → Hardware → Device Path → set to the render
node you want (e.g.
/dev/dri/renderD128). - Verify with
vainfo --display drm --device <path>that the node has the profiles you expect.
Vendor-specific notes
- Intel Arc — uses VAAPI, not QSV. See the Intel hardware guide. Forcing QSV on Arc is almost always wrong.
- AMD on Linux — uses
radeonsivia VAAPI.hevc_vaapiandh264_vaapiare the validated paths;av1_vaapisupport depends on GPU generation and driver/FFmpeg version. See the AMD hardware guide. - AMD on Windows — uses AMF, not VAAPI. This page does not apply; see the AMD guide for the AMF path.
Related
- Intel hardware guide
- AMD hardware guide
- GPU Passthrough
- Troubleshooting overview
- AV1 transcoding — if the failing probe is
specifically
av1_vaapi.