Jellyfin — Open Source Media Server
Why Jellyfin Alongside Plex?
Section titled “Why Jellyfin Alongside Plex?”Plex and Jellyfin serve the same core purpose but have different trade-offs:
| Plex | Jellyfin | |
|---|---|---|
| Cost | Free + Plex Pass for HW transcoding | Fully free and open source |
| HW Transcoding | Plex Pass required | Free via VA-API |
| Mobile apps | Polished | Good, improving |
| Remote access | Built-in relay | Needs reverse proxy |
| Metadata | Excellent | Very good |
Running both on the same library (with Jellyfin in read-only mode) lets you compare them and give users a choice.
Prerequisites
Section titled “Prerequisites”- Docker and Docker Compose
- Existing media library (this guide assumes
/mnt/nfs/data/media_stack/) - Pangolin reverse proxy stack running
Compose Setup
Section titled “Compose Setup”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.
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: truePUID=1027PGID=65536TZ=Europe/CopenhagenUMASK=022Initial Setup
Section titled “Initial Setup”- Start the stack and navigate to
http://your-host:8096 - Create your admin account
- Set the server name (e.g., “Sørens Mediehus”)
- 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
- Movies:
- Let the initial library scan complete
Hardware Transcoding
Section titled “Hardware Transcoding”Jellyfin supports free hardware transcoding via VA-API (no subscription required, unlike Plex Pass).
In the Jellyfin dashboard:
- Go to Dashboard → Playback → Transcoding
- Set Hardware acceleration to
Video Acceleration API (VA-API) - Set the VA-API device to
/dev/dri/renderD128 - Enable the codec formats you want (H.264, HEVC, etc.)
Reverse Proxy (Pangolin)
Section titled “Reverse Proxy (Pangolin)”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:
- Jellyfin dashboard → Administration → API Keys
- Create a new key
- Add it to
/opt/stacks/homepage/.envasHOMEPAGE_VAR_JELLYFIN_KEY=<your-key> - Recreate the homepage container:
docker compose -f /opt/stacks/homepage/compose.yaml up -d
Naming Conventions vs Plex
Section titled “Naming Conventions vs Plex”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:
| Feature | Plex | Jellyfin |
|---|---|---|
| Edition tags | {edition-Director's Cut} | Not supported |
| ID disambiguation | {tmdb-xxxxx} | [tmdbid=xxxxx] |
| Special features folders | Full support | Partial |
Since Radarr and Sonarr do the renaming, avoid Plex-specific tokens in your naming format if you want full compatibility with both.