Skip to content
View in the app

A better way to browse. Learn more.

Unraid

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[Support] Human-126094 - docker templates

Featured Replies

  • Author
43 minutes ago, illrigger said:

It's better, but it's still failing.

It kinda seems like this wasn't a full rebase to Trixie, some of the errors I am seeing point to the driver base not being completely up to date:

root@Server:~# docker exec -it -u root x265-butler apt-get update

Hit:1 http://deb.debian.org/debian bookworm InRelease

Hit:2 http://deb.debian.org/debian bookworm-updates InRelease

I tried patching the running container to test some things, and found some missing components, but hit a wall.

Missing runtime librarieslibmfx-gen1.2 and libigfxcmrt7 are not installed. Without these the MFX session cannot initialize at all (MFX_ERR_DEVICE_FAILED: -9)

iHD driver version too old — Bookworm ships intel-media-va-driver-non-free 23.1.1, which predates reliable Arc support. Attempting to install Intel's current driver (25.2.4) from their Ubuntu repo fails due to libva ABI incompatibility with the Bookworm base

LIBVA_DRIVER_NAME not set — Without ENV LIBVA_DRIVER_NAME=iHD, the VA-API runtime doesn't know to use the iHD driver for Arc hardware

If you can validate the base is fully Debian 13, the following changes need to be put in the dockerfile to get it to work.

RUN apt-get update && apt-get install -y \

libmfx1 \

libmfx-gen1.2 \

libigfxcmrt7 \

intel-media-va-driver-non-free \

libva-drm2 \

libva2

ENV LIBVA_DRIVER_NAME=iHD


Thanks for digging into this — your instinct was right that something's off in the media stack, just not quite where it looked.

Two things are going on:

1. Your container is still on Bookworm because the image is stale, not because the rebase
didn't happen.

The published image really is on Debian 13 Trixie now — I just re-checked :latest (digest
sha256:93086026…b8b3f678) and it reports Debian GNU/Linux 13 (trixie) with
intel-media-va-driver-non-free 25.2.3. Your apt-get update showing bookworm means the running
container predates the v2.19.0 pull. Grab the current one first:

docker pull ghcr.io/masterjb/x265-butler:latest
docker restart x265-butler


2. You found a real gap — you're right that components are missing.
Even on the correct Trixie image, it ships the iHD VA-API driver but not the oneVPL GPU runtime
that QSV/MFX needs — which is exactly why you hit MFX_ERR_DEVICE_FAILED: -9. VA-API works, QSV
doesn't, because the runtime backing the MFX session isn't installed. Good catch.

This is already queued for the next release (v2.20.0): the image will bake in libmfx-gen1.2,
libvpl2, and libigfxcmrt7.

Workaround until then (after pulling the Trixie image above):

docker exec -u root x265-butler apt-get update
docker exec -u root x265-butler apt-get install -y libmfx-gen1.2 libvpl2 libigfxcmrt7
docker restart x265-butler


Heads-up: this lives inside the running container, so it gets wiped whenever the container is
recreated or auto-updated — treat it as a test to confirm QSV comes alive. The permanent fix is
the v2.20.0 image.

