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

1 hour ago, Human-126094 said:


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 -

output 1

# 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 -

Input #0, lavfi, from 'testsrc=size=320x240:rate=30: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], 30 fps, 30 tbr, 30 tbn

Stream mapping:

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

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

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

Metadata:

encoder : Lavf62.15.100

Stream #0:0: Video: hevc (Rext), gbrp(pc, gbr/unknown/unknown, progressive), 320x240 [SAR 1:1 DAR 4:3], q=2-31, 30 fps, 30 tbn

Metadata:

encoder : Lavc62.30.100 hevc_nvenc

Side data:

CPB properties: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A

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

frame= 30 fps=0.0 q=22.0 Lsize=N/A time=00:00:00.90 bitrate=N/A speed=4.83x elapsed=0:00:00.18

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 -

output 2

# 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 -

Input #0, lavfi, from 'testsrc=size=320x240:rate=30: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], 30 fps, 30 tbr, 30 tbn

Stream mapping:

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

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

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

Metadata:

encoder : Lavf62.15.100

Stream #0:0: Video: hevc (Rext), gbrp(pc, gbr/unknown/unknown, progressive), 320x240 [SAR 1:1 DAR 4:3], q=2-31, 30 fps, 30 tbn

Metadata:

encoder : Lavc62.30.100 hevc_nvenc

Side data:

CPB properties: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A

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

frame= 30 fps=0.0 q=22.0 Lsize=N/A time=00:00:01.00 bitrate=N/A speed=5.55x elapsed=0:00:00.18

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 -

output 3

# 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 -

Input #0, lavfi, from 'testsrc=size=320x240:rate=30: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], 30 fps, 30 tbr, 30 tbn

Stream mapping:

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

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

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

Metadata:

encoder : Lavf62.15.100

Stream #0:0: Video: hevc (Rext), gbrp(pc, gbr/unknown/unknown, progressive), 320x240 [SAR 1:1 DAR 4:3], q=2-31, 30 fps, 30 tbn

Metadata:

encoder : Lavc62.30.100 hevc_nvenc

Side data:

CPB properties: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A

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

frame= 30 fps=0.0 q=22.0 Lsize=N/A time=00:00:00.90 bitrate=N/A speed=4.94x elapsed=0:00:00.18

I don't see any obvious errors in the output. However, I did the upgrade to 2.25 after collecting this and the error is now gone!

  • Replies 117
  • Views 3.8k
  • 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

Thanky you for your fixes.

HW acceleration seems to be working again but only with VAAPI, QSV ist still "broken" with the same error message

encoder · encoder_runtime_brokenqsv: v @ 0x55f5ca0bfa80] Could not open encoder before EOF [vost#0:0/hevc_qsv @ 0x55f5ca0d00c0] Task finished with error code: -22 (Invalid argument) [vost#0:0/hevc_qsv @ 0x55f5ca0d00c0] Terminating t

I don't know if there would be any differences in quality, compression or speed

  • Author

🚀 v2.26.0 — code-quality sweep (maintenance release) is live

ghcr.io/masterjb/x265-butler:2.26.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 one is internal housekeeping — a whole-project code-quality sweep across the encode, scan/watch, database, API and settings-UI subsystems. There are NO user-facing behaviour changes: everything is a performance, robustness or readability improvement, each pinned by a behaviour-identical test, with zero new dependencies and zero database migrations. Safe drop-in upgrade from v2.25.0.

What you get under the hood: bounded-concurrency hashing/probing in the scanner and watcher, parallelised hardware-encoder detection probes with an explicit timeout, indexed/de-duplicated DB read paths, and tighter React lifecycle cleanup (SSE reconnect + settings forms no longer leak timers or update state after unmount). The two biggest source files (the encode orchestrator and the settings form) were split into focused modules with identical runtime behaviour and identical rendered UI.

🟢 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.26.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.25.0

  • Author
On 6/5/2026 at 7:40 PM, rasalf said:

Thanky you for your fixes.

HW acceleration seems to be working again but only with VAAPI, QSV ist still "broken" with the same error message

encoder · encoder_runtime_brokenqsv: v @ 0x55f5ca0bfa80] Could not open encoder before EOF [vost#0:0/hevc_qsv @ 0x55f5ca0d00c0] Task finished with error code: -22 (Invalid argument) [vost#0:0/hevc_qsv @ 0x55f5ca0d00c0] Terminating t

I don't know if there would be any differences in quality, compression or speed

@rasalf
Thanks for testing, and good that VAAPI is back.

The QSV path is separate from VAAPI, so VAAPI working only tells us the GPU and driver access are fine -- it doesn't exercise the QSV runtime at all. The "-22 (Invalid argument) / Could not open encoder before EOF" means ffmpeg rejected the hevc_qsv encoder the moment it tried to open it, before any frame was processed. That's almost always one of three things: your Intel GPU only exposes the low-power HEVC encode path, the ICQ rate-control mode we use isn't supported on your silicon, or the QSV device needs explicit init. I can't tell which from the truncated log, so I need you to run a few quick isolation tests inside the container and paste the results. None of these write a file (-f null -), so they're fast and safe.

1) Confirm the encoder and the HEVC entrypoints your GPU exposes. Run:

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

docker exec -it x265-butler sh -c 'vainfo 2>&1 | grep -iE "HEVC|H265"'

In the vainfo output, look for the HEVC encode lines. "VAEntrypointEncSlice" means full encode is available; if you ONLY see "VAEntrypointEncSliceLP" for HEVC, your chip is low-power-only -- that alone explains the failure.

2) Pick any real video file that is visible inside the container and note its path (e.g. something under your mounted media folder). In every command below, replace /path/to/sample.mkv with that real path.

3) Baseline -- this reproduces exactly what the app runs. Run it and paste the FULL output (not just the last lines):

docker exec -it x265-butler ffmpeg -hide_banner -y -i /path/to/sample.mkv -c:v hevc_qsv -preset slow -global_quality 24 -an -f null -

4) Variant A -- force the low-power encode path:

docker exec -it x265-butler ffmpeg -hide_banner -y -i /path/to/sample.mkv -c:v hevc_qsv -preset slow -global_quality 24 -low_power 1 -an -f null -

5) Variant B -- swap ICQ rate control for constant-QP:

docker exec -it x265-butler ffmpeg -hide_banner -y -i /path/to/sample.mkv -c:v hevc_qsv -preset medium -q 24 -an -f null -

6) Variant C -- explicit QSV device init derived from VAAPI (which we know works):

docker exec -it x265-butler ffmpeg -hide_banner -y -init_hw_device vaapi=va:/dev/dri/renderD128 -init_hw_device qsv=hw@va -i /path/to/sample.mkv -c:v hevc_qsv -preset medium -global_quality 24 -an -f null -

Tell me, for steps 3-6, which ones print "video:... muxing overhead" at the end (success) and which ones fail. Paste the full output of step 3 regardless, and the full output of the FIRST variant that succeeds. Also paste the two lines from step 1 (the qsv encoder line and the HEVC vainfo lines), plus your exact CPU/iGPU model (e.g. "i5-12400" or "N100").

That tells me precisely whether the fix is forcing low-power mode, switching the rate-control mode, or changing how we initialise the QSV device for your hardware -- and I'll ship it in the next build.

@Human-126094

Here are my results:

HEVC Entrypoints

ffmpeg -hide_banner -encoders | grep qsv:
V..... av1_qsv              AV1 (Intel Quick Sync Video acceleration) (codec av1)
V..... h264_qsv             H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (Intel Quick Sync Video acceleration) (codec h264)
V..... hevc_qsv             HEVC (Intel Quick Sync Video acceleration) (codec hevc)
V..... mjpeg_qsv            MJPEG (Intel Quick Sync Video acceleration) (codec mjpeg)
V..... mpeg2_qsv            MPEG-2 video (Intel Quick Sync Video acceleration) (codec mpeg2video)
V..... vp9_qsv              VP9 video (Intel Quick Sync Video acceleration) (codec vp9)


