MusicD

MusicD Remote

A music-discovery companion and full-screen wall display for Roon — random-album browsing, instant whole-library search, rich label & artist pages, and seamless playback with Roon Server at the heart.

v1.8.24 Docker MIT licence Pairs with your Roon Core over the network

Features

Everything talks to your existing Roon Core through the official extension API — the app never touches your library files (except an optional read-only mount for label-tag scanning).

〰️WaveformNew

The seek bar on Now playing and the wall display's progress strip draw the shape of the track you're listening to — where the quiet intro ends, where the loud middle is. Off by default; switch it on in Settings → Playback and it stays on. Every bar is the level of its slice of the track, measured from both channels at full rate: a bar that is the loudest moment in its slice says nothing about a modern master, because something touches the ceiling almost everywhere in one. The shape sits under the playhead at every point in the track, not only halfway through. Each track is analysed once and stored, and the next one in the queue is prepared while the current one plays, so it's there the moment the track changes. Works for local files and for Qobuz and TIDAL tracks in your favourites — Roon streams those straight to your endpoint and never to an extension, so the track is fetched from the service with your own account, turned into a few thousand loudness values and discarded. No audio is written to disk and Roon still handles all playback. Anything it can't read keeps the plain bar.

🎵Album discovery

Random album selection with filtering, Album of the day, Label of the week, Play Unheard, and recently-unplayed recommendations. The database learns what you've heard and resurfaces forgotten albums.

📚Rich library browsing

Browse by album, artist, genre, record label, decade or tag — or open the Library row on the Home screen and scroll your entire collection in one continuous wall. Artwork is cached on the server as your library syncs, so even a large library scrolls smoothly without waiting on your Core. Jump between related artists, albums and labels from anywhere.

🔍Powerful search

Instant whole-library search by album, artist or record label, with optional extension to Qobuz and TIDAL — browse the streaming catalogues and add favourites straight into your Roon library.

💿Detailed album pages

High-resolution artwork, track listing, release year, label, duration, multiple-artist support and Pitchfork reviews where available.

📺Full-screen wall display

Turn a TV or tablet into a now-playing display: big artwork, artist photography, biographies, reviews and related albums from your library, with automatic rotation.

🏷Record label explorer

Label of the week, label artwork via Discogs and FanArt.tv, label merging with undo, and every release from a selected label.

📻Random Album Radio

When the queue finishes, the app picks another album (avoiding recent plays) and keeps the music flowing indefinitely.

Playback integration

Play or queue albums and tracks, multi-select, zone switching, and automatic continue-playback when the queue ends.

🔄Automatic updates

Built-in update checker with one-click updates straight from GitHub releases.

Install with Docker

Pick where you're running the app, fill in the details, and copy the generated command. On Linux the app uses host networking so it can auto-discover your Roon Core; once it's running you enable it in Roon → Settings → Extensions.

A container runs on UTC unless told otherwise, which moves Album of the day (it turns over on the wrong midnight, and so does the “already played today” check that hides it) and the hour Smart Picks switches. The not played in 6 months and 12 months windows count elapsed time, not calendar days, so they read the same in any zone. Pre-filled from this browser.
Both are optional and both improve label logos and artwork — see API keys below for where to get them. You can skip them here and paste them into Settings after first launch instead; a key saved there always wins over one set at install.
sudo mkdir -p /opt/musicd-remote
cd /opt/musicd-remote
sudo wget https://github.com/meltface-80/MusicD-Remote/releases/download/v1.8.24/MusicD-Remote-v1.8.24.tar.gz
sudo tar -xzf MusicD-Remote-v1.8.24.tar.gz
docker build -t musicd-remote:1.8.24 .

# Run it
docker run -d \
  --name musicd-remote \
  --restart unless-stopped \
  --network host \
  -e TZ=Etc/UTC \
  -v musicd-remote-data:/app/data \
  -v "/your/path/to/Music:/music:ro" \
  musicd-remote:1.8.24

Installing v1.8.24 (checking for the latest release…). If your user isn't in the docker group, prefix the docker commands with sudo.

One volume to rule them all. The musicd-remote-data volume holds your Roon pairing, play history and label cache — never rename it once created. A different name silently starts empty (Roon asks you to authorize again and your history is gone). Upgrading from v1.6.31 or earlier? Move your data once with the copy step in the Updating guide.

API keys

All free, all optional — but they significantly improve artwork and label coverage. Paste each one into the app under the gear icon → Settings, then Save.

Free

FanArt.tv

High-quality record-label logos for labels that have a MusicBrainz MBID.

  1. Register (or sign in) at fanart.tv/get-an-api-key and request a personal API key
  2. Follow the on-screen prompts — the key is shown on that page once you're logged in
  3. Copy the key
  4. In the app: gear icon → paste into FanArt.tv keySave
Free

Discogs

Finds label names that iTunes and MusicBrainz miss, and fetches label logos.

  1. Sign in (or register) at discogs.com
  2. Settings → DevelopersGenerate new token
  3. Copy the token
  4. In the app: gear icon → paste into Discogs tokenSave

Environment variables

Everything the container understands — the configurator above sets the ones you need.

VariableDefaultPurpose
PORT3399HTTP port for this app
ROON_CORE_IP(discover)Roon Core address for setups where multicast discovery can't reach it (macOS / Docker Desktop)
ROON_CORE_PORT9330Roon Core API port used with ROON_CORE_IP — only change it if your Core runs its API on a non-standard port
MUSIC_DIR/musicWhere the optional read-only music mount lives inside the container — the scan reads everything under it, so several folders can be mounted as subdirectories (only used for file-tag label scanning)
TZEtc/UTCThe container's local time. Affects Album of the day (which midnight it turns over on) and the hour Smart Picks switches. The 6- and 12-month "not played" windows are counted in absolute time and are unaffected
RRA_DISCOGS_KEY(unset)Seeds the Discogs token on a fresh data volume, so label logos work from the first scan. A token saved in Settings wins over it, and an env-seeded one is not written to disk — unset the variable and the key is gone
RRA_FANART_KEY(unset)Seeds the FanArt.tv key the same way
RRA_DEBUGon in DockerVerbose logging (timestamps, Roon API call traces with durations). On by default inside Docker — 0 for quiet logs

First run

The container is up — four steps and you're listening.

  1. Enable the extension in Roon. Roon → Settings → Extensions — MusicD appears there once the container is running. Click Enable.
  2. Open the app. Browse to http://<your-server-ip>:3399 from any phone, tablet or desktop on your network. Add it to your home screen for an app-like experience.
  3. Add your API keys. Gear icon → paste in the keys from above, then let the label scan run.
  4. Optional: wall display. Point a TV or spare tablet at http://<your-server-ip>:3399/display.