Roon Now Playing — A Simple "Always-On" Display Extension

It might be that you have to run the docker container as a network:host see this line in the docker_compose.yaml, you have to uncomment it.

Hm.. it has been a bit tricky to debug this. I might get around installing a simulator at some point, but that seems low priority right now :frowning: sorry!

Totally understandable, makes perfect sense to focus on providing more value to modern devices. Which you’ve done a great job at already, love the designs!

yeah, at least for me on rPI that was required to get it working (did it via command line, but still the same config)

Forget my feature request. Everything I needed is already described in your GitHub documentation. I’ve created my own layout based on FactsColumnsLayout. I’ve reduced the AI text font size and increased the Now Playing text size. It’s great to be able to modify any aspect of the display. :+1:

1 Like

Please make a PR if you create a new layout! :slight_smile:

Roon Now Playing v1.7.0 — Self-Service Onboarding & Roon-Optional Mode

Hey everyone! Excited to share a big update to Roon Now Playing — the always-on display extension for Roon (and now, any music source).

What’s new since v1.5.1

v1.7.0 — Self-Service Onboarding

The problem: Setting up a new display meant finding its ID in the admin panel, manually selecting a zone, and configuring the layout. If you had multiple screens, this was tedious.

The fix: Displays now onboard themselves.

When you open a new screen, instead of “Waiting for Roon Core…” you get a clean welcome screen with:

  • A friendly name auto-assigned by the server (e.g., gentle-fox-17, calm-falcon-3)
  • A QR code linking directly to that screen’s config page

Scan the QR from your phone, pick a zone, choose a layout — done. The display updates instantly. No IDs to copy, no admin panel required.

Per-screen config page — Each display gets its own page at /admin/screen/gentle-fox-17 (or whatever its name is). It’s a focused, mobile-friendly UI showing just the settings for that one screen: zone, layout, font, and background. Perfect for configuring from your phone after scanning the QR.

Names persist across reconnects and server restarts. If you don’t like the auto-generated name, rename it to something like “Living Room” or “Office” from the admin panel or the config page itself.

v1.7.0 — Roon is Now Optional

Thanks to a contribution from @leolobato, you can now run the app without Roon at all. Set ROON_ENABLED=false in your environment and the app skips Roon discovery entirely, running in external-sources-only mode.

This is great if you’re using the External Sources API to push now-playing data from Spotify, Plex, Home Assistant, or any other source. No Roon hardware needed.

Home Assistant Integration

For those running Home Assistant — there’s now a custom integration that connects to your Roon Now Playing server and exposes each named display as a controllable device in HA. Each screen gets:

  • Select entities for layout, font, background, and zone
  • Binary sensor for connection status (online/offline)

This means you can automate your displays: switch to minimal layout at night, dim the lights when a screen connects, change layout based on what’s playing — all through HA automations.

Install via HACS as a custom repository: roon-now-playing-hass

v1.6.0 — Typography & Testing (in case you missed it)

  • Configurable typography — All layouts now expose CSS custom properties for font sizes and line heights. Easy to tweak for your specific display size (especially useful for 4K TVs vs tablets).
  • E2E visual testing — Added Playwright-based screenshot tests across all 9 layouts and multiple viewports (1080p, 4K, iPad, etc.) to catch visual regressions.
  • Better font scaling — Improved clamp() values for 4K displays and tighter line heights for smaller screens.

How to Update

Docker:

docker pull ghcr.io/arthursoares/roon-now-playing:latest
docker compose up -d

Manual:

git pull
pnpm install
pnpm build
pnpm start

Links

Feedback welcome — especially on the QR onboarding flow. Would love to hear how it works with your setup!

2 Likes