sh -c 'vainfo 2>&1 | grep -iE "HEVC|H265"':
VAProfileHEVCMain               : VAEntrypointVLD
VAProfileHEVCMain               : VAEntrypointEncSlice
VAProfileHEVCMain               : VAEntrypointFEI
VAProfileHEVCMain               : VAEntrypointEncSliceLP
VAProfileHEVCMain10             : VAEntrypointVLD
VAProfileHEVCMain10             : VAEntrypointEncSlice
VAProfileHEVCMain10             : VAEntrypointEncSliceLP
VAProfileHEVCMain12             : VAEntrypointVLD
VAProfileHEVCMain12             : VAEntrypointEncSlice
VAProfileHEVCMain422_10         : VAEntrypointVLD
VAProfileHEVCMain422_10         : VAEntrypointEncSlice
VAProfileHEVCMain422_12         : VAEntrypointVLD
VAProfileHEVCMain422_12         : VAEntrypointEncSlice
VAProfileHEVCMain444            : VAEntrypointVLD
VAProfileHEVCMain444            : VAEntrypointEncSliceLP
VAProfileHEVCMain444_10         : VAEntrypointVLD
VAProfileHEVCMain444_10         : VAEntrypointEncSliceLP
VAProfileHEVCMain444_12         : VAEntrypointVLD
VAProfileHEVCSccMain            : VAEntrypointVLD
VAProfileHEVCSccMain            : VAEntrypointEncSliceLP
VAProfileHEVCSccMain10          : VAEntrypointVLD
VAProfileHEVCSccMain10          : VAEntrypointEncSliceLP
VAProfileHEVCSccMain444         : VAEntrypointVLD
VAProfileHEVCSccMain444         : VAEntrypointEncSliceLP
VAProfileHEVCSccMain444_10      : VAEntrypointVLD
VAProfileHEVCSccMain444_10      : VAEntrypointEncSliceLP

Baseline

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/jdownloader/sample.mp4':
  Metadata:
    major_brand     : M4V
    minor_version   : 1
    compatible_brands: isomavc1mp42
    creation_time   : 2021-05-11T10:23:46.000000Z
  Duration: 00:01:00.81, start: 0.000000, bitrate: 6207 kb/s
  Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 6042 kb/s, 23.98 fps, 23.98 tbr, 24k tbn (default)
    Metadata:
      creation_time   : 2021-05-11T10:23:46.000000Z
      handler_name    : ETI ISO Video Media Handler
      encoder         : Elemental H.264
  Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 160 kb/s (default)
    Metadata:
      creation_time   : 2021-05-11T10:23:46.000000Z
      handler_name    : ETI ISO Audio Media Handler
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> hevc (hevc_qsv))
Press [q] to stop, [?] for help
libva info: VA-API version 1.22.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
libva info: VA-API version 1.22.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
Output #0, null, to 'pipe:':
  Metadata:
    major_brand     : M4V
    minor_version   : 1
    compatible_brands: isomavc1mp42
    encoder         : Lavf62.19.101
  Stream #0:0(und): Video: hevc, nv12(tv, progressive), 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 23.98 fps, 23.98 tbn (default)
    Metadata:
      encoder         : Lavc62.36.101 hevc_qsv
      creation_time   : 2021-05-11T10:23:46.000000Z
      handler_name    : ETI ISO Video Media Handler
    Side data:
      CPB properties: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
