Guide
7 min read

Media Servers Keep Hitting the Same Three Walls: Proxmox Passthrough, GPU Sizing, Storage

Jellyfin and Immich on Proxmox run into the same trio every time — GPU passthrough that won't stick, transcoding sized wrong, and storage that fights the hypervisor. Clear each wall.

Media Servers Keep Hitting the Same Three Walls: Proxmox Passthrough, GPU Sizing, Storage

Run a media server on Proxmox long enough and you'll meet the same three walls everyone does, in the same order: getting a GPU into the VM or container, sizing transcoding so it doesn't choke, and laying out storage so the media doesn't fight the hypervisor. They're not Jellyfin or Immich bugs — they're the friction of putting hardware-hungry media apps on a virtualization host. Here's how to clear each.

Wall 1: GPU passthrough that actually sticks

You need the GPU's hardware encoder reachable from the app. Two paths on Proxmox:

  • VM with PCIe passthrough — pass the whole GPU to a VM. Strong isolation; the host can't use that GPU anymore, and you'll need IOMMU enabled and the GPU bound to vfio-pci. Best when one VM owns media.
  • LXC with device passthrough — share the host's GPU into an unprivileged container by mapping the render device and matching group IDs. Lighter, and lets multiple containers share one GPU — the usual choice for Jellyfin in LXC.

The common "it worked then broke after reboot" trap is non-persistent setup: bind the device and load modules on boot, or the passthrough silently reverts. This is the same host-prerequisite class as the hidden prerequisites Compose scripts miss.

Wall 2: sizing the transcode, not guessing

Hardware transcoding turns a melting CPU into a quiet GPU — but only if it's sized for real concurrency:

  • Count simultaneous transcodes, not total users. Four people, but only two transcoding at once, is a two-stream sizing problem.
  • Direct play beats transcoding. Match your library formats to your clients and most sessions won't transcode at all — the cheapest optimization there is.
  • Immich uses the GPU too (ML, thumbnails). If Jellyfin and Immich share one GPU, their peaks can collide — the capacity-planning logic for self-hosted AI applies to shared media GPUs as well.

Wall 3: storage that doesn't fight the hypervisor

Media is terabytes; the hypervisor's fast disk is precious. Keep them separate:

  • App state (Jellyfin's database, Immich's Postgres) on the fast VM/LXC disk.
  • Media library on a dedicated pool/share, passed in cleanly — not stored on the same dataset Proxmox uses for VM disks.
  • Avoid the ZFS-on-ZFS and ownership tangles covered in a sane Proxmox storage plan.

Order of operations

  1. Enable IOMMU; decide VM-passthrough vs LXC-device-share.
  2. Make the passthrough persistent across reboot.
  3. Confirm the app sees the encoder (/dev/dri present, ffmpeg lists the hw encoder).
  4. Size transcoding by concurrent streams; prefer direct play.
  5. Split app state (fast disk) from library (dedicated pool).

Takeaway

Media on Proxmox is three predictable walls, not a hundred random ones. Get the GPU passed through persistently, size transcoding by real concurrent streams, and keep the library off the hypervisor's disks. Clear those three and Jellyfin and Immich are genuinely pleasant on Proxmox.

proxmox
jellyfin
immich
gpu-passthrough
media-server

From across the StoicSoft network

Hand-curated reads on the same topic from sister sites in the StoicSoft family.

Keep reading

Guide
8 min

Media servers moved into VMs and containers need mount and client-resume proof before family users rely on them

Fresh Jellyfin, Plex, and media-server threads show that a media stack can look installed while still failing at the boundary users actually hit. One Jellyfin user runs the server in a NAS container and can start playback, but the desktop app on Bazzite…

Guide
8 min

Plex-to-Jellyfin migrations need library integrity and client-connection checks before the cutover

Fresh Jellyfin and Immich threads show that media-server migration risk is not only about copying files. One user is moving from Plex to Jellyfin and sees music albums missing even though folders, permissions, and rescans look right. Another has Roku clients…

Guide
7 min

A Safer Reverse-Proxy Decision Tree for Self-Hosted Media Apps

Should Jellyfin and Immich be public behind a reverse proxy, private over a VPN, or both? A decision tree that weighs privacy, family access, and streaming bandwidth instead of guessing.

Guide
8 min

Beginner homelabs need an app-first checklist before buying storage, servers, or noisy rack gear

Very fresh homelab and self-hosted threads keep showing beginners choosing hardware before they have a stable application plan. One user already runs Immich and Jellyfin on an old laptop but is unsure what storage size, drive class, and server path fit a…

Guide
8 min

Pi-to-NAS migrations need app-data and restore plans before RAID shopping

Fresh homelab threads show users trying to move from small Raspberry Pi or improvised storage setups into dedicated NAS hardware while still deciding how app data, media, RAID, and backups should work. One operator wants to migrate a Pi NAS with Docker…

Guide
8 min

Proxmox and NAS rebuilds need storage ownership decisions before the apps move

Several fresh homelab posts are really asking the same preflight question: who owns storage when the server is rebuilt? One Proxmox user is reinstalling across three SSDs before hosting OPNsense, Vaultwarden, Omada, Pi-hole, VPN, and other services. Another…