> For the complete documentation index, see [llms.txt](https://blog.azagra.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://blog.azagra.dev/docker/jellyfin-for-nas-synology.md).

# Jellyfin for NAS Synology

<figure><img src="https://1432118199-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8OmP3fsuoPnoJAJysYDx%2Fuploads%2F23Tvf8VQ4MrZv0ZhLo7w%2Fimagen.png?alt=media&amp;token=50aa30df-5306-4329-aa28-de3f5445659b" alt=""><figcaption></figcaption></figure>

Jellyfin desplegado en un contenedor en NAS Synology (DS423+) con DSM 7.2 y aceleración por hardware habilitada.

Lo primero es instalar el modulo en el NAS si no lo tenemos.

Entramos en "Centro de paquetes" y buscamos "Container manager" o "docker" y lo instalamos.

<figure><img src="https://1432118199-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8OmP3fsuoPnoJAJysYDx%2Fuploads%2FFteLV3rgX1UaM2QGinRz%2Fimagen.png?alt=media&amp;token=d1573d43-38fd-4296-ae68-52eab686dd81" alt=""><figcaption></figcaption></figure>

Abrimos Container manager y seleccionamos "**Proyecto**"

<figure><img src="https://1432118199-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8OmP3fsuoPnoJAJysYDx%2Fuploads%2FYk9XNGlgvucFTakaTc2N%2Fimagen.png?alt=media&amp;token=4a25ef0a-1244-4bf3-ae2f-b32331e5d34f" alt=""><figcaption></figcaption></figure>

Pegamos el código de docker-compose

```yaml
version: "3.9"

services:
  jellyfin:
    image: jellyfin/jellyfin:latest
    container_name: jellyfin
    restart: always
    user: 1027:100
    group_add:
      - "937"
    volumes:
      - /volume1/docker/jellyfin/config:/config:rw
      - /volume1/docker/jellyfin/cache:/cache:rw
      - /volume1/video:/media:rw    
    environment:
      - PUID=1027
      - PGID=100
      - TZ=Europe/Madrid
      - JELLYFIN_FFMPEG=/usr/lib/jellyfin-ffmpeg/ffmpeg
      - JELLYFIN_WEB_DIR=/jellyfin/jellyfin-web
      - JELLYFIN_DATA_DIR=/config
      - JELLYFIN_CACHE_DIR=/cache
      - JELLYFIN_CONFIG_DIR=/config/config
      - JELLYFIN_LOG_DIR=/config/log
      - XDG_CACHE_HOME=/cache
    devices:
      - /dev/dri/renderD128:/dev/dri/renderD128
    ports:
      - 8096:8096/tcp
      - 8920:8920/tcp
      - 7359:7359/udp
    healthcheck:
      test: curl --fail http://localhost:8096/health || exit 1
      interval: 45s
      timeout: 30s
      retries: 3
    mem_limit: 10240m

networks:
  jellyfin:

```

{% hint style="warning" %}
Ajusta `volumes` para que monte las unidades que corresponda y el `mem_limit: 10240m`, en este ejemplo son 10Gb de ram, tengo 18Gb en el NAS, ajústalo a tu hardware y el `user` que corresponda en tu caso.
{% endhint %}

Una vez creado descargara la imagen y levantara el contenedor.

<figure><img src="https://1432118199-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8OmP3fsuoPnoJAJysYDx%2Fuploads%2FC2CNiPbkKRAThtIiQVwr%2Fimagen.png?alt=media&amp;token=32755e3e-ea52-49ae-8a84-5e3630eeec83" alt=""><figcaption></figcaption></figure>

Ya le indicamos el dispositivo para habilitar la aceleración por hardware.

```yaml
    devices:
      - /dev/dri/renderD128:/dev/dri/renderD128
```

Si tenemos otro dispositivo, podemos verificar cual es:

```bash
$ ls -l /dev/dri/
crw------- 1 root root 226, 0 Sep 4 08:00 card0
crw-rw---- 1 root videodriver 226, 128 Sep 4 08:00 renderD128
```

Y nos quedaría conocer el ID del grupo videodriver, que en este caso es el 937, lo declaramos en el docker-compose en `group_add`

```bash
$ grep videodriver /etc/group
videodriver:x:937:
```

Podemos ver su estado.

<figure><img src="https://1432118199-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8OmP3fsuoPnoJAJysYDx%2Fuploads%2FPdkkFEeDkCoGlmHxWGt3%2Fimagen.png?alt=media&amp;token=29a0b39f-9946-4d4d-a134-16f3835d397f" alt=""><figcaption></figcaption></figure>

Entramos en el interfaz web de jellyfin `http://IP-NAS:8096/web/#/dashboard/playback/transcoding`

Entramos en "**Panel de control**"

<figure><img src="https://1432118199-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8OmP3fsuoPnoJAJysYDx%2Fuploads%2FplmdwZKEQifjRBDAJP44%2FCaptura%20desde%202025-09-04%2018-01-56.png?alt=media&amp;token=e95cdc51-fb37-4cf7-baaa-5eac0fab5a80" alt=""><figcaption></figcaption></figure>

Seleccionamos en "**Reproducción**" y dentro "**Conversión**"

<figure><img src="https://1432118199-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8OmP3fsuoPnoJAJysYDx%2Fuploads%2FxVpydaTVjyyA0Osq9pru%2FCaptura%20desde%202025-09-04%2018-02-19.png?alt=media&amp;token=1807a871-ed41-4d2e-afe7-a910e8c888df" alt=""><figcaption></figcaption></figure>

En "**Acceleración por hardware**" seleccionamos Intel QuickSync (QSV) y en QS Device `/dev/dri/renderD128`

Marcamos en "**Activar decodificación por hardware para**"

* ✅ H264
* ✅ HEVC
* ✅MPEG2
* ✅ VC1
* ✅ VP8
* ✅ VP9
* ❌ AV1
* ✅ HEVC 10bit
* ✅ VP9 10bit
* ✅ HEVC RExt 8/10bit
* ❌ HEVC RExt 12bit

✅ Preferir decodificadores de hardware DXVA o VA-API nativos del sistema operativo

#### Opciones de codificación por hardware

* ✅ Activar codificación por hardware
* ❌ Habilitar el codificador hardware H.264 de bajo consumo de Intel
* ❌ Habilitar el codificador hardware HEVC de bajo consumo de Intel

#### Opciones de formato de codificación

* ✅ Permitir la codificación en formato HEVC
* ❌ Permitir encodificación en formato AV1

{% hint style="danger" %}
No marques ninguna opción de AV1 ya que en contenido con 4K HEVC por ejemplo, dará problemas de reproducción
{% endhint %}

Bajamos al final de la pagina y le damos a "**Guardar**", reiniciaremos el contenedor desde "**Container manager**"
