Your media.
Your people.
Your place.
An open-source, self-hosted media server.
Your movies, TV and music alongside YouTube and Twitch.
One place for your household.
AGPL-3.0. Docker. Your server. No subscription.

A place to enjoy it.
Films & series · Music · Live & creators · Books & comics
Entirely yoursLess searching.
More settling in.
Your collection, the channels you follow, and the things you haven’t discovered yet. Together in one thoughtful interface.


Find a little of everything.
Search your library and public creators. Watch live, save a video, or pick up where you left off.
Bring everyone along.
Individual profiles, shared libraries, personal queues, and requests for your household.
Enjoy it on your screen.
Watch in the browser or connect a compatible Jellyfin app, including Infuse. Check client support.
Your collection.
Your connections.
Considering a Plex or Jellyfin alternative? Choose by the apps and workflows you need.
Compare Lumina, Plex and Jellyfin ↗- Local meets online
- Your movies, TV and music alongside supported YouTube and Twitch content. Search, watch and save with yt-dlp.
- Keep familiar clients
- Connect Infuse, Swiftfin and compatible Jellyfin API clients. Lumina does not host jellyfin-web or serve Plex apps. Check client support ↗
- Move with confidence
- Preview imports of Jellyfin watch progress and favorites before switching. Explore migration ↗

A place
of your own.
Keep the collection. Choose the connections.
Let your server do the work.
- Your files, respected.
- Import existing folders in place with read-only mounts.
- Your household, first.
- Member access, two-step verification, and clear controls.
- Your choices, always.
- Local recommendations. Optional AI. Open-source code.
On a Linux server with Docker Engine and Compose v2 installed, run this as a non-root account with Docker access. It creates a new lumina folder.
(
set -eu
mkdir lumina
cd lumina
lumina_release=https://github.com/shiftedx/lumina/releases/download/v0.4.0
curl -fsSLO "$lumina_release/docker-compose.yml"
curl -fsSLO "$lumina_release/SHA256SUMS"
if command -v sha256sum >/dev/null 2>&1; then
grep 'docker-compose.yml$' SHA256SUMS | sha256sum -c -
else
grep 'docker-compose.yml$' SHA256SUMS | shasum -a 256 -c -
fi
printf 'LUMINA_RUNTIME_UID=%s\nLUMINA_RUNTIME_GID=%s\n' "$(id -u)" "$(id -g)" > .env
docker compose pull lumina
docker compose up -d --no-build lumina
curl -fsS --retry 15 --retry-connrefused --retry-delay 2 http://127.0.0.1:8765/api/health
)After the health check succeeds, open 127.0.0.1:8765 to create your household. Using a headless server?