Lumae Radio

Your library, on the air.

Lumae Radio turns a Raspberry Pi into an always-on radio for your home. It plays stations made from your own music, follows the energy of your day, and gives every song a rest before it comes back.

  • Beta
  • Raspberry Pi
  • Navidrome or Jellyfin 12
  • Always in Stealth
Why this track: the song on air fits the station 81% and last aired six days ago; its energy sits just below the 09:44 target. Below, Favour, No preference and Avoid, rest options and Ban from this station. Why this track: the song on air fits the station 81% and last aired six days ago; its energy sits just below the 09:44 target. Below, Favour, No preference and Avoid, rest options and Ban from this station.
The Lumae Radio remote: the radio called Kitchen is on air with the station Morning drift, playing The Long Night Swim by Mara Vellen, with Favour, Less, Rest a week and Ban, and today's energy flow. The Lumae Radio remote: the radio called Kitchen is on air with the station Morning drift, playing The Long Night Swim by Mara Vellen, with Favour, Less, Rest a week and Ban, and today's energy flow.

Lumae Radio is in beta.

You can install it today. It's in use on a Raspberry Pi with a HiFiBerry DAC+ HD, but other boards and DACs, the 2 GB target with a 60,000-track library, long unattended runs and Jellyfin on a radio are still being checked. Expect rough edges, and keep the Pi on a network you trust. Setting it up and controlling it from your phone need the current Lumae beta build.

How it works

A radio that knows your library.

Lumae on your phone is for you. Lumae Radio is for the room: the kitchen, the living room, the shop. It plays by itself all day, from the same servers, and your phone is only the remote.

Raspberry Pi + DAC Your speakers Remote
Your server

Music and sound analysis

Navidrome or Jellyfin supplies the music and AudioMuse-AI the analysis, exactly as for the app. The radio keeps its own copy of what it needs.

Your Raspberry Pi

Lumae Radio

Chooses every track, crossfades, and plays through a DAC board or USB DAC on the Pi. It keeps going with your phone switched off.

Your phone or browser

The remote

Lumae finds the radio on your home network and becomes its remote. The radio also has its own web page for browsers at home.

Stations

Stations, not playlists.

A station is a sound, not a list. Start one from a Vibe on your phone, a song, a few seeds or a Vibe code, and the radio picks what fits, one track at a time, around the clock.

What the station sounds like.

  • Follow one of your Vibes. Pick a Palette or DNA Vibe. Change it on your phone and the station follows within about five minutes, after the current track.
  • Or start from seeds: tracks, artists or albums from the radio's library, or the song your phone is playing.
  • Narrow it by sound. Ten traits, from danceability to atmosphere, can keep a station inside a range.
  • Save it back. Turn a station you like into a Vibe on your phone.
The station Morning drift, Sound tab: follow one of your Vibes (Late light, Deep work, Sunday kitchen), save to your phone as a Vibe, and seeds. The station Morning drift, Sound tab: follow one of your Vibes (Late light, Deep work, Sunday kitchen), save to your phone as a Vibe, and seeds.

Calm at breakfast, lively in the afternoon.

  • Daily flow. Set a few points through the day and the station's target energy moves smoothly between them.
  • Weekends can get a curve of their own.
  • Steady keeps one energy all day, if that's what the room needs.
The Energy tab: Daily flow selected, a curve across the day with editable points, and how much music is available for each hour's target. The Energy tab: Daily flow selected, a curve across the day with editable points, and how much music is available for each hour's target.

Rests between repeats.

The defaults, all adjustable per station:

Same track 12 h
Same album 1 h 30
Same artist 45 min

It also avoids playing a song at the same time of day for up to 56 days, so the same song doesn't greet you at breakfast every morning.

When a station runs short of music, choose: keep playing with shorter rests, never below the minimums you set (the default), or go quiet rather than repeat sooner than you asked.

The Rotation tab: rest between repeats for the same track, artist and album, not at the same time of day for 56 days, and what to do when music runs short. The Rotation tab: rest between repeats for the same track, artist and album, not at the same time of day for 56 days, and what to do when music runs short.

Know before it goes on air.

  • How much music it has: hours to rotate, tracks and artists that fit, and how varied it really is.
  • Energy through the week, hour by hour, so you can see where music runs thin.
  • Suggestions to improve a station, and a seven-day preview of your edits before you save.

Preparing a station on a large library can take a while.