[out#0/null @ 0x55aac7238740] video:10234KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
frame= 1458 fps=139 q=-0.0 Lsize=N/A time=00:01:00.68 bitrate=N/A speed=5.79x elapsed=0:00:10.48

Variant A -- force the low-power encode path:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/jdownloader/sample.mp4':
  Metadata:
    major_brand     : M4V
    minor_version   : 1
    compatible_brands: isomavc1mp42
    creation_time   : 2021-05-11T10:23:46.000000Z
  Duration: 00:01:00.81, start: 0.000000, bitrate: 6207 kb/s
  Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 6042 kb/s, 23.98 fps, 23.98 tbr, 24k tbn (default)
    Metadata:
      creation_time   : 2021-05-11T10:23:46.000000Z
      handler_name    : ETI ISO Video Media Handler
      encoder         : Elemental H.264
  Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 160 kb/s (default)
    Metadata:
      creation_time   : 2021-05-11T10:23:46.000000Z
      handler_name    : ETI ISO Audio Media Handler
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> hevc (hevc_qsv))
Press [q] to stop, [?] for help
libva info: VA-API version 1.22.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
libva info: VA-API version 1.22.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
[hevc_qsv @ 0x55dd19f1ad00] Selected ratecontrol mode is unsupported
[hevc_qsv @ 0x55dd19f1ad00] some encoding parameters are not supported by the QSV runtime. Please double check the input parameters.
[vost#0:0/hevc_qsv @ 0x55dd19f23b40] [enc:hevc_qsv @ 0x55dd19ed4500] Error while opening encoder - maybe incorrect parameters such as bit_rate, rate, width or height.
[vf#0:0 @ 0x55dd19f19a00] Error sending frames to consumers: Function not implemented
[vf#0:0 @ 0x55dd19f19a00] Task finished with error code: -38 (Function not implemented)
[vf#0:0 @ 0x55dd19f19a00] Terminating thread with return code -38 (Function not implemented)
[vost#0:0/hevc_qsv @ 0x55dd19f23b40] [enc:hevc_qsv @ 0x55dd19ed4500] Could not open encoder before EOF
[vost#0:0/hevc_qsv @ 0x55dd19f23b40] Task finished with error code: -22 (Invalid argument)
[vost#0:0/hevc_qsv @ 0x55dd19f23b40] Terminating thread with return code -22 (Invalid argument)
[out#0/null @ 0x55dd19f0e740] 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.08
Conversion failed!

Variant B -- swap ICQ rate control for constant-QP:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/jdownloader/sample.mp4':
  Metadata:
    major_brand     : M4V
    minor_version   : 1
    compatible_brands: isomavc1mp42
    creation_time   : 2021-05-11T10:23:46.000000Z
  Duration: 00:01:00.81, start: 0.000000, bitrate: 6207 kb/s
  Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 6042 kb/s, 23.98 fps, 23.98 tbr, 24k tbn (default)
    Metadata:
      creation_time   : 2021-05-11T10:23:46.000000Z
      handler_name    : ETI ISO Video Media Handler
      encoder         : Elemental H.264
  Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 160 kb/s (default)
    Metadata:
      creation_time   : 2021-05-11T10:23:46.000000Z
      handler_name    : ETI ISO Audio Media Handler
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> hevc (hevc_qsv))
Press [q] to stop, [?] for help
libva info: VA-API version 1.22.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
libva info: VA-API version 1.22.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
Output #0, null, to 'pipe:':
  Metadata:
    major_brand     : M4V
    minor_version   : 1
    compatible_brands: isomavc1mp42
    encoder         : Lavf62.19.101
  Stream #0:0(und): Video: hevc, nv12(tv, progressive), 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 23.98 fps, 23.98 tbn (default)
    Metadata:
      encoder         : Lavc62.36.101 hevc_qsv
      creation_time   : 2021-05-11T10:23:46.000000Z
      handler_name    : ETI ISO Video Media Handler
    Side data:
      CPB properties: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
[out#0/null @ 0x5635a8ed5580] video:10120KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
frame= 1458 fps=160 q=-0.0 Lsize=N/A time=00:01:00.64 bitrate=N/A speed=6.66x elapsed=0:00:09.11

Variant C -- explicit QSV device init derived from VAAPI:

libva info: VA-API version 1.22.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
libva info: VA-API version 1.22.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/jdownloader/sample.mp4':
  Metadata:
    major_brand     : M4V
    minor_version   : 1
    compatible_brands: isomavc1mp42
    creation_time   : 2021-05-11T10:23:46.000000Z
  Duration: 00:01:00.81, start: 0.000000, bitrate: 6207 kb/s
  Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 6042 kb/s, 23.98 fps, 23.98 tbr, 24k tbn (default)
    Metadata:
      creation_time   : 2021-05-11T10:23:46.000000Z
      handler_name    : ETI ISO Video Media Handler
      encoder         : Elemental H.264
  Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 160 kb/s (default)
    Metadata:
      creation_time   : 2021-05-11T10:23:46.000000Z
      handler_name    : ETI ISO Audio Media Handler
There are 2 hardware devices. device hw of type qsv is picked for filters by default. Set hardware device explicitly with the filter_hw_device option if device hw is not usable for filters.
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> hevc (hevc_qsv))
Press [q] to stop, [?] for help
There are 2 hardware devices. device hw of type qsv is picked for filters by default. Set hardware device explicitly with the filter_hw_device option if device hw is not usable for filters.
Output #0, null, to 'pipe:':
  Metadata:
    major_brand     : M4V
    minor_version   : 1
    compatible_brands: isomavc1mp42
    encoder         : Lavf62.19.101
  Stream #0:0(und): Video: hevc, nv12(tv, progressive), 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 23.98 fps, 23.98 tbn (default)
    Metadata:
      encoder         : Lavc62.36.101 hevc_qsv
      creation_time   : 2021-05-11T10:23:46.000000Z
      handler_name    : ETI ISO Video Media Handler
    Side data:
      CPB properties: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
[out#0/null @ 0x564eb185cc00] video:10234KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
frame= 1458 fps=140 q=-0.0 Lsize=N/A time=00:01:00.68 bitrate=N/A speed=5.81x elapsed=0:00:10.44

So Variant A fails immediately, every other variant has "muxing overhead: unknown". The baseline, B and C should work

I have an i5-14500T with the iGPU UHD Graphics 770

Edited by rasalf

  • Author
9 hours ago, rasalf said:

@Human-126094

Here are my results:

HEVC Entrypoints

ffmpeg -hide_banner -encoders | grep qsv:
V..... av1_qsv              AV1 (Intel Quick Sync Video acceleration) (codec av1)
V..... h264_qsv             H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (Intel Quick Sync Video acceleration) (codec h264)
V..... hevc_qsv             HEVC (Intel Quick Sync Video acceleration) (codec hevc)
V..... mjpeg_qsv            MJPEG (Intel Quick Sync Video acceleration) (codec mjpeg)
V..... mpeg2_qsv            MPEG-2 video (Intel Quick Sync Video acceleration) (codec mpeg2video)
V..... vp9_qsv              VP9 video (Intel Quick Sync Video acceleration) (codec vp9)


sh -c 'vainfo 2>&1 | grep -iE "HEVC|H265"':
VAProfileHEVCMain               : VAEntrypointVLD
VAProfileHEVCMain               : VAEntrypointEncSlice
VAProfileHEVCMain               : VAEntrypointFEI
VAProfileHEVCMain               : VAEntrypointEncSliceLP
VAProfileHEVCMain10             : VAEntrypointVLD
VAProfileHEVCMain10             : VAEntrypointEncSlice
VAProfileHEVCMain10             : VAEntrypointEncSliceLP
VAProfileHEVCMain12             : VAEntrypointVLD
VAProfileHEVCMain12             : VAEntrypointEncSlice
VAProfileHEVCMain422_10         : VAEntrypointVLD
VAProfileHEVCMain422_10         : VAEntrypointEncSlice
VAProfileHEVCMain422_12         : VAEntrypointVLD
VAProfileHEVCMain422_12         : VAEntrypointEncSlice
VAProfileHEVCMain444            : VAEntrypointVLD
VAProfileHEVCMain444            : VAEntrypointEncSliceLP
VAProfileHEVCMain444_10         : VAEntrypointVLD
VAProfileHEVCMain444_10         : VAEntrypointEncSliceLP
VAProfileHEVCMain444_12         : VAEntrypointVLD
VAProfileHEVCSccMain            : VAEntrypointVLD
VAProfileHEVCSccMain            : VAEntrypointEncSliceLP
VAProfileHEVCSccMain10          : VAEntrypointVLD
VAProfileHEVCSccMain10          : VAEntrypointEncSliceLP
VAProfileHEVCSccMain444         : VAEntrypointVLD
VAProfileHEVCSccMain444         : VAEntrypointEncSliceLP
VAProfileHEVCSccMain444_10      : VAEntrypointVLD
VAProfileHEVCSccMain444_10      : VAEntrypointEncSliceLP

Baseline

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/jdownloader/sample.mp4':Metadata:
    major_brand     : M4V
    minor_version   : 1
    compatible_brands: isomavc1mp42
    creation_time   : 2021-05-11T10:23:46.000000ZDuration: 00:01:00.81, start: 0.000000, bitrate: 6207 kb/sStream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 6042 kb/s, 23.98 fps, 23.98 tbr, 24k tbn (default)
    Metadata:
      creation_time   : 2021-05-11T10:23:46.000000Z
      handler_name    : ETI ISO Video Media Handler
      encoder         : Elemental H.264Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 160 kb/s (default)
    Metadata:
      creation_time   : 2021-05-11T10:23:46.000000Z
      handler_name    : ETI ISO Audio Media HandlerStream mapping:Stream #0:0 -> #0:0 (h264 (native) -> hevc (hevc_qsv))Press [q] to stop, [?] for helplibva info: VA-API version 1.22.0libva info: User environment variable requested driver 'iHD'libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.solibva info: Found init function __vaDriverInit_1_22libva info: va_openDriver() returns 0libva info: VA-API version 1.22.0libva info: User environment variable requested driver 'iHD'libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.solibva info: Found init function __vaDriverInit_1_22libva info: va_openDriver() returns 0Output #0, null, to 'pipe:':Metadata:
    major_brand     : M4V
    minor_version   : 1
    compatible_brands: isomavc1mp42
    encoder         : Lavf62.19.101Stream #0:0(und): Video: hevc, nv12(tv, progressive), 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 23.98 fps, 23.98 tbn (default)
    Metadata:
      encoder         : Lavc62.36.101 hevc_qsv
      creation_time   : 2021-05-11T10:23:46.000000Z
      handler_name    : ETI ISO Video Media Handler
    Side data:
      CPB properties: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
[out#0/null @ 0x55aac7238740] video:10234KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknownframe= 1458 fps=139 q=-0.0 Lsize=N/A time=00:01:00.68 bitrate=N/A speed=5.79x elapsed=0:00:10.48

Variant A -- force the low-power encode path:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/jdownloader/sample.mp4':Metadata:
    major_brand     : M4V
    minor_version   : 1
    compatible_brands: isomavc1mp42
    creation_time   : 2021-05-11T10:23:46.000000ZDuration: 00:01:00.81, start: 0.000000, bitrate: 6207 kb/sStream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 6042 kb/s, 23.98 fps, 23.98 tbr, 24k tbn (default)
    Metadata:
      creation_time   : 2021-05-11T10:23:46.000000Z
      handler_name    : ETI ISO Video Media Handler
      encoder         : Elemental H.264Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 160 kb/s (default)
    Metadata:
      creation_time   : 2021-05-11T10:23:46.000000Z
      handler_name    : ETI ISO Audio Media HandlerStream mapping:Stream #0:0 -> #0:0 (h264 (native) -> hevc (hevc_qsv))Press [q] to stop, [?] for helplibva info: VA-API version 1.22.0libva info: User environment variable requested driver 'iHD'libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.solibva info: Found init function __vaDriverInit_1_22libva info: va_openDriver() returns 0libva info: VA-API version 1.22.0libva info: User environment variable requested driver 'iHD'libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.solibva info: Found init function __vaDriverInit_1_22libva info: va_openDriver() returns 0
[hevc_qsv @ 0x55dd19f1ad00] Selected ratecontrol mode is unsupported
[hevc_qsv @ 0x55dd19f1ad00] some encoding parameters are not supported by the QSV runtime. Please double check the input parameters.
[vost#0:0/hevc_qsv @ 0x55dd19f23b40] [enc:hevc_qsv @ 0x55dd19ed4500] Error while opening encoder - maybe incorrect parameters such as bit_rate, rate, width or height.
[vf#0:0 @ 0x55dd19f19a00] Error sending frames to consumers: Function not implemented
[vf#0:0 @ 0x55dd19f19a00] Task finished with error code: -38 (Function not implemented)
[vf#0:0 @ 0x55dd19f19a00] Terminating thread with return code -38 (Function not implemented)
[vost#0:0/hevc_qsv @ 0x55dd19f23b40] [enc:hevc_qsv @ 0x55dd19ed4500] Could not open encoder before EOF
[vost#0:0/hevc_qsv @ 0x55dd19f23b40] Task finished with error code: -22 (Invalid argument)
[vost#0:0/hevc_qsv @ 0x55dd19f23b40] Terminating thread with return code -22 (Invalid argument)
[out#0/null @ 0x55dd19f0e740] 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.08Conversion failed!

Variant B -- swap ICQ rate control for constant-QP:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/jdownloader/sample.mp4':Metadata:
    major_brand     : M4V
    minor_version   : 1
    compatible_brands: isomavc1mp42
    creation_time   : 2021-05-11T10:23:46.000000ZDuration: 00:01:00.81, start: 0.000000, bitrate: 6207 kb/sStream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 6042 kb/s, 23.98 fps, 23.98 tbr, 24k tbn (default)
    Metadata:
      creation_time   : 2021-05-11T10:23:46.000000Z
      handler_name    : ETI ISO Video Media Handler
      encoder         : Elemental H.264Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 160 kb/s (default)
    Metadata:
      creation_time   : 2021-05-11T10:23:46.000000Z
      handler_name    : ETI ISO Audio Media HandlerStream mapping:Stream #0:0 -> #0:0 (h264 (native) -> hevc (hevc_qsv))Press [q] to stop, [?] for helplibva info: VA-API version 1.22.0libva info: User environment variable requested driver 'iHD'libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.solibva info: Found init function __vaDriverInit_1_22libva info: va_openDriver() returns 0libva info: VA-API version 1.22.0libva info: User environment variable requested driver 'iHD'libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.solibva info: Found init function __vaDriverInit_1_22libva info: va_openDriver() returns 0Output #0, null, to 'pipe:':Metadata:
    major_brand     : M4V
    minor_version   : 1
    compatible_brands: isomavc1mp42
    encoder         : Lavf62.19.101Stream #0:0(und): Video: hevc, nv12(tv, progressive), 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 23.98 fps, 23.98 tbn (default)
    Metadata:
      encoder         : Lavc62.36.101 hevc_qsv
      creation_time   : 2021-05-11T10:23:46.000000Z
      handler_name    : ETI ISO Video Media Handler
    Side data:
      CPB properties: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
[out#0/null @ 0x5635a8ed5580] video:10120KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknownframe= 1458 fps=160 q=-0.0 Lsize=N/A time=00:01:00.64 bitrate=N/A speed=6.66x elapsed=0:00:09.11

Variant C -- explicit QSV device init derived from VAAPI:

libva info: VA-API version 1.22.0libva info: User environment variable requested driver 'iHD'libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.solibva info: Found init function __vaDriverInit_1_22libva info: va_openDriver() returns 0libva info: VA-API version 1.22.0libva info: User environment variable requested driver 'iHD'libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.solibva info: Found init function __vaDriverInit_1_22libva info: va_openDriver() returns 0Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/jdownloader/sample.mp4':Metadata:
    major_brand     : M4V
    minor_version   : 1
    compatible_brands: isomavc1mp42
    creation_time   : 2021-05-11T10:23:46.000000ZDuration: 00:01:00.81, start: 0.000000, bitrate: 6207 kb/sStream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 6042 kb/s, 23.98 fps, 23.98 tbr, 24k tbn (default)
    Metadata:
      creation_time   : 2021-05-11T10:23:46.000000Z
      handler_name    : ETI ISO Video Media Handler
      encoder         : Elemental H.264Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 160 kb/s (default)
    Metadata:
      creation_time   : 2021-05-11T10:23:46.000000Z
      handler_name    : ETI ISO Audio Media HandlerThere are 2 hardware devices. device hw of type qsv is picked for filters by default. Set hardware device explicitly with the filter_hw_device option if device hw is not usable for filters.Stream mapping:Stream #0:0 -> #0:0 (h264 (native) -> hevc (hevc_qsv))Press [q] to stop, [?] for helpThere are 2 hardware devices. device hw of type qsv is picked for filters by default. Set hardware device explicitly with the filter_hw_device option if device hw is not usable for filters.Output #0, null, to 'pipe:':Metadata:
    major_brand     : M4V
    minor_version   : 1
    compatible_brands: isomavc1mp42
    encoder         : Lavf62.19.101Stream #0:0(und): Video: hevc, nv12(tv, progressive), 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 23.98 fps, 23.98 tbn (default)
    Metadata:
      encoder         : Lavc62.36.101 hevc_qsv
      creation_time   : 2021-05-11T10:23:46.000000Z
      handler_name    : ETI ISO Video Media Handler
    Side data:
      CPB properties: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
[out#0/null @ 0x564eb185cc00] video:10234KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknownframe= 1458 fps=140 q=-0.0 Lsize=N/A time=00:01:00.68 bitrate=N/A speed=5.81x elapsed=0:00:10.44

So Variant A fails immediately, every other variant has "muxing overhead: unknown". The baseline, B and C should work

I have an i5-14500T with the iGPU UHD Graphics 770

@rasalf
Perfect, that's exactly the data I needed and it's good news.

The key signal: your baseline succeeds (the muxing overhead line at the end). That baseline command is byte-for-byte what the app now runs after the QSV fix that shipped in v2.22.0, the offending option was a legacy Intel MSDK flag (look_ahead) that the newer oneVPL/libvpl runtime rejects with exactly the -22 (Invalid argument) / Could not open encoder you hit. We removed it, and your baseline run proves the result works on your i5-14500T / UHD 770.

Two things your tests also rule out, which is useful:

- Variant A (low-power) is the only one that fails "Selected ratecontrol mode is unsupported". So we must NOT force the low-power path on your chip; the ICQ quality mode the app uses isn't available there. The default (full-encode) path is the right one, and your vainfo confirms VAEntrypointEncSlice for HEVC, so you have full hardware encode.

- Variants B and C succeed too, which tells me neither the rate-control mode nor the device-init needs changing.

So: no new code needed, the fix is already in the released build. You're most likely still on an image from before v2.22.0. Pull the latest image (ghcr.io/masterjb/x265-butler:latest), recreate the container, and QSV should encode through the app exactly like your baseline test just did. Let me know if it still fails after updating and paste the app's encode log, but based on this, you're set.

Hmm thats strange I did "reset" the config and recreate the container but still the same behavior.

Container LOG

2026/06/13 12:15PM 30 pid=7 hostname=63ba645961c7 action=server_init msg=server init complete

2026/06/13 12:15PM 30 pid=7 hostname=63ba645961c7 action=encoder_loop_start recoveredStaleEncoding=0 recoveredFiles=[] recoveredFileRows=0 msg=encoder loop started

2026/06/13 12:15PM 30 pid=7 hostname=63ba645961c7 action=encoder_loop_capacity cpuCount=20 concurrencySetting=auto limits={"libx265":5,"nvenc":1,"qsv":1,"vaapi":1} msg=encoder loop capacity computed

2026/06/13 12:15PM 30 pid=7 hostname=63ba645961c7 action=auto_scan_disabled msg=auto-scan disabled — service idle

2026/06/13 12:15PM 30 pid=7 hostname=63ba645961c7 event=notFoundEncountered source=not-found-server-component kind=fallback pathname=/en/dashboard locale=en onboardingIncomplete=true msg=diagnostics.not-found

2026/06/13 12:15PM 40 pid=7 hostname=63ba645961c7 action=encoder_probe_failed probe=nvenc cause=ENOENT err=spawn nvidia-smi ENOENT msg=encoder probe failed (nvenc)

2026/06/13 12:15PM 40 pid=7 hostname=63ba645961c7 action=encoder_probe_failed probe=nvenc cause=ENOENT err=spawn nvidia-smi ENOENT msg=encoder probe failed (nvenc)

2026/06/13 12:15PM 40 pid=7 hostname=63ba645961c7 action=encoder_probe_broken encoder=qsv rawStderr=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_qsv))
Press [q] to stop, [?] for help
libva info: VA-API version 1.22.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
libva info: VA-API version 1.22.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
[hevc_qsv @ 0x560b015fb7c0] Selected ratecontrol mode is unsupported
[hevc_qsv @ 0x560b015fb7c0] Low power mode is unsupported
[hevc_qsv @ 0x560b015fb7c0] some encoding parameters are not supported by the QSV runtime. Please double check the input parameters.
[vost#0:0/hevc_qsv @ 0x560b015fb280] [enc:hevc_qsv @ 0x560b015fb740] Error while opening encoder - maybe incorrect parameters such as bit_rate, rate, width or height.
[vf#0:0 @ 0x560b015fc600] Error sending frames to consumers: Function not implemented
[vf#0:0 @ 0x560b015fc600] Task finished with error code: -38 (Function not implemented)
[vf#0:0 @ 0x560b015fc600] Terminating thread with return code -38 (Function not implemented)
[vost#0:0/hevc_qsv @ 0x560b015fb280] [enc:hevc_qsv @ 0x560b015fb740] Could not open encoder before EOF
[vost#0:0/hevc_qsv @ 0x560b015fb280] Task finished with error code: -22 (Invalid argument)
[vost#0:0/hevc_qsv @ 0x560b015fb280] Terminating thread with return code -22 (Invalid argument)
[out#0/null @ 0x560b015faf00] 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.12    
Conversion failed!
 excerpt=v @ 0x560b015fb740] Could not open encoder before EOF [vost#0:0/hevc_qsv @ 0x560b015fb280] Task finished with error code: -22 (Invalid argument) [vost#0:0/hevc_qsv @ 0x560b015fb280] Terminating thread with return code -22 (Invalid argument) msg=encoder probe-encode failed (raw stderr captured for forensics)

2026/06/13 12:15PM 30 pid=7 hostname=63ba645961c7 action=encoder_detection_complete detected=["vaapi","libx265"] activeFromAuto=vaapi vaapiDevice=/dev/dri/renderD128 warningCount=1 outcome={"nvenc":"missing","qsv":"compiled-in-broken","vaapi":"functional","libx265":"functional"} probeEncodeDisabled=false probeDurationMs=171 durationMs=284 msg=encoder detection complete

2026/06/13 12:15PM 40 pid=7 hostname=63ba645961c7 action=encoder_probe_broken encoder=qsv rawStderr=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_qsv))
Press [q] to stop, [?] for help
libva info: VA-API version 1.22.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
libva info: VA-API version 1.22.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
[hevc_qsv @ 0x55e89c0ca7c0] Selected ratecontrol mode is unsupported
[hevc_qsv @ 0x55e89c0ca7c0] Low power mode is unsupported
[hevc_qsv @ 0x55e89c0ca7c0] some encoding parameters are not supported by the QSV runtime. Please double check the input parameters.
[vost#0:0/hevc_qsv @ 0x55e89c0ca280] [enc:hevc_qsv @ 0x55e89c0ca740] Error while opening encoder - maybe incorrect parameters such as bit_rate, rate, width or height.
[vf#0:0 @ 0x55e89c0cb600] Error sending frames to consumers: Function not implemented
[vf#0:0 @ 0x55e89c0cb600] Task finished with error code: -38 (Function not implemented)
[vf#0:0 @ 0x55e89c0cb600] Terminating thread with return code -38 (Function not implemented)
[vost#0:0/hevc_qsv @ 0x55e89c0ca280] [enc:hevc_qsv @ 0x55e89c0ca740] Could not open encoder before EOF
[vost#0:0/hevc_qsv @ 0x55e89c0ca280] Task finished with error code: -22 (Invalid argument)
[vost#0:0/hevc_qsv @ 0x55e89c0ca280] Terminating thread with return code -22 (Invalid argument)
[out#0/null @ 0x55e89c0c9f00] 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.12    
Conversion failed!
 excerpt=v @ 0x55e89c0ca740] Could not open encoder before EOF [vost#0:0/hevc_qsv @ 0x55e89c0ca280] Task finished with error code: -22 (Invalid argument) [vost#0:0/hevc_qsv @ 0x55e89c0ca280] Terminating thread with return code -22 (Invalid argument) msg=encoder probe-encode failed (raw stderr captured for forensics)

It seems that the encoder detection tries to run ffmpeg only with the low-power options, which doesn't work on my system

  • Author

🚀 v2.27.0 — QSV ratecontrol path fix + code-quality hardening is live

ghcr.io/masterjb/x265-butler:2.27.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

The headline: a follow-up to the v2.25.0 QSV/VAAPI detection fix. v2.25.0 fixed the probe FRAME SIZE (16x16 -> 320x240) and that sorted out most setups, but one operator on an Intel UHD 770 (i5-14500T) was still dropped to software libx265 afterward. Turns out at the probe's small resolution, ffmpeg/iHD auto-selects the LOW-POWER encode path, and that path rejects ICQ ratecontrol (-global_quality) with "Invalid argument" so the probe still failed and QSV was still gated out. v2.25.0 fixed the size; the PATH selection was the last blocker.

The fix: detection now probes QSV in two tiers and remembers which one works. First it tries ICQ on the full-encode path (best quality, forced with -low_power 0). If that path rejects it, it falls back to CQP (-q:v), which runs in both the full and the low-power path. Whatever passes is used for real encodes. So full-encode Intel chips keep ICQ quality, and low-power-only chips keep hardware QSV via CQP instead of dropping to libx265. A wrong guess self-corrects at detection on a 1-frame clip, it never reaches a real file encode.

No local Intel iGPU on my side — validated by mock plus the reporter's manual ffmpeg matrix on real hardware. If you have a working Intel iGPU that was being dropped to libx265, please confirm it now detects QSV.

🔧 ALSO IN THIS RELEASE
- Under-the-hood code-quality sweep across the encode, scan/watch, database, API and settings-UI subsystems, NO user-facing behaviour change. Faster, more resilient internals: bounded-concurrency hashing/probing in the scanner and watcher (DB writes stay sequential), parallelised encoder-detection probes with a per-probe timeout, indexed DB read paths, and hardened React cleanup (no leaked timers / no state updates after unmount). Hot-path changes each ship an env-var revert lever (SCAN_PROBE_CONCURRENCY, WATCH_INGEST_CONCURRENCY) so a bad interaction with your hardware can be neutralised without a redeploy. No new dependencies, no migrations.

🟢 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.27.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.26.0

  • Author
9 hours ago, rasalf said:

Hmm thats strange I did "reset" the config and recreate the container but still the same behavior.

Container LOG

2026/06/13 12:15PM 30 pid=7 hostname=63ba645961c7 action=server_init msg=server init complete

2026/06/13 12:15PM 30 pid=7 hostname=63ba645961c7 action=encoder_loop_start recoveredStaleEncoding=0 recoveredFiles=[] recoveredFileRows=0 msg=encoder loop started

2026/06/13 12:15PM 30 pid=7 hostname=63ba645961c7 action=encoder_loop_capacity cpuCount=20 concurrencySetting=auto limits={"libx265":5,"nvenc":1,"qsv":1,"vaapi":1} msg=encoder loop capacity computed

2026/06/13 12:15PM 30 pid=7 hostname=63ba645961c7 action=auto_scan_disabled msg=auto-scan disabled — service idle

2026/06/13 12:15PM 30 pid=7 hostname=63ba645961c7 event=notFoundEncountered source=not-found-server-component kind=fallback pathname=/en/dashboard locale=en onboardingIncomplete=true msg=diagnostics.not-found

2026/06/13 12:15PM 40 pid=7 hostname=63ba645961c7 action=encoder_probe_failed probe=nvenc cause=ENOENT err=spawn nvidia-smi ENOENT msg=encoder probe failed (nvenc)

2026/06/13 12:15PM 40 pid=7 hostname=63ba645961c7 action=encoder_probe_failed probe=nvenc cause=ENOENT err=spawn nvidia-smi ENOENT msg=encoder probe failed (nvenc)

2026/06/13 12:15PM 40 pid=7 hostname=63ba645961c7 action=encoder_probe_broken encoder=qsv rawStderr=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_qsv))
Press [q] to stop, [?] for help
libva info: VA-API version 1.22.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
libva info: VA-API version 1.22.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
[hevc_qsv @ 0x560b015fb7c0] Selected ratecontrol mode is unsupported
[hevc_qsv @ 0x560b015fb7c0] Low power mode is unsupported
[hevc_qsv @ 0x560b015fb7c0] some encoding parameters are not supported by the QSV runtime. Please double check the input parameters.
[vost#0:0/hevc_qsv @ 0x560b015fb280] [enc:hevc_qsv @ 0x560b015fb740] Error while opening encoder - maybe incorrect parameters such as bit_rate, rate, width or height.
[vf#0:0 @ 0x560b015fc600] Error sending frames to consumers: Function not implemented
[vf#0:0 @ 0x560b015fc600] Task finished with error code: -38 (Function not implemented)
[vf#0:0 @ 0x560b015fc600] Terminating thread with return code -38 (Function not implemented)
[vost#0:0/hevc_qsv @ 0x560b015fb280] [enc:hevc_qsv @ 0x560b015fb740] Could not open encoder before EOF
[vost#0:0/hevc_qsv @ 0x560b015fb280] Task finished with error code: -22 (Invalid argument)
[vost#0:0/hevc_qsv @ 0x560b015fb280] Terminating thread with return code -22 (Invalid argument)
[out#0/null @ 0x560b015faf00] 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.12    
Conversion failed!
 excerpt=v @ 0x560b015fb740] Could not open encoder before EOF [vost#0:0/hevc_qsv @ 0x560b015fb280] Task finished with error code: -22 (Invalid argument) [vost#0:0/hevc_qsv @ 0x560b015fb280] Terminating thread with return code -22 (Invalid argument) msg=encoder probe-encode failed (raw stderr captured for forensics)

2026/06/13 12:15PM 30 pid=7 hostname=63ba645961c7 action=encoder_detection_complete detected=["vaapi","libx265"] activeFromAuto=vaapi vaapiDevice=/dev/dri/renderD128 warningCount=1 outcome={"nvenc":"missing","qsv":"compiled-in-broken","vaapi":"functional","libx265":"functional"} probeEncodeDisabled=false probeDurationMs=171 durationMs=284 msg=encoder detection complete

2026/06/13 12:15PM 40 pid=7 hostname=63ba645961c7 action=encoder_probe_broken encoder=qsv rawStderr=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_qsv))
Press [q] to stop, [?] for help
libva info: VA-API version 1.22.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
libva info: VA-API version 1.22.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
[hevc_qsv @ 0x55e89c0ca7c0] Selected ratecontrol mode is unsupported
[hevc_qsv @ 0x55e89c0ca7c0] Low power mode is unsupported
[hevc_qsv @ 0x55e89c0ca7c0] some encoding parameters are not supported by the QSV runtime. Please double check the input parameters.
[vost#0:0/hevc_qsv @ 0x55e89c0ca280] [enc:hevc_qsv @ 0x55e89c0ca740] Error while opening encoder - maybe incorrect parameters such as bit_rate, rate, width or height.
[vf#0:0 @ 0x55e89c0cb600] Error sending frames to consumers: Function not implemented
[vf#0:0 @ 0x55e89c0cb600] Task finished with error code: -38 (Function not implemented)
[vf#0:0 @ 0x55e89c0cb600] Terminating thread with return code -38 (Function not implemented)
[vost#0:0/hevc_qsv @ 0x55e89c0ca280] [enc:hevc_qsv @ 0x55e89c0ca740] Could not open encoder before EOF
[vost#0:0/hevc_qsv @ 0x55e89c0ca280] Task finished with error code: -22 (Invalid argument)
[vost#0:0/hevc_qsv @ 0x55e89c0ca280] Terminating thread with return code -22 (Invalid argument)
[out#0/null @ 0x55e89c0c9f00] 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.12    
Conversion failed!
 excerpt=v @ 0x55e89c0ca740] Could not open encoder before EOF [vost#0:0/hevc_qsv @ 0x55e89c0ca280] Task finished with error code: -22 (Invalid argument) [vost#0:0/hevc_qsv @ 0x55e89c0ca280] Terminating thread with return code -22 (Invalid argument) msg=encoder probe-encode failed (raw stderr captured for forensics)

It seems that the encoder detection tries to run ffmpeg only with the low-power options, which doesn't work on my system

@rasalf your diagnosis was exactly right, and this is the build that fixes it.

You nailed it with "the encoder detection tries to run ffmpeg only with the low-power options." That's precisely what was happening: the detection probe ran QSV at a small resolution, ffmpeg/iHD auto-selected the low-power encode path, and on your UHD 770 that path rejects the ICQ ratecontrol the app uses â the exact Selected ratecontrol mode is unsupported -22 (Invalid argument) you saw in your container log. So QSV got gated out and you dropped to libx265, even though your manual baseline test encoded fine.

The reason the earlier update didn't help: v2.25.0 fixed the probe frame size (16x16 -> 320x240), but the path selection was a separate, second blocker and that's what's fixed now.

v2.27.0 changes detection to probe QSV in two tiers and remember which one works:

1. ICQ on the full-encode path, forced with -low_power 0 this is byte-for-byte your successful baseline command.

2. If that's rejected, fall back to CQP (-q:v), which runs in both paths.

Whatever passes is what gets used for real encodes. Your baseline proved tier 1 works on your chip, so you should now detect QSV with full ICQ quality instead of falling back to software.

To update:

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

docker restart x265-butler

Then check the startup log for the encoder_detection_complete line â you want detected=["qsv",...] and activeFromAuto=qsv (instead of the "qsv":"compiled-in-broken" / activeFromAuto=vaapi you had before). If it still drops QSV, paste that line plus the encoder_probe_* lines and I'll dig in â but based on your test matrix, this should have you encoding on hardware.

Thanks for the thorough troubleshooting data it's the reason this got fixed precisely instead of guessed at.

This version seems to have fixed the encoder detection. QSV is detected on startup and is selectable. I will run some encodings and report back if anything breaks

I did some runs and everything works as expected. :D

I have found some minor "nags".

For better compability especially with macos the ffmpeg parameter "-tag:v hvc1" should be added.

Is it possible to retain the change date timestamp from the original file on the encoded file?

A visual bug on the bench screen occurs when executing "Verify on full file" twice on different quality presets after a benchmark, causing the status bar to not appear while the verification runs in the background until a page reload reveals the completed state and restores the "Apply as default" option.

And what happens if the source file is a wmv or ther, does it change it to mp4 or mkv?

Edited by rasalf

  • Author

🚀 v2.28.0 - output compatibility + bench fixes is live

ghcr.io/masterjb/x265-butler:2.28.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

Three operator-reported papercuts fixed this round.

MACOS / QUICKTIME HEVC PLAYBACK (.mp4 output)
HEVC inside .mp4 now carries the hvc1 codec tag instead of ffmpeg's default hev1, which Apple QuickTime and Photos refuse to play. An .mp4 that worked in VLC but was dead on a Mac now plays. Applies to all encoders; .mkv is unchanged.

ORIGINAL MODIFICATION DATE KEPT ON THE ENCODED FILE
The encoded output now inherits the source file's modified/accessed time instead of getting a fresh "now" timestamp - so sort-by-date, "recently added", and Sonarr/Radarr import logic see the file at its real age. Best-effort: if the timestamp can't be copied it's logged and the encode still finishes.

BENCH "VERIFY ON FULL FILE" - LIVE STATUS BAR FOR A 2ND VERIFY
Running a second "Verify on full file" on a different preset now shows the live progress card right away, and Cancel/Retry act on the verify that's actually running - no page reload needed.

🟢 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.28.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.27.0

  • Author
5 hours ago, rasalf said:

I did some runs and everything works as expected. :D

I have found some minor "nags".

For better compability especially with macos the ffmpeg parameter "-tag:v hvc1" should be added.

Is it possible to retain the change date timestamp from the original file on the encoded file?

A visual bug on the bench screen occurs when executing "Verify on full file" twice on different quality presets after a benchmark, causing the status bar to not appear while the verification runs in the background until a page reload reveals the completed state and restores the "Apply as default" option.

And what happens if the source file is a wmv or ther, does it change it to mp4 or mkv?

@rasalf Awesome, thanks for the thorough testing and the report! :D

Good news: all three of your nags are fixed in v2.28.0, which just went live:

ghcr.io/masterjb/x265-butler:2.28.0 (and :latest)

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

1) "-tag:v hvc1" for macOS compatibility

Done. HEVC in .mp4 now carries the hvc1 codec tag instead of ffmpeg's

default hev1, so QuickTime and Photos play it. Applies to every encoder;

.mkv is unchanged (Matroska ignores the fourcc).

2) Retain the original modification timestamp

Done. The encoded file now inherits the source file's modified (and

accessed) time instead of getting a fresh "now" timestamp, so sort-by-date

and Sonarr/Radarr import logic see it at its real age. It's best-effort:

if the timestamp can't be copied the encode still finishes and just logs it.

(Note: birth/creation time can't be set on Linux, so it's mtime+atime only.)

3) Bench "Verify on full file" status bar on a 2nd verify

Fixed. Running a second verify on a different preset now shows the live

progress card right away, Cancel/Retry act on the verify that's actually

running, and "Apply as default" comes back without a page reload.

On your question about wmv (or any other source container):

The output container follows your "match source" setting only for formats

that are actually mp4-family (.mp4 / .m4v stay .mp4). Everything else,

wmv included, goes to .mkv. That's deliberate: wmv typically carries

wmav2 audio, which isn't valid in an mp4 container but is perfectly fine

in mkv, so you get a clean remux without an audio re-encode surprise.

Short version: wmv in -> mkv out.

Let me know how it runs on your UHD 770. Thanks again!

I cant fix this error for some reason

/media readable=true writable=false error=EACCES

Im using a share called jellyfin that has all my files on it and have prems setup right as far as i can see

What am i doing wrong ;-;

Okay i got encoding to work i was having issues with my cache settings. But now after i restart the docker after a fresh install its super laggy on the interface and i loose my amd card. Any ideas as to why?

@Human-126094 it works perfectly. I am getting from 100 to 200 fps on QSV and only around 60 to 80 fps vaapi. What would be great is an "encode now" button on multiselection. And a pause / resume queue button, maybe not directly pause, but pause after current encoding.

One small visual issue, after switching devices opening the queue list there is nothing on the other device image.png

And on the logs page there is only 50 entries shown, if there are more than 50 jobs queued you can't see the the current log file or older ones, maybe a page would be useful.

On the trash site the pages doesn't work, only with a reload of the page

Edited by rasalf

Hi

@x265-butler, my queue keeps filling up with files that have already been encoded.

I have the sidecar files stored centrally.

They're also stored centrally.

But the files still end up back in the queue.

And it would be very nice to have the garbage in a seperate path...
As we transcode on the cache drive (nvme/ssd) would it be really great to store the garbagefiles somewhere where the can life the 30 days... (on the array as example)

It would be nice when we could adjust this path by our self

Greetings

Chris

Edited by cmeyer86

I have problems getting my Arc A380 to work

when detecting available encoders, i get this error:

{
    "level": 40,
    "time": 1781724151719,
    "pid": 7,
    "hostname": "9e99d1499c2b",
    "action": "encoder_probe_broken",
    "encoder": "qsv",
    "rawStderr": "Input #0, lavfi, from 'testsrc=size=320x240:rate=1:duration=1':\n  Duration: N/A, start: 0.000000, bitrate: N/A\n  Stream #0:0: Video: wrapped_avframe, rgb24, 320x240 [SAR 1:1 DAR 4:3], 1 fps, 1 tbr, 1 tbn\nStream mapping:\n  Stream #0:0 -> #0:0 (wrapped_avframe (native) -> hevc (hevc_qsv))\nPress [q] to stop, [?] for help\nlibva info: VA-API version 1.22.0\nlibva info: User environment variable requested driver 'iHD'\nlibva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so\nlibva info: Found init function __vaDriverInit_1_22\nlibva info: va_openDriver() returns 0\nlibva info: VA-API version 1.22.0\nlibva info: User environment variable requested driver 'iHD'\nlibva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so\nlibva info: Found init function __vaDriverInit_1_22\nlibva info: va_openDriver() returns 0\nlibva info: VA-API version 1.22.0\nlibva info: User environment variable requested driver 'iHD'\nlibva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so\nlibva info: Found init function __vaDriverInit_1_22\nlibva info: va_openDriver() returns 0\nlibva info: VA-API version 1.22.0\nlibva info: User environment variable requested driver 'iHD'\nlibva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so\nlibva info: Found init function __vaDriverInit_1_22\nlibva info: va_openDriver() returns 0\n[hevc_qsv @ 0x55dfa3f88280] Current pixel format is unsupported\n[hevc_qsv @ 0x55dfa3f88280] some encoding parameters are not supported by the QSV runtime. Please double check the input parameters.\n[vost#0:0/hevc_qsv @ 0x55dfa3f87dc0] [enc:hevc_qsv @ 0x55dfa3f88200] Error while opening encoder - maybe incorrect parameters such as bit_rate, rate, width or height.\n[vf#0:0 @ 0x55dfa3f890c0] Error sending frames to consumers: Function not implemented\n[vf#0:0 @ 0x55dfa3f890c0] Task finished with error code: -38 (Function not implemented)\n[vf#0:0 @ 0x55dfa3f890c0] Terminating thread with return code -38 (Function not implemented)\n[vost#0:0/hevc_qsv @ 0x55dfa3f87dc0] [enc:hevc_qsv @ 0x55dfa3f88200] Could not open encoder before EOF\n[vost#0:0/hevc_qsv @ 0x55dfa3f87dc0] Task finished with error code: -22 (Invalid argument)\n[vost#0:0/hevc_qsv @ 0x55dfa3f87dc0] Terminating thread with return code -22 (Invalid argument)\n[out#0/null @ 0x55dfa3f87a40] Nothing was written into output file, because at least one of its streams received no packets.\nframe=    0 fps=0.0 q=0.0 Lsize=       0KiB time=N/A bitrate=N/A speed=N/A elapsed=0:00:00.05    \nConversion failed!\n",
    "excerpt": "v @ 0x55dfa3f88200] Could not open encoder before EOF [vost#0:0/hevc_qsv @ 0x55dfa3f87dc0] Task finished with error code: -22 (Invalid argument) [vost#0:0/hevc_qsv @ 0x55dfa3f87dc0] Terminating thread with return code -22 (Invalid argument)",
    "msg": "encoder probe-encode failed (raw stderr captured for forensics)"
}
{
    "level": 30,
    "time": 1781724151817,
    "pid": 7,
    "hostname": "9e99d1499c2b",
    "action": "encoder_detection_complete",
    "detected": [
        "qsv",
        "vaapi",
        "libx265"
    ],
    "activeFromAuto": "qsv",
    "vaapiDevice": "/dev/dri/renderD128",
    "warningCount": 0,
    "outcome": {
        "nvenc": "missing",
        "qsv": "functional",
        "vaapi": "functional",
        "libx265": "functional"
    },
    "probeEncodeDisabled": false,
    "qsvRateControl": "cqp",
    "probeDurationMs": 170,
    "durationMs": 181,
    "msg": "encoder detection complete"
}

The iGPU of the CPU is detected and is working, but I'd like to use the Arc, since it's a lot more performant.

Edited by Benni-chan

  • Author

🚀 v2.29.0 - Queue Controls + Pagination Fixes is live

ghcr.io/masterjb/x265-butler:2.29.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

An operator-QoL release after the clean-running v2.28.0: two queue-control features you asked for, plus three list/pagination fixes.

WHAT CHANGED
• Queue pause/resume (pause-after-current) - a new Pause/Resume control on the Queue page. Pausing stops the queue from picking up the NEXT job while the currently running encode finishes normally (it is not aborted - that is what Cancel-all does). Resume restarts dispatch right away. An amber banner shows the paused state. In-memory only, so a container restart clears the pause.
• Bulk "Encode Now" on Library multi-selection - select multiple Library rows and queue them all at once. Blocklisted or already-queued items are skipped and reported per-item without blocking the rest.
• Queue list no longer goes empty after switching devices/tabs - the pending/scheduled list re-hydrates when the tab regains focus or the live connection reconnects, instead of staying stale until a reload.
• Logs page Per-Job tab is now paginated - the list was capped at 50 entries, so with more than 50 jobs you could not reach the current or older log files. Fixed (with out-of-range page clamping).
• Trash page pagination now works without a full reload - controls repaint in place, and a stale out-of-range page clamps to the last real page.

No new dependencies, no DB migrations, no encode behavior change.

🟢 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.29.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.28.0

🔭 COMING NEXT (v2.30.0)
Already in the works for the next release:

• Anti-double-work fix for central sidecars - if you run sidecar mode "central", already-encoded files can currently get re-queued because the skip check only looks for the sidecar next to the source file, not in the central folder. The next release teaches the loop-protection to read the central sidecars too, so encoded files stay skipped.
• Configurable trash path - the 30-day trash retention currently lives next to your cache, which can park weeks of files on a fast cache SSD/NVMe. v2.30.0 adds a setting to point the trash at your array (or wherever you want) instead.

  • Author
12 hours ago, Benni-chan said:

I have problems getting my Arc A380 to work

when detecting available encoders, i get this error:

{
    "level": 40,
    "time": 1781724151719,
    "pid": 7,
    "hostname": "9e99d1499c2b",
    "action": "encoder_probe_broken",
    "encoder": "qsv",
    "rawStderr": "Input #0, lavfi, from 'testsrc=size=320x240:rate=1:duration=1':\n  Duration: N/A, start: 0.000000, bitrate: N/A\n  Stream #0:0: Video: wrapped_avframe, rgb24, 320x240 [SAR 1:1 DAR 4:3], 1 fps, 1 tbr, 1 tbn\nStream mapping:\n  Stream #0:0 -> #0:0 (wrapped_avframe (native) -> hevc (hevc_qsv))\nPress [q] to stop, [?] for help\nlibva info: VA-API version 1.22.0\nlibva info: User environment variable requested driver 'iHD'\nlibva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so\nlibva info: Found init function __vaDriverInit_1_22\nlibva info: va_openDriver() returns 0\nlibva info: VA-API version 1.22.0\nlibva info: User environment variable requested driver 'iHD'\nlibva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so\nlibva info: Found init function __vaDriverInit_1_22\nlibva info: va_openDriver() returns 0\nlibva info: VA-API version 1.22.0\nlibva info: User environment variable requested driver 'iHD'\nlibva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so\nlibva info: Found init function __vaDriverInit_1_22\nlibva info: va_openDriver() returns 0\nlibva info: VA-API version 1.22.0\nlibva info: User environment variable requested driver 'iHD'\nlibva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so\nlibva info: Found init function __vaDriverInit_1_22\nlibva info: va_openDriver() returns 0\n[hevc_qsv @ 0x55dfa3f88280] Current pixel format is unsupported\n[hevc_qsv @ 0x55dfa3f88280] some encoding parameters are not supported by the QSV runtime. Please double check the input parameters.\n[vost#0:0/hevc_qsv @ 0x55dfa3f87dc0] [enc:hevc_qsv @ 0x55dfa3f88200] Error while opening encoder - maybe incorrect parameters such as bit_rate, rate, width or height.\n[vf#0:0 @ 0x55dfa3f890c0] Error sending frames to consumers: Function not implemented\n[vf#0:0 @ 0x55dfa3f890c0] Task finished with error code: -38 (Function not implemented)\n[vf#0:0 @ 0x55dfa3f890c0] Terminating thread with return code -38 (Function not implemented)\n[vost#0:0/hevc_qsv @ 0x55dfa3f87dc0] [enc:hevc_qsv @ 0x55dfa3f88200] Could not open encoder before EOF\n[vost#0:0/hevc_qsv @ 0x55dfa3f87dc0] Task finished with error code: -22 (Invalid argument)\n[vost#0:0/hevc_qsv @ 0x55dfa3f87dc0] Terminating thread with return code -22 (Invalid argument)\n[out#0/null @ 0x55dfa3f87a40] Nothing was written into output file, because at least one of its streams received no packets.\nframe=    0 fps=0.0 q=0.0 Lsize=       0KiB time=N/A bitrate=N/A speed=N/A elapsed=0:00:00.05    \nConversion failed!\n",
    "excerpt": "v @ 0x55dfa3f88200] Could not open encoder before EOF [vost#0:0/hevc_qsv @ 0x55dfa3f87dc0] Task finished with error code: -22 (Invalid argument) [vost#0:0/hevc_qsv @ 0x55dfa3f87dc0] Terminating thread with return code -22 (Invalid argument)",
    "msg": "encoder probe-encode failed (raw stderr captured for forensics)"
}
{
    "level": 30,
    "time": 1781724151817,
    "pid": 7,
    "hostname": "9e99d1499c2b",
    "action": "encoder_detection_complete",
    "detected": [
        "qsv",
        "vaapi",
        "libx265"
    ],
    "activeFromAuto": "qsv",
    "vaapiDevice": "/dev/dri/renderD128",
    "warningCount": 0,
    "outcome": {
        "nvenc": "missing",
        "qsv": "functional",
        "vaapi": "functional",
        "libx265": "functional"
    },
    "probeEncodeDisabled": false,
    "qsvRateControl": "cqp",
    "probeDurationMs": 170,
    "durationMs": 181,
    "msg": "encoder detection complete"
}

The iGPU of the CPU is detected and is working, but I'd like to use the Arc, since it's a lot more performant.

@Benni-chan Thanks for the detailed log, that made the root cause easy to spot.

What's happening: you have two GPUs in the box (the CPU's iGPU and the Arc A380). x265-butler currently grabs the first render node it finds under /dev/dri (renderD128), which is your iGPU — so detection only ever probes and uses the iGPU. The Arc (renderD129) is never touched. That's also why the log shows "vaapiDevice: /dev/dri/renderD128" and QSV reporting functional: that's the iGPU, not the Arc. There's currently no way to tell the app which GPU to use, so the more powerful Arc just sits idle.

The good news: this is a missing feature, not a broken Arc. I've added it to the roadmap (it'll ship as v2.31.0). Rough plan:

1. Enumerate ALL render devices and probe each one separately, so the app can see which encoder works on which GPU — your Arc will show up as its own option instead of being hidden behind the iGPU.

2. Add a GPU/device picker (onboarding + Settings), so you can explicitly select the Arc. The chosen device gets passed through to both QSV (-qsv_device) and VAAPI (-vaapi_device). Default stays "first device found", so single-GPU setups behave exactly as before.

3. If the Arc needs different encoder parameters than the iGPU (the "Current pixel format is unsupported" line hints it might), I'll handle that as part of the same work.

One heads-up: I don't have an Arc card here to test on, so once a build is ready I'll need your help confirming it works on real hardware.

Before I start planning the details — does this match what you'd expect? Anything specific about your setup I should know (e.g. how many GPUs are passed into the container, and the output of "ls -la /dev/dri" from inside the container)? That last one would help me a lot. Thanks!

Hi,

Anybody knows how to add options to the encoding configuration ?

I have a number a files with black bars that I would like to remove during the execution of x265-butler conversion, how can I achieve that ? I know that under Handbrake I can simply set crop option to auto but I can't find a way to enable that on x265-butler.

Great work by the way !

Thanks

  • Author

🚀 v2.30.0 - Storage + Anti-Double-Work is live

ghcr.io/masterjb/x265-butler:2.30.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

Two storage / anti-double-work fixes from your reports: central-sidecar users no longer get their encoded files re-queued, and the 30-day originals-trash can now live on the array instead of clogging the cache pool.

🔁 CENTRAL-SIDECAR RE-QUEUE FIX
If you run sidecar_mode=central, the skip-pipeline used to read only the "beside" sidecar, so it was blind to its own central forensics and re-queued already-encoded files. It now reads the central sidecar (with a beside fallback for mode-switchers) - loop protection works again. Backend-only, nothing to configure.

🗑️ CONFIGURABLE TRASH LOCATION
New field: Settings → Encoder → Sidecar card → Trash location.

• Leave it EMPTY (default) → trash stays on the cache pool exactly as before (byte-identical, one-click revert).
• Set an absolute path (e.g. /mnt/user/media-trash on the array) → the 30-day recoverable originals go there instead of clogging your fast cache.

Cache→array cross-device moves are handled automatically. The path must be absolute, not a system root, and NOT inside a scanned share (otherwise the watcher would re-ingest the trashed originals - the exact loop this build prevents). A bad/unmounted trash path now fails loud with a clear trash_move_failed error instead of a cryptic encode failure, and in replace-mode your original is left intact.

No new settings are required to upgrade - empty trash_path behaves identically to v2.29.x.

🟢 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.30.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.29.0

🔭 COMING NEXT
Working on multi-GPU device selection for the next release:

• Pick which GPU encodes when you have more than one (e.g. an Arc A380 dGPU next to an Intel iGPU) - right now the first render node is always used, so the dGPU never gets picked.
• Per-device encoder detection probe + a device picker in onboarding and Settings.
• Arc pixel-format deep-fix.

Plans can change, but that is the current focus.

  • Author
3 hours ago, tbal82 said:

Hi,

Anybody knows how to add options to the encoding configuration ?

I have a number a files with black bars that I would like to remove during the execution of x265-butler conversion, how can I achieve that ? I know that under Handbrake I can simply set crop option to auto but I can't find a way to enable that on x265-butler.

Great work by the way !

Thanks


Hi @tbal82

Thanks for the kind words, glad it's working well for you!

Right now there's no crop option yet: x265-butler doesn't apply any video filter during encoding, so black-bar removal isn't available in the current release.

Good news though, your request put this on the roadmap. The exact Handbrake crop=auto equivalent (an ffmpeg cropdetect pre-pass that auto-detects the letterbox/pillarbox bars and crops them during the encode) is now planned as a dedicated feature, prompted directly by your post, with an operator on/off toggle in Settings so it stays opt-in. Your use case (letterboxed sources) is exactly what it's aimed at.

I'll post here once it ships in a release. Thanks for the suggestion, keep them coming!


Hi @tbal82

Thanks for the kind words, glad it's working well for you!

Right now there's no crop option yet: x265-butler doesn't apply any video filter during encoding, so black-bar removal isn't available in the current release.

Good news though, your request put this on the roadmap. The exact Handbrake crop=auto equivalent (an ffmpeg cropdetect pre-pass that auto-detects the letterbox/pillarbox bars and crops them during the encode) is now planned as a dedicated feature, prompted directly by your post, with an operator on/off toggle in Settings so it stays opt-in. Your use case (letterboxed sources) is exactly what it's aimed at.

I'll post here once it ships in a release. Thanks for the suggestion, keep them coming!

Amazing, thank you so much !

Hello,
as already mentioned,
the queue - progressbar disapears like already mentioned in this post.
And if you set the encoding parallelism to 2 or higher, a corresponding progress bar would be useful... :)

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.