Skip to content

Repository files navigation

JellyDisk

Turn a Jellyfin movie or TV season into a real DVD.

Latest release Apache 2.0 license Python 3.12+

JellyDisk pulls media and metadata from Jellyfin, converts the video to DVD-compatible MPEG-2, builds interactive menus, and writes an ISO. It can also make the printable case wrap, booklet, and disc labels.

Use the desktop app for the full visual workflow. The CLI and Docker image are available for servers and automation.

What it makes

  • DVD-Video ISOs with episode, cast, subtitle, trailer, and trivia menus
  • Multi-disc sets when a season does not fit on one DVD
  • Multi-season projects that keep each season in its own disc set
  • Printable case wraps, episode booklets, and disc labels
  • DVD-5 or DVD-9 output in NTSC or PAL

The live preview lets you inspect the package artwork, rotate the open case, switch between discs and seasons, and try the DVD menu before starting a build.

Tip

Want to explore the menu without authoring a disc? See the JellyDisk Web Interface.

Screenshots

JellyDisk DVD menu on a television JellyDisk episode selection menu
JellyDisk authored DVD playback JellyDisk physical DVD package

Sample files: episode booklet · disc label · case wrap

Install

JellyDisk requires Python 3.12 or newer.

git clone https://github.com/DrewThomasson/JellyDisk.git
cd JellyDisk

python -m venv .venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate
pip install -r requirements.txt

It also needs FFmpeg and dvdauthor:

Ubuntu or Debian

sudo apt install ffmpeg dvdauthor dvd+rw-tools wodim yt-dlp

macOS with Homebrew

brew install ffmpeg dvdauthor yt-dlp

Windows

Install FFmpeg and a Windows build of dvdauthor. yt-dlp is optional and is only used for remote trailers.

Subtitle rendering requires an FFmpeg build with libass. The standard Homebrew and Debian/Ubuntu packages include it.

Desktop app

Start JellyDisk with the virtual environment active:

python -m jellydisc.main

Then:

  1. Connect to Jellyfin. Enable Remember login securely if you want JellyDisk to use Keychain, Windows Credential Manager, or your Linux secret service.
  2. Browse or search the library and choose one or more seasons.
  3. Check the package and menu in Live Preview.
  4. Choose ISO or physical-disc output and start the build.

JellyDisk keeps downloaded artwork and transcoded files in assets/ and staging/. Finished files are written to output/.

Command line

Run the guided terminal workflow:

python -m jellydisc.main --headless

Or provide everything in one command:

python -m jellydisc.main --headless \
  --server "https://jellyfin.example.com" \
  --username "User" \
  --password "Password" \
  --show "Smiling Friends" \
  --season "Season 1"

Passing a password as an argument may expose it in shell history. For repeated local use, save it in the system credential vault:

python -m jellydisc.main --headless --save-login \
  --server "https://jellyfin.example.com" \
  --username "User" \
  --show "Smiling Friends" \
  --season "Season 1"

python -m jellydisc.main --headless --use-saved-login \
  --show "Smiling Friends" --season "Season 1"

Remove the saved login with --forget-login. Run python -m jellydisc.main --help for all authoring and burning options.

Disc utilities:

python -m jellydisc.main --list-drives
python -m jellydisc.main --erase --drive "/dev/rdisk4"

Docker

Docker is useful for headless ISO creation because FFmpeg and dvdauthor are already included:

docker compose run --rm jellydisc

You can supply credentials through the shell or a local .env file:

JELLYFIN_URL=https://jellyfin.example.com
JELLYFIN_USER=your_username
JELLYFIN_PASS=your_password

Then run a non-interactive build:

docker compose run --rm jellydisc \
  --show "Smiling Friends" --season "Season 2"

Linux can expose an optical drive to the container by adding it under devices in docker-compose.yml. Docker Desktop on macOS and Windows does not support optical-drive passthrough; create the ISO in Docker and burn it from the host.

Printing the artwork

The PDFs are generated at 300 DPI for standard DVD packaging:

File Size
Case wrap 273 × 183 mm, including a 14 mm spine
Episode booklet 120 × 180 mm
Disc label 118 × 118 mm

Print at Actual Size or 100%. Disable “Fit to Page,” “Scale to Fit,” and similar options or the artwork will not fit the case.

License

JellyDisk is licensed under the Apache License 2.0.

About

Automated DVD authoring suite for Jellyfin

Resources

Stars

45 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages