Quick start
You need Docker (or Podman) and nothing else.
mkdir melodybridge && cd melodybridge
wget https://melodybridge.app/compose.yml
docker compose up -dmkdir melodybridge && cd melodybridge
wget https://melodybridge.app/compose.yml
podman compose up -dThat pulls the published image from GHCR and starts two containers on one internal network:
- melodybridge on http://localhost:3333, bound to 127.0.0.1 so it is not reachable from other machines unless you put a reverse proxy in front
- flaresolverr, the Cloudflare solver used by the Lucida plugin, internal only, no published port
The first start creates ./data/ with music/, playlists/ and app/ (the SQLite database) so your files survive rebuilds. Point Jellyfin, Plex or Navidrome at ./data/music.
First steps in the UI
- Open http://localhost:3333 and go to Playlists. Paste a public Spotify or YouTube playlist link and save it.
- Open the playlist and press Download missing. The plugin waterfall fetches each track and tags it.
- Go to Sync jobs and create a job that writes an M3U file or pushes the playlist to Jellyfin, Plex or Navidrome.
What that looks like:

Paths inside Docker
Every path you type in the app is seen from inside the container: the music folder is /music, not your host path. Screens that take a path show the same reminder.
Jellyfin, Plex or Navidrome on the host
If your media server runs on your host, use http://host.docker.internal:8096 (Jellyfin), :32400 (Plex) or :4533 (Navidrome) as the base URL in Settings.
Running from source
dotnet run --project MelodyBridge.Serveryt-dlp must be on PATH:
pip3 install --user --break-system-packages yt-dlpThe test suite runs with dotnet test MelodyBridge.sln. Live tests need yt-dlp and ffmpeg on PATH.
From here the sidebar covers everything: the Docker guide, the User guide and Accounts and OAuth.