Two notes on your proposed patch: skip libmfx1 (that's the legacy MediaSDK 1.x runtime — it
doesn't support Arc/gen12+; libmfx-gen1.2 is the one you want), and you don't need
LIBVA_DRIVER_NAME=iHD — the entrypoint already auto-selects iHD on Intel GPUs via a PCI scan +
load-probe, and forcing it would break AMD/older-Intel setups.

If you run the workaround, a [Run test encode] report from your Arc card would be hugely
helpful to confirm the fix before it ships. 🙏

  • Replies 119
  • Views 4.6k
  • Created
  • Last Reply

Top Posters In This Topic

Most Popular Posts

  • illrigger
    illrigger

    I figured this out, the image doesn't have any drivers in it. From the console inside the container, run the following (assuming you are using Intel QuickSync): sed -i 's/Components: main/Components:

  • Human-126094
    Human-126094

    @tulathron Thanks for the report, all three issues have been scheduled for the next release. 1. statfs_failed:ENOENT on encode start encoder pre-flight stats the input file inside the container and

  • Human-126094
    Human-126094

    Thanks for digging into this — your instinct was right that something's off in the media stack, just not quite where it looked. Two things are going on: 1. Your container is still on Bookworm becaus

Posted Images

Hi with the workaround it works now with my iGPU (i5-14500T UHD Graphics 770) but I had to mount the cache directory manually( /mnt/cache I use ZFS, not an unraid array). There isn't an option in the setting to change this

And it would be great if the .json file from the job would be saved to the cache directory or config directory not to the library directory

## x265-butler diagnostics report

### App

- version: 2.19.0

- gitHash: 916e5484

- committedAt: 1779648576

- committedAtCET: 24.05.26, 20:49:36

### Runtime

- nodeVersion: v22.22.3

- platform: linux

- arch: x64

- uptimeSec: 102

- pid: 7

### Mounts

| path | readable | writable | error |

|---|---|---|---|

| /media | ✓ | ✗ | EACCES |

| /cache | ✓ | ✓ | |

| /config | ✓ | ✓ | |

| /mnt/user/jellyfin | ✓ | ✓ | |

### Devices

- DRI: /dev/dri/card0, /dev/dri/renderD128

- NVIDIA: none

### Encoders

- detected: vaapi, libx265

- detection warnings: none

### Active warnings

- ERROR mount:EACCES — /media readable=true writable=false error=EACCES

### Recent errors (in-memory, last ≤25)

no recent errors

### Onboarding

- completed: ✓

- hasShare: ✓

## Container Image

- OS: Debian GNU/Linux 13 (trixie)

- GLIBC: 2.41

- Intel Media Driver: Mesa Gallium driver 25.0.7-2 for AMD Radeon RX 550 / 550 Series (radeonsi, polaris12, ACO, DRM 3.64, 6.18.29-Unraid) (vainfo)

- libva: 2.22.0-3

- libdrm: 2.4.124-2

- ffmpeg version: N-124426-g5bbc00c05d-20260510

<details>

<summary>ffmpeg configuration flags</summary>

```

--prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-ffbuild-linux-gnu- --arch=x86_64 --target-os=linux --enable-gpl --enable-version3 --disable-debug --enable-iconv --enable-zlib --enable-libxml2 --enable-libsoxr --enable-openssl --enable-libvmaf --enable-fontconfig --enable-libharfbuzz --enable-libfreetype --enable-libfribidi --enable-vulkan --enable-libshaderc --enable-libvorbis --enable-libxcb --enable-xlib --enable-libpulse --enable-opencl --enable-gmp --enable-lzma --enable-liblcevc-dec --enable-amf --enable-libaom --enable-libaribb24 --enable-avisynth --enable-chromaprint --enable-libdav1d --enable-libdavs2 --enable-libdvdread --enable-libdvdnav --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --enable-libkvazaar --enable-libaribcaption --enable-libass --enable-libbluray --enable-libjxl --enable-libmp3lame --enable-libopus --enable-libplacebo --enable-librist --enable-libssh --enable-libtheora --enable-libvpx --enable-libwebp --enable-libzmq --enable-lv2 --enable-libvpl --enable-openal --enable-liboapv --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-librav1e --enable-librubberband --disable-schannel --enable-sdl2 --enable-libsnappy --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --enable-libdrm --enable-vaapi --enable-libvidstab --enable-libvvenc --enable-whisper --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-libs='-lgomp -ldl' --extra-ldflags=-pthread --extra-ldexeflags=-pie --cc=x86_64-ffbuild-linux-gnu-gcc --cxx=x86_64-ffbuild-linux-gnu-g++ --ar=x86_64-ffbuild-linux-gnu-gcc-ar --ranlib=x86_64-ffbuild-linux-gnu-gcc-ranlib --nm=x86_64-ffbuild-linux-gnu-gcc-nm --extra-version=20260510

```

</details>

## Blocklist Evaluation

<!-- Operator: paths below are verbatim. Redact mount/user prefixes before posting if sensitive. -->

- Total entries: 0

- Pattern cache: —

No recent evaluations.

## Slow Requests

No slow requests recorded (threshold: 1s).

## Slow Queries

No slow queries recorded (threshold: 100ms).

## Web Vitals

No web vitals recorded.

### Last test-encode (client UAT run)

- outcome: failed

- encoderPicked: hevc_vaapi

- durationMs: 20

- exitCode: 218

stderr:

```

Input #0, lavfi, from 'testsrc=size=320x240:rate=1:duration=5':

Duration: N/A, start: 0.000000, bitrate: N/A

Stream #0:0: Video: wrapped_avframe, rgb24, 320x240 [SAR 1:1 DAR 4:3], 1 fps, 1 tbr, 1 tbn

Stream mapping:

Stream #0:0 -> #0:0 (wrapped_avframe (native) -> hevc (hevc_vaapi))

Press [q] to stop, [?] for help

Impossible to convert between the formats supported by the filter 'Parsed_null_0' and the filter 'auto_scale_0'

Link 'Parsed_null_0.default' -> 'auto_scale_0.default':

Pixel formats:

src: rgb24

dst: rgb24

Link 'auto_scale_0.default' -> 'format.default':

Pixel formats:

src: yuv420p yuyv422 rgb24 bgr24 yuv422p yuv444p yuv410p yuv411p gray monow monob pal8 yuvj420p yuvj422p yuvj444p uyvy422 bgr8 bgr4 bgr4_byte rgb8 rgb4 rgb4_byte nv12 nv21 argb rgba abgr bgra gray16be gray16le yuv440p yuvj440p yuva420p rgb48be rgb48le rgb565be rgb565le rgb555be rgb555le bgr565be bgr565le bgr555be bgr555le yuv420p16le yuv420p16be yuv422p16le yuv422p16be yuv444p16le yuv444p16be rgb444le rgb444be bgr444le bgr444be ya8 bgr48be bgr48le yuv420p9be yuv420p9le yuv420p10be yuv420p10le yuv422p10be yuv422p10le yuv444p9be yuv444p9le yuv444p10be yuv444p10le yuv422p9be yuv422p9le gbrp gbrp9be gbrp9le gbrp10be gbrp10le gbrp16be gbrp16le yuva422p yuva444p yuva420p9be yuva420p9le yuva422p9be yuva422p9le yuva444p9be yuva444p9le yuva420p10be yuva420p10le yuva422p10be yuva422p10le yuva444p10be yuva444p10le yuva420p16be yuva420p16le yuva422p16be yuva422p16le yuva444p16be yuva444p16le xyz12le xyz12be nv16 nv20le nv20be rgba64be rgba64le bgra64be bgra64le yvyu422 ya16be ya16le gbrap gbrap16be gbrap16le 0rgb rgb0 0bgr bgr0 yuv420p12be yuv420p12le yuv420p14be yuv420p14le yuv422p12be yuv422p12le yuv422p14be yuv422p14le yuv444p12be yuv444p12le yuv444p14be yuv444p14le gbrp12be gbrp12le gbrp14be gbrp14le yuvj411p yuv440p10le yuv440p10be yuv440p12le yuv440p12be ayuv64le ayuv64be p010le p010be gbrap12be gbrap12le gbrap10be gbrap10le gray12be gray12le gray10be gray10le p016le p016be gray9be gray9le gbrpf32be gbrpf32le gbrapf32be gbrapf32le gray14be gray14le grayf32be grayf32le yuva422p12be yuva422p12le yuva444p12be yuva444p12le nv24 nv42 y210le x2rgb10le x2bgr10le p210be p210le p410be p410le p216be p216le p416be p416le vuya vuyx p012le p012be y212le xv30le xv36be xv36le p212be p212le p412be p412le gbrap14be gbrap14le ayuv uyva vyu444 v30xle y216le xv48be xv48le yuv444p10msbbe yuv444p10msble yuv444p12msbbe yuv444p12msble gbrp10msbbe gbrp10msble gbrp12msbbe gbrp12msble

dst: vaapi

[vf#0:0 @ 0x55eec63f4b00] Error reinitializing filters!

[vf#0:0 @ 0x55eec63f4b00] Task finished with error code: -38 (Function not implemented)

[vf#0:0 @ 0x55eec63f4b00] Terminating thread with return code -38 (Function not implemented)

[vost#0:0/hevc_vaapi @ 0x55eec63f3f80] [enc:hevc_vaapi @ 0x55eec63e3a80] Could not open encoder before EOF

[vost#0:0/hevc_vaapi @ 0x55eec63f3f80] Task finished with error code: -22 (Invalid argument)

[vost#0:0/hevc_vaapi @ 0x55eec63f3f80] Terminating thread with return code -22 (Invalid argument)

[out#0/null @ 0x55eec63f3c00] Nothing was written into output file, because at least one of its streams received no packets.

frame= 0 fps=0.0 q=0.0 Lsize= 0KiB time=N/A bitrate=N/A speed=N/A elapsed=0:00:00.00

Conversion failed!

```

Generated 2026-05-24T22:32:39.765Z

i cant get any encodes to work am i doing something wrong?

I got it working, it was only missing one final package!

Add the following to the dockerfile.

RUN apt-get update && apt-get install -y libmfx-gen1.2

I think this should resolve the MFX session -9 errors for all QSV hardware.

4 hours ago, rasalf said:

Hi with the workaround it works now with my iGPU (i5-14500T UHD Graphics 770) but I had to mount the cache directory manually( /mnt/cache I use ZFS, not an unraid array). There isn't an option in the setting to change this

I had to do this as well (the cache mount). The cache drive is mounted in a different path for me. Simple enough fix:

Add a new Path in the docker

Name: Cache
Containter Path: /mnt/cache/x265-butler
Host Path: <wherever you want the cache to be.>

I put it in /mnt/user/appdata/x265-butler/cache, since my appdata is on a ZRAM buffered enterprise SSD.

What would be a nice to have is to just replace the file, at the moment there needs to be a suffix for the compressed file.

And an option to delete an entry from the library. I have a few files with the tag "missing on disk", I haven't found an option to remove the entries.

And an option to clear the log.

But other than that, this is a great and helpful piece of software

Edited by rasalf

  • Author

🚀 v2.20.0 — Encoder-Robustness + Mount-Gate is live

ghcr.io/masterjb/x265-butler:2.20.0 and :latest are up. amd64-only image on a Debian 13 (Trixie) base.

Pull / upgrade:

docker pull ghcr.io/masterjb/x265-butler:latest

docker restart x265-butler

This release works through the QSV diagnostics report filed against v2.19.0 — the one where Intel QSV died with "Error creating MFX session: -9", the encoder list still claimed "detected: qsv" anyway, and a read-only output mount failed late with a bare /media permission error. Honest status on each:

ROOT CAUSE OF "MFX session: -9" — FIXED

The image shipped Intel's iHD VA-driver but NOT the oneVPL MFX runtime that QSV actually links against. That mismatch is precisely what -9 means. The image now bundles the oneVPL GPU-runtime:

• libmfx-gen1.2

• libvpl2

• libigfxcmrt7


A CI guard verifies these libraries are present in every build, and /diagnostics now reports the oneVPL runtime state so you can confirm it from inside the container.

🔍 NO MORE FALSE-POSITIVE "detected: qsv"

Detection no longer trusts the ffmpeg -encoders capability list alone. At boot each HW encoder runs a 1-frame testsrc probe-encode; an encoder is reported as detected ONLY if that probe exits 0. A codec that parses but can't actually encode is no longer offered to you. Cost is +1–3s per encoder at boot, budget-capped.

Escape hatch: set X265_PROBE_ENCODE_DISABLED=1 to revert to parse-only detection for exotic hardware where the probe yields a false negative. Restart required.

🔬 CRYPTIC HW-INIT ERRORS → PLAIN-LANGUAGE DIAGNOSIS

A 13-pattern stderr → diagnosis dictionary maps the opaque ffmpeg HW-init failures to a cause + next step, surfaced directly under the failed [Run test encode] result (EN + DE). No more pasting -9 into a search engine.

🧮 CPU / iGPU GENERATION ADVISORY

/proc/cpuinfo is matched against an embedded Intel gen-table — HEVC-QSV needs Skylake (gen 6)+, 10-bit needs Kaby Lake (gen 7)+. On older silicon the onboarding wizard now recommends the libx265 software fallback instead of letting you pick a QSV path the hardware can't deliver. Advisory only, no hard gate.


🔑 RENDER-NODE PERMISSION EVIDENCE

/diagnostics now reports, per /dev/dri/renderD\* device, its owning GID, whether the container process is a member, and whether it has read/write from the container's point of view — so a missing --group-add shows up as evidence, not a guess.

📁 OUTPUT-MOUNT WRITABLE-GATE IN ONBOARDING

The setup wizard now probes the chosen output path for writability AT THE CONTINUE STEP, not at the first encode. A non-writable path raises an amber warning with an override checkbox — no more late /media EACCES after setup is already done.

🟩 NVIDIA NVENC ONBOARDING HINT + COPY-BLOCK FIX

If the wizard finds no usable GPU but you actually run an NVIDIA card, the software-encoding step now shows the exact 3 container settings, each with its own copy button. This also fixes a live bug: the old copy-block shipped "--runtime=nvidia --gpus all" — --gpus all is compose/CLI syntax (not unRAID-native) and the two mandatory env-vars were missing. Each value now copies into the correct unRAID field (Extra Parameters vs. the two-input Variable form — Name and Value copy separately).


🟢 NVIDIA NVENC — HOST SETUP RECAP (applies to all versions)

If you run an NVIDIA card, NVENC needs the host driver (unRAID NVIDIA-Driver-Plugin or nvidia-container-toolkit) plus these on the container:

Extra Parameters:

--runtime=nvidia

Variables:

NVIDIA_VISIBLE_DEVICES = all

NVIDIA_DRIVER_CAPABILITIES = compute,video,utility

The "video" capability is the one that bites you: the runtime default is compute,utility and WITHOUT video the NVENC session fails to init even though nvidia-smi works fine. utility = the detection probe, compute = CUDA filters, video = NVENC itself.

Verify: docker exec x265-butler nvidia-smi -L → expect a "GPU 0: ..." line.

♻️ ROLLBACK

If v2.20.0 misbehaves on your hardware, roll back to the previous image:

docker stop x265-butler && docker rm x265-butler

docker pull ghcr.io/masterjb/x265-butler:2.19.0

If you've got Intel QSV hardware, a [Run test encode] + [Copy report] from /diagnostics after upgrading is the confirmation I'm after — I verified the runtime libs inside the container, but the report tells me your silicon actually encodes.

  • Author

🎬 x265-butler — what's coming next 🎬

@rasalf @illrigger @ASimpleSomething
Hey folks! Big thanks for all the feedback in here 🙏, it's shaping the next updates. Quick preview:

🔜 Next up (v2.21.0)

📁 Smarter cache path, auto-detects /mnt/cache, falls back to /config/cache if needed. Shows you which path it picked (and why). Already set a path? Nothing changes for you.
🛠️ VAAPI test-encode fix, squashed that annoying "-38" error.
🗑️ Delete library entries, including files gone from disk.
🧹 Clear log button, finally! 😅

💡 Heads up: Intel QSV runtime libs already shipped in v2.20.0, if you were waiting on those, they're live.

🧪 Coming after that, output options

📦 Sidecar handling, keep them beside the video (default), tuck them in a central folder, or turn them off.
♻️ In-place replace (opt-in), replace the original instead of writing a new .x265.mkv. Atomic + original goes to trash. Default stays as-is.

🟢 NVIDIA / NVENC users, your container needs:
--runtime=nvidia
NVIDIA_VISIBLE_DEVICES=all
NVIDIA_DRIVER_CAPABILITIES=compute,video,utility

⚠️ The video cap is mandatory, NVENC won't work without it!

More soon, keep the reports coming! 🚀

Unfortunately the v2.20.0 did nothing good for me and the QSV encoder and have to go back to the old version. Now the encoder is not detected and I have this error message

encoder · encoder_runtime_brokenqsv: d argument) [out#0/null @ 0x56509692ea40] Nothing was written into output file, because at least one of its streams received no packets. frame= 0 fps=0.0 q=0.0 Lsize= 0KiB time=N/A bitrate=N/A sp

With vainfo it is detected correctly and before that it could encode videos without the group-add(I have set the /dev/dri directory to chmod 777)

I have already tried to change the --group-add command and set the PGID env variable

I don't know if this helps but this is form the diagnostics page:

## x265-butler diagnostics report

### App
- version: `2.20.0`
- gitHash: `cdc8532c`
- committedAt: `1780166814`
- committedAtCET: `30.05.26, 20:46:54`

### Runtime
- nodeVersion: `v22.22.3`
- platform: `linux`
- arch: `x64`
- uptimeSec: 121
- pid: 7

### Mounts
| path | readable | writable | error |
|---|---|---|---|
| `/media` | ✓ | ✓ |  |
| `/cache` | ✓ | ✓ |  |
| `/config` | ✓ | ✓ |  |

### Devices
- DRI: `/dev/dri/card0`, `/dev/dri/renderD128`
- NVIDIA: _none_

### Encoders
- detected: `libx265`
- detection warnings:
  - `encoder_runtime_broken` — qsv: d argument) [out#0/null @ 0x55e289783a40] Nothing was written into output file, because at least one of its streams received no packets. frame= 0 fps=0.0 q=0.0 Lsize= 0KiB time=N/A bitrate=N/A speed=N/A elapsed=0:00:00.04 Conversion failed!
- probe outcomes:
  - `nvenc`: missing
  - `qsv`: compiled-in-broken — `d argument) [out#0/null @ 0x55e289783a40] Nothing was written into output file, because at least one of its streams received no packets. frame= 0 fps=0.0 q=0.0 Lsize= 0KiB time=N/A bitrate=N/A speed=N/A elapsed=0:00:00.04 Conversion failed!`
  - `vaapi`: missing
  - `libx265`: functional

### Active warnings
- **WARN** `encoder:encoder_runtime_broken` — qsv: d argument) [out#0/null @ 0x55e289783a40] Nothing was written into output file, because at least one of its streams received no packets. frame= 0 fps=0.0 q=0.0 Lsize= 0KiB time=N/A bitrate=N/A sp

### Recent errors (in-memory, last ≤25)
_no recent errors_

### Onboarding
- completed: ✓
- hasShare: ✓

## Container Image
- OS: Debian GNU/Linux 13 (trixie)
- GLIBC: 2.41
- Intel Media Driver: Intel iHD driver for Intel(R) Gen Graphics - 25.2.3 () (vainfo)
- libva: 2.22.0-3
- libdrm: 2.4.124-2
- oneVPL MFX runtime (libmfx-gen1.2): 25.1.4-1
- oneVPL dispatcher (libvpl2): 1:2.14.0-1+b1
- libigfxcmrt7: 25.2.3+dfsg1-1
- _(oneVPL versions report installed-package presence; runtime QSV-functionality is verified separately by the probe-encode — 23-04)_
- ffmpeg version: N-124426-g5bbc00c05d-20260510

<details>
<summary>ffmpeg configuration flags</summary>

```
--prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-ffbuild-linux-gnu- --arch=x86_64 --target-os=linux --enable-gpl --enable-version3 --disable-debug --enable-iconv --enable-zlib --enable-libxml2 --enable-libsoxr --enable-openssl --enable-libvmaf --enable-fontconfig --enable-libharfbuzz --enable-libfreetype --enable-libfribidi --enable-vulkan --enable-libshaderc --enable-libvorbis --enable-libxcb --enable-xlib --enable-libpulse --enable-opencl --enable-gmp --enable-lzma --enable-liblcevc-dec --enable-amf --enable-libaom --enable-libaribb24 --enable-avisynth --enable-chromaprint --enable-libdav1d --enable-libdavs2 --enable-libdvdread --enable-libdvdnav --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --enable-libkvazaar --enable-libaribcaption --enable-libass --enable-libbluray --enable-libjxl --enable-libmp3lame --enable-libopus --enable-libplacebo --enable-librist --enable-libssh --enable-libtheora --enable-libvpx --enable-libwebp --enable-libzmq --enable-lv2 --enable-libvpl --enable-openal --enable-liboapv --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-librav1e --enable-librubberband --disable-schannel --enable-sdl2 --enable-libsnappy --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --enable-libdrm --enable-vaapi --enable-libvidstab --enable-libvvenc --enable-whisper --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-libs='-lgomp -ldl' --extra-ldflags=-pthread --extra-ldexeflags=-pie --cc=x86_64-ffbuild-linux-gnu-gcc --cxx=x86_64-ffbuild-linux-gnu-g++ --ar=x86_64-ffbuild-linux-gnu-gcc-ar --ranlib=x86_64-ffbuild-linux-gnu-gcc-ranlib --nm=x86_64-ffbuild-linux-gnu-gcc-nm --extra-version=20260510
```

</details>

## CPU
- Vendor: GenuineIntel (Intel)
- Model name: Intel(R) Core(TM) i5-14500T
- CPUID family/model: 6 / 191
- Microarch: —
- Graphics gen: —
- HEVC-QSV (hardware): unknown
- _(HEVC-QSV reflects iGPU HARDWARE capability by the embedded gen-table; runtime QSV functionality is verified separately by the probe-encode — 23-04)_

## Blocklist Evaluation
<!-- Operator: paths below are verbatim. Redact mount/user prefixes before posting if sensitive. -->

- Total entries: 1
- Pattern cache: —

_No recent evaluations._

## Slow Requests

_No slow requests recorded (threshold: 1s)._

## Slow Queries

_No slow queries recorded (threshold: 100ms)._

## Web Vitals

_No web vitals recorded._

## DRI Render Devices

| Device | GID | Group | In group | R | W | Error |
|---|---|---|---|---|---|---|
| `/dev/dri/renderD128` | 18 | node | ✓ | ✓ | ✓ |  |

_Group name is container-side and informational; the numeric GID is authoritative. Membership counts the process primary GID (PGID) AND supplementary groups — fix via `PGID=<gid>` or `--group-add <gid>`._

### Last test-encode (client UAT run)

- outcome: `success`
- encoderPicked: `libx265`
- durationMs: 147
- exitCode: 0

**stderr:**
```
Input #0, lavfi, from 'testsrc=size=320x240:rate=1:duration=5':
  Duration: N/A, start: 0.000000, bitrate: N/A
  Stream #0:0: Video: wrapped_avframe, rgb24, 320x240 [SAR 1:1 DAR 4:3], 1 fps, 1 tbr, 1 tbn
Stream mapping:
  Stream #0:0 -> #0:0 (wrapped_avframe (native) -> hevc (libx265))
Press [q] to stop, [?] for help
x265 [info]: HEVC encoder version 4.1+241-cfee9638
x265 [info]: build info [Linux][GCC 15.2.0][64 bit] 8bit+10bit+12bit
x265 [info]: using cpu capabilities: MMX2 SSE2Fast LZCNT SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
x265 [warning]: halving the quality when psy-rd is enabled for 444 input. Setting cbQpOffset = 6 and crQpOffset = 6
x265 [info]: Main 4:4:4 profile, Level-2 (Main tier)
x265 [info]: Thread pool created using 20 threads
x265 [info]: Slices                              : 1
x265 [info]: frame threads / pool features       : 4 / wpp(4 rows)
x265 [warning]: Source height < 720p; disabling lookahead-slices
x265 [info]: Coding QT: max CU size, min CU size : 64 / 8
x265 [info]: Residual QT: max TU size, max depth : 32 / 1 inter / 1 intra
x265 [info]: ME / range / subpel / merge         : hex / 57 / 2 / 3
x265 [info]: Keyframe min / max / scenecut / bias  : 1 / 250 / 40 / 5.00 
x265 [info]: Cb/Cr QP Offset                     : 6 / 6
x265 [info]: Lookahead / bframes / badapt        : 20 / 4 / 2
x265 [info]: b-pyramid / weightp / weightb       : 1 / 1 / 0
x265 [info]: References / ref-limit  cu / depth  : 3 / off / on
x265 [info]: AQ: mode / str / qg-size / cu-tree  : 2 / 1.0 / 32 / 1
x265 [info]: Rate Control / qCompress            : CRF-28.0 / 0.60
x265 [info]: tools: rd=3 psy-rd=2.00 early-skip rskip mode=1 signhide tmvp
x265 [info]: tools: b-intra strong-intra-smoothing deblock sao
Output #0, null, to '/dev/null':
  Metadata:
    encoder         : Lavf62.15.100
  Stream #0:0: Video: hevc, gbrp(pc, gbr/unknown/unknown, progressive), 320x240 [SAR 1:1 DAR 4:3], q=2-31, 1 fps, 1 tbn
    Metadata:
      encoder         : Lavc62.30.100 libx265
    Side data:
      CPB properties: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
[out#0/null @ 0x55c19dd57c00] video:10KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
frame=    5 fps=0.0 q=25.8 Lsize=N/A time=00:00:03.00 bitrate=N/A speed=25.5x elapsed=0:00:00.11    
x265 [info]: frame I:      1, Avg QP:20.35  kb/s: 30.37   
x265 [info]: frame P:      2, Avg QP:22.61  kb/s: 10.22   
x265 [info]: frame B:      2, Avg QP:25.89  kb/s: 6.65    
x265 [info]: Weighted P-Frames: Y:0.0% UV:0.0%

encoded 5 frames in 0.07s (68.98 fps), 12.82 kb/s, Avg QP:23.47

```

_Generated 2026-05-31T11:30:45.085Z_
  • Author

🚀 v2.21.0 — Operator Quality-of-Life is live

ghcr.io/masterjb/x265-butler:2.21.0 and :latest are up. amd64-only image on a Debian 13 (Trixie) base.

Pull / upgrade:

docker pull ghcr.io/masterjb/x265-butler:latest
docker restart x265-butler

This is a quality-of-life pass on the rough edges around the encode pipeline — the pipeline itself is unchanged. Four fixes/features:

🟩 VAAPI TEST-ENCODE NO LONGER FAILS WITH A BOGUS -38
The /diagnostics [Run test encode] for VAAPI built its ffmpeg arguments differently from the real encode path, so it could fail with a misleading "Function not implemented (-38)" on hardware that actually works. The test-encode now uses the same codec block as a real job (-vaapi_device + -vf format=nv12,hwupload) — a green test now means a green encode, a red test means a real problem.

📁 CACHE PATH RESOLVES ITSELF
The staging cache no longer has to be configured by hand. At boot the app probes /mnt/cache for writability and uses it if present; otherwise it falls back to /config/cache. The effective path AND the reason it was chosen are now shown on /diagnostics and in Settings, and an explicit override still wins. If it falls back to /config/cache you get a space advisory so a small appdata share doesn't silently fill up.

🗑️ FORGET A LIBRARY ENTRY
Library rows can now be deleted — a row-only "forget" that drops the database entry without touching any file on disk. Mainly for entries whose source file is already gone (moved/deleted outside the app) that cluttered the list with no way to clear them. 2-step confirm with a 10-second undo, blocked while a job for that file is active.

🧹 CLEAR THE LOG
/logs now has a [Clear log] button. It empties the in-memory log buffer via a new DELETE /api/logs endpoint, with a 2-step arm→confirm and no undo — the buffer is in-memory, the wipe is not recoverable. The same buffer also backs the Diagnostics recent-errors, slow-requests and slow-queries views, so the button warns you those are cleared too.

🟢 NVIDIA NVENC — HOST SETUP RECAP (applies to all versions)
If you run an NVIDIA card, NVENC needs the host driver (unRAID NVIDIA-Driver-Plugin or nvidia-container-toolkit) plus these on the container:

Extra Parameters:
--runtime=nvidia

Variables:
NVIDIA_VISIBLE_DEVICES = all
NVIDIA_DRIVER_CAPABILITIES = compute,video,utility

The "video" capability is the one that bites you: the runtime default is compute,utility and WITHOUT video the NVENC session fails to init even though nvidia-smi works fine. utility = the detection probe, compute = CUDA filters, video = NVENC itself.

Verify: docker exec x265-butler nvidia-smi -L → expect a "GPU 0: ..." line.

♻️ ROLLBACK
If v2.21.0 misbehaves on your hardware, roll back to the previous image:

docker stop x265-butler && docker rm x265-butler
docker pull ghcr.io/masterjb/x265-butler:2.20.0

🔗 LINKS
Source: https://github.com/masterjb/x265-butler
Image: https://github.com/users/masterjb/packages/container/package/x265-butler

I dont know what to do to get my amd igpu to start working.

## x265-butler diagnostics report

### App
- version: `2.21.0`
- gitHash: `3c2c5e1e`
- committedAt: `1780234320`
- committedAtCET: `31.05.26, 15:32:00`

### Runtime
- nodeVersion: `v22.22.3`
- platform: `linux`
- arch: `x64`
- uptimeSec: 54
- pid: 7

### Mounts
| path | readable | writable | error |
|---|---|---|---|
| `/media` | ✓ | ✗ | EACCES |
| `/cache` | ✓ | ✓ |  |
| `/config` | ✓ | ✓ |  |

### Cache
- effectivePath: `/mnt/cache/x265-butler`
- resolution: `user-override`
- settingValue: `/mnt/cache/x265-butler`
- writable: ✗

### Devices
- DRI: `/dev/dri/card0`, `/dev/dri/renderD128`
- NVIDIA: _none_

### Encoders
- detected: `libx265`
- detection warnings:
  - `encoder_runtime_broken` — vaapi: d argument) [out#0/null @ 0x56555e645780] Nothing was written into output file, because at least one of its streams received no packets. frame= 0 fps=0.0 q=0.0 Lsize= 0KiB time=N/A bitrate=N/A speed=N/A elapsed=0:00:00.00 Conversion failed!
- probe outcomes:
  - `nvenc`: missing
  - `qsv`: missing
  - `vaapi`: compiled-in-broken — `d argument) [out#0/null @ 0x56555e645780] Nothing was written into output file, because at least one of its streams received no packets. frame= 0 fps=0.0 q=0.0 Lsize= 0KiB time=N/A bitrate=N/A speed=N/A elapsed=0:00:00.00 Conversion failed!`
  - `libx265`: functional

### Active warnings
- **WARN** `encoder:encoder_runtime_broken` — vaapi: d argument) [out#0/null @ 0x56555e645780] Nothing was written into output file, because at least one of its streams received no packets. frame= 0 fps=0.0 q=0.0 Lsize= 0KiB time=N/A bitrate=N/A 
- **ERROR** `mount:EACCES` — /media readable=true writable=false error=EACCES

### Recent errors (in-memory, last ≤25)
_no recent errors_

### Onboarding
- completed: ✓
- hasShare: ✓

## Container Image
- OS: Debian GNU/Linux 13 (trixie)
- GLIBC: 2.41
- Intel Media Driver: Mesa Gallium driver 25.0.7-2 for AMD Radeon Graphics (radeonsi, renoir, ACO, DRM 3.64, 6.18.33-Unraid) (vainfo)
- libva: 2.22.0-3
- libdrm: 2.4.124-2
- oneVPL MFX runtime (libmfx-gen1.2): 25.1.4-1
- oneVPL dispatcher (libvpl2): 1:2.14.0-1+b1
- libigfxcmrt7: 25.2.3+dfsg1-1
- _(oneVPL versions report installed-package presence; runtime QSV-functionality is verified separately by the probe-encode — 23-04)_
- ffmpeg version: N-124426-g5bbc00c05d-20260510

<details>
<summary>ffmpeg configuration flags</summary>

```
--prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-ffbuild-linux-gnu- --arch=x86_64 --target-os=linux --enable-gpl --enable-version3 --disable-debug --enable-iconv --enable-zlib --enable-libxml2 --enable-libsoxr --enable-openssl --enable-libvmaf --enable-fontconfig --enable-libharfbuzz --enable-libfreetype --enable-libfribidi --enable-vulkan --enable-libshaderc --enable-libvorbis --enable-libxcb --enable-xlib --enable-libpulse --enable-opencl --enable-gmp --enable-lzma --enable-liblcevc-dec --enable-amf --enable-libaom --enable-libaribb24 --enable-avisynth --enable-chromaprint --enable-libdav1d --enable-libdavs2 --enable-libdvdread --enable-libdvdnav --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --enable-libkvazaar --enable-libaribcaption --enable-libass --enable-libbluray --enable-libjxl --enable-libmp3lame --enable-libopus --enable-libplacebo --enable-librist --enable-libssh --enable-libtheora --enable-libvpx --enable-libwebp --enable-libzmq --enable-lv2 --enable-libvpl --enable-openal --enable-liboapv --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-librav1e --enable-librubberband --disable-schannel --enable-sdl2 --enable-libsnappy --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --enable-libdrm --enable-vaapi --enable-libvidstab --enable-libvvenc --enable-whisper --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-libs='-lgomp -ldl' --extra-ldflags=-pthread --extra-ldexeflags=-pie --cc=x86_64-ffbuild-linux-gnu-gcc --cxx=x86_64-ffbuild-linux-gnu-g++ --ar=x86_64-ffbuild-linux-gnu-gcc-ar --ranlib=x86_64-ffbuild-linux-gnu-gcc-ranlib --nm=x86_64-ffbuild-linux-gnu-gcc-nm --extra-version=20260510
```

</details>

## CPU
- Vendor: AuthenticAMD
- Model name: AMD Ryzen 7 5825U with Radeon Graphics
- CPUID family/model: 25 / 80
- Microarch: —
- Graphics gen: —
- HEVC-QSV (hardware): unknown
- _(HEVC-QSV reflects iGPU HARDWARE capability by the embedded gen-table; runtime QSV functionality is verified separately by the probe-encode — 23-04)_

## Blocklist Evaluation
<!-- Operator: paths below are verbatim. Redact mount/user prefixes before posting if sensitive. -->

- Total entries: 0
- Pattern cache: —

_No recent evaluations._

## Slow Requests

_No slow requests recorded (threshold: 1s)._

## Slow Queries

_No slow queries recorded (threshold: 100ms)._

## Web Vitals

_No web vitals recorded._

## DRI Render Devices

| Device | GID | Group | In group | R | W | Error |
|---|---|---|---|---|---|---|
| `/dev/dri/renderD128` | 18 | node | ✓ | ✓ | ✓ |  |

_Group name is container-side and informational; the numeric GID is authoritative. Membership counts the process primary GID (PGID) AND supplementary groups — fix via `PGID=<gid>` or `--group-add <gid>`._

### Last test-encode (client UAT run)

- outcome: `success`
- encoderPicked: `libx265`
- durationMs: 157
- exitCode: 0

**stderr:**
```
Input #0, lavfi, from 'testsrc=size=320x240:rate=1:duration=5':
  Duration: N/A, start: 0.000000, bitrate: N/A
  Stream #0:0: Video: wrapped_avframe, rgb24, 320x240 [SAR 1:1 DAR 4:3], 1 fps, 1 tbr, 1 tbn
Stream mapping:
  Stream #0:0 -> #0:0 (wrapped_avframe (native) -> hevc (libx265))
Press [q] to stop, [?] for help
x265 [info]: HEVC encoder version 4.1+241-cfee9638
x265 [info]: build info [Linux][GCC 15.2.0][64 bit] 8bit+10bit+12bit
x265 [info]: using cpu capabilities: MMX2 SSE2Fast LZCNT SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
x265 [warning]: halving the quality when psy-rd is enabled for 444 input. Setting cbQpOffset = 6 and crQpOffset = 6
x265 [info]: Main 4:4:4 profile, Level-2 (Main tier)
x265 [info]: Thread pool created using 16 threads
x265 [info]: Slices                              : 1
x265 [info]: frame threads / pool features       : 4 / wpp(4 rows)
x265 [warning]: Source height < 720p; disabling lookahead-slices
x265 [info]: Coding QT: max CU size, min CU size : 64 / 8
x265 [info]: Residual QT: max TU size, max depth : 32 / 1 inter / 1 intra
x265 [info]: ME / range / subpel / merge         : hex / 57 / 2 / 3
x265 [info]: Keyframe min / max / scenecut / bias  : 1 / 250 / 40 / 5.00 
x265 [info]: Cb/Cr QP Offset                     : 6 / 6
x265 [info]: Lookahead / bframes / badapt        : 20 / 4 / 2
x265 [info]: b-pyramid / weightp / weightb       : 1 / 1 / 0
x265 [info]: References / ref-limit  cu / depth  : 3 / off / on
x265 [info]: AQ: mode / str / qg-size / cu-tree  : 2 / 1.0 / 32 / 1
x265 [info]: Rate Control / qCompress            : CRF-28.0 / 0.60
x265 [info]: tools: rd=3 psy-rd=2.00 early-skip rskip mode=1 signhide tmvp
x265 [info]: tools: b-intra strong-intra-smoothing deblock sao
Output #0, null, to '/dev/null':
  Metadata:
    encoder         : Lavf62.15.100
  Stream #0:0: Video: hevc, gbrp(pc, gbr/unknown/unknown, progressive), 320x240 [SAR 1:1 DAR 4:3], q=2-31, 1 fps, 1 tbn
    Metadata:
      encoder         : Lavc62.30.100 libx265
    Side data:
      CPB properties: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
[out#0/null @ 0x55c41ed16d40] video:10KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
frame=    5 fps=0.0 q=25.8 Lsize=N/A time=00:00:03.00 bitrate=N/A speed=25.5x elapsed=0:00:00.11    
x265 [info]: frame I:      1, Avg QP:20.35  kb/s: 30.37   
x265 [info]: frame P:      2, Avg QP:22.61  kb/s: 10.22   
x265 [info]: frame B:      2, Avg QP:25.89  kb/s: 6.65    
x265 [info]: Weighted P-Frames: Y:0.0% UV:0.0%

encoded 5 frames in 0.08s (60.07 fps), 12.82 kb/s, Avg QP:23.47

```

_Generated 2026-05-31T18:07:51.176Z_

QSV is no longer being detected on Arc/Core Ultra.

Additional finding: ffmpeg at /usr/local/bin/ffmpeg is not linked against libmfx or libvpl (ldd confirms no MFX linkage). The QSV encoders are present but the oneVPL GPU runtime path is unavailable. ffmpeg needs to be rebuilt with --enable-libmfx or --enable-libvpl for Intel Arc QSV to function correctly via the oneVPL runtime.

Confirmed via:

bash

ldd /usr/local/bin/ffmpeg | grep -iE "mfx|vpl"  # returns nothing
  • Author
34 minutes ago, illrigger said:

QSV is no longer being detected on Arc/Core Ultra.

Additional finding: ffmpeg at /usr/local/bin/ffmpeg is not linked against libmfx or libvpl (ldd confirms no MFX linkage). The QSV encoders are present but the oneVPL GPU runtime path is unavailable. ffmpeg needs to be rebuilt with --enable-libmfx or --enable-libvpl for Intel Arc QSV to function correctly via the oneVPL runtime.

Confirmed via:

bash

ldd /usr/local/bin/ffmpeg | grep -iE "mfx|vpl"  # returns nothing


Thanks for the detailed report. Before I rebuild anything I need to pin the exact layer, because the fix differs a lot depending on one command.


ABOUT THE ldd CHECK

The ffmpeg in the image is a BtbN static build. On a static build the oneVPL / libmfx dispatcher is linked into the binary, not loaded as a shared library, so:

ldd /usr/local/bin/ffmpeg | grep -iE "mfx|vpl"

returns nothing even on a fully working QSV build. ldd only lists dynamic libraries, so that empty result can't tell us whether QSV is compiled in. The build config can.


Could you paste the raw output of these?

1) BUILD CONFIG (the deciding line)

