Self-Host Lyrion Music Server with Docker

What Is Lyrion Music Server?

Lyrion Music Server (formerly Logitech Media Server, or LMS) started life in 2000 as SlimServer, the software behind Squeezebox hardware music players. When Logitech discontinued the Squeezebox line, the community took over development and rebranded it as Lyrion in 2024. It remains the only music server that natively speaks the Squeezebox protocol — enabling synchronized multi-room audio with sub-millisecond accuracy across software players like piCorePlayer and Squeezelite.

SpecificationDetails
LicenseGPL-2.0
LanguagePerl
DatabaseEmbedded (custom)
Web UIBuilt-in (+ Material Skin plugin)
ProtocolSqueezebox (SlimProto)
Multi-room syncYes (sub-millisecond accuracy)
Plugin ecosystem100+ plugins
Docker imagelmscommunity/lyrionmusicserver:9.2.0
Supported formatsFLAC, ALAC, WAV, AIFF, MP3, AAC, OGG, WMA, APE, DSD
Streaming servicesSpotify Connect, Tidal, Qobuz, Deezer (via plugins)
GitHubLyrionMusicServer/lyrion-music-server

Who Should Use Lyrion?

Lyrion fills a specific niche. Before setting up Docker, consider whether it’s the right server for you.

Lyrion is ideal if you:

  • Want synchronized multi-room audio (living room + kitchen + bedroom playing in perfect sync)
  • Own Squeezebox hardware or run Squeezelite/piCorePlayer software players
  • Need streaming service integration alongside local files (Spotify, Tidal, Qobuz)
  • Want a mature plugin ecosystem with 20+ years of community development
  • Need support for audiophile formats (DSD, FLAC, high-res PCM)

Choose Navidrome instead if you:

  • Want a lightweight Subsonic-compatible server with modern mobile apps
  • Don’t need multi-room sync
  • Prefer a simple Docker deployment with minimal configuration

Choose Jellyfin instead if you:

  • Want a combined video + music server
  • Need a familiar Netflix-like interface

Prerequisites

  • A Linux server (Ubuntu 22.04+ recommended)
  • Docker and Docker Compose installed (guide)
  • 512 MB+ of free RAM
  • Music library on accessible storage
  • Squeezebox-compatible player software (Squeezelite, piCorePlayer) or hardware

Docker Compose Configuration

services:
  lyrion:
    image: lmscommunity/lyrionmusicserver:9.2.0
    container_name: lyrion
    restart: unless-stopped
    ports:
      - "9000:9000"     # Web UI — MUST match HTTP_PORT if remapped
      - "9090:9090"     # CLI port — MUST be 1:1 mapped (cannot remap)
      - "3483:3483"     # Squeezebox discovery TCP — MUST be 1:1 mapped
      - "3483:3483/udp" # Squeezebox discovery UDP — MUST be 1:1 mapped
    volumes:
      - lyrion-config:/config     # Server config, database, cache, plugins
      - /path/to/music:/music:ro  # Your music library (read-only)
      - /path/to/playlists:/playlists  # Playlist files (read-write)
    environment:
      - PUID=1000         # Match your host user ID for file permissions
      - PGID=1000         # Match your host group ID
      - TZ=America/New_York
      - HTTP_PORT=9000    # MUST match the host port mapping above
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/"]
      interval: 30s
      timeout: 10s
      retries: 3

volumes:
  lyrion-config:

Critical port mapping rules:

  • Port 3483 (TCP and UDP) handles Squeezebox player discovery and communication. This port cannot be remapped — players expect it on 3483. Always use 3483:3483.
  • Port 9090 is the CLI interface for player control. It also must be 1:1 mapped.
  • Port 9000 is the web UI. If you remap it (e.g., 9002:9000), you must set HTTP_PORT=9002 — the server advertises this port to players.

Start the server:

docker compose up -d

