← All projects

Music & software

Multi-room streaming
without Roon.

A guide to setting up a bitperfect multi-room streaming with free and opensource software, including the tool to prepare your library to index and browse perfectly.

September 12, 2026 · Linux examples; adapt paths and devices to your system.

The tools in this guide

One library. A few ways to listen.

The files are yours. The useful part is making them easy to browse and available wherever you listen. This setup separates three jobs: preparing the library, serving the music, and playing it.

How the music reaches your playersLuthier prepares the music library. Lyrion and Navidrome read that library. Lyrion serves Squeezelite players in multiple rooms, while Navidrome serves a phone or desktop player. Luthier prepares the shared libraryLuthierprepare & repair One shared music libraryYour music libraryone collection of files Lyrion serves room playersLyrionhi-fi & room players Navidrome serves personal playersNavidromephone & desktop Separate Squeezelite players in two roomsLiving roomSqueezeliteAnother roomSqueezelite A phone or desktop plays from NavidromePhone or desktopyour player app
Two servers can read the same collection.

Use Lyrion for players around the house, and Navidrome for its web player and compatible apps. You can start with the part you need.

Start with one room.

You need a computer that stays on while you listen, storage for your music, and an audio output beside each set of speakers. An existing computer can be the server; a supported small computer with a USB DAC can be a room player. Wired networking removes one variable while you get the first room working.

This walkthrough uses a home network and Linux examples. The software is free; hardware, electricity, music purchases and some optional controller apps are separate costs.

Prepare the library first.

The one problem that makes most music playing software unpleasant to use is caused by inconsistent, missing and broken metadata. An album gets splits into separate entries in the music browser. A compilation ends up filed under every track artist. Album art is incomplete or wrong. Different spellings of the same name make grouping by artist fail. Multiple versions of the same album get thrown together. Your library has hundreds of genres because the same genre is spelled or phrased in a dozen different ways. Even good players still need consistent metadata to make a collection browse properly.

Luthier is the tool that will make your library's metadata correct, complete and consistent. It records a metadata snapshot, shows what needs attention, and lets you review proposed fixes before applying them.

Luthier’s Fixes tab. Select the image to read it at a larger size.
  1. Record the starting point. Take a metadata snapshot before making changes.
  2. Inspect the problems. Look at album artists, compilations, artwork, and inconsistent names.
  3. Review, then repair. Check the proposed changes and start with a manageable part of the library.
  4. Rescan and listen. Check how the albums actually appear in your chosen player.

Luthier repository coming soon

A small, repeatable cleanup.

Back up the files before editing. Then pick a few representative albums: a compilation, a multi-disc release, and two editions of the same recording. Check title, track number, disc number, album, artist and album artist. Keep track artists on compilations while giving the release a consistent album artist. Inspect sort fields and alternate album-artist fields when duplicate names persist.

Luthier is still in development. Its workflow above shows how I approach repairs; you do not need to wait for it to set up the servers. Use a tag editor you already trust, review each change, and keep the original files. A metadata snapshot cannot recover missing or damaged audio.

Preserve edition and mastering information before renaming folders. After editing, rescan both servers and inspect the result in each player. A tidy folder tree alone does not guarantee tidy album grouping.

Serve the music.

Keep the collection in one place, with a separate backup. Give the music servers read access to it and their own writable directories for databases and settings. If the music lives on an external drive, make sure it is mounted before either server starts.

Lyrion for the rooms

  1. Download the package for your operating system from Lyrion’s installation page and follow its installation steps.
  2. Open http://YOUR-SERVER:9000 in a browser on the home network. Replace YOUR-SERVER with that computer’s hostname or LAN address.
  3. Select your music folder in the setup wizard and let the initial scan finish. Check the test albums before scanning or repairing everything.
  4. Leave this computer running while listening. The phone is a remote; the server and room player do the playback.

A container is also an option: Lyrion links its maintained images from the same installation page. A container must see the library at its mounted path, which can differ from the path on your host.

Navidrome for phone and desktop

Navidrome is optional if you only want the room players. With Docker Engine and the Compose plugin already installed, create a dedicated directory with a compose.yaml containing the example below. Replace the music path, version and user/group IDs first.

services:
  navidrome:
    image: deluan/navidrome:REPLACE_WITH_RELEASE_TAG
    user: "1000:1000"
    ports:
      - "4533:4533"
    restart: unless-stopped
    volumes:
      - ./data:/data
      - /absolute/path/to/music:/music:ro

Choose a published release tag from the official releases. Run id -u and id -g to find your account’s IDs. That account must own the data directory and be able to read the music.