docker exec x265-butler ffmpeg -hide_banner -buildconf | grep -iE "libvpl|libmfx|vaapi"

I want to see --enable-libvpl (new oneVPL API, supports Arc / Core Ultra) vs --enable-libmfx (legacy MediaSDK, no Arc support). They are mutually exclusive.


2) ENCODER REGISTERED?

docker exec x265-butler ffmpeg -hide_banner -encoders | grep qsv


3) THE ACTUAL FAILURE (what the app probe runs internally)

docker exec x265-butler ffmpeg -loglevel verbose -init_hw_device qsv=hw -f lavfi -i nullsrc=s=64x64 -frames:v 1 -c:v hevc_qsv -f null - 2>&1 | tail -40


4) GPU RUNTIME VIEW

docker exec x265-butler vainfo --display drm 2>&1 | head -30

docker exec x265-butler sh -c 'ls -l /dev/dri && getent group render video'


5) HARDWARE / HOST

CPU + GPU model (e.g. Core Ultra 7 155H, Arc A770, Arc B580), unRAID version + kernel (uname -r), and your container --device lines.


WHY

v2.22.0 fixed a different QSV problem one layer up (a bad ffmpeg option). Yours is the runtime/driver layer. If command 1 shows libvpl, the binary is fine and the in-container Intel runtime is probably too old for Arc / Core Ultra, so I bake a newer one (no ffmpeg rebuild). If it shows libmfx, you're right and I switch to a libvpl build. I don't have Arc hardware to reproduce, so your paste is what lets me ship the correct fix instead of guessing. Thanks.

  • Author
