GPU Acceleration
Firefox Hardware Video Acceleration
Configuring the nvidia-vaapi-driver
As of Debian 13 (Trixie) it is now fairly easy to configure VAAPI hardware video acceleration as this release ships with an updated version of the nvidia-vaapi-driver. The only package that needs to be manually installed now is the nvidia-driver.
Tested working packages:
- nvidia-driver v570.169 (manually installed without the package manager)
- nvidia-vaapi-driver v0.0.13
- firefox-esr v128.11
- vainfo v2.22
In the future when the Debian repository ships a newer release of the nvidia-driver make sure you also have the libnvidia-encode1 package installed (this package already comes with the manually installed nvidia-driver).
Ensure you have the following kernel parameters set for the nvidia-driver:
/etc/modprobe.d/nvidia.conf
options nvidia-drm modeset=1
If this parameter is not currently set you will have to rebuild initramfs and reboot:
sudo mkinitramfs -u sudo reboot
Once you have installed the packages above you can verify nvidia-vaapi-driver is working by running vainfo:
user@debian:~$ vainfo
Trying display: wayland
Trying display: x11
error: can't connect to X server!
Trying display: drm
libva info: VA-API version 1.22.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/nvidia_drv_video.so
libva info: Found init function __vaDriverInit_1_0
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.22 (libva 2.22.0)
vainfo: Driver version: VA-API NVDEC driver [direct backend]
vainfo: Supported profile and entrypoints
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Main : VAEntrypointVLD
VAProfileVC1Simple : VAEntrypointVLD
VAProfileVC1Main : VAEntrypointVLD
VAProfileVC1Advanced : VAEntrypointVLD
VAProfileH264Main : VAEntrypointVLD
VAProfileH264High : VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointVLD
VAProfileHEVCMain : VAEntrypointVLD
VAProfileVP8Version0_3 : VAEntrypointVLD
VAProfileVP9Profile0 : VAEntrypointVLD
VAProfileAV1Profile0 : VAEntrypointVLD
VAProfileHEVCMain10 : VAEntrypointVLD
VAProfileHEVCMain12 : VAEntrypointVLD
VAProfileVP9Profile2 : VAEntrypointVLD
VAProfileHEVCMain444 : VAEntrypointVLD
VAProfileHEVCMain444_10 : VAEntrypointVLD
VAProfileHEVCMain444_12 : VAEntrypointVLD
Here we are looking to see that the driver has loaded without errors and that we are using the [direct backend]. If the driver is defaulting to the[egl backend] you can force it to use direct by setting the following environment variable:
export NVD_BACKEND=direct
Configuring Firefox
Before launching Firefox I recommend setting the following environment variable in your terminal to enable NV logging:
export NVD_LOG=1
Now launch Firefox using the following parameters:
MOZ_DISABLE_RDD_SANDBOX=1 firefox
In Firefox you will need to set the media.ffmpeg.vaapi.enabled option to true in the about:config page:

Now close Firefox and restart using the same command. To verify that video hardware decoding is working you can play a YouTube video and check the output of nvidia-smi:
user@debian:~$ nvidia-smi Fri Jun 20 19:14:17 2025 +-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 570.169 Driver Version: 570.169 CUDA Version: 12.8 | |-----------------------------------------+------------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+========================+======================| | 0 NVIDIA GeForce RTX 4090 Off | 00000000:06:00.0 On | Off | | 0% 38C P2 80W / 450W | 1090MiB / 24564MiB | 5% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=========================================================================================| | 0 N/A N/A 989 G /usr/lib/xorg/Xorg 317MiB | | 0 N/A N/A 33599 G alacritty 29MiB | | 0 N/A N/A 40272 G ...ler --variations-seed-version 48MiB | | 0 N/A N/A 42045 G alacritty 15MiB | | 0 N/A N/A 49174 G alacritty 15MiB | | 0 N/A N/A 52330 G firefox-esr 130MiB | | 0 N/A N/A 55294 C+G /usr/lib/firefox-esr/firefox-esr 423MiB | +-----------------------------------------------------------------------------------------+
We are looking for a Firefox process with a Type or either C or C+G.
You can also use nvidia-smi pmon to show the usage of the decode engine:
user@debian:~$ nvidia-smi pmon
# gpu pid type sm mem enc dec jpg ofa command
# Idx # C/G % % % % % % name
0 49174 G - - - - - - alacritty
0 52330 G 0 0 - - - - firefox-esr
0 55294 C+G 1 0 - 4 - - firefox-esr
0 989 G 1 0 - - - - Xorg
0 33599 G - - - - - - alacritty
0 40272 G - - - - - - chrome --type=g
0 42045 G - - - - - - alacritty
I had to bump up the video quality to 1080p@60 for it to show a usage greater than 0%.
