Jellyfin ya transcodifica vídeo al vuelo por software sin problema en un PC moderno, pero en un mini PC o un NUC con una GPU integrada decente, pasarle la transcodificación a la GPU libera CPU para todo lo demás que corra en el mismo host — y es la diferencia entre poder ver dos streams 4K a la vez o solo uno. Este stack monta Jellyfin en un LXC de Proxmox con passthrough de la GPU del host, y lo deja accesible desde fuera de casa sin abrir un puerto en el router, vía Tailscale.
Streaming personal con transcodificación por GPU: Jellyfin en LXC con passthrough, accesible fuera de casa sin abrir puertos
Objetivo
Montar un servidor Jellyfin en un LXC de Proxmox con la GPU del host para transcodificar vídeo al vuelo, y acceder desde fuera sin abrir un puerto gracias a Tailscale.
Componentes
Base · Hipervisor
Servicio principal · Transcodificación con la GPU del host
Acceso remoto sin abrir puertos
Ya deberías tenerlo
Almacenamiento para la biblioteca
Cómo se conecta

Haz clic para ampliar
Ensamblaje
Dar a un LXC acceso a la GPU del host
Crea un LXC sin privilegios en Proxmox (Debian o Ubuntu como base) y añádele el dispositivo de la GPU directamente en su configuración, antes de instalar nada dentro. Desde la shell del host Proxmox, edita
/etc/pve/lxc/<ID>.conf:# en /etc/pve/lxc/<ID>.conf lxc.cgroup2.devices.allow: c 226:* rwm lxc.cgroup2.devices.allow: c 29:0 rwm lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir
Dentro del LXC, comprueba que
/dev/driexiste y que el usuario que ejecutará Jellyfin pertenece al gruporender(ovideo, según la distro):ls /dev/dri sudo usermod -aG render,video jellyfin
Instalar Jellyfin dentro del LXC
Sigue la instalación estándar de Jellyfin (paquete oficial o Docker dentro del propio LXC) y entra al asistente inicial desde
http://<IP-del-LXC>:8096. En Panel → Reproducción, activa Aceleración de hardware y elige VAAPI (GPU Intel/AMD) o NVENC (GPU NVIDIA) según el hardware del host — con/dev/driya montado, Jellyfin lo detecta solo.Montar el almacenamiento de la biblioteca
Si la biblioteca vive en otro disco o en un NAS, monta esa ruta en el host Proxmox y pásala al LXC como bind mount, en vez de copiar los archivos dentro del propio disco del LXC:
pct set <ID> -mp0 /ruta/en/el/host,mp=/mnt/biblioteca
Dentro de Jellyfin, añade
/mnt/bibliotecacomo carpeta de la biblioteca correspondiente (Películas, Series, Música).Servir Jellyfin por la tailnet
Instala Tailscale dentro del mismo LXC (o en el host, si prefieres centralizarlo) y únelo a tu tailnet:
curl -fsSL https://tailscale.com/install.sh | sh sudo tailscale up
Con el LXC ya dentro de la tailnet, Jellyfin es accesible desde cualquier otro dispositivo conectado a esa misma tailnet usando la IP o el nombre MagicDNS del LXC, sin tocar el firewall del router ni abrir ningún puerto hacia fuera.
Ajustar el límite de transcodificaciones simultáneas
En Panel → Reproducción, fija un límite de flujos de transcodificación simultáneos acorde a la GPU que le hayas pasado — una GPU integrada de gama media aguanta bien 2-3 transcodificaciones 1080p a la vez, pero se ahoga con varias 4K simultáneas. Es mejor que Jellyfin rechace una reproducción con un aviso claro que degradar todas a tirones.
Conclusión
Para comprobar que la GPU está trabajando de verdad: reproduce algo que obligue a transcodificar (un formato o resolución que el dispositivo cliente no soporte nativo) y mira el panel Tablero → Actividad de Jellyfin, donde aparece el método de transcodificación en uso (hw si la GPU está entrando). Fuera de casa, con Tailscale instalado en el móvil o portátil y conectado a la misma tailnet, la URL de Jellyfin funciona exactamente igual que en el salón — sin VPN manual, sin puerto abierto, sin certificado que mantener.