2 hours ago, Urbies said:

I dont know what to do to get my amd igpu to start working.

## x265-butler diagnostics report

### App
- version: `2.21.0`
- gitHash: `3c2c5e1e`
- committedAt: `1780234320`
- committedAtCET: `31.05.26, 15:32:00`

### Runtime
- nodeVersion: `v22.22.3`
- platform: `linux`
- arch: `x64`
- uptimeSec: 54
- pid: 7

### Mounts
| path | readable | writable | error |
|---|---|---|---|
| `/media` | ✓ | ✗ | EACCES |
| `/cache` | ✓ | ✓ |  |
| `/config` | ✓ | ✓ |  |

### Cache
- effectivePath: `/mnt/cache/x265-butler`
- resolution: `user-override`
- settingValue: `/mnt/cache/x265-butler`
- writable: ✗

### Devices
- DRI: `/dev/dri/card0`, `/dev/dri/renderD128`
- NVIDIA: _none_

### Encoders
- detected: `libx265`
- detection warnings:
  - `encoder_runtime_broken` — vaapi: d argument) [out#0/null @ 0x56555e645780] Nothing was written into output file, because at least one of its streams received no packets. frame= 0 fps=0.0 q=0.0 Lsize= 0KiB time=N/A bitrate=N/A speed=N/A elapsed=0:00:00.00 Conversion failed!
- probe outcomes:
  - `nvenc`: missing
  - `qsv`: missing
  - `vaapi`: compiled-in-broken — `d argument) [out#0/null @ 0x56555e645780] Nothing was written into output file, because at least one of its streams received no packets. frame= 0 fps=0.0 q=0.0 Lsize= 0KiB time=N/A bitrate=N/A speed=N/A elapsed=0:00:00.00 Conversion failed!`
  - `libx265`: functional

### Active warnings
- **WARN** `encoder:encoder_runtime_broken` — vaapi: d argument) [out#0/null @ 0x56555e645780] Nothing was written into output file, because at least one of its streams received no packets. frame= 0 fps=0.0 q=0.0 Lsize= 0KiB time=N/A bitrate=N/A 
- **ERROR** `mount:EACCES` — /media readable=true writable=false error=EACCES

### Recent errors (in-memory, last ≤25)
_no recent errors_

### Onboarding
- completed: ✓
- hasShare: ✓

## Container Image
- OS: Debian GNU/Linux 13 (trixie)
- GLIBC: 2.41
- Intel Media Driver: Mesa Gallium driver 25.0.7-2 for AMD Radeon Graphics (radeonsi, renoir, ACO, DRM 3.64, 6.18.33-Unraid) (vainfo)
- libva: 2.22.0-3
- libdrm: 2.4.124-2
- oneVPL MFX runtime (libmfx-gen1.2): 25.1.4-1
- oneVPL dispatcher (libvpl2): 1:2.14.0-1+b1
- libigfxcmrt7: 25.2.3+dfsg1-1
- _(oneVPL versions report installed-package presence; runtime QSV-functionality is verified separately by the probe-encode — 23-04)_
- ffmpeg version: N-124426-g5bbc00c05d-20260510

<details>
<summary>ffmpeg configuration flags</summary>

```
--prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-ffbuild-linux-gnu- --arch=x86_64 --target-os=linux --enable-gpl --enable-version3 --disable-debug --enable-iconv --enable-zlib --enable-libxml2 --enable-libsoxr --enable-openssl --enable-libvmaf --enable-fontconfig --enable-libharfbuzz --enable-libfreetype --enable-libfribidi --enable-vulkan --enable-libshaderc --enable-libvorbis --enable-libxcb --enable-xlib --enable-libpulse --enable-opencl --enable-gmp --enable-lzma --enable-liblcevc-dec --enable-amf --enable-libaom --enable-libaribb24 --enable-avisynth --enable-chromaprint --enable-libdav1d --enable-libdavs2 --enable-libdvdread --enable-libdvdnav --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --enable-libkvazaar --enable-libaribcaption --enable-libass --enable-libbluray --enable-libjxl --enable-libmp3lame --enable-libopus --enable-libplacebo --enable-librist --enable-libssh --enable-libtheora --enable-libvpx --enable-libwebp --enable-libzmq --enable-lv2 --enable-libvpl --enable-openal --enable-liboapv --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-librav1e --enable-librubberband --disable-schannel --enable-sdl2 --enable-libsnappy --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --enable-libdrm --enable-vaapi --enable-libvidstab --enable-libvvenc --enable-whisper --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-libs='-lgomp -ldl' --extra-ldflags=-pthread --extra-ldexeflags=-pie --cc=x86_64-ffbuild-linux-gnu-gcc --cxx=x86_64-ffbuild-linux-gnu-g++ --ar=x86_64-ffbuild-linux-gnu-gcc-ar --ranlib=x86_64-ffbuild-linux-gnu-gcc-ranlib --nm=x86_64-ffbuild-linux-gnu-gcc-nm --extra-version=20260510
```

</details>

## CPU
- Vendor: AuthenticAMD
- Model name: AMD Ryzen 7 5825U with Radeon Graphics
- CPUID family/model: 25 / 80
- Microarch: —
- Graphics gen: —
- HEVC-QSV (hardware): unknown
- _(HEVC-QSV reflects iGPU HARDWARE capability by the embedded gen-table; runtime QSV functionality is verified separately by the probe-encode — 23-04)_

## Blocklist Evaluation
<!-- Operator: paths below are verbatim. Redact mount/user prefixes before posting if sensitive. -->

- Total entries: 0
- Pattern cache: —

_No recent evaluations._

## Slow Requests

_No slow requests recorded (threshold: 1s)._

## Slow Queries

_No slow queries recorded (threshold: 100ms)._

## Web Vitals

_No web vitals recorded._

## DRI Render Devices

| Device | GID | Group | In group | R | W | Error |
|---|---|---|---|---|---|---|
| `/dev/dri/renderD128` | 18 | node | ✓ | ✓ | ✓ |  |

_Group name is container-side and informational; the numeric GID is authoritative. Membership counts the process primary GID (PGID) AND supplementary groups — fix via `PGID=<gid>` or `--group-add <gid>`._

### Last test-encode (client UAT run)

- outcome: `success`
- encoderPicked: `libx265`
- durationMs: 157
- exitCode: 0

**stderr:**
```
Input #0, lavfi, from 'testsrc=size=320x240:rate=1:duration=5':
  Duration: N/A, start: 0.000000, bitrate: N/A
  Stream #0:0: Video: wrapped_avframe, rgb24, 320x240 [SAR 1:1 DAR 4:3], 1 fps, 1 tbr, 1 tbn
Stream mapping:
  Stream #0:0 -> #0:0 (wrapped_avframe (native) -> hevc (libx265))
Press [q] to stop, [?] for help
x265 [info]: HEVC encoder version 4.1+241-cfee9638
x265 [info]: build info [Linux][GCC 15.2.0][64 bit] 8bit+10bit+12bit
x265 [info]: using cpu capabilities: MMX2 SSE2Fast LZCNT SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
x265 [warning]: halving the quality when psy-rd is enabled for 444 input. Setting cbQpOffset = 6 and crQpOffset = 6
x265 [info]: Main 4:4:4 profile, Level-2 (Main tier)
x265 [info]: Thread pool created using 16 threads
x265 [info]: Slices                              : 1
x265 [info]: frame threads / pool features       : 4 / wpp(4 rows)
x265 [warning]: Source height < 720p; disabling lookahead-slices
x265 [info]: Coding QT: max CU size, min CU size : 64 / 8
x265 [info]: Residual QT: max TU size, max depth : 32 / 1 inter / 1 intra
x265 [info]: ME / range / subpel / merge         : hex / 57 / 2 / 3
x265 [info]: Keyframe min / max / scenecut / bias  : 1 / 250 / 40 / 5.00 
x265 [info]: Cb/Cr QP Offset                     : 6 / 6
x265 [info]: Lookahead / bframes / badapt        : 20 / 4 / 2
x265 [info]: b-pyramid / weightp / weightb       : 1 / 1 / 0
x265 [info]: References / ref-limit  cu / depth  : 3 / off / on
x265 [info]: AQ: mode / str / qg-size / cu-tree  : 2 / 1.0 / 32 / 1
x265 [info]: Rate Control / qCompress            : CRF-28.0 / 0.60
x265 [info]: tools: rd=3 psy-rd=2.00 early-skip rskip mode=1 signhide tmvp
x265 [info]: tools: b-intra strong-intra-smoothing deblock sao
Output #0, null, to '/dev/null':
  Metadata:
    encoder         : Lavf62.15.100
  Stream #0:0: Video: hevc, gbrp(pc, gbr/unknown/unknown, progressive), 320x240 [SAR 1:1 DAR 4:3], q=2-31, 1 fps, 1 tbn
    Metadata:
      encoder         : Lavc62.30.100 libx265
    Side data:
      CPB properties: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
[out#0/null @ 0x55c41ed16d40] video:10KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
frame=    5 fps=0.0 q=25.8 Lsize=N/A time=00:00:03.00 bitrate=N/A speed=25.5x elapsed=0:00:00.11    
x265 [info]: frame I:      1, Avg QP:20.35  kb/s: 30.37   
x265 [info]: frame P:      2, Avg QP:22.61  kb/s: 10.22   
x265 [info]: frame B:      2, Avg QP:25.89  kb/s: 6.65    
x265 [info]: Weighted P-Frames: Y:0.0% UV:0.0%

encoded 5 frames in 0.08s (60.07 fps), 12.82 kb/s, Avg QP:23.47

```

_Generated 2026-05-31T18:07:51.176Z_


@Urbies Thanks for the report.


First: your chip is AMD (Ryzen 7 5825U, Radeon/Vega). That means QSV and NVENC are Intel/NVIDIA-only and will always show as "missing" on your box — that's expected, not the bug. The path you want is VAAPI (hevc_vaapi) on the Mesa radeonsi driver, and that's exactly the one failing.


The diagnostics report truncates the failure to "d argument)", which is the tail of "(Invalid argument)". The important part — which ffmpeg option the AMD driver rejected — got cut off before that. I can't pin the fix without the full line, and I don't have AMD hardware to reproduce, so a few raw pastes from inside the container will let me ship the correct fix instead of guessing.


1) DOES YOUR iGPU EXPOSE HEVC ENCODE AT ALL

