June 4Jun 4 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/AStream #0:0: Video: wrapped_avframe, rgb24, 320x240 [SAR 1:1 DAR 4:3], 30 fps, 30 tbr, 30 tbnStream mapping:Stream #0:0 -> #0:0 (wrapped_avframe (native) -> hevc (hevc_nvenc))Press [q] to stop, [?] for helpOutput #0, null, to 'pipe:':Metadata:encoder : Lavf62.15.100Stream #0:0: Video: hevc (Rext), gbrp(pc, gbr/unknown/unknown, progressive), 320x240 [SAR 1:1 DAR 4:3], q=2-31, 30 fps, 30 tbnMetadata:encoder : Lavc62.30.100 hevc_nvencSide 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: unknownframe= 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.182) 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/AStream #0:0: Video: wrapped_avframe, rgb24, 320x240 [SAR 1:1 DAR 4:3], 30 fps, 30 tbr, 30 tbnStream mapping:Stream #0:0 -> #0:0 (wrapped_avframe (native) -> hevc (hevc_nvenc))Press [q] to stop, [?] for helpOutput #0, null, to 'pipe:':Metadata:encoder : Lavf62.15.100Stream #0:0: Video: hevc (Rext), gbrp(pc, gbr/unknown/unknown, progressive), 320x240 [SAR 1:1 DAR 4:3], q=2-31, 30 fps, 30 tbnMetadata:encoder : Lavc62.30.100 hevc_nvencSide 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: unknownframe= 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.183) 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/AStream #0:0: Video: wrapped_avframe, rgb24, 320x240 [SAR 1:1 DAR 4:3], 30 fps, 30 tbr, 30 tbnStream mapping:Stream #0:0 -> #0:0 (wrapped_avframe (native) -> hevc (hevc_nvenc))Press [q] to stop, [?] for helpOutput #0, null, to 'pipe:':Metadata:encoder : Lavf62.15.100Stream #0:0: Video: hevc (Rext), gbrp(pc, gbr/unknown/unknown, progressive), 320x240 [SAR 1:1 DAR 4:3], q=2-31, 30 fps, 30 tbnMetadata:encoder : Lavc62.30.100 hevc_nvencSide 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: unknownframe= 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.18I 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!
June 5Jun 5 Thanky you for your fixes.HW acceleration seems to be working again but only with VAAPI, QSV ist still "broken" with the same error messageencoder · 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 tI don't know if there would be any differences in quality, compression or speed
June 12Jun 12 Author 🚀 v2.26.0 — code-quality sweep (maintenance release) is liveghcr.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:latestdocker restart x265-butlerThis 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=nvidiaVariables:NVIDIA_VISIBLE_DEVICES = allNVIDIA_DRIVER_CAPABILITIES = compute,video,utilityThe "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.♻️ ROLLBACKIf v2.26.0 misbehaves on your hardware, roll back to the previous image:docker stop x265-butler && docker rm x265-butlerdocker pull ghcr.io/masterjb/x265-butler:2.25.0
June 12Jun 12 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 messageencoder · 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 tI 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 qsvdocker 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.
June 12Jun 12 @Human-126094Here are my results:HEVC Entrypointsffmpeg -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 : VAEntrypointEncSliceLPBaselineInput #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.48Variant 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.11Variant 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.44So Variant A fails immediately, every other variant has "muxing overhead: unknown". The baseline, B and C should workI have an i5-14500T with the iGPU UHD Graphics 770 Edited June 12Jun 12 by rasalf
June 13Jun 13 Author 9 hours ago, rasalf said:@Human-126094Here are my results:HEVC Entrypointsffmpeg -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 : VAEntrypointEncSliceLPBaselineInput #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.48Variant 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.11Variant 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.44So Variant A fails immediately, every other variant has "muxing overhead: unknown". The baseline, B and C should workI 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.
June 13Jun 13 Hmm thats strange I did "reset" the config and recreate the container but still the same behavior.Container LOG2026/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
June 13Jun 13 Author 🚀 v2.27.0 — QSV ratecontrol path fix + code-quality hardening is liveghcr.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:latestdocker restart x265-butlerThe 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=nvidiaVariables:NVIDIA_VISIBLE_DEVICES = allNVIDIA_DRIVER_CAPABILITIES = compute,video,utilityThe "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.♻️ ROLLBACKIf v2.27.0 misbehaves on your hardware, roll back to the previous image:docker stop x265-butler && docker rm x265-butlerdocker pull ghcr.io/masterjb/x265-butler:2.26.0
June 13Jun 13 Author 9 hours ago, rasalf said:Hmm thats strange I did "reset" the config and recreate the container but still the same behavior.Container LOG2026/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:latestdocker restart x265-butlerThen 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.
June 13Jun 13 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
June 14Jun 14 I did some runs and everything works as expected. :DI 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 June 14Jun 14 by rasalf
June 14Jun 14 Author 🚀 v2.28.0 - output compatibility + bench fixes is liveghcr.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:latestdocker restart x265-butlerThree 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 FILEThe 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 VERIFYRunning 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=nvidiaVariables:NVIDIA_VISIBLE_DEVICES = allNVIDIA_DRIVER_CAPABILITIES = compute,video,utilityThe "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.♻️ ROLLBACKIf v2.28.0 misbehaves on your hardware, roll back to the previous image:docker stop x265-butler && docker rm x265-butlerdocker pull ghcr.io/masterjb/x265-butler:2.27.0
June 14Jun 14 Author 5 hours ago, rasalf said:I did some runs and everything works as expected. :DI 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! :DGood 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-butler1) "-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!
June 14Jun 14 I cant fix this error for some reason/media readable=true writable=false error=EACCESIm using a share called jellyfin that has all my files on it and have prems setup right as far as i can seeWhat am i doing wrong ;-;
June 15Jun 15 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?
June 16Jun 16 @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 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 June 16Jun 16 by rasalf
June 17Jun 17 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 selfGreetingsChris Edited June 17Jun 17 by cmeyer86
June 17Jun 17 I have problems getting my Arc A380 to workwhen 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 June 17Jun 17 by Benni-chan
June 18Jun 18 Author 🚀 v2.29.0 - Queue Controls + Pagination Fixes is liveghcr.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:latestdocker restart x265-butlerAn 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=nvidiaVariables:NVIDIA_VISIBLE_DEVICES = allNVIDIA_DRIVER_CAPABILITIES = compute,video,utilityThe "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.♻️ ROLLBACKIf v2.29.0 misbehaves on your hardware, roll back to the previous image:docker stop x265-butler && docker rm x265-butlerdocker 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.
June 18Jun 18 Author 12 hours ago, Benni-chan said:I have problems getting my Arc A380 to workwhen 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!
June 18Jun 18 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
June 18Jun 18 Author 🚀 v2.30.0 - Storage + Anti-Double-Work is liveghcr.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:latestdocker restart x265-butlerTwo 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 FIXIf 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 LOCATIONNew 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=nvidiaVariables:NVIDIA_VISIBLE_DEVICES = allNVIDIA_DRIVER_CAPABILITIES = compute,video,utilityThe "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.♻️ ROLLBACKIf v2.30.0 misbehaves on your hardware, roll back to the previous image:docker stop x265-butler && docker rm x265-butlerdocker pull ghcr.io/masterjb/x265-butler:2.29.0🔭 COMING NEXTWorking 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.
June 18Jun 18 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 !ThanksHi @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!
June 18Jun 18 Hi @tbal82Thanks 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 !
June 19Jun 19 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.