The Outlook tab: 15 hours of music to rotate, enough to keep each track 12 hours apart; 188 tracks and 18 artists fit; energy through the week. The Outlook tab: 15 hours of music to rotate, enough to keep each track 12 hours apart; 188 tracks and 18 artists fit; energy through the week.

Daily flow

It follows the shape of your day.

Every hour has a target energy. The radio picks music that fits each moment, from the songs it has measured, so mornings ease in and afternoons lift.

Move across the curve to see what the station looks for at each time of day.

Today's flow · illustration
lively calm 00:00 06:00 12:00 18:00 24:00

At 14:00, the station looks for music around 70% energy.

Illustration of the default curve. Weekends can get their own; Steady keeps one level all day.

The remote

Your phone is the remote.

At home, a radio button appears on Lumae's Home. Tap it to see what's on air and why: how well it fits the station, when it last played, and how its energy compares to the moment.

The radio remote with the song on air, Favour, Less, Rest a week and Ban, and today's energy flow. The radio remote in the light theme, with the song on air and today's energy flow.
On air
The Stations sheet: Morning drift on air, Late light following a Vibe, and Focus ready to prepare, with a New button. The Stations sheet: Morning drift on air, Late light following a Vibe, and Focus ready to prepare, with a New button.
Switch station

Favor

A gentle nudge toward a track that already fits. Nothing is forced in.

Less

A gentle nudge away. The track stays on the station, just plays less.

Rest

Give a track a day, a week or 30 days off.

Ban

Gone from this station, starting now. Your favorites and Pulse stay as they are.

Around the clock

Set it up once. Let it play.

Schedules: Morning drift starts at 07:00 on weekdays and stops at 09:00, with an Add schedule button. Schedules: Morning drift starts at 07:00 on weekdays and stops at 09:00, with an Add schedule button.
Schedules
Access: the owner password kept on this phone, the radio's pinned identity, an API key for Home Assistant that can read and control playback, and Sign out every browser. Access: the owner password kept on this phone, the radio's pinned identity, an API key for Home Assistant that can read and control playback, and Sign out every browser.
Access and API keys

Schedules

Start a station by itself, and stop it again, on the days you choose.

Ready if the network drops

The radio aims to keep about six hours of upcoming music on its card, and syncs your library by itself every six hours.

Picks up after a restart

A station that was playing starts again once the radio is back and its clock, music and sound output check out. A Stop stays a Stop.

Home automation

Give Home Assistant or your own scripts a key to the radio's HTTPS API that can only do what you allow. Revoke it any time.

Private by design

Always in Stealth.

What the radio plays never becomes a listen in your history, a scrobble or a Pulse input. It keeps its own rotation history, only for rotation.

Stays on your network

HTTPS tied to the radio's own certificate from the first connection, an owner password, and keys you can revoke.

Reads, never rewrites

The radio changes nothing on your music server. The only thing it writes to AudioMuse-AI is a Vibe you save or edit from a station. Your server's own logs still show what it streamed.

No cloud

No account and no Lumae server. The radio, your servers and your phone talk to each other directly.

Read how the radio handles your data

Getting started

How setup works.

  1. Install

    Put Raspberry Pi OS (64-bit) on the Pi and install Lumae Radio over SSH with its signed installer. Install steps

  2. Adopt

    In Lumae, open Settings → Servers & accounts → Lumae Radio. Your phone finds the radio, adopts it, sends it your server details and starts the first sync.

  3. Make a station

    Pick a Vibe, a song or a few seeds, set the energy for the day, and press play.

Adopt a new radio soon after installing it, on a network you trust: until a radio has an owner, the first phone that adopts it wins.

Hardware
The target is a Raspberry Pi 4 with 2 GB of memory and a library of about 60,000 tracks; that hasn't been measured on real hardware yet, and a large library may need 4 GB. It runs Raspberry Pi OS (64-bit) based on Debian 13, not the Legacy image, and plays through a DAC board or USB DAC whose driver you set up.
Servers
Navidrome, or Jellyfin 12.0 or newer with Quick Connect on, plus AudioMuse-AI with Lumae Analysis. To follow your Vibes, use 1.4.0 or newer with its collection manager on, and sign the radio in as the same AudioMuse-AI user as your phone. Jellyfin needs 1.6.0 or newer.
Remote
Lumae on your phone, from the current beta build (1.0.0 (32) on Android, (26) on iPhone), or a browser on your home network once it trusts the radio's certificate.

Install

Install the beta.