docker exec x265-butler vainfo --display drm 2>&1 | grep -iE "HEVC|Enc"

I want to see a line like "VAProfileHEVCMain : VAEntrypointEncSlice". If HEVC EncSlice is absent, the Mesa build/firmware on your box can't HEVC-encode and no app change helps — we'd know immediately.


2) THE FULL, UNTRUNCATED PROBE ERROR (the deciding one)

docker exec x265-butler ffmpeg -hide_banner -loglevel verbose -vaapi_device /dev/dri/renderD128 -f lavfi -i testsrc=size=320x240:rate=1:duration=1 -vf format=nv12,hwupload -c:v hevc_vaapi -preset slow -rc_mode CQP -qp 28 -compression_level 1 -frames:v 1 -f null - 2>&1 | tail -40

This is byte-for-byte what the app probe runs. Paste the whole tail — the line ending in "(Invalid argument)" is what I need.


3) MINIMAL BISECT (strips preset + rc_mode + compression_level)

docker exec x265-butler ffmpeg -hide_banner -vaapi_device /dev/dri/renderD128 -f lavfi -i testsrc=size=320x240:rate=1:duration=1 -vf format=nv12,hwupload -c:v hevc_vaapi -qp 28 -frames:v 1 -f null - 2>&1 | tail -40

If this one succeeds, one of the three options the app adds is what your driver rejects — and I drop it from the AMD path.


4) WHAT YOUR DRIVER ACCEPTS

docker exec x265-butler ffmpeg -hide_banner -h encoder=hevc_vaapi 2>&1 | head -60


WHY

v2.22.0 fixed a similar problem on the Intel/QSV side (a single bad ffmpeg option the new driver rejected). Yours looks like the same class of bug one encoder over — a VAAPI option AMD's driver won't take — but the truncated log hides which one. Commands 2 and 3 pin it exactly.


One more thing, unrelated to the GPU: your report shows /media as readable but NOT writable (EACCES), and your cache path /mnt/cache/x265-butler as not writable. Even once VAAPI works, encodes will fail to write output until those are fixed. Check that your container has write access to the /media share and that the cache path you set in Settings points at a path that's actually mounted writable inside the container. Happy to help with those too once the GPU side is sorted.

  • Author

🚀 v2.22.0 — QSV Restore + Diagnostics Excerpt Fix is live

ghcr.io/masterjb/x265-butler:2.22.0 and :latest are up. amd64-only image on a Debian 13 (Trixie) base.

Pull / upgrade:

docker pull ghcr.io/masterjb/x265-butler:latest
docker restart x265-butler

This fixes Intel QuickSync (QSV) HEVC encoding, which was broken on v2.20.0. Thanks to the forum report that surfaced it.

🔧 WHAT CHANGED
• QSV restored: the QSV profile was still passing the Intel MSDK-only "look_ahead" option, which the current oneVPL/libvpl runtime rejects with "(Invalid argument)". That aborted the encode AND the detection probe, so QSV got gated out and you were pointed at hardware / pass-through problems that weren't real. Removed it, QSV encodes again. libx265 / NVENC / VAAPI are untouched.
• Better diagnosis: the manual Test Encode on the /diagnostics page now recognises this whole class of encoder-option rejections and says "the encoder rejected an ffmpeg option, NOT a hardware fault" instead of the misleading "check render group / GPU pass-through" hint. Real hardware faults still keep the hardware hint. EN + DE.
• Cleaner failure excerpts: encoder-probe failure snippets on the diagnostics page now strip ffmpeg muxer/progress boilerplate so you see the actual error line.

No new dependencies, no migrations, no config changes. Just pull and restart.

🟢 NVIDIA NVENC, HOST SETUP RECAP (applies to all versions)
If you run an NVIDIA card, NVENC needs the host driver (unRAID NVIDIA-Driver-Plugin or nvidia-container-toolkit) plus these on the container:

Extra Parameters:
--runtime=nvidia

Variables:
NVIDIA_VISIBLE_DEVICES = all
NVIDIA_DRIVER_CAPABILITIES = compute,video,utility

The "video" capability is the one that bites you: the runtime default is compute,utility and WITHOUT video the NVENC session fails to init even though nvidia-smi works fine. utility = the detection probe, compute = CUDA filters, video = NVENC itself.

Verify: docker exec x265-butler nvidia-smi -L → expect a "GPU 0: ..." line.

♻️ ROLLBACK
If v2.22.0 misbehaves on your hardware, roll back to the previous image:

docker stop x265-butler && docker rm x265-butler
docker pull ghcr.io/masterjb/x265-butler:2.21.0

The QSV renderer is still broken in the new update

## x265-butler diagnostics report
### App
- version: 2.22.0
- gitHash: 4cc36c7e
- committedAt: 1780257595
- committedAtCET: 31.05.26, 21:59:55
### Runtime
- nodeVersion: v22.22.3
- platform: linux
- arch: x64
- uptimeSec: 1132
- pid: 7
### Mounts
| path | readable | writable | error |
|---|---|---|---|
| /media | ✓ | ✓ |  |
| /cache | ✓ | ✓ |  |
| /config | ✓ | ✓ |  |
### Cache
- effectivePath: /mnt/cache/x265-butler
- resolution: user-override
- settingValue: /mnt/cache/x265-butler
- writable: ✓
### Devices
- DRI: /dev/dri/card0, /dev/dri/renderD128
- NVIDIA: _none_
### Encoders
- detected: libx265
- detection warnings:
  - encoder_runtime_broken — qsv: v @ 0x55e087936a80] Could not open encoder before EOF [vost#0:0/hevc_qsv @ 0x55e087947f80] Task finished with error code: -22 (Invalid argument) [vost#0:0/hevc_qsv @ 0x55e087947f80] Terminating thread with return code -22 (Invalid argument)
- probe outcomes:
  - nvenc: missing
  - qsv: compiled-in-broken — v @ 0x55e087936a80] Could not open encoder before EOF [vost#0:0/hevc_qsv @ 0x55e087947f80] Task finished with error code: -22 (Invalid argument) [vost#0:0/hevc_qsv @ 0x55e087947f80] Terminating thread with return code -22 (Invalid argument)
  - vaapi: missing
  - libx265: functional
### Active warnings
- WARN encoder:encoder_runtime_broken — qsv: v @ 0x55e087936a80] Could not open encoder before EOF [vost#0:0/hevc_qsv @ 0x55e087947f80] Task finished with error code: -22 (Invalid argument) [vost#0:0/hevc_qsv @ 0x55e087947f80] Terminating t
### Recent errors (in-memory, last ≤25)
_no recent errors_
### Onboarding
- completed: ✓
- hasShare: ✓
## Container Image
- OS: Debian GNU/Linux 13 (trixie)
- GLIBC: 2.41
- Intel Media Driver: Intel iHD driver for Intel(R) Gen Graphics - 25.2.3 () (vainfo)
- libva: 2.22.0-3
- libdrm: 2.4.124-2
- oneVPL MFX runtime (libmfx-gen1.2): 25.1.4-1
- oneVPL dispatcher (libvpl2): 1:2.14.0-1+b1
- libigfxcmrt7: 25.2.3+dfsg1-1
- _(oneVPL versions report installed-package presence; runtime QSV-functionality is verified separately by the probe-encode — 23-04)_
- ffmpeg version: N-124426-g5bbc00c05d-20260510
<details>
<summary>ffmpeg configuration flags</summary>
```
--prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-ffbuild-linux-gnu- --arch=x86_64 --target-os=linux --enable-gpl --enable-version3 --disable-debug --enable-iconv --enable-zlib --enable-libxml2 --enable-libsoxr --enable-openssl --enable-libvmaf --enable-fontconfig --enable-libharfbuzz --enable-libfreetype --enable-libfribidi --enable-vulkan --enable-libshaderc --enable-libvorbis --enable-libxcb --enable-xlib --enable-libpulse --enable-opencl --enable-gmp --enable-lzma --enable-liblcevc-dec --enable-amf --enable-libaom --enable-libaribb24 --enable-avisynth --enable-chromaprint --enable-libdav1d --enable-libdavs2 --enable-libdvdread --enable-libdvdnav --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --enable-libkvazaar --enable-libaribcaption --enable-libass --enable-libbluray --enable-libjxl --enable-libmp3lame --enable-libopus --enable-libplacebo --enable-librist --enable-libssh --enable-libtheora --enable-libvpx --enable-libwebp --enable-libzmq --enable-lv2 --enable-libvpl --enable-openal --enable-liboapv --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-librav1e --enable-librubberband --disable-schannel --enable-sdl2 --enable-libsnappy --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --enable-libdrm --enable-vaapi --enable-libvidstab --enable-libvvenc --enable-whisper --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-libs='-lgomp -ldl' --extra-ldflags=-pthread --extra-ldexeflags=-pie --cc=x86_64-ffbuild-linux-gnu-gcc --cxx=x86_64-ffbuild-linux-gnu-g++ --ar=x86_64-ffbuild-linux-gnu-gcc-ar --ranlib=x86_64-ffbuild-linux-gnu-gcc-ranlib --nm=x86_64-ffbuild-linux-gnu-gcc-nm --extra-version=20260510
```
</details>
## CPU
- Vendor: GenuineIntel (Intel)
- Model name: Intel(R) Core(TM) i5-14500T
- CPUID family/model: 6 / 191
- Microarch: —
- Graphics gen: —
- HEVC-QSV (hardware): unknown
- _(HEVC-QSV reflects iGPU HARDWARE capability by the embedded gen-table; runtime QSV functionality is verified separately by the probe-encode — 23-04)_
## Blocklist Evaluation
<!-- Operator: paths below are verbatim. Redact mount/user prefixes before posting if sensitive. -->
- Total entries: 1
- Pattern cache: —
_No recent evaluations._
## Slow Requests
_No slow requests recorded (threshold: 1s)._
## Slow Queries
_No slow queries recorded (threshold: 100ms)._
## Web Vitals
_No web vitals recorded._
## DRI Render Devices
| Device | GID | Group | In group | R | W | Error |
|---|---|---|---|---|---|---|
| /dev/dri/renderD128 | 18 | node | ✓ | ✓ | ✓ |  |
_Group name is container-side and informational; the numeric GID is authoritative. Membership counts the process primary GID (PGID) AND supplementary groups — fix via PGID=<gid> or --group-add <gid>._
### Last test-encode (client UAT run)
- outcome: success
- encoderPicked: libx265
- durationMs: 143
- exitCode: 0
stderr:
```
Input #0, lavfi, from 'testsrc=size=320x240:rate=1:duration=5':
  Duration: N/A, start: 0.000000, bitrate: N/A
  Stream #0:0: Video: wrapped_avframe, rgb24, 320x240 [SAR 1:1 DAR 4:3], 1 fps, 1 tbr, 1 tbn
Stream mapping:
  Stream #0:0 -> #0:0 (wrapped_avframe (native) -> hevc (libx265))
Press [q] to stop, [?] for help
x265 [info]: HEVC encoder version 4.1+241-cfee9638
x265 [info]: build info [Linux][GCC 15.2.0][64 bit] 8bit+10bit+12bit
x265 [info]: using cpu capabilities: MMX2 SSE2Fast LZCNT SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
x265 [warning]: halving the quality when psy-rd is enabled for 444 input. Setting cbQpOffset = 6 and crQpOffset = 6
x265 [info]: Main 4:4:4 profile, Level-2 (Main tier)
x265 [info]: Thread pool created using 20 threads
x265 [info]: Slices                              : 1
x265 [info]: frame threads / pool features       : 4 / wpp(4 rows)
x265 [warning]: Source height < 720p; disabling lookahead-slices
x265 [info]: Coding QT: max CU size, min CU size : 64 / 8
x265 [info]: Residual QT: max TU size, max depth : 32 / 1 inter / 1 intra
x265 [info]: ME / range / subpel / merge         : hex / 57 / 2 / 3
x265 [info]: Keyframe min / max / scenecut / bias  : 1 / 250 / 40 / 5.00 
x265 [info]: Cb/Cr QP Offset                     : 6 / 6
x265 [info]: Lookahead / bframes / badapt        : 20 / 4 / 2
x265 [info]: b-pyramid / weightp / weightb       : 1 / 1 / 0
x265 [info]: References / ref-limit  cu / depth  : 3 / off / on
x265 [info]: AQ: mode / str / qg-size / cu-tree  : 2 / 1.0 / 32 / 1
x265 [info]: Rate Control / qCompress            : CRF-28.0 / 0.60
x265 [info]: tools: rd=3 psy-rd=2.00 early-skip rskip mode=1 signhide tmvp
x265 [info]: tools: b-intra strong-intra-smoothing deblock sao
Output #0, null, to '/dev/null':
  Metadata:
    encoder         : Lavf62.15.100
  Stream #0:0: Video: hevc, gbrp(pc, gbr/unknown/unknown, progressive), 320x240 [SAR 1:1 DAR 4:3], q=2-31, 1 fps, 1 tbn
    Metadata:
      encoder         : Lavc62.30.100 libx265
    Side data:
      CPB properties: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
[out#0/null @ 0x561799b40d40] video:10KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
frame=    5 fps=0.0 q=25.8 Lsize=N/A time=00:00:03.00 bitrate=N/A speed=26.9x elapsed=0:00:00.11    
x265 [info]: frame I:      1, Avg QP:20.35  kb/s: 30.37   
x265 [info]: frame P:      2, Avg QP:22.61  kb/s: 10.22   
x265 [info]: frame B:      2, Avg QP:25.89  kb/s: 6.65    
x265 [info]: Weighted P-Frames: Y:0.0% UV:0.0%
encoded 5 frames in 0.08s (63.07 fps), 12.82 kb/s, Avg QP:23.47
```
_Generated 2026-06-01T07:17:40.234Z_

the media mount i will fix agen later. did a clean wipe of the docker and all files befor i did post the diag.

1) DOES YOUR iGPU EXPOSE HEVC ENCODE AT ALL

