Unable to enable nVidia GPU in ConvertX application

I am trying to enable the nVidia GPU in the ConvertX application but am getting an error message. GPU support is already enabled in the Plex app (essential) and Immich (very nice to have). I am utilizing the following:

  • TrueNAS version 25.04.1
  • nVidia 1080 video card with the nVidia drivers installed
  • convert App Version: v0.13.0 Version: v1.0.3

The error message I’m getting is:

[EFAULT] Failed to render compose templates: Traceback (most recent call last): File "/usr/bin/apps_render_app", line 33, in sys.exit(load_entry_point('apps-validation==0.1', 'console_scripts', 'apps_render_app')()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/catalog_templating/scripts/render_compose.py", line 48, in main render_templates_from_path(args.path, args.values) File "/usr/lib/python3/dist-packages/catalog_templating/scripts/render_compose.py", line 19, in render_templates_from_path rendered_data = render_templates( ^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/catalog_templating/render.py", line 31, in render_templates rendered_templates[i.name] = env.get_template(i.name).render( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/jinja2/environment.py", line 1301, in render self.environment.handle_exception() File "/usr/lib/python3/dist-packages/jinja2/environment.py", line 936, in handle_exception raise rewrite_traceback_stack(source=source) File "/mnt/.ix-apps/app_configs/convertx/versions/1.0.3/templates/docker-compose.yaml", line 3, in top-level template code {% set c1 = tpl.add_container(values.consts.convertx_container_name, "image") %} ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/mnt/.ix-apps/app_configs/convertx/versions/1.0.3/templates/library/base_v2_1_33/render.py", line 59, in add_container container = Container(self, name, image) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/mnt/.ix-apps/app_configs/convertx/versions/1.0.3/templates/library/base_v2_1_33/container.py", line 99, in __init__ self.deploy: Deploy = Deploy(self._render_instance) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/mnt/.ix-apps/app_configs/convertx/versions/1.0.3/templates/library/base_v2_1_33/deploy.py", line 15, in __init__ self.resources: Resources = Resources(self._render_instance) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/mnt/.ix-apps/app_configs/convertx/versions/1.0.3/templates/library/base_v2_1_33/resources.py", line 24, in __init__ self._auto_add_gpus_from_values() File "/mnt/.ix-apps/app_configs/convertx/versions/1.0.3/templates/library/base_v2_1_33/resources.py", line 55, in _auto_add_gpus_from_values raise RenderError(f"Expected [uuid] to be set for GPU in slot [{pci}] in [nvidia_gpu_selection]") base_v2_1_33.error.RenderError: Expected [uuid] to be set for GPU in slot [0000:01:00.0] in [nvidia_gpu_selection]

And, for the additional details:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/middlewared/job.py", line 515, in run
    await self.future
  File "/usr/lib/python3/dist-packages/middlewared/job.py", line 562, in __run_body
    rv = await self.middleware.run_in_thread(self. Method, *args)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/middlewared/main.py", line 622, in run_in_thread
    return await self.run_in_executor(io_thread_pool_executor, method, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/middlewared/main.py", line 619, in run_in_executor
    return await loop.run_in_executor(pool, functools.partial(method, *args, **kwargs))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/middlewared/service/crud_service.py", line 294, in nf
    rv = func(*args, **kwargs)
         ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/middlewared/api/base/decorator.py", line 101, in wrapped
    result = func(*args)
             ^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/middlewared/plugins/apps/crud.py", line 229, in do_update
    app = self.update_internal(job, app, data, trigger_compose=app['state'] != 'STOPPED')
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/middlewared/plugins/apps/crud.py", line 259, in update_internal
    update_app_config(app_name, app['version'], new_values, custom_app=app['custom_app'])
  File "/usr/lib/python3/dist-packages/middlewared/plugins/apps/ix_apps/lifecycle.py", line 60, in update_app_config
    render_compose_templates(
  File "/usr/lib/python3/dist-packages/middlewared/plugins/apps/ix_apps/lifecycle.py", line 51, in render_compose_templates
    raise CallError(f'Failed to render compose templates: {cp.stderr}')
middlewared.service_exception.CallError: [EFAULT] Failed to render compose templates: Traceback (most recent call last):
  File "/usr/bin/apps_render_app", line 33, in <module>
    sys.exit(load_entry_point('apps-validation==0.1', 'console_scripts', 'apps_render_app')())
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/catalog_templating/scripts/render_compose.py", line 48, in main
    render_templates_from_path(args.path, args.values)
  File "/usr/lib/python3/dist-packages/catalog_templating/scripts/render_compose.py", line 19, in render_templates_from_path
    rendered_data = render_templates(
                    ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/catalog_templating/render.py", line 31, in render_templates
    rendered_templates[i.name] = env.get_template(i.name).render(
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/jinja2/environment.py", line 1301, in render
    self.environment.handle_exception()
  File "/usr/lib/python3/dist-packages/jinja2/environment.py", line 936, in handle_exception
    raise rewrite_traceback_stack(source=source)
  File "/mnt/.ix-apps/app_configs/convertx/versions/1.0.3/templates/docker-compose.yaml", line 3, in top-level template code
    {% set c1 = tpl.add_container(values.consts.convertx_container_name, "image") %}
    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/.ix-apps/app_configs/convertx/versions/1.0.3/templates/library/base_v2_1_33/render.py", line 59, in add_container
    container = Container(self, name, image)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/.ix-apps/app_configs/convertx/versions/1.0.3/templates/library/base_v2_1_33/container.py", line 99, in __init__
    self.deploy: Deploy = Deploy(self._render_instance)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/.ix-apps/app_configs/convertx/versions/1.0.3/templates/library/base_v2_1_33/deploy.py", line 15, in __init__
    self.resources: Resources = Resources(self._render_instance)
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/.ix-apps/app_configs/convertx/versions/1.0.3/templates/library/base_v2_1_33/resources.py", line 24, in __init__
    self._auto_add_gpus_from_values()
  File "/mnt/.ix-apps/app_configs/convertx/versions/1.0.3/templates/library/base_v2_1_33/resources.py", line 55, in _auto_add_gpus_from_values
    raise RenderError(f"Expected [uuid] to be set for GPU in slot [{pci}] in [nvidia_gpu_selection]")
base_v2_1_33.error.RenderError: Expected [uuid] to be set for GPU in slot [0000:01:00.0] in [nvidia_gpu_selection]

Looks like doing this fixed the issue:

root@vaultron[~]# midclt call -j app.update convertx '{"values": {"resources": {"gpus": {"use_all_gpus": false, "nvidia_gpu_selection": {"0000:01:00.0": {"use_gpu": true, "uuid": "GPU-7d1f2315-1ef7-2c87-facb-5a412fb16292"}}}}}}'

Status: Update completed for 'convertx'
Total Progress: [########################################] 100.00%
{"name": "convertx", "id": "convertx", "active_workloads": {"containers": 2, "used_ports": [{"container_port": 3000, "protocol": "tcp", "host_ports": [{"host_port": 3000, "host_ip": "192.168.1.2"}]}], "container_details": [{"service_name": "convertx", "image": "ghcr.io/c4illin/convertx:v0.13.0", "port_config": [{"container_port": 3000, "protocol": "tcp", "host_ports": [{"host_port": 3000, "host_ip": "192.168.1.2"}]}], "state": "starting", "volume_mounts": [{"source": "/mnt/.ix-apps/docker/volumes/ix-convertx_tmp-convertx/_data", "destination": "/.config", "mode": "z", "type": "volume"}, {"source": "/mnt/.ix-apps/app_mounts/convertx/data", "destination": "/app/data", "mode": "", "type": "bind"}], "id": "efa8b574e5f61547414a091f4170138f1c9f6c943cb95ac6a8f97d1cd0cb6d2b"}, {"service_name": "permissions", "image": "python:3.13.0-slim-bookworm", "port_config": [], "state": "exited", "volume_mounts": [{"source": "/mnt/.ix-apps/docker/volumes/ix-convertx_tmp-convertx/_data", "destination": "/mnt/permission/tmp-convertx", "mode": "z", "type": "volume"}, {"source": "/mnt/.ix-apps/app_mounts/convertx/data", "destination": "/mnt/permission/data", "mode": "", "type": "bind"}], "id": "71b4134076b73cead0eaf2251bb7cb240cf0d6c1616b1efe2541173d7df927ca"}], "volumes": [{"source": "/mnt/.ix-apps/docker/volumes/ix-convertx_tmp-convertx/_data", "destination": "/mnt/permission/tmp-convertx", "mode": "z", "type": "volume"}, {"source": "/mnt/.ix-apps/docker/volumes/ix-convertx_tmp-convertx/_data", "destination": "/.config", "mode": "z", "type": "volume"}, {"source": "/mnt/.ix-apps/app_mounts/convertx/data", "destination": "/app/data", "mode": "", "type": "bind"}, {"source": "/mnt/.ix-apps/app_mounts/convertx/data", "destination": "/mnt/permission/data", "mode": "", "type": "bind"}], "images": ["python:3.13.0-slim-bookworm", "ghcr.io/c4illin/convertx:v0.13.0"], "networks": [{"Name": "ix-convertx_default", "Id": "2ddc41e27161e90437212eb38b52229c71083dafa05fccfdc53cb0745e26ecf1", "Created": "2025-06-03T15:26:30.209259451-05:00", "Scope": "local", "Driver": "bridge", "EnableIPv6": true, "IPAM": {"Driver": "default", "Options": null, "Config": [{"Subnet": "172.16.20.0/24", "Gateway": "172.16.20.1"}, {"Subnet": "fdd0:0:0:10::/64", "Gateway": "fdd0:0:0:10::1/64"}]}, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": {"Network": ""}, "ConfigOnly": false, "Containers": {}, "Options": {"com.docker.network.enable_ipv6": "true"}, "Labels": {"com.docker.compose.config-hash": "a823c309242bef16df0180e39b87e87f91a502869e4424dfa4e920358a5e84ef", "com.docker.compose.network": "default", "com.docker.compose.project": "ix-convertx", "com.docker.compose.version": "2.32.3"}}]}, "state": "DEPLOYING", "upgrade_available": false, "latest_version": "1.0.3", "image_updates_available": false, "custom_app": false, "human_version": "v0.13.0_1.0.3", "metadata": {"app_version": "v0.13.0", "capabilities": [], "categories": ["productivity"], "changelog_url": "https://github.com/C4illin/ConvertX/releases", "date_added": "2025-05-05", "description": "ConvertX is a self-hosted online file converter with support for over 1000 formats", "home": "https://github.com/C4illin/ConvertX", "host_mounts": [], "icon": "https://media.sys.truenas.net/apps/convertx/icons/icon.png", "keywords": ["convertx", "files", "conversion"], "lib_version": "2.1.33", "lib_version_hash": "e1e627d9dcfb3c3810f1d1ebaa7978729a5ecad54ddcffe112ac1f3e9b1acba5", "maintainers": [{"email": "dev@ixsystems.com", "name": "truenas", "url": "https://www.truenas.com/"}], "name": "convertx", "run_as_context": [{"description": "ConvertX runs as any non-root user.", "gid": 568, "group_name": "convertx", "uid": 568, "user_name": "convertx"}], "screenshots": [], "sources": ["https://github.com/C4illin/ConvertX"], "title": "ConvertX", "train": "community", "version": "1.0.3"}, "migrated": false, "notes": "# ConvertX\n\n## Security\n\n### Container: [permissions]\n\n**This container is short-lived.**\n\n- Is running as root user\n- Is running as root group\n\n## Bug Reports and Feature Requests\n\nIf you find a bug in this app or have an idea for a new feature, please file an issue at\nhttps://github.com/truenas/apps\n\n", "portals": {"Web UI": "http://192.168.1.2:3000/"}, "version": "1.0.3"}
root@vaultron[~]#