Initial Setup

  1. Open http://your-server:9000 in a browser
  2. The setup wizard walks through:
    • Music folder: Point to /music (the container path)
    • Playlist folder: Point to /playlists
    • Player discovery: Lyrion automatically discovers Squeezelite players on the same network
  3. Library scan starts automatically. Initial scan time depends on library size — expect 5-10 minutes per 10,000 tracks.

The default web UI works but looks dated. Install the Material Skin plugin immediately (see Configuration below).

Configuration

The default UI was designed in the early 2000s. Material Skin replaces it with a modern, responsive interface:

  1. Navigate to Settings → Plugins → Plugin Manager
  2. Search for “Material Skin”
  3. Install and restart the server
  4. Access the new UI at http://your-server:9000/material/

Material Skin provides a mobile-friendly interface, album art display, player controls, and a clean library browser. Most Lyrion users consider this essential.

Streaming Service Integration

Lyrion supports major streaming services through plugins:

ServicePluginNotes
SpotifySpotify Connect (Spotty)Requires Spotify Premium. Plays through Lyrion players.
TidalTIDAL ConnectRequires Tidal subscription. Hi-Res FLAC support.
QobuzQobuz pluginRequires Qobuz subscription.
DeezerDeezer pluginRequires Deezer subscription.
YouTube MusicCommunity pluginUnofficial, may break with API changes.
Internet radioBuilt-inThousands of stations via TuneIn and RadioBrowser.

Install via Settings → Plugins. Each service requires entering your account credentials within Lyrion’s settings.

Multi-Room Audio Setup

This is Lyrion’s killer feature. Synchronized playback across multiple zones with sub-millisecond accuracy:

  1. Install Squeezelite on each device (Raspberry Pi, Linux PC, etc.)
  2. Or flash piCorePlayer onto Raspberry Pi SD cards
  3. Each player automatically discovers the Lyrion server on port 3483
  4. In the web UI, select which players to synchronize
  5. All synced players play the same audio at the same moment

For a Squeezelite Docker player on the same host:

  squeezelite:
    image: giof71/squeezelite:stable
    container_name: squeezelite
    restart: unless-stopped
    network_mode: host  # Required for player discovery
    devices:
      - /dev/snd:/dev/snd  # Host audio device
    environment:
      - SQUEEZELITE_NAME=living-room
      - SQUEEZELITE_SERVER_PORT=your-server-ip:3483

Custom Init Script

Lyrion supports a custom-init.sh script in the config volume that runs before the server starts:

#!/bin/bash
# /config/custom-init.sh — runs before Lyrion starts
# Install ffmpeg for better transcoding support
apt-get update && apt-get install -y ffmpeg

Place this file in the config volume to install additional packages or run custom setup commands.

Reverse Proxy

If you need remote access through a reverse proxy, configure your proxy to forward to port 9000. Note that WebSocket connections are used for real-time player updates.

Nginx Proxy Manager or Caddy work well. For detailed reverse proxy setup, see our Reverse Proxy Guide.

Important: Remote access works for the web UI and streaming, but Squeezebox player discovery (port 3483) only works on the local network. Remote Squeezelite players need the server IP configured manually.

Backup

Back up the config volume to preserve:

  • Server settings and preferences
  • Plugin configurations and credentials
  • Library database and metadata cache
  • Playlist files
# Stop the container to ensure database consistency
docker compose stop lyrion
# Back up the config volume
docker run --rm -v lyrion-config:/data -v $(pwd):/backup alpine \
  tar czf /backup/lyrion-backup-$(date +%Y%m%d).tar.gz -C /data .
# Restart
docker compose start lyrion

Your music files are not stored in the config volume — back them up separately. See our Backup Strategy Guide.

Troubleshooting

Players Not Discovered

Symptom: Squeezelite or piCorePlayer players don’t appear in the web UI.

Fix: Verify port 3483 is mapped correctly (1:1, both TCP and UDP). Check that the player and server are on the same subnet. Docker’s default bridge network isolates containers — use network_mode: host for the Squeezelite container or ensure port 3483/udp is forwarded.

Web UI Shows Wrong Port in Player URLs

Symptom: Players can’t connect after remapping the web UI port.