Lumae Radio installs over SSH on Raspberry Pi OS Lite (64-bit), the Debian 13 image. The files come from GitHub; the checks below come from this page, so a changed download can't pass them.

Lumae Radio 0.4.0-beta.1

October 9, 2026 · Raspberry Pi (64-bit) · 45 MB

Files on GitHub
  1. Prepare the Pi

    In Raspberry Pi Imager choose Raspberry Pi OS Lite (64-bit), not the Legacy image. Set a host name (the radio becomes <name>.local on your network), a user and SSH, then sign in over SSH and install what the radio needs:

    sudo apt-get update
    sudo apt-get install -y --no-install-recommends python3 openssl ca-certificates \
      libstdc++6 libgcc-s1 libgstreamer1.0-0 libgstreamer-plugins-base1.0-0 \
      gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-alsa \
      libasound2t64 libsqlite3-0 alsa-utils avahi-daemon

    Set up your DAC board's driver as its maker describes, if you use one.

  2. Download

    mkdir -p ~/lumae-radio && cd ~/lumae-radio
    r=lumae-radio-0.4.0-beta.1-linux-arm64
    url=https://github.com/rendyhd/lumae/releases/download/radio-v0.4.0-beta.1
    for f in $r.tar.gz $r.manifest.json $r.manifest.sig $r.install.py release-key.pem; do
      curl -fLO "$url/$f"
    done
  3. Check the key and the installer

    Both lines must say OK. If either doesn't, stop and don't install.

    sha256sum -c <<'EOF'
    cccccba7914ad03c6f70c6e7c9a8daf350c3230717ac47fe589a8f90ca1d2ee4  release-key.pem
    7a2c4825e532739b7ee67cd7fca51ef5f19b5e51a4613f95b695c1ee423fa06a  lumae-radio-0.4.0-beta.1-linux-arm64.install.py
    EOF

    Then keep the key where the installer looks for it. Every release is signed with it.

    sudo install -d -o root -g root -m 755 /etc/lumae-radio
    sudo install -o root -g root -m 644 release-key.pem /etc/lumae-radio/release-key.pem
  4. Verify, then install

    The installer checks the signature and every file before it changes anything. The first command only checks; the second installs and starts the radio.

    args="--archive $r.tar.gz --manifest $r.manifest.json --signature $r.manifest.sig --public-key /etc/lumae-radio/release-key.pem"
    python3 -I -B $r.install.py $args
    sudo python3 -I -B $r.install.py $args --install
  5. Adopt it

    Soon after installing, open Lumae on your phone: Settings → Servers & accounts → Lumae Radio. Your phone finds the radio, adopts it and sends it your server details. Then choose the sound output on the radio while it's stopped.

Upgrade
Download and check the new release the same way (the key stays), then run the installed installer: sudo python3 -I -B /opt/lumae-radio/current/packaging/install.py $args --install. Your stations, history and settings stay; the installer keeps a copy of the databases first.
Key
SHA-256 of release-key.pem: cccccba7914ad03c6f70c6e7c9a8daf350c3230717ac47fe589a8f90ca1d2ee4. The radio refuses a release signed with any other key.
Archive
SHA-256 of lumae-radio-0.4.0-beta.1-linux-arm64.tar.gz: 187de88324c18ee141d44b56b3a8c6dd4201ab29693baf3e00fd49f092308f3f. The installer checks it against the signed manifest itself.

Questions

Good to know.

Can I buy one?

No. Lumae Radio is software you install on your own Raspberry Pi. Install the beta

Does it play to AirPlay, Bluetooth, Sonos or other rooms?

No. It plays through a DAC board or USB DAC on the Pi, connected to the speakers in that room.

Will it change my listening history or recommendations?

No. The radio is always in Stealth. Favour, Less, Rest and Ban only affect that station, never your own favorites, history or Pulse.

Does it need the internet?

It needs to reach your servers, and it sets its clock from the network before it plays. If the network drops, it plays on from the music saved on its card, about six hours by default; how well that holds up is still being tested.

Which files can it play?

FLAC, MP3, Ogg Vorbis, Opus and WAV. For AAC and ALAC files it asks Navidrome for a FLAC copy; that path is still being tested.

Can it run on my server instead of a Pi?

No. It's made for a Raspberry Pi with speakers in the same room, and that's the only setup being tested.

Start with the app.

The radio builds on Lumae. Join the beta, make a few Palettes or DNA Vibes you love, and they'll be ready to go on air.