docker exec x265-butler vainfo --display drm 2>&1 | grep -iE "HEVC|Enc"

VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice

VAProfileH264Main : VAEntrypointEncSlice

VAProfileH264High : VAEntrypointEncSlice

VAProfileHEVCMain : VAEntrypointVLD

VAProfileHEVCMain : VAEntrypointEncSlice

VAProfileHEVCMain10 : VAEntrypointVLD

VAProfileHEVCMain10 : VAEntrypointEncSlice

2) THE FULL, UNTRUNCATED PROBE ERROR (the deciding one)

docker exec x265-butler ffmpeg -hide_banner -loglevel verbose -vaapi_device /dev/dri/renderD128 -f lavfi -i testsrc=size=320x240:rate=1:duration=1 -vf format=nv12,hwupload -c:v hevc_vaapi -preset slow -rc_mode CQP -qp 28 -compression_level 1 -frames:v 1 -f null - 2>&1 | tail -40

[hevc_vaapi @ 0x5555c35b5400] Input surface format is nv12.

[hevc_vaapi @ 0x5555c35b5400] Using VAAPI profile VAProfileHEVCMain (17).

[hevc_vaapi @ 0x5555c35b5400] Using VAAPI entrypoint VAEntrypointEncSlice (6).

[hevc_vaapi @ 0x5555c35b5400] Using VAAPI render target format YUV420 (0x1).

[hevc_vaapi @ 0x5555c35b5400] Using CTU size 64x64, min CB size 8x8.

[hevc_vaapi @ 0x5555c35b5400] RC mode: CQP.

[hevc_vaapi @ 0x5555c35b5400] Block Level bitrate control: OFF.

[hevc_vaapi @ 0x5555c35b5400] RC quality: 28.

[hevc_vaapi @ 0x5555c35b5400] RC framerate: 1/1 (1.00 fps).

[hevc_vaapi @ 0x5555c35b5400] Driver does not report any additional prediction constraints.

[hevc_vaapi @ 0x5555c35b5400] Using intra and P-frames (supported references: 1 / 0).

[hevc_vaapi @ 0x5555c35b5400] All wanted packed headers available (wanted 0xd, found 0x1f).

[hevc_vaapi @ 0x5555c35b5400] Using level 2.

Output #0, null, to 'pipe:':

Metadata:

encoder : Lavf62.15.100

Stream #0:0: Video: hevc (Main), 1 reference frame, vaapi(tv, progressive), 320x240 [SAR 1:1 DAR 4:3], q=2-31, 1 fps, 1 tbn

Metadata:

encoder : Lavc62.30.100 hevc_vaapi