Fix: Set the HTTP_PORT environment variable to match your host port mapping. If you map 9002:9000, set HTTP_PORT=9002. The server advertises this port to players.

Library Scan Incomplete or Slow

Symptom: Not all tracks appear after a scan, or scanning takes hours.

Fix: Check file permissions — the container runs as PUID/PGID (default 499/100). Ensure your music files are readable. For large libraries (50,000+ tracks), initial scan can take 30+ minutes. Subsequent rescans are incremental and much faster.

Material Skin Not Loading

Symptom: Navigating to /material/ shows a blank page or 404.

Fix: Ensure the Material Skin plugin installed successfully. Restart the container after installation. Clear your browser cache. Check Settings → Plugins to verify it’s listed and enabled.

Audio Crackling or Dropouts in Multi-Room

Symptom: Synchronized playback has crackling or devices fall out of sync.

Fix: This is typically a network issue. Use wired Ethernet for players when possible. Wi-Fi introduces variable latency that affects sync precision. Increase the buffer size in player settings. Check that no other process is consuming network bandwidth during playback.

Resource Requirements

ResourceValue
Idle RAM~200 MB
Active RAM (streaming)300–500 MB
CPU (streaming, no transcode)<5%
CPU (transcoding for players)10–30% per stream
Disk (application + plugins)~500 MB
Disk (library cache, 50K tracks)~2 GB
Minimum hardware1 GB RAM, single-core

Lyrion is lightweight for music serving. The main resource consumer is transcoding — if a player can’t handle your source format (e.g., FLAC to MP3), Lyrion transcodes in real-time using Perl and optionally ffmpeg.

Verdict

Lyrion Music Server occupies a unique position in self-hosted music. It’s the only server with true multi-room synchronization at sub-millisecond accuracy, native streaming service integration (Spotify, Tidal, Qobuz), and a 20-year plugin ecosystem. The Material Skin plugin transforms its dated interface into something modern and usable.

If multi-room audio is your primary goal, Lyrion is the right tool — nothing else matches its synchronization capabilities. If you want a simpler music server with better mobile apps and a modern architecture, Navidrome is the lighter alternative. Both serve music well; they prioritize different features.

FAQ

Why was it renamed from Logitech Media Server to Lyrion?

Logitech discontinued the Squeezebox hardware line and stopped contributing to the software. The community forked and rebranded it as “Lyrion” in 2024 to establish independent identity and avoid trademark issues. The software is the same — just a new name and community governance.

Can I use Lyrion without Squeezebox hardware?

Yes. The web UI (especially with Material Skin) works as a standalone music player. Software players like Squeezelite run on any Linux device, Raspberry Pi, or Docker container — no Squeezebox hardware needed. Lyrion’s real advantage is the multi-room sync and plugin ecosystem, both of which work with software players.

How does multi-room sync compare to Snapcast or PulseAudio?

Lyrion’s sync is purpose-built for music with sub-millisecond accuracy using the Squeezebox protocol. Snapcast achieves similar precision but requires more manual setup. PulseAudio/PipeWire network audio has higher latency and isn’t designed for music sync. For dedicated multi-room music, Lyrion is the most reliable option.

Can I stream Spotify through Lyrion to all rooms?

Yes. Install the Spotty plugin, which makes Lyrion appear as a Spotify Connect device. Play music from the Spotify app to Lyrion, then use Lyrion’s sync feature to play it across all your rooms simultaneously. Requires a Spotify Premium subscription.

Why can’t I remap port 3483?

The Squeezebox protocol (SlimProto) hardcodes port 3483 in both players and the server. Players broadcast UDP discovery packets on port 3483 to find the server. Remapping this port means players can’t discover the server. Port 9090 (CLI) is similarly hardcoded. Only port 9000 (web UI) can be remapped.

Does Lyrion support gapless playback?

Yes. Lyrion supports gapless playback for all supported formats when the player supports it. Squeezelite and piCorePlayer both handle gapless playback correctly. The server pre-buffers the next track to eliminate gaps between songs.

Comments