Skip to content

GPU encoding fails on Intel N100 #36

Open

Description

@raddevon

I'm unable to take advantage of GPU encoding on my N100. I believe I have everything configured properly, but encoding fails. I'm running in Docker, and I've exposed my GPU to the container. I've also set VERTD_VAAPI_DEVICE_PATH to /dev/dri/renderD128.

Here are the logs from vertd when I try to convert a video:

[2025-12-01T02:41:10Z INFO  vertd] starting vertd
[2025-12-01T02:41:10Z INFO  vertd] working w/ ffmpeg 6.1.1-3ubuntu5 and ffprobe 6.1.1-3ubuntu5
[2025-12-01T02:41:10Z INFO  vertd] using VA-API device path from environment variable VERTD_VAAPI_DEVICE_PATH: /dev/dri/renderD128
[2025-12-01T02:41:10Z INFO  vertd] detected an Intel GPU -- if this isn't your vendor, open an issue.
[2025-12-01T02:41:10Z INFO  vertd] using VA-API device path: /dev/dri/renderD128
[2025-12-01T02:41:10Z INFO  vertd::http] http server listening on 0.0.0.0:24153
[2025-12-01T02:42:05Z INFO  vertd::http::services::upload] uploaded file: IMG_3312.mov
[2025-12-01T02:42:12Z INFO  vertd::converter] running 'ffmpeg -hide_banner -loglevel error -progress pipe:1 -hwaccel vaapi -vaapi_device /dev/dri/renderD128 -hwaccel_output_format vaapi -i input/87b78cee-7242-4434-88b3-c0bbaee9d2aa.mov -c:v h264_vaapi -c:a aac -strict experimental -preset slow -b:v 26297690 -map_metadata 0 -map_chapters 0 output/87b78cee-7242-4434-88b3-c0bbaee9d2aa.mkv'
[2025-12-01T02:42:12Z ERROR vertd::converter] [h264_vaapi @ 0x55ec7f77a400] No usable encoding profile found.
[2025-12-01T02:42:12Z ERROR vertd::converter] [vost#0:0/h264_vaapi @ 0x55ec7f77a040] Error while opening encoder - maybe incorrect parameters such as bit_rate, rate, width or height.
[2025-12-01T02:42:12Z ERROR vertd::converter] Error while filtering: Function not implemented
[2025-12-01T02:42:12Z ERROR vertd::converter] [out#0/matroska @ 0x55ec7f6b3a00] Nothing was written into output file, because at least one of its streams received no packets.
[2025-12-01T02:42:12Z ERROR vertd::http::services::websocket] job 87b78cee-7242-4434-88b3-c0bbaee9d2aa failed
[2025-12-01T02:42:12Z ERROR vertd::http::services::websocket] failed to handle job failure: environment variable not found

Is there something I'm doing wrong on my side? Any other info I can provide to help?

Activity

  1. azurejelly commented on Dec 1, 2025

    @azurejelly
    Contributor

    Does it work if you run it directly on the host machine?

  2. raddevon commented on Dec 1, 2025

    @raddevon
    Author

    @azurejelly Yes, in fact, I was able to use this command from within my container, and it seemed to be working:

    ffmpeg -init_hw_device vaapi=va:/dev/dri/renderD128 -filter_hw_device va -f lavfi -i color=size=1920x1080:rate=30 -vf "format=nv12,hwupload" -c:v h264_vaapi -f null -
    

    It appears just the command built by vertd doesn't work for me.

    UPDATE: Sorry, I misunderstood your question. I think you're asking if I can run the vertd-generated ffmpeg command on the host. No, I can't. I get the following:

    [AVHWDeviceContext @ 0x55f93c580000] No VA display found for device /dev/dri/renderD128.
    Device creation failed: -22.
    Failed to set value '/dev/dri/renderD128' for option 'vaapi_device': Invalid argument
    Error parsing global options: Invalid argument
    
  3. azurejelly commented on Dec 1, 2025

    @azurejelly
    Contributor

    sorry, i meant whether vertd works when it is run directly on the host machine (i.e. not in a docker container) using one of the binaries from https://github.com/VERT-sh/vertd/releases. i wanted to see if it could be caused by some random missing dependency on the container, though i highly doubt that's the case

  4. raddevon commented on Dec 1, 2025

    @raddevon
    Author

    Not sure the best way to test on the host, but I did it with this script:

    Test script
    import requests
    import json
    from websocket import create_connection
    
    PORT = 24153
    BASE_URL = f"http://localhost:{PORT}/api"
    WS_URL = f"ws://localhost:{PORT}/api/ws"
    FILE_PATH = "/home/raddevon/Downloads/IMG_3312.MOV"
    TARGET_FORMAT = "mp4"
    
    
    def main():
        with open(FILE_PATH, "rb") as f:
            response = requests.post(f"{BASE_URL}/upload", files={"file": f})
    
        if response.status_code != 200:
            print(f"Upload failed: {response.text}")
            return
    
        resp_json = response.json()
        job_data = resp_json["data"]
        job_id = job_data["id"]
        token = job_data["auth"]
    
        try:
            ws = create_connection(WS_URL)
        except Exception as e:
            print(f"WebSocket connection failed: {e}")
            return
    
        start_payload = {
            "type": "startJob",
            "data": {
                "token": token,
                "jobId": job_id,
                "to": TARGET_FORMAT,
                "speed": "fast",
                "keepMetadata": True,
            },
        }
    
        ws.send(json.dumps(start_payload))
    
        while True:
            try:
                result = ws.recv()
                msg = json.loads(result)
                msg_type = msg.get("type")
    
                if msg_type == "progressUpdate":
                    data = msg.get("data", {})
                    if "frame" in data:
                        print(
                            f"\r      Processing Frame: {data['frame']}", end="", flush=True
                        )
    
                elif msg_type == "jobFinished":
                    download_file(job_id, token)
                    break
    
                elif msg_type == "error":
                    print(
                        f"\nError received from server: {msg.get('data', {}).get('message')}"
                    )
                    break
    
                elif msg_type == "jobCancelled":
                    print("\nJob was cancelled.")
                    break
    
            except KeyboardInterrupt:
                print("\nStopping...")
                ws.close()
                return
    
        ws.close()
    
    
    def download_file(job_id, token):
        print(f"      Downloading result...")
        url = f"{BASE_URL}/download/{job_id}/{token}"
    
        with requests.get(url, stream=True) as r:
            r.raise_for_status()
            output_filename = f"output_{job_id}.{TARGET_FORMAT}"
            with open(output_filename, "wb") as f:
                for chunk in r.iter_content(chunk_size=8192):
                    f.write(chunk)
    
        print(f"      Saved to: {output_filename}")
    
    
    if __name__ == "__main__":
        main()

    I'm afraid I did even worse here. The server logs this when I run the script and the upload starts:

    ERROR vertd::http::services::upload] failed to parse file extension: Matching variant not found
    
  5. JovannMC commented on Dec 15, 2025

    @JovannMC
    Member

    can you try using it through the VERT UI instead of your script and let us know what errors you get there? and does running it on your local machine outside of docker work (as @azurejelly said)?

  6. raddevon commented on Dec 15, 2025

    @raddevon
    Author

    When I run vertd on the host (no options), I get this:

    [2025-12-15T18:19:35Z INFO  vertd] starting vertd
    [2025-12-15T18:19:35Z INFO  vertd] working w/ ffmpeg 7.1.2-0+deb13u1 and ffprobe 7.1.2-0+deb13u1
    [2025-12-15T18:19:35Z WARN  vertd::converter::gpu] *******
    [2025-12-15T18:19:35Z WARN  vertd::converter::gpu] you're running vertd on a docker container, but no GPU was detected.
    [2025-12-15T18:19:35Z WARN  vertd::converter::gpu] this usually is because you're running Docker under WSL or because
    [2025-12-15T18:19:35Z WARN  vertd::converter::gpu] you are not passing the GPU device correctly.
    [2025-12-15T18:19:35Z WARN  vertd::converter::gpu]
    [2025-12-15T18:19:35Z WARN  vertd::converter::gpu] if this doesn't seem right, make sure to provide the following info when
    [2025-12-15T18:19:35Z WARN  vertd::converter::gpu] asking for help:
    [2025-12-15T18:19:35Z WARN  vertd::converter::gpu] - adapter name: llvmpipe (LLVM 19.1.7, 256 bits)
    [2025-12-15T18:19:35Z WARN  vertd::converter::gpu] - adapter vendor: 0x10005
    [2025-12-15T18:19:35Z WARN  vertd::converter::gpu] - backend: vulkan
    [2025-12-15T18:19:35Z WARN  vertd::converter::gpu] - device ID: 0
    [2025-12-15T18:19:35Z WARN  vertd::converter::gpu] - device type: Cpu
    [2025-12-15T18:19:35Z WARN  vertd::converter::gpu] - driver: llvmpipe
    [2025-12-15T18:19:35Z WARN  vertd::converter::gpu] - driver info: Mesa 25.0.7-2 (LLVM 19.1.7)
    [2025-12-15T18:19:35Z WARN  vertd::converter::gpu]
    [2025-12-15T18:19:35Z WARN  vertd::converter::gpu] vertd will fall back to CPU rendering to ensure conversions can still proceed.
    [2025-12-15T18:19:35Z WARN  vertd::converter::gpu] *******
    [2025-12-15T18:19:35Z INFO  vertd] using CPU rendering (software encoding) -- this will be slower than GPU acceleration
    [2025-12-15T18:19:35Z INFO  vertd::http] http server listening on 0.0.0.0:24153
    

    If I run it with --gpu intel, it seems to start fine. The video conversion doesn't work though. I get this:

    Image
    Developer tools console output
    Navigated to http://192.168.1.162:5173/convert/
    Theme: dark, prefers dark: true [convert:2808:13](http://192.168.1.162:5173/convert/)
    Applying theme: dark [convert:2818:13](http://192.168.1.162:5173/convert/)
    [vite] connecting... [client:495:9](http://192.168.1.162:5173/@vite/client)
    [vite] connected. [client:618:15](http://192.168.1.162:5173/@vite/client)
    converters imagemagick created converter [logger.ts:34:10](http://192.168.1.162:5173/src/lib/util/logger.ts)
    converters ffmpeg created converter [logger.ts:34:10](http://192.168.1.162:5173/src/lib/util/logger.ts)
    Module "path" has been externalized for browser compatibility. Cannot access "path.isAbsolute" in client code. See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details. [client.js:3208:15](http://192.168.1.162:5173/node_modules/@sveltejs/kit/src/runtime/client/client.js?v=0220b2f4)
    Module "path" has been externalized for browser compatibility. Cannot access "path.resolve" in client code. See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details. [client.js:3208:15](http://192.168.1.162:5173/node_modules/@sveltejs/kit/src/runtime/client/client.js?v=0220b2f4)
    Module "source-map-js" has been externalized for browser compatibility. Cannot access "source-map-js.SourceMapConsumer" in client code. See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details. [client.js:3208:15](http://192.168.1.162:5173/node_modules/@sveltejs/kit/src/runtime/client/client.js?v=0220b2f4)
    Module "source-map-js" has been externalized for browser compatibility. Cannot access "source-map-js.SourceMapGenerator" in client code. See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details. [client.js:3208:15](http://192.168.1.162:5173/node_modules/@sveltejs/kit/src/runtime/client/client.js?v=0220b2f4)
    Module "url" has been externalized for browser compatibility. Cannot access "url.fileURLToPath" in client code. See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details. [client.js:3208:15](http://192.168.1.162:5173/node_modules/@sveltejs/kit/src/runtime/client/client.js?v=0220b2f4)
    Module "url" has been externalized for browser compatibility. Cannot access "url.pathToFileURL" in client code. See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details. [client.js:3208:15](http://192.168.1.162:5173/node_modules/@sveltejs/kit/src/runtime/client/client.js?v=0220b2f4)
    Module "fs" has been externalized for browser compatibility. Cannot access "fs.existsSync" in client code. See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details. [client.js:3208:15](http://192.168.1.162:5173/node_modules/@sveltejs/kit/src/runtime/client/client.js?v=0220b2f4)
    Module "fs" has been externalized for browser compatibility. Cannot access "fs.readFileSync" in client code. See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details. [client.js:3208:15](http://192.168.1.162:5173/node_modules/@sveltejs/kit/src/runtime/client/client.js?v=0220b2f4)
    Module "path" has been externalized for browser compatibility. Cannot access "path.dirname" in client code. See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details. [client.js:3208:15](http://192.168.1.162:5173/node_modules/@sveltejs/kit/src/runtime/client/client.js?v=0220b2f4)
    Module "path" has been externalized for browser compatibility. Cannot access "path.join" in client code. See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details. [client.js:3208:15](http://192.168.1.162:5173/node_modules/@sveltejs/kit/src/runtime/client/client.js?v=0220b2f4)
    Module "source-map-js" has been externalized for browser compatibility. Cannot access "source-map-js.SourceMapConsumer" in client code. See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details. [client.js:3208:15](http://192.168.1.162:5173/node_modules/@sveltejs/kit/src/runtime/client/client.js?v=0220b2f4)
    Module "source-map-js" has been externalized for browser compatibility. Cannot access "source-map-js.SourceMapGenerator" in client code. See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details. [client.js:3208:15](http://192.168.1.162:5173/node_modules/@sveltejs/kit/src/runtime/client/client.js?v=0220b2f4)
    Module "path" has been externalized for browser compatibility. Cannot access "path.dirname" in client code. See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details. [client.js:3208:15](http://192.168.1.162:5173/node_modules/@sveltejs/kit/src/runtime/client/client.js?v=0220b2f4)
    Module "path" has been externalized for browser compatibility. Cannot access "path.relative" in client code. See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details. [client.js:3208:15](http://192.168.1.162:5173/node_modules/@sveltejs/kit/src/runtime/client/client.js?v=0220b2f4)
    Module "path" has been externalized for browser compatibility. Cannot access "path.resolve" in client code. See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details. [client.js:3208:15](http://192.168.1.162:5173/node_modules/@sveltejs/kit/src/runtime/client/client.js?v=0220b2f4)
    Module "path" has been externalized for browser compatibility. Cannot access "path.sep" in client code. See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details. [client.js:3208:15](http://192.168.1.162:5173/node_modules/@sveltejs/kit/src/runtime/client/client.js?v=0220b2f4)
    Module "source-map-js" has been externalized for browser compatibility. Cannot access "source-map-js.SourceMapConsumer" in client code. See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details. [client.js:3208:15](http://192.168.1.162:5173/node_modules/@sveltejs/kit/src/runtime/client/client.js?v=0220b2f4)
    Module "source-map-js" has been externalized for browser compatibility. Cannot access "source-map-js.SourceMapGenerator" in client code. See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details. [client.js:3208:15](http://192.168.1.162:5173/node_modules/@sveltejs/kit/src/runtime/client/client.js?v=0220b2f4)
    Module "url" has been externalized for browser compatibility. Cannot access "url.pathToFileURL" in client code. See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details. [client.js:3208:15](http://192.168.1.162:5173/node_modules/@sveltejs/kit/src/runtime/client/client.js?v=0220b2f4)
    converters using cached max ArrayBuffer size: 17179869184 bytes [logger.ts:34:10](http://192.168.1.162:5173/src/lib/util/logger.ts)
    [vite] connecting... [client:495:9](http://192.168.1.162:5173/@vite/client)
    [vite] connected. [client:618:15](http://192.168.1.162:5173/@vite/client)
    files 
    error { target: img, isTrusted: true, srcElement: img, currentTarget: img, eventPhase: 2, bubbles: false, cancelable: false, returnValue: true, defaultPrevented: false, composed: false, … }
    ​
    bubbles: false
    ​
    cancelBubble: false
    ​
    cancelable: false
    ​
    composed: false
    ​
    currentTarget: null
    ​
    defaultPrevented: false
    ​
    eventPhase: 0
    ​
    explicitOriginalTarget: <img src="blob:http://192.168.1.16…5-4f3b-980b-311cf9cab899">
    ​
    isTrusted: true
    ​
    originalTarget: <img src="blob:http://192.168.1.16…5-4f3b-980b-311cf9cab899">
    ​
    returnValue: true
    ​
    srcElement: <img src="blob:http://192.168.1.16…5-4f3b-980b-311cf9cab899">
    ​
    target: <img src="blob:http://192.168.1.16…5-4f3b-980b-311cf9cab899">
    ​
    timeStamp: 3964
    ​
    type: "error"
    ​
    <get isTrusted()>: function isTrusted()
    ​
    <prototype>: EventPrototype { composedPath: composedPath(), stopPropagation: stopPropagation(), stopImmediatePropagation: stopImmediatePropagation(), … }
    [logger.ts:54:10](http://192.168.1.162:5173/src/lib/util/logger.ts)
    
  7. upmcplanetracker commented on Sep 6, 2026

    @upmcplanetracker
    Contributor

    I think this has to do with the flags that are hard coded in the container. The repo is trying a one size fits all approach but that doesn't work unfortunately. When you ran it by hand you had different flags and it worked.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions