Skip to content

Jellyfin — Open Source Media Server

Plex and Jellyfin serve the same core purpose but have different trade-offs:

PlexJellyfin
CostFree + Plex Pass for HW transcodingFully free and open source
HW TranscodingPlex Pass requiredFree via VA-API
Mobile appsPolishedGood, improving
Remote accessBuilt-in relayNeeds reverse proxy
MetadataExcellentVery good

Running both on the same library (with Jellyfin in read-only mode) lets you compare them and give users a choice.

  • Docker and Docker Compose
  • Existing media library (this guide assumes /mnt/nfs/data/media_stack/)
  • Pangolin reverse proxy stack running

The key detail is mounting the media library as read-only (:ro). This ensures Jellyfin cannot write NFO files, artwork, or any other files into the Plex library.

compose.yaml
services:
jellyfin:
image: linuxserver/jellyfin:latest
container_name: jellyfin
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
- UMASK=${UMASK}
volumes:
- /mnt/nfs/docker/docker/jellyfin:/config
- /mnt/nfs/data/media_stack:/data/media_stack:ro
ports:
- 8096:8096
devices:
- /dev/dri:/dev/dri
networks:
- proxy
security_opt:
- no-new-privileges:true
restart: always
networks:
proxy:
external: true
.env
PUID=1027
PGID=65536
TZ=Europe/Copenhagen
UMASK=022
  1. Start the stack and navigate to http://your-host:8096
  2. Create your admin account
  3. Set the server name (e.g., “Sørens Mediehus”)
  4. Add media libraries using these paths:
    • Movies: /data/media_stack/radarr/movies
    • TV Shows: /data/media_stack/sonarr/tv
    • Anime: /data/media_stack/sonarr/anime
  5. Let the initial library scan complete

Jellyfin supports free hardware transcoding via VA-API (no subscription required, unlike Plex Pass).

In the Jellyfin dashboard:

  1. Go to Dashboard → Playback → Transcoding
  2. Set Hardware acceleration to Video Acceleration API (VA-API)
  3. Set the VA-API device to /dev/dri/renderD128
  4. Enable the codec formats you want (H.264, HEVC, etc.)

The Pangolin route for jellyfin.falseviking.uk is already configured, pointing at jellyfin:8096 over TCP.

To add a Homepage widget, get your API key first:

  1. Jellyfin dashboard → Administration → API Keys
  2. Create a new key
  3. Add it to /opt/stacks/homepage/.env as HOMEPAGE_VAR_JELLYFIN_KEY=<your-key>
  4. Recreate the homepage container: docker compose -f /opt/stacks/homepage/compose.yaml up -d

Both Plex and Jellyfin support the same base naming format for movies and TV:

  • Movies: Movie Title (Year)/Movie Title (Year).mkv
  • TV: Show Name/Season 01/Show Name - S01E01 - Title.mkv

However, some Plex-specific tokens will be ignored by Jellyfin:

FeaturePlexJellyfin
Edition tags{edition-Director's Cut}Not supported
ID disambiguation{tmdb-xxxxx}[tmdbid=xxxxx]
Special features foldersFull supportPartial

Since Radarr and Sonarr do the renaming, avoid Plex-specific tokens in your naming format if you want full compatibility with both.