Jellyfin Docker Compose Builder
Build a compose.yaml for Jellyfin. Choose the official or LinuxServer.io image, ports and networking, media folders, and Intel, AMD, or NVIDIA hardware acceleration, and get a file that is ready to run.
Input
Output
- Running Jellyfin in a container is only supported on Linux. On Windows and macOS, install Jellyfin natively.
Readme
What is Jellyfin?
Jellyfin is a free, open source media server. It streams your movies, shows, music, and photos to browsers, phones, TVs, and other devices, and it can transcode video on the fly. The project provides an official image, jellyfin/jellyfin, which is also published as ghcr.io/jellyfin/jellyfin. The LinuxServer.io project offers another image, lscr.io/linuxserver/jellyfin, with its own folders and variables.
Tool description
This tool builds a compose.yaml for Jellyfin from the installation guide of the project. You choose the image and tag, ports and networking, the user, the folders for configuration and cache, and any number of media folders, which can be read only. With the official image you can also mount folders with custom fonts and fallback fonts. For the graphics card, the tool adds what the Jellyfin docs describe: /dev/dri and the render group for Intel and AMD, or the NVIDIA runtime and a GPU reservation for NVIDIA. It changes the file when you pick the LinuxServer.io image, which uses PUID, PGID, and TZ instead of a user. Everything is created in your browser.
Features
- The official image from Docker Hub or the GitHub Container Registry, or the image from LinuxServer.io, with any tag
- Bridge mode with the ports 8096 and 7359/udp, an optional HTTPS port 8920, and a bind address, or host mode, which DLNA needs
- The published server URL for clients that discover the server
- A user in the form
uid:gidfor the official image, orPUID,PGID, and the time zone for LinuxServer.io - Configuration and cache on the host or in named Docker volumes, which are declared for you
- Several media folders, each with a path in the container and an option to mount it read only
- Custom fonts and fallback fonts for subtitles that are burned in while transcoding
- Hardware acceleration with VA-API or QSV for Intel and AMD, or NVENC for NVIDIA
- Any other environment variable, comments that explain the file, and a download as
compose.yaml
Examples
The default settings give the example from the Jellyfin documentation, with the folders next to the file:
services:
jellyfin:
image: jellyfin/jellyfin
container_name: jellyfin
ports:
- "8096:8096"
- "7359:7359/udp"
volumes:
- ./config:/config
- ./cache:/cache
- /path/to/media:/media
restart: unless-stoppedChoosing NVIDIA hardware acceleration adds the runtime and the GPU reservation:
runtime: nvidia
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities:
- gpuTips
- Save the result as
compose.yamland start it withdocker compose up -d. Then openhttp://localhost:8096and add your media folders as libraries, using the paths in the container - Running Jellyfin in a container is only supported on Linux. On Windows and macOS, install Jellyfin natively, because hardware acceleration and library scans are known to break in containers there
- Find the ID of the render group on the host with
getent group render | cut -d: -f3. On some systems the group isvideoorinput - For NVIDIA, install the NVIDIA driver and the NVIDIA Container Toolkit on the host first
- After you enable hardware acceleration in the container, turn it on in the Jellyfin dashboard under Playback, Transcoding
- DLNA is a plugin and needs host mode, because its discovery uses broadcasts on port 1900/udp that do not cross the bridge
- The images of the official project and of LinuxServer.io store their data in different places, so you cannot swap one for the other on an existing folder
- Mount media read only when Jellyfin does not need to change it