Skip to content
🚧 These docs are a work in progress and may contain inaccuracies. Content is being actively reviewed and validated.

Hardware Acceleration

Hardware transcoding significantly reduces CPU usage and enables smooth playback of high-bitrate content. Dubby supports Intel Quick Sync, NVIDIA NVENC, and AMD VAAPI. When a GPU is available, Dubby also uses it for HDR-to-SDR tone mapping — converting HDR10/Dolby Vision content for SDR displays without the heavy CPU cost of software tone mapping.

Section titled “Intel Quick Sync (recommended for Intel CPUs)”

Intel Quick Sync Video (QSV) is available on most Intel CPUs with integrated graphics (6th gen Skylake and newer). It provides both hardware decoding and encoding.

Mount the DRI device to the container:

Docker Compose:

services:
dubby:
# ... other config
devices:
- /dev/dri:/dev/dri

Docker CLI:

Terminal window
docker run -d \
--name dubby \
--device /dev/dri:/dev/dri \
-p 3000:3000 \
-v ./data:/data \
-v ./cache:/cache \
-v /path/to/media:/media \
-e BETTER_AUTH_SECRET="your-secret" \
dubbytv/dubby:beta
Terminal window
# Check DRI devices are visible
docker exec dubby ls -la /dev/dri
# Check supported VA-API profiles
docker exec dubby vainfo

You should see renderD128 in the device list and supported codec profiles (H264, HEVC) in the vainfo output.

Requires the NVIDIA Container Toolkit installed on the host. The toolkit injects the NVIDIA drivers and utilities (including nvidia-smi) into the container at runtime — no GPU drivers are installed in the Dubby image itself.

Docker Compose:

services:
dubby:
# ... other config
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]

Docker CLI:

Terminal window
docker run -d \
--name dubby \
--gpus all \
-p 3000:3000 \
-v ./data:/data \
-v ./cache:/cache \
-v /path/to/media:/media \
-e BETTER_AUTH_SECRET="your-secret" \
dubbytv/dubby:beta
Terminal window
# nvidia-smi is injected by the container toolkit
docker exec dubby nvidia-smi

You should see your GPU model and driver version. If this fails, the NVIDIA Container Toolkit is not installed or configured correctly on the host — see the install guide.

AMD GPUs use VAAPI (Video Acceleration API) for hardware transcoding. Mount the DRI device the same way as Intel:

Docker Compose:

services:
dubby:
# ... other config
devices:
- /dev/dri:/dev/dri
Terminal window
docker exec dubby ls -la /dev/dri
docker exec dubby vainfo

You should see AMD-specific VA-API profiles in the output. If vainfo shows no profiles, the AMD Mesa VAAPI driver may not be loaded — see Troubleshooting below.

Dubby automatically detects available hardware encoders at startup by testing each one. The selection priority for H.264 encoding is:

  1. NVENC (NVIDIA) — highest priority
  2. VideoToolbox (macOS, non-Docker only)
  3. QSV (Intel Quick Sync)
  4. VAAPI (AMD / Intel)
  5. AMF (AMD, Windows)
  6. libx264 (software fallback)

The same priority applies for HEVC encoding. You don’t need to configure which encoder to use — Dubby picks the best available option automatically.

PlatformArchitectureHardware transcoding
Linux (x86)amd64Intel QSV, NVIDIA NVENC, AMD VAAPI
Linux (ARM)arm64Software only
macOS (Intel)amd64Software only (Docker limitation)
macOS (Apple Silicon)arm64Software only (Docker limitation)
Windows (WSL2)amd64NVIDIA NVENC (with setup)
Unraidamd64Intel QSV, NVIDIA NVENC
Synologyamd64Intel QSV (varies by model, see below)

Hardware transcoding is enabled by default when a GPU device is available. You can control it via the admin UI under Settings > Transcoding, or with an environment variable:

environment:
- DUBBY_GPU_ENABLED=true # default

Set to false to force software transcoding even when a GPU is available.

On some systems, the container user (UID 1000) may not have access to the GPU device. Check the device group on the host and pass it to Docker:

Terminal window
# Check the group IDs on your host
ls -la /dev/dri/renderD128
# crw-rw---- 1 root render 226, 128 ... /dev/dri/renderD128
# Pass the render group GID to Docker
docker run --group-add $(getent group render | cut -d: -f3) ...

In Docker Compose, use group_add:

services:
dubby:
group_add:
- '110' # render group GID — check your host

Ensure your host NVIDIA driver is recent enough to support the container’s CUDA libraries. Check with:

Terminal window
nvidia-smi # Check host driver version

The NVIDIA Container Toolkit requires a host driver that supports the container’s CUDA version. If you see errors about CUDA version incompatibility, update your host driver.

If hardware transcoding fails for a specific file, Dubby automatically falls back to software transcoding (libx264). This happens transparently — playback continues without interruption. Check the server logs for details:

Terminal window
docker logs dubby 2>&1 | grep -i "falling back\|libx264\|encoder failed"

If vainfo returns no profiles or an error:

  1. Verify /dev/dri/renderD128 exists inside the container: docker exec dubby ls /dev/dri/
  2. On AMD, ensure the host has Mesa VAAPI drivers installed (mesa-va-drivers)
  3. On Intel, ensure the host kernel supports your GPU — Intel Arc requires kernel 6.2+