A self-hosted media server with a Netflix-style interface for browsing and streaming your personal movie and TV show collection.
- Netflix-style UI — browse your library with poster art, backdrops, and rich metadata
- Movies and TV shows — automatic detection of episodes, seasons, and series
- Automatic metadata — fetches titles, posters, backdrops, ratings, and trailers from TMDB
- Video streaming with seeking — stream any common video format with full range-request support
- Watch progress — automatically saves and resumes playback position
- Trailer previews — watch YouTube trailers directly from the details panel
- Node.js 18 or later
- A free TMDB API key
Install globally from npm:
npm install -g jukebox-media-serverOr run it without installing:
npx jukebox-media-server@latestUsing Bun? It works too:
bunx jukebox-media-server@latest-
Start Jukebox
jukebox-media-server
Then open
http://localhost:1990in your browser. -
Add your TMDB API key
On first launch, the setup screen will ask for your TMDB API key. You can create one for free at themoviedb.org.
-
Scan your library
Point Jukebox at the folder containing your movies and TV shows. It will recursively scan for video files, parse titles and years from filenames, and fetch metadata from TMDB.
-
Watch
That's it — your library is ready.
Jukebox stores its configuration and database in ~/.jukebox/:
~/.jukebox/config.json— your TMDB API key and library paths~/.jukebox/jukebox.db— SQLite database with metadata and watch progress
Environment variables:
| Variable | Description | Default |
|---|---|---|
PORT |
Server port | 1990 |
Jukebox supports Chromecast (Chrome) and AirPlay (Safari/iOS) from the video player control bar.
- Chromecast: your Chromecast must be on the same local network as the
machine running Jukebox, and the Jukebox server must be reachable from the
Chromecast by its IP/hostname (not
localhost). Cast sessions load the media directly from the Jukebox stream URL, so the Chromecast needs LAN access to the server. - AirPlay: works natively on Safari and iOS.
.mkvfiles are not supported by AirPlay, so Jukebox transcodes them on the fly to HLS (requiresffmpegon the server'sPATH).
If casting fails with "Chromecast couldn't reach Jukebox", check that the Chromecast can reach the server's IP on the port Jukebox is listening on.
.mp4, .mkv, .avi, .mov, .wmv, .m4v, .webm, .flv, .mpeg,
.mpg
Jukebox parses titles and years from filenames. For best results:
Movies:
Movie Title (2020).mkvMovie.Title.2020.1080p.BluRay.mkvMovie Title [2020].mp4
TV shows:
Show Name/Season 01/Show Name - S01E01 - Episode Title.mkvShow Name/Season 1/Show.Name.S01E01.mkv
Re-run a scan from the UI any time you add new files. Jukebox only fetches metadata for files it hasn't seen before, so subsequent scans are fast.
Bug reports, feature requests, and pull requests are welcome. See CONTRIBUTING.md for development setup and guidelines.

