How It Works

  • Icecast1
    Icecast site, available mountpoint list

How it works — Spotycast

Spotycast turns Spotify Connect into a “network radio” stream: Spotify plays into the container, Liquidsoap encodes/remuxes, Icecast exposes mountpoints, then Roon/LMS/Volumio (or any client) can consume the stream like a standard radio URL.

Quick flow (5 steps) end-to-end

Goal: pick a mountpoint URL from Icecast, add it as a “radio station” in your player, then select the Spotify endpoint and press play.

1) Check Icecast & list available mountpoints

Open your Icecast instance and confirm the server is up. You should see the list of mountpoints (streams) currently exposed by Liquidsoap.

http://<HOST>:28000
What you should see: mountpoints such as /mp3, /aac, /flac (names depend on your Liquidsoap profile). If the page loads but no mountpoints are present, it usually means Liquidsoap isn’t connected yet or Spotify playback hasn’t started.

2) Add a mountpoint as a radio station (Roon / LMS / Volumio / …)

Copy the mountpoint URL and add it as a custom radio stream in your player. Any client that supports “radio URL / HTTP stream” should work.

# Example (adjust the mountpoint)
http://<HOST>:28000/spotify.aac
Roon (typical):
  • Settings → Services / Live Radio (depending on your setup)
  • Add a custom stream URL
  • Paste the Icecast mountpoint
LMS / Volumio / others:
  • Add new radio station / stream URL
  • Paste the Icecast mountpoint
  • Save and try playback

3) Select the Spotify Connect endpoint

On your phone/desktop Spotify app, open “Connect to a device” and select the endpoint:

  • “Roon Spotify Bridge” for the standard workflow
  • “Roon Spotify Bridge (Docker)” for the Premium Docker workflow (as labeled in your setup)

4) Play

Start playback in Spotify. This triggers the audio chain: Spotify → PulseAudio → Liquidsoap → Icecast. Your radio client (Roon/LMS/Volumio) should then start receiving audio from the mountpoint.

5) Enjoy

That’s it. Once your player is consuming the mountpoint URL, Spotify becomes your “source” and your player becomes your “distribution layer”.

Premium quality — ensure Lossless Debian noVNC

Premium requirement: before expecting a true lossless chain, verify the Spotify quality setting from the Debian GUI session (noVNC). If Spotify is set to “High” (lossy), the pipeline cannot magically recover lossless.

How to verify the quality setting

  1. Open the Debian GUI via noVNC: http://<HOST>:6080
  2. launch command “spotycast-start-spotify” inside the container session to properly launch spotify.
  3. Go to Settings and set streaming quality to Lossless (Premium).
Best practice: once set, keep it stable and avoid switching qualities mid-stream to reduce stream renegotiations and mountpoint flapping.

Practical tips ops-minded

Mountpoints not visible?

  • Confirm Icecast is reachable: http://<HOST>:28000
  • Start Spotify playback after selecting the correct endpoint (step 3 → 4)
  • Check Liquidsoap/Icecast logs inside the container if needed
tail -n 200 /var/log/spotify-roon-bridge/liquidsoap.stderr.log || true
tail -n 200 /var/log/spotify-roon-bridge/icecast2.stderr.log || true
tail -n 200 /var/log/spotify-roon-bridge/pulseaudio.stderr.log || true

Client compatibility

Any player that can ingest an HTTP radio stream should work. Roon, LMS, Volumio, and similar ecosystems are essentially “stream consumers” here.

Latency note: HTTP streaming introduces buffering. Expect a small delay versus local playback. That’s normal for Icecast-style distribution.