Verify / enable NVIDIA hardware transcoding for Jellyfin on Aegis #60

Closed
opened 2026-08-27 16:34:30 +00:00 by claude-bot · 1 comment
Collaborator

docs/homelab-architecture.md notes Jellyfin on Aegis has NVIDIA_VISIBLE_DEVICES/NVIDIA_DRIVER_CAPABILITIES set in its env but no actual GPU passthrough was ever observed. User confirms there is an NVIDIA card in the system (Dell Precision Tower 5810).

Tasks:

  • Confirm the Unraid NVIDIA Driver plugin is installed and the GPU is detected (nvidia-smi).
  • Confirm Jellyfin container has --runtime=nvidia (or compose runtime: nvidia / device reservation) and the correct GPU UUID.
  • Verify hardware transcode actually engages (Jellyfin playback dashboard shows (hw), nvidia-smi shows the encode session).
  • Relevant to the *arr stack: SAB par2 repair on the 4c/8t E5-1620 v3 will contend with software transcodes; HW transcode frees the CPU. Also a prerequisite if Tdarr/transcode automation is added later.
  • Document the GPU model + which VLAN/host in the architecture doc audit (#58).
`docs/homelab-architecture.md` notes Jellyfin on Aegis has `NVIDIA_VISIBLE_DEVICES`/`NVIDIA_DRIVER_CAPABILITIES` set in its env but **no actual GPU passthrough was ever observed**. User confirms there is an NVIDIA card in the system (Dell Precision Tower 5810). Tasks: - Confirm the Unraid NVIDIA Driver plugin is installed and the GPU is detected (`nvidia-smi`). - Confirm Jellyfin container has `--runtime=nvidia` (or compose `runtime: nvidia` / device reservation) and the correct GPU UUID. - Verify hardware transcode actually engages (Jellyfin playback dashboard shows `(hw)`, `nvidia-smi` shows the encode session). - Relevant to the *arr stack: SAB par2 repair on the 4c/8t E5-1620 v3 will contend with software transcodes; HW transcode frees the CPU. Also a prerequisite if Tdarr/transcode automation is added later. - Document the GPU model + which VLAN/host in the architecture doc audit (#58).
Author
Collaborator

Resolved 2026-09-02 — NVENC hardware transcode is live

Diagnosis. The GPU was present and the host was fine all along — NVIDIA T400 4GB at 02:00.0, driver 595.84 / CUDA 13.2, nvidia-driver Unraid plugin installed, and the Docker daemon already had the nvidia runtime registered. The Jellyfin container carried NVIDIA_VISIBLE_DEVICES=all + NVIDIA_DRIVER_CAPABILITIES=compute,video,utility, but those come from the official jellyfin/jellyfin image itself and do nothing without the NVIDIA container runtime. The container was created with Runtime=runc, no --runtime=nvidia, so inside it:

  • nvidia-smi — not found
  • ffmpeg -init_hw_device cudaCannot load libcuda.so.1 / Operation not permitted
  • h264_nvenc encode → same
  • no /dev/dri (and this Xeon has no iGPU, so VAAPI was never an option)

Every transcode was falling back to software on the 4c/8t Xeon E5-1620 v3.

Fix. Edited the dockerMan template /boot/config/plugins/dockerMan/templates-user/my-Jellyfin.xml:

  • <ExtraParams>--runtime=nvidia</ExtraParams>
  • new var NVIDIA_VISIBLE_DEVICES pinned to the GPU UUID GPU-c82b149b-35c8-f1b6-d82a-27df58103961

Recreated via /usr/local/emhttp/plugins/dynamix.docker.manager/scripts/rebuild_container Jellyfin (it's in the autostart list, came back up on its own). Template backup: my-Jellyfin.xml.bak-pre-nvidia-20260902. No app-side change needed — encoding.xml was already set to nvenc + hw decode/encode.

Verification.

  • docker inspectRuntime=nvidia, container healthy
  • docker exec Jellyfin nvidia-smi -L → sees the T400; /dev/dri now present
  • Full -hwaccel cuda -hwaccel_output_format cuda … scale_cuda … h264_nvenc transcode of a 1080p file: 725 fps, ~30x realtime; nvidia-smi mid-run showed encoder 99% / decoder 98%

Doc updates in PR #63 (docs/homelab-architecture.md Jellyfin bullet + docs/homelab-build-history.md Item 20). Closing.

## Resolved 2026-09-02 — NVENC hardware transcode is live **Diagnosis.** The GPU was present and the host was fine all along — NVIDIA T400 4GB at `02:00.0`, driver 595.84 / CUDA 13.2, `nvidia-driver` Unraid plugin installed, and the Docker daemon already had the `nvidia` runtime registered. The `Jellyfin` container carried `NVIDIA_VISIBLE_DEVICES=all` + `NVIDIA_DRIVER_CAPABILITIES=compute,video,utility`, **but those come from the official `jellyfin/jellyfin` image itself** and do nothing without the NVIDIA container runtime. The container was created with `Runtime=runc`, no `--runtime=nvidia`, so inside it: - `nvidia-smi` — not found - `ffmpeg -init_hw_device cuda` → `Cannot load libcuda.so.1` / `Operation not permitted` - `h264_nvenc` encode → same - no `/dev/dri` (and this Xeon has no iGPU, so VAAPI was never an option) Every transcode was falling back to software on the 4c/8t Xeon E5-1620 v3. **Fix.** Edited the dockerMan template `/boot/config/plugins/dockerMan/templates-user/my-Jellyfin.xml`: - `<ExtraParams>--runtime=nvidia</ExtraParams>` - new var `NVIDIA_VISIBLE_DEVICES` pinned to the GPU UUID `GPU-c82b149b-35c8-f1b6-d82a-27df58103961` Recreated via `/usr/local/emhttp/plugins/dynamix.docker.manager/scripts/rebuild_container Jellyfin` (it's in the autostart list, came back up on its own). Template backup: `my-Jellyfin.xml.bak-pre-nvidia-20260902`. No app-side change needed — `encoding.xml` was already set to `nvenc` + hw decode/encode. **Verification.** - `docker inspect` → `Runtime=nvidia`, container healthy - `docker exec Jellyfin nvidia-smi -L` → sees the T400; `/dev/dri` now present - Full `-hwaccel cuda -hwaccel_output_format cuda … scale_cuda … h264_nvenc` transcode of a 1080p file: **725 fps, ~30x realtime**; `nvidia-smi` mid-run showed **encoder 99% / decoder 98%** Doc updates in PR #63 (`docs/homelab-architecture.md` Jellyfin bullet + `docs/homelab-build-history.md` Item 20). Closing.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
copper/ccnet-prod-devops#60
No description provided.