Pick your Intel CPU generation and see which codecs its iGPU can decode and encode in hardware, plus a plain-English verdict on how it holds up as a Jellyfin transcoding box.
Select your CPU generation to see what it can transcode.
| Codec | Typically found in | Decode (input) | Encode (output) |
|---|
How to read the table
Decode is the input side: can the iGPU read this codec without waking the CPU? Encode is the output side: what Jellyfin re-compresses the stream into for the client (almost always H.264, which every generation with Quick Sync can produce).
The row that matters most is HEVC 10-bit (Main10): nearly all 4K HDR content uses it. Hardware decode of HEVC 10-bit is also what enables Jellyfin’s hardware tone mapping, which converts HDR to SDR so the picture doesn’t look washed out on non-HDR screens. That support arrived with 7th gen (Kaby Lake) in 2017, which is why used 8th/9th-gen office PCs and N100 mini PCs are such popular media-server picks.
Checking your hardware from the shell
# CPU model (the first digits of i5-8500 → 8th gen)
lscpu | grep "Model name"
# Confirm the iGPU render node exists
ls -l /dev/dri
# Full codec support report (Debian: apt install vainfo)
vainfo
vainfo is the ground truth: each VAProfile line it prints is a codec/mode your driver actually exposes. If vainfo shows VAProfileHEVCMain10 : VAEntrypointVLD, you have HEVC 10-bit decode.
Caveats worth knowing
- F-series CPUs (e.g. i5-9400F) have no iGPU: no Quick Sync at all, regardless of generation.
- Codec support listed here is the hardware ceiling; you still need the right driver (
intel-media-va-driver-non-freeon Debian) and, for tone mapping, the OpenCL runtime (intel-opencl-icd). - Some low-end Celerons/Pentiums within a generation ship cut-down iGPUs. When in doubt, run
vainfo.

How to pass the iGPU into an unprivileged Proxmox LXC and switch Jellyfin to hardware transcoding.

The complete Proxmox iGPU passthrough walkthrough, including driver setup and verifying transcodes actually hit the GPU.