[out#0/null @ 0x5555c35b4c80] Starting thread...

[vost#0:0/hevc_vaapi @ 0x5555c35b5000] [enc:hevc_vaapi @ 0x5555c35b3500] Encoder thread received EOF

[vost#0:0/hevc_vaapi @ 0x5555c35b5000] Terminating thread with return code 0 (success)

[out#0/null @ 0x5555c35b4c80] All streams finished

[out#0/null @ 0x5555c35b4c80] Terminating thread with return code 0 (success)

[vist#0:0/wrapped_avframe @ 0x5555c35b4a80] [dec:wrapped_avframe @ 0x5555c35b7b80] Decoder thread received EOF packet

[vist#0:0/wrapped_avframe @ 0x5555c35b4a80] [dec:wrapped_avframe @ 0x5555c35b7b80] Decoder returned EOF, finishing

[auto_scale_0 @ 0x145c5c0058c0] [framesync @ 0x145c5c0059d0] Sync level 0

[vist#0:0/wrapped_avframe @ 0x5555c35b4a80] [dec:wrapped_avframe @ 0x5555c35b7b80] Terminating thread with return code 0 (success)

[vf#0:0 @ 0x5555c35b60c0] All consumers returned EOF

[vf#0:0 @ 0x5555c35b60c0] Terminating thread with return code 0 (success)

[out#0/null @ 0x5555c35b4c80] Output file #0 (pipe:):

[out#0/null @ 0x5555c35b4c80] Output stream #0:0 (video): 1 frames encoded; 1 packets muxed (2554 bytes);

[out#0/null @ 0x5555c35b4c80] Total: 1 packets (2554 bytes) muxed

[out#0/null @ 0x5555c35b4c80] video:2KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown

frame= 1 fps=0.0 q=-0.0 Lsize=N/A time=00:00:01.00 bitrate=N/A speed=35.7x elapsed=0:00:00.02

[in#0/lavfi @ 0x5555c35aee40] Input file #0 (testsrc=size=320x240:rate=1:duration=1):

[in#0/lavfi @ 0x5555c35aee40] Input stream #0:0 (video): 1 packets read (424 bytes); 1 frames decoded; 0 decode errors;

[in#0/lavfi @ 0x5555c35aee40] Total: 1 packets (424 bytes) demuxed

Exiting with exit code 0

3) MINIMAL BISECT (strips preset + rc_mode + compression_level)

docker exec x265-butler ffmpeg -hide_banner -vaapi_device /dev/dri/renderD128 -f lavfi -i testsrc=size=320x240:rate=1:duration=1 -vf format=nv12,hwupload -c:v hevc_vaapi -qp 28 -frames:v 1 -f null - 2>&1 | tail -40

Input #0, lavfi, from 'testsrc=size=320x240:rate=1:duration=1':

Duration: N/A, start: 0.000000, bitrate: N/A

Stream #0:0: Video: wrapped_avframe, rgb24, 320x240 [SAR 1:1 DAR 4:3], 1 fps, 1 tbr, 1 tbn

Stream mapping:

Stream #0:0 -> #0:0 (wrapped_avframe (native) -> hevc (hevc_vaapi))

Press [q] to stop, [?] for help

Output #0, null, to 'pipe:':

Metadata:

encoder : Lavf62.15.100

Stream #0:0: Video: hevc (Main), vaapi(tv, progressive), 320x240 [SAR 1:1 DAR 4:3], q=2-31, 1 fps, 1 tbn

Metadata:

encoder : Lavc62.30.100 hevc_vaapi

[out#0/null @ 0x55badb92edc0] video:2KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown

frame= 1 fps=0.0 q=-0.0 Lsize=N/A time=00:00:01.00 bitrate=N/A speed= 41x elapsed=0:00:00.02


4) WHAT YOUR DRIVER ACCEPTS

docker exec x265-butler ffmpeg -hide_banner -h encoder=hevc_vaapi 2>&1 | head -60

Encoder hevc_vaapi [H.265/HEVC (VAAPI)]:

General capabilities: dr1 delay hardware

Threading capabilities: none

Supported hardware devices: vaapi

Supported pixel formats: vaapi

h265_vaapi AVOptions:

-idr_interval <int> E..V....... Distance (in I-frames) between key frames (from 0 to INT_MAX) (default 0)

-b_depth <int> E..V....... Maximum B-frame reference depth (from 1 to INT_MAX) (default 1)

-async_depth <int> E..V....... Maximum processing parallelism. Increase this to improve single channel performance. (from 1 to 64) (default 2)

-low_power <boolean> E..V....... Use low-power encoding mode (only available on some platforms; may not support all encoding features) (default false)

-max_frame_size <int> E..V....... Maximum frame size (in bytes) (from 0 to 2.68435e+08) (default 0)

-rc_mode <int> E..V....... Set rate control mode (from 0 to 6) (default auto)

auto 0 E..V....... Choose mode automatically based on other parameters

CQP 1 E..V....... Constant-quality

CBR 2 E..V....... Constant-bitrate

VBR 3 E..V....... Variable-bitrate

ICQ 4 E..V....... Intelligent constant-quality

QVBR 5 E..V....... Quality-defined variable-bitrate

AVBR 6 E..V....... Average variable-bitrate

-blbrc <boolean> E..V....... Block level based bitrate control (default false)

-qp <int> E..V....... Constant QP (for P-frames; scaled by qfactor/qoffset for I/B) (from 0 to 52) (default 0)

-aud <boolean> E..V....... Include AUD (default false)

-profile <int> E..V....... Set profile (general_profile_idc) (from -99 to 255) (default -99)

main 1 E..V.......

main10 2 E..V.......

rext 4 E..V.......

-tier <int> E..V....... Set tier (general_tier_flag) (from 0 to 1) (default main)

main 0 E..V.......

high 1 E..V.......

-level <int> E..V....... Set level (general_level_idc) (from -99 to 255) (default -99)

1 30 E..V.......

2 60 E..V.......

2.1 63 E..V.......

3 90 E..V.......

3.1 93 E..V.......

4 120 E..V.......

4.1 123 E..V.......

5 150 E..V.......

5.1 153 E..V.......

5.2 156 E..V.......

6 180 E..V.......

6.1 183 E..V.......

6.2 186 E..V.......

-sei <flags> E..V....... Set SEI to include (default hdr+a53_cc)

hdr E..V....... Include HDR metadata for mastering display colour volume and content light level information

a53_cc E..V....... Include A/53 caption data

-tiles <image_size> E..V....... Tile columns x rows

Exiting with exit code 0

  • Author

🚀 v2.23.0 — Output Strategy: Sidecar Location + In-Place Replace is live

ghcr.io/masterjb/x265-butler:2.23.0 and :latest are up. amd64-only image on a Debian 13 (Trixie) base.

Pull / upgrade:
docker pull ghcr.io/masterjb/x265-butler:latest
docker restart x265-butler

This adds two opt-in Output settings for people running Sonarr/Radarr-managed libraries who don't want the "movie.x265.mkv" siblings and "movie.x265.json" sidecars cluttering things up. Defaults are byte-identical to v2.22.x — nothing changes until you opt in. Thanks to the forum request that drove it.

🔧 WHAT CHANGED
• Sidecar location is now selectable (Output → Sidecar location): "beside" (default, sidecar next to the file as before), "off" (no sidecar at all), or "central" (sidecars go to a mirrored tree under /config instead of into your media library). "central" works even on a read-only media mount, and the boot orphan-sweep covers it. Anti-double-work is unaffected — the MKV tag + DB hash still stop re-encodes when the sidecar is off or central.
• In-place replace (Output → Output mode): "suffix" (default — encode to movie.x265.mkv, leave the original) or "replace" (the encoded file takes the original's name, no .x265 sibling). Replace is built safe: the original is moved to the recoverable trash FIRST and only then is the new file renamed in — a crash mid-commit always leaves a recoverable state, and it NEVER hard-deletes (it always trashes, so there's always a recovery path). Hardlinked sources (Sonarr/Radarr "Use Hardlinks") fall back to suffix automatically and the link is left untouched. Enabling replace needs an explicit confirm in Settings since it's a one-way door, and it applies to FUTURE encodes only — existing .x265.mkv files are not touched.

No new dependencies, no migrations. Just pull and restart, then flip the new Output settings if you want them.

🟢 NVIDIA NVENC — HOST SETUP RECAP (applies to all versions)
If you run an NVIDIA card, NVENC needs the host driver (unRAID NVIDIA-Driver-Plugin or nvidia-container-toolkit) plus these on the container:

Extra Parameters:
--runtime=nvidia

Variables:
NVIDIA_VISIBLE_DEVICES = all
NVIDIA_DRIVER_CAPABILITIES = compute,video,utility

The "video" capability is the one that bites you: the runtime default is compute,utility and WITHOUT video the NVENC session fails to init even though nvidia-smi works fine. utility = the detection probe, compute = CUDA filters, video = NVENC itself.
Verify: docker exec x265-butler nvidia-smi -L → expect a "GPU 0: ..." line.

♻️ ROLLBACK
If v2.23.0 misbehaves on your hardware, roll back to the previous image:

docker stop x265-butler && docker rm x265-butler
docker pull ghcr.io/masterjb/x265-butler:2.22.0

  • Author

🚀 v2.24.0 — QSV/VAAPI detection decoupling + UI polish is live

ghcr.io/masterjb/x265-butler:2.24.0 and :latest are up. amd64-only image on a Debian 13 (Trixie) base.

Pull / upgrade:
docker pull ghcr.io/masterjb/x265-butler:latest
docker restart x265-butler

If a broken Intel QSV runtime was dropping you to software libx265, this release lets the same iGPU fall back to VAAPI instead of losing hardware acceleration entirely.

🔧 WHAT CHANGED
• Encoder detection now treats QSV and VAAPI as INDEPENDENT capabilities on the same /dev/dri device. QSV is matched by the iHD driver, VAAPI by VAEntrypointEncSlice. An iHD host now exposes BOTH qsv and vaapi candidates.
• The runtime probe-encode gate verifies each candidate on its own, so when QSV is present-but-broken the encoder falls back to VAAPI instead of all the way down to software libx265. The diagnostics page still flags the broken QSV so the fallback never silently hides it.
• UI polish: the Library "Encode now" button and the desktop "Clear selection" button are lifted to the 44px touch-target standard (Library + Trash); the Queue two-column layout on wider screens is rebalanced to an equal 50/50 split.

No new dependencies, no migrations, no pipeline-format changes.

🟢 NVIDIA NVENC — HOST SETUP RECAP (applies to all versions)
If you run an NVIDIA card, NVENC needs the host driver (unRAID NVIDIA-Driver-Plugin or nvidia-container-toolkit) plus these on the container:

Extra Parameters:
--runtime=nvidia

Variables:
NVIDIA_VISIBLE_DEVICES = all
NVIDIA_DRIVER_CAPABILITIES = compute,video,utility

The "video" capability is the one that bites you: the runtime default is compute,utility and WITHOUT video the NVENC session fails to init even though nvidia-smi works fine. utility = the detection probe, compute = CUDA filters, video = NVENC itself.

Verify: docker exec x265-butler nvidia-smi -L → expect a "GPU 0: ..." line.

♻️ ROLLBACK
If v2.24.0 misbehaves on your hardware, roll back to the previous image:

docker stop x265-butler && docker rm x265-butler
docker pull ghcr.io/masterjb/x265-butler:2.23.0

It seems that the encoder detection is still broken with QSV I am still getting the error message

  • encoder_runtime_brokenqsv: v @ 0x55e70b1f7a80] Could not open encoder before EOF [vost#0:0/hevc_qsv @ 0x55e70b208f80] Task finished with error code: -22 (Invalid argument) [vost#0:0/hevc_qsv @ 0x55e70b208f80] Terminating thread with return code -22 (Invalid argument)

  • encoder_runtime_brokenvaapi: 0x5611055bc680] Could not open encoder before EOF [vost#0:0/hevc_vaapi @ 0x5611055bc280] Task finished with error code: -22 (Invalid argument) [vost#0:0/hevc_vaapi @ 0x5611055bc280] Terminating thread with return code -22 (Invalid argument)

But if I run a bench test and set it to the hvec_qsv encoder it work with the hardware encoder.

For the render devices in the diagnostics page it should only check if it can read/write to the device, it could be misleading for some users. It will always complain on my setup because the render device is owned by the gid 18 and the media folder is owned by the pid 99 and gid 100, setting the gid to 18 would break the permissions used by plex or other media servers

In the library it would be great if you add the "delete entry" button to the multi selection

I got vaapi to pass tests in diag by changing some text in a file whit help from ai.

but I still cant encode my files.

Ai Summary

### Step D: The FFmpeg Wrapper Script (The Workaround)

Since we cannot change the app's hardcoded source code, we created a custom wrapper script inside the container that intercepts the ffmpeg call and modifies the test arguments on the fly.

1. Open the container's Console in unRAID.

2. Navigate to the binary directory and rename the original FFmpeg executable so we can replace it:

```bash

cd /usr/local/bin

mv ffmpeg ffmpeg.real

```

3. Create the new wrapper script by copying and pasting the following block entirely into the console:

```bash

cat << 'EOF' > ffmpeg

#!/bin/bash

ARGS="$@"

# If the app tries to run its 16x16 probe encode, we force the resolution to 1920x1080

# and inject the proper filters so the AMD hardware encoder accepts the stream.

if [[ "$ARGS" == "size=16x16" ]]; then

ARGS=$(echo "$ARGS" | sed 's/size=16x16/size=1920x1080/g')

ARGS=$(echo "$ARGS" | sed 's/-c:v hevc_vaapi/-vf scale=1920:1080,format=nv12,hwupload -c:v hevc_vaapi/g')

fi

exec /usr/local/bin/ffmpeg.real $ARGS

EOF

```

4. Make the script executable so the application is allowed to run it:

```bash

chmod +x ffmpeg

```

5. Go back to the x265-butler web UI, navigate to the Encoders tab, and click Re-run detection (or refresh the diagnostics page).

The script will now catch the tiny 16x16 test video, upscale it to a standard Full HD size that your AMD Radeon iGPU physically supports, and trick the probe into passing successfully as vaapi: functional. Any real movie files (which are already larger than 16x16) will pass right through the script completely untouched!

Diag report

## x265-butler diagnostics report

### App

- version: 2.24.0

- gitHash: 2ba121eb

- committedAt: 1780568190

- committedAtCET: 04.06.26, 12:16:30

### Runtime

- nodeVersion: v22.22.3

- platform: linux

- arch: x64

- uptimeSec: 2296

- pid: 7

### Mounts

| path | readable | writable | error |

|---|---|---|---|

| /media | ✓ | ✓ | |

| /cache | ✓ | ✓ | |

| /config | ✓ | ✓ | |

| /library | ✓ | ✓ | |

### Cache

- effectivePath: /mnt/cache/x265-butler

- resolution: user-override

- settingValue: /mnt/cache/x265-butler

- writable: ✗

### Devices

- DRI: /dev/dri/card0, /dev/dri/renderD128

- NVIDIA: _none_

### Encoders

- detected: vaapi, libx265

- detection warnings: _none_

- probe outcomes:

- nvenc: missing

- qsv: missing

- vaapi: functional

- libx265: functional

### Active warnings

_no warnings_

### Recent errors (in-memory, last ≤25)

_no recent errors_

### Onboarding

- completed: ✓

- hasShare: ✓

## Container Image

- OS: Debian GNU/Linux 13 (trixie)

- GLIBC: 2.41

- Intel Media Driver: Mesa Gallium driver 25.0.7-2 for AMD Radeon Graphics (radeonsi, renoir, ACO, DRM 3.64, 6.18.33-Unraid) (vainfo)

- libva: 2.22.0-3

- libdrm: 2.4.124-2

- oneVPL MFX runtime (libmfx-gen1.2): 25.1.4-1

- oneVPL dispatcher (libvpl2): 1:2.14.0-1+b1

- libigfxcmrt7: 25.2.3+dfsg1-1

- _(oneVPL versions report installed-package presence; runtime QSV-functionality is verified separately by the probe-encode — 23-04)_

- ffmpeg version: N-124426-g5bbc00c05d-20260510

<details>

<summary>ffmpeg configuration flags</summary>

```

--prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-ffbuild-linux-gnu- --arch=x86_64 --target-os=linux --enable-gpl --enable-version3 --disable-debug --enable-iconv --enable-zlib --enable-libxml2 --enable-libsoxr --enable-openssl --enable-libvmaf --enable-fontconfig --enable-libharfbuzz --enable-libfreetype --enable-libfribidi --enable-vulkan --enable-libshaderc --enable-libvorbis --enable-libxcb --enable-xlib --enable-libpulse --enable-opencl --enable-gmp --enable-lzma --enable-liblcevc-dec --enable-amf --enable-libaom --enable-libaribb24 --enable-avisynth --enable-chromaprint --enable-libdav1d --enable-libdavs2 --enable-libdvdread --enable-libdvdnav --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --enable-libkvazaar --enable-libaribcaption --enable-libass --enable-libbluray --enable-libjxl --enable-libmp3lame --enable-libopus --enable-libplacebo --enable-librist --enable-libssh --enable-libtheora --enable-libvpx --enable-libwebp --enable-libzmq --enable-lv2 --enable-libvpl --enable-openal --enable-liboapv --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-librav1e --enable-librubberband --disable-schannel --enable-sdl2 --enable-libsnappy --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --enable-libdrm --enable-vaapi --enable-libvidstab --enable-libvvenc --enable-whisper --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-libs='-lgomp -ldl' --extra-ldflags=-pthread --extra-ldexeflags=-pie --cc=x86_64-ffbuild-linux-gnu-gcc --cxx=x86_64-ffbuild-linux-gnu-g++ --ar=x86_64-ffbuild-linux-gnu-gcc-ar --ranlib=x86_64-ffbuild-linux-gnu-gcc-ranlib --nm=x86_64-ffbuild-linux-gnu-gcc-nm --extra-version=20260510

```

</details>

## CPU

- Vendor: AuthenticAMD

- Model name: AMD Ryzen 7 5825U with Radeon Graphics

- CPUID family/model: 25 / 80

- Microarch: —

- Graphics gen: —

- HEVC-QSV (hardware): unknown

- _(HEVC-QSV reflects iGPU HARDWARE capability by the embedded gen-table; runtime QSV functionality is verified separately by the probe-encode — 23-04)_

## Blocklist Evaluation

<!-- Operator: paths below are verbatim. Redact mount/user prefixes before posting if sensitive. -->

- Total entries: 0

- Pattern cache: 2026-06-04T18:16:04.530Z

_No recent evaluations._

## Slow Requests

_No slow requests recorded (threshold: 1s)._

## Slow Queries

_No slow queries recorded (threshold: 100ms)._

## Web Vitals

_No web vitals recorded._

## DRI Render Devices

| Device | GID | Group | In group | R | W | Error |

|---|---|---|---|---|---|---|

| /dev/dri/renderD128 | 18 | node | ✓ | ✓ | ✓ | |

_Group name is container-side and informational; the numeric GID is authoritative. Membership counts the process primary GID (PGID) AND supplementary groups — fix via PGID=<gid> or --group-add <gid>._

### Last test-encode (client UAT run)

- outcome: success

- encoderPicked: hevc_vaapi

- durationMs: 307

- exitCode: 0

stderr:

```

Input #0, lavfi, from 'testsrc=size=320x240:rate=1:duration=5':

Duration: N/A, start: 0.000000, bitrate: N/A

Stream #0:0: Video: wrapped_avframe, rgb24, 320x240 [SAR 1:1 DAR 4:3], 1 fps, 1 tbr, 1 tbn

[out#0/null @ 0x5559540efa80] Codec AVOption preset (Encoding preset for setting encoding speed (optimization level control)) has not been used for any stream. The most likely reason is either wrong type (e.g. a video option with no video streams) or that it is a private option of some decoder which was not actually used for any stream.

Stream mapping:

Stream #0:0 -> #0:0 (wrapped_avframe (native) -> hevc (hevc_vaapi))

Press [q] to stop, [?] for help

Output #0, null, to '/dev/null':

Metadata:

encoder : Lavf62.15.100

Stream #0:0: Video: hevc (Main), vaapi(tv, progressive), 320x240 [SAR 1:1 DAR 4:3], q=2-31, 1 fps, 1 tbn

Metadata:

encoder : Lavc62.30.100 hevc_vaapi

[out#0/null @ 0x5559540efa80] video:6KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown

frame= 5 fps=0.0 q=-0.0 Lsize=N/A time=00:00:05.00 bitrate=N/A speed= 158x elapsed=0:00:00.03

```

_Generated 2026-06-04T18:38:29.117Z_

Edited by Urbies

Having some difficulties getting nvenc working with my nVidia 1650. libx265 does work. Hoping for some direction.

I've verified that my container has:

  • Extra Parameters: --runtime=nvidia

  • Container Variable: NVIDIA_VISIBLE_DEVICES=all

  • Container Variable: NVIDIA_DRIVER_CAPABILITIES=compute,video,utility

Running:

  • Latest nVidia drivers: 610.43.02

docker exec x265-butler nvidia-smi -L (on the host)

~# docker exec x265-butler nvidia-smi -L

GPU 0: NVIDIA GeForce GTX 1650 (UUID: GPU-763250c7-d318-0b83-56b4-482224783f4c)

nvidia-smi (on the host)

~# nvidia-smi

Thu Jun 4 15:24:33 2026

+-----------------------------------------------------------------------------------------+

| NVIDIA-SMI 595.80 Driver Version: 595.80 CUDA Version: 13.2 |

+-----------------------------------------+------------------------+----------------------+

| 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 GTX 1650 Off | 00000000:01:00.0 Off | N/A |

| 0% 33C P8 8W / 100W | 4MiB / 4096MiB | 0% Default |

| | | N/A |

+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+

| Processes: |

| GPU GI CI PID Type Process name GPU Memory |

| ID ID Usage |

|=========================================================================================|

| No running processes found |

+-----------------------------------------------------------------------------------------+

ffmpeg -encoders | grep nvenc (inside container)

/app# ffmpeg -encoders | grep nvenc

ffmpeg version N-124426-g5bbc00c05d-20260510 Copyright (c) 2000-2026 the FFmpeg developers

built with gcc 15.2.0 (crosstool-NG 1.28.0.23_185f348)

configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-ffbuild-linux-gnu- --arch=x86_64 --target-os=linux --enable-gpl --enable-version3 --disable-debug --enable-iconv --enable-zlib --enable-libxml2 --enable-libsoxr --enable-openssl --enable-libvmaf --enable-fontconfig --enable-libharfbuzz --enable-libfreetype --enable-libfribidi --enable-vulkan --enable-libshaderc --enable-libvorbis --enable-libxcb --enable-xlib --enable-libpulse --enable-opencl --enable-gmp --enable-lzma --enable-liblcevc-dec --enable-amf --enable-libaom --enable-libaribb24 --enable-avisynth --enable-chromaprint --enable-libdav1d --enable-libdavs2 --enable-libdvdread --enable-libdvdnav --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --enable-libkvazaar --enable-libaribcaption --enable-libass --enable-libbluray --enable-libjxl --enable-libmp3lame --enable-libopus --enable-libplacebo --enable-librist --enable-libssh --enable-libtheora --enable-libvpx --enable-libwebp --enable-libzmq --enable-lv2 --enable-libvpl --enable-openal --enable-liboapv --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-librav1e --enable-librubberband --disable-schannel --enable-sdl2 --enable-libsnappy --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --enable-libdrm --enable-vaapi --enable-libvidstab --enable-libvvenc --enable-whisper --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-libs='-lgomp -ldl' --extra-ldflags=-pthread --extra-ldexeflags=-pie --cc=x86_64-ffbuild-linux-gnu-gcc --cxx=x86_64-ffbuild-linux-gnu-g++ --ar=x86_64-ffbuild-linux-gnu-gcc-ar --ranlib=x86_64-ffbuild-linux-gnu-gcc-ranlib --nm=x86_64-ffbuild-linux-gnu-gcc-nm --extra-version=20260510

libavutil 60. 30.100 / 60. 30.100

libavcodec 62. 30.100 / 62. 30.100

libavformat 62. 15.100 / 62. 15.100

libavdevice 62. 4.100 / 62. 4.100

libavfilter 11. 17.100 / 11. 17.100

libswscale 9. 7.100 / 9. 7.100

libswresample 6. 4.100 / 6. 4.100

V....D av1_nvenc NVIDIA NVENC av1 encoder (codec av1)

V....D h264_nvenc NVIDIA NVENC H.264 encoder (codec h264)

V....D hevc_nvenc NVIDIA NVENC hevc encoder (codec hevc)

Diagnostics -> Encoders

Detected: libx265

Devices: dri=2, nvidia=2

  • encoder_runtime_brokennvenc: 0x555b8c72fa80] Could not open encoder before EOF [vost#0:0/hevc_nvenc @ 0x555b8c740b80] Task finished with error code: -22 (Invalid argument) [vost#0:0/hevc_nvenc @ 0x555b8c740b80] Terminating thread with return code -22 (Invalid argument)

I read elsewhere online that nVidia was deprecating driver support for "1000 series" cards and that the open source driver was a good work-around, so I'm currently running nVidia OpenSource Driver: 595.80 with no change in the error.

  • Author
1 hour ago, NetCaptive said:

Having some difficulties getting nvenc working with my nVidia 1650. libx265 does work. Hoping for some direction.

I've verified that my container has:

  • Extra Parameters: --runtime=nvidia

  • Container Variable: NVIDIA_VISIBLE_DEVICES=all

  • Container Variable: NVIDIA_DRIVER_CAPABILITIES=compute,video,utility

Running:

  • Latest nVidia drivers: 610.43.02

docker exec x265-butler nvidia-smi -L (on the host)

~# docker exec x265-butler nvidia-smi -L

GPU 0: NVIDIA GeForce GTX 1650 (UUID: GPU-763250c7-d318-0b83-56b4-482224783f4c)

nvidia-smi (on the host)

~# nvidia-smi

Thu Jun 4 15:24:33 2026

+-----------------------------------------------------------------------------------------+

| NVIDIA-SMI 595.80 Driver Version: 595.80 CUDA Version: 13.2 |

+-----------------------------------------+------------------------+----------------------+

| 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 GTX 1650 Off | 00000000:01:00.0 Off | N/A |

| 0% 33C P8 8W / 100W | 4MiB / 4096MiB | 0% Default |

| | | N/A |

+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+

| Processes: |

| GPU GI CI PID Type Process name GPU Memory |

| ID ID Usage |

|=========================================================================================|

| No running processes found |

+-----------------------------------------------------------------------------------------+

ffmpeg -encoders | grep nvenc (inside container)

/app# ffmpeg -encoders | grep nvenc

ffmpeg version N-124426-g5bbc00c05d-20260510 Copyright (c) 2000-2026 the FFmpeg developers

built with gcc 15.2.0 (crosstool-NG 1.28.0.23_185f348)

configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-ffbuild-linux-gnu- --arch=x86_64 --target-os=linux --enable-gpl --enable-version3 --disable-debug --enable-iconv --enable-zlib --enable-libxml2 --enable-libsoxr --enable-openssl --enable-libvmaf --enable-fontconfig --enable-libharfbuzz --enable-libfreetype --enable-libfribidi --enable-vulkan --enable-libshaderc --enable-libvorbis --enable-libxcb --enable-xlib --enable-libpulse --enable-opencl --enable-gmp --enable-lzma --enable-liblcevc-dec --enable-amf --enable-libaom --enable-libaribb24 --enable-avisynth --enable-chromaprint --enable-libdav1d --enable-libdavs2 --enable-libdvdread --enable-libdvdnav --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --enable-libkvazaar --enable-libaribcaption --enable-libass --enable-libbluray --enable-libjxl --enable-libmp3lame --enable-libopus --enable-libplacebo --enable-librist --enable-libssh --enable-libtheora --enable-libvpx --enable-libwebp --enable-libzmq --enable-lv2 --enable-libvpl --enable-openal --enable-liboapv --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-librav1e --enable-librubberband --disable-schannel --enable-sdl2 --enable-libsnappy --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --enable-libdrm --enable-vaapi --enable-libvidstab --enable-libvvenc --enable-whisper --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-libs='-lgomp -ldl' --extra-ldflags=-pthread --extra-ldexeflags=-pie --cc=x86_64-ffbuild-linux-gnu-gcc --cxx=x86_64-ffbuild-linux-gnu-g++ --ar=x86_64-ffbuild-linux-gnu-gcc-ar --ranlib=x86_64-ffbuild-linux-gnu-gcc-ranlib --nm=x86_64-ffbuild-linux-gnu-gcc-nm --extra-version=20260510

libavutil 60. 30.100 / 60. 30.100

libavcodec 62. 30.100 / 62. 30.100

libavformat 62. 15.100 / 62. 15.100

libavdevice 62. 4.100 / 62. 4.100

libavfilter 11. 17.100 / 11. 17.100

libswscale 9. 7.100 / 9. 7.100

libswresample 6. 4.100 / 6. 4.100

V....D av1_nvenc NVIDIA NVENC av1 encoder (codec av1)

V....D h264_nvenc NVIDIA NVENC H.264 encoder (codec h264)

V....D hevc_nvenc NVIDIA NVENC hevc encoder (codec hevc)

Diagnostics -> Encoders

Detected: libx265

Devices: dri=2, nvidia=2

  • encoder_runtime_brokennvenc: 0x555b8c72fa80] Could not open encoder before EOF [vost#0:0/hevc_nvenc @ 0x555b8c740b80] Task finished with error code: -22 (Invalid argument) [vost#0:0/hevc_nvenc @ 0x555b8c740b80] Terminating thread with return code -22 (Invalid argument)

I read elsewhere online that nVidia was deprecating driver support for "1000 series" cards and that the open source driver was a good work-around, so I'm currently running nVidia OpenSource Driver: 595.80 with no change in the error.


@NetCaptive
Thanks for the detailed report. That's exactly the info needed to pin this down.

Good news: your hardware and container setup are fine. nvidia-smi sees the GPU inside the container, and ffmpeg -encoders lists hevc_nvenc. The error is not a driver/runtime problem, so don't bother swapping back and forth between the proprietary and open-source drivers. That's the wrong layer.

What's happening: the encode fails at the moment NVENC opens the session, with "Could not open encoder before EOF" / error code -22 (Invalid argument). When the probe encode fails like that, x265-butler gates NVENC out and falls back to libx265, which is why libx265 works and NVENC doesn't.

My suspicion: the GTX 1650 (the original, non-Super TU117) ships with Volta-generation NVENC, which does NOT support HEVC B-frames. The current ffmpeg build combined with -tune hq enables B-frames automatically, and your card rejects that at encoder-open time, giving -22. (The 1650 Super, 1660, and RTX 20-series use Turing NVENC and don't have this limitation. It's specific to the plain 1650.)

Could you confirm this by running these three commands INSIDE the container?

They test the encoder directly, one variable at a time. No real file needed, they use a synthetic test pattern.

1) Reproduces the app's exact NVENC settings (expected to FAIL with -22):

ffmpeg -hide_banner -f lavfi -i testsrc=size=320x240:rate=30:duration=1 -c:v hevc_nvenc -preset p5 -tune hq -rc constqp -qp 23 -b:v 0 -f null -

2) Same, but forces zero B-frames (expected to SUCCEED if my theory is right):

ffmpeg -hide_banner -f lavfi -i testsrc=size=320x240:rate=30:duration=1 -c:v hevc_nvenc -preset p5 -tune hq -bf 0 -rc constqp -qp 23 -b:v 0 -f null -

3) Control, drops -tune hq entirely (likely also SUCCEEDS):

ffmpeg -hide_banner -f lavfi -i testsrc=size=320x240:rate=30:duration=1 -c:v hevc_nvenc -preset p5 -rc constqp -qp 23 -b:v 0 -f null -

Please paste the full output of all three. A success ends with something like "video:Xkb ... muxing overhead" and no error; a failure repeats the -22 message.

If command 2 works while command 1 fails, that confirms the B-frame cause, and I'll ship a fix that forces -bf 0 on the NVENC path so the 1650 (and any other Volta-NVENC card) works out of the box. Setting B-frames to 0 has no quality cost in the constant-QP mode this tool uses.

  • Author

🚀 v2.25.0 — Encoder probe-size fix + diagnostics QoL is live

ghcr.io/masterjb/x265-butler:2.25.0 and :latest are up. amd64-only image on a Debian 13 (Trixie) base.

Pull / upgrade:
docker pull ghcr.io/masterjb/x265-butler:latest
docker restart x265-butler

Special thanks to @rasalf and @Urbies
The headline: if you have working Intel QSV or Intel/AMD VAAPI but v2.24.0 still dropped you to software libx265, this is the fix. The encoder-detection probe was testing with a 16x16 frame — too small for hardware HEVC encoders to open — so it failed, the encoder got marked broken, and it was gated out. The probe now uses a 320x240 frame (same as the diagnostics test-encode), and both paths share one constant so they can't drift apart again. No local Intel/AMD iGPU on my side — if you were affected, please confirm it now detects your HW.

🔧 ALSO IN THIS RELEASE
• Render-device group hint de-fanged — the amber "fix your group membership" warning + PGID/--group-add suggestion now only fires when a /dev/dri/renderD* node actually fails read/write. Before, a fully working render node whose group just differed from your media group would get a PGID change suggested that could break an otherwise-fine setup.
• Library bulk-delete — the selection bar gets a 3rd action, Delete (N), to forget many entries at once instead of one at a time. It's a row-only forget: it removes the database rows but NEVER touches the file on disk — a re-scan re-adds the entry. Entries with an active encode or referenced by a benchmark run are skipped, with a per-entry result. Behind a confirm cooldown.

🟢 NVIDIA NVENC — HOST SETUP RECAP (applies to all versions)
If you run an NVIDIA card, NVENC needs the host driver (unRAID NVIDIA-Driver-Plugin or nvidia-container-toolkit) plus these on the container:

Extra Parameters:
--runtime=nvidia

Variables:
NVIDIA_VISIBLE_DEVICES = all
NVIDIA_DRIVER_CAPABILITIES = compute,video,utility

The "video" capability is the one that bites you: the runtime default is compute,utility and WITHOUT video the NVENC session fails to init even though nvidia-smi works fine. utility = the detection probe, compute = CUDA filters, video = NVENC itself.
Verify: docker exec x265-butler nvidia-smi -L → expect a "GPU 0: ..." line.

♻️ ROLLBACK
If v2.25.0 misbehaves on your hardware, roll back to the previous image:

docker stop x265-butler && docker rm x265-butler
docker pull ghcr.io/masterjb/x265-butler:2.24.0

Edited by Human-126094
add info

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.