mkdir -p data
docker compose up -d
docker compose logs --tail=50 navidrome

Open http://YOUR-SERVER:4533, create the initial account, and inspect the library. The official Docker instructions explain permissions and other installation options.

Connect the rooms.

A room player turns a network stream into sound at your DAC or amplifier. Start with one device, one output and one familiar album.

The appliance route

On a supported Raspberry Pi, piCorePlayer’s getting-started guide takes you through writing its image to an SD card, starting the device and configuring it in a browser. Select the attached audio output, name the player and connect it to your Lyrion server. Check the supported boards before choosing an image; writing an image replaces the selected card’s contents.

An existing Linux endpoint

Install Squeezelite using your distribution’s package instructions. List the audio outputs:

squeezelite -l

With any packaged Squeezelite service stopped so it does not compete for the DAC, try a foreground run:

squeezelite -s 192.168.1.10 -o hw:CARD=YOUR_DAC,DEV=0 -n "Living room"

Replace the address with your Lyrion server and the output with a device from the listing. -s chooses a server explicitly; -o chooses the output; -n gives the player a readable name. Press Ctrl+C to stop this trial. Once it works, put the same choices in your distribution’s service configuration and enable that service.

The Squeezelite manual documents the available options. Avoid copying DAC-specific DSD, resampling or buffer settings from another system.

Add a second room

Give each endpoint a distinct name. In Lyrion’s player controls, select the rooms you want to synchronize and play a familiar track. Listen across the doorway for an echo, check pause and resume, then try independent playback again. Navidrome phone clients are a separate listening path; they do not join the Lyrion synchronization group.

Check the path to the DAC.

Lossless files are a starting point. Bitperfect playback means their decoded samples reach the DAC without changes to their values. Volume adjustment, normalization, equalization, crossfading and resampling can alter that path.

  1. Choose direct output. On Linux, an ALSA hw: device bypasses software format conversion. The DAC must support the source format; a plughw: device may convert formats to make playback work.
  2. Remove intentional processing. Turn off ReplayGain, DSP, crossfade and forced sample-rate conversion for the test. Use the player’s fixed/full digital output setting when available.
  3. Set listening volume in hardware. Turn the amplifier or DAC down before switching to fixed digital volume: the next track may otherwise play at full level.
  4. Test different source rates. Try known 44.1 kHz and 96 kHz files that your DAC supports. Its display should follow the source. A matching rate is a useful check, but does not prove sample-for-sample identity.

For proof, use a supported DAC bit-test facility or compare a captured digital output against the decoded source. Without that test, describe the path as configured for bitperfect playback, rather than verified. Phone browsers and operating-system mixers have their own output behavior.

ALSA’s PCM plugin documentation explains hardware and conversion devices. Squeezelite’s output and resampling options help identify processing on the endpoint.

Choose a controller.

There is an important distinction: a controller tells another player what to play; a player produces the sound itself.

For the hi-fi, use a Lyrion-compatible controller. For headphones connected to your phone, use Navidrome’s browser player or a compatible client.

Lyrion players & controllers ↗Navidrome client apps ↗

Keep it in order.

Make library preparation part of importing new music. Check tags, inspect artwork, preserve deliberate album editions, and rescan the server once the files are ready.

A metadata snapshot helps undo tag changes. Keep a separate backup of the audio files themselves.

Back to the Luthier workflow ↑

When the results look wrong

  • An empty library: check the mounted path and the server account’s read permissions before changing tags.
  • Missing or split albums: inspect album artist, disc numbers and edition metadata on a small sample, then rescan.
  • A player cannot connect: check that server and endpoint are on the intended network, try an explicit server address, and inspect local firewall rules.
  • A DAC is busy or silent: stop competing audio applications, verify the selected output and try a source rate the DAC supports.
  • Broken files keep reappearing: move quarantine material outside the indexed music root. A folder named “broken” has no special meaning to a scanner.

Back up server settings as well as the music. Record the versions that work, read release notes before updating, and test one room before updating every endpoint.

What this replaces.

Once the software is set up and your library is cleaned by Luthier, you will have a bit-perfect multi-room streamer with a beautiful interface on desktop and remote controllable from your phone, and a user experience that rivals or even surpasses paid subscription services like Roon.

It is not a feature-for-feature recreation. You take responsibility for the tags, choose the players, and maintain the setup. The reward is a system built around your library and how you listen.

Start with your own priorities: browsing local albums, reliable room playback and access from a phone. Judge the replacement by those jobs. If Roon’s editorial discovery, integrated DSP or particular service integrations are central to your listening, compare those separately before switching.

← Back to the projects