Now that the latest Roon EA build, 1675, fixed the Roon API issue I was able to use Roon logs from the latest production build and this EA1675 build and the advanced logs from my extension to get a better correlation between both softwares.
v1.6.49 - the last update for a minimum of 2 weeks
Iâve looked thoroughly into this. The Roon API doesnât allow this as a native feature.
I could emulate the play queue within the UI and I could make it work.
The minor issue is the currently playing track would stutter upon applying the queue.
If it were only the hiccup, Iâd build it with a warning. The two harder problems:
The queue only tells us names, not identities. Roonâs API gives us display text - âHarvest Moon / Neil Youngâ - with no link back to the library item. To rebuild, every track must be re-found by searching for its name, and when your library has the same title on multiple albums (studio/live/remaster/compilation), the rebuild can silently swap in a different recording than the one that was queued. And anything that isnât a straightforward library track - Roon Radio picks, a Qobuz playlist, internet radio - may not resolve at all, so those entries would just vanish from the rebuilt queue.
Itâs slow and can fail halfway. Each re-added track costs ~7â10 Roon round-trips. A 25-track queue is 200+ calls over tens of seconds, and thereâs no undo - if the Core hiccups mid-rebuild (or the track ends, or someone touches another remote), youâre left with a half-built queue.
Iâll think over this when on holiday.
I could build it as an explicitly-labelled experimental mode, off by default in Settings, with guardrails - the edit UI only unlocks when every queue item resolves to exactly one library track with high confidence, and it refuses (with a clear message) otherwise. That confines it to the cases where it genuinely works, and the hiccup-on-apply is disclosed up front. Or we wait for Roon to add the API verbs, at which point the full native version (drag handle and all) is a dayâs work.
Home after a great family vacation. A few days before resuming normal life and I have a few hours spare today.
Build 55 brings a few bug fixes and new minor features.
Fixes:
⢠A regression when navigating between artist discographies and back to random album screens fails to further open albums (highlighted by @GGromadzki on GitHub, big thanks)
New minor features:
⢠Album icons to show if local, Qobuz or Tidal (WIP)
For this to work with an existing extension running, update and within the extension rescan Roon library and rescan labels.
Confirmed working:
⢠A last-minute feature added (before going on vacation) to show your whole Roon library works. Iâll work on this soon to give better filtering/focus options.
The update yesterday was to fix a few bugs before todayâs planned bigger update.
Big not just because it gets a bump in version numbers.
v1.7 - this has been in the making prior to my vacation in parallel to my main releases.
Iâve always wanted to retain the soul of the existing extensions random album selection screen, and I have. I also saw another purpose for this after someone mentioned Linux.
v1.7 comes a few steps closer (IMO) to being classed as an unofficial solution as a Roon Client for Linux users. Thereâs still the need for Roonâs official client and/or remotes. Iâll never officially get around this even though a few possibilities âdoâ exist.
Again, this doesnât replace Roon official clients/remotes but does give a different take on how to use Roon and with a few extras Roon doesnât have.
This release isnât just about function and visual changes. Thereâs lots of under-the-hood changes to minimise API calls. Finding ways to work around limitations of the Roon API is tricky and time consuming, but rewards come with perseverance. A good number of development changes for progress and reduced regressions have been worked on.
Bragging rights time - my extension has a better & smoother scrolling experience on 120Hz iPhone screens than the official Roon Remote app. This is achieved even with a higher density album view screens. Head to the âLibraryâ screen and scroll with a single swipe and see how it performs.
Progress from here in terms of updates will be much slower. It might be 3 months before another update is pushed out. Quality over quantity.
Enjoy
New features & improvements
⢠Flat interface throughout â Home, album view and Queue: no cards, no watermarks, Roon like layout.
⢠Release years record where they came from, so your own file tags beat a serviceâs remaster date.
⢠Better contrast in both new themes, now machine-checked by the tests.
⢠Browser chrome colour follows the theme.
⢠Library Sort & Focus â sort by album, artist, year, plays, last played or random; filter by source, decade and listening history, all combinable. Computed from the extensionâs own snapshot, so zero calls to your Core.
⢠Release years for the Decade filter â harvested at no API cost from your Qobuz/TIDAL favourites and local file tags.
⢠Artist links on the Now playing screen, matching the album view.
⢠Four themes â the original dark and light plus Copper dark and Brass light, chosen from a picker with Apply.
Bug fixes
⢠Wrong artists under âAlso appears onâ â a substring match, root-caused and eliminated across 13 places.
⢠Sort and Focus sheets opening underneath the now-playing bar, their buttons invisible and untappable.
⢠âMost playedâ sorting backwards; undated albums floating to the top of ânewest firstâ.
⢠Decade chips counting albums you donât own.
⢠Every toast in Settings silently throwing â token saves and the whole Qobuz/TIDAL connect flow reported nothing.
⢠Unreadable white-on-accent text in three places (2.28:1).
⢠Artists with punctuation-only or non-Latin names matching the entire library.
Additional
⢠Test suite from nothing to 291 tests, every fix pinned and mutation-checked â to minimise regressions.
Playlists - those created using Roon (local, streaming or mixed) and those synced through from Qobuz or Tidal (others not tested)
Smart playlists - these will be the extensions own and created and operate in a similar manner to Roonâs Smart Playlists. These are not transferable as smart playlists but can be added as regular playlists in Roon
Might be worth renaming this just to avoid confusion for anyone expecting to be playing their Roon Smart playlists.
Development has been really good on this as it would be previously very rare for me to open a web page to play something in Roon, now it is almost a daily habit. Good work @MusicD
Before I waffle on about whatâs new, I want to tell you how busy Iâve been with this. Usually Iâve been able to get a working build out of Claude each session before I hit a session limit. Not the case here. 45 builds on from the v1.7.0 with 4 to 5 Claude sessions per build. Itâs taken about 6 to 9 months in Claude time deliver this update. For me, a week and a lot of cursing Claude.
Here we go: TL;DR (see release notes on GitHub, link below)
Main new features are Playlists, Dynamic Playlists plus some magic and Smart Picks.
Playlists
This is what you think it is. Playlists from Qobuz/Tidal via Roon and those created in Roon from local files. Create a playlist in the extension and play now or add it to your queue works.
Dynamic Playlists
This mirrors Roonâs own Smart Playlists as closely as possible but is the extensions own workings. I cannot expose Roonâs working Smart Playlists to the extension without reverse engineering a lot. I donât want to go down that Road. Create a Dynamic Playlist in the extension and you can send it to Roon via the queue, then save the queue as the playlist. Prompts will guide you.
The Magic
Playlist sharing. Whether a playlist is from Roon (except Smart Playlists), the extension or a Dynamic Playlist you can share them with other MusicD Remote extension users. Then share the code in a downloadable file or copy/paste into a forum thread, text, email etc and send it. The receiver then imports the code or file and thatâs it. Well, not quite. Currently this works if you have the songs in your Roon library. Iâm a few builds away from an update to this specifically where it finds the missing songs and adds them. A lot of cogs in this feature.
The Extra Magic
Some may know I have a version of the remote extension for Lyrion Music Server. This shares the same playlist functions and you can share/import between the two Remotes. No other music streaming software, plugin or extension does this.
Smart Picks - needs Qobuz (Tidal TBC)
The constraint that shapes everything: Using Roonâs API like I am means Roon plays only what in its library, and its API has no way to add anything. So a recommendation canât be played.
The whole flow is: Smart Picks kicks in at 4am â cogs turn â chooses 5 albums by artists not in your library but close to your genre preferences & 1 stretch thatâs not like anything you normally listen to â itâs favourited on Qobuz (Tidal TBC) â Roon imports it (when Roon works) â it appears in your library on the next sync in Smart Picks â now it plays.
Once a day, on a timer - can be changed
Read your library (free â no Roon calls). Every albumâs credits become an artist profile: how many albums you own by them, and how many plays those albums have.
Fetch the hub list. One request to ListenBrainz returns the worldâs 1,000 most-listened artists. This is the pivot of the whole feature, because similarity quality inverts with how famous the seed is. Ask âwhoâs like Radiohead?â and you get Nirvana, RHCP, Coldplay â useless. Ask âwhoâs like Bark Psychosis?â and you get Mogwai, Talk Talk, Tortoise, Slint, Labradford. So nothing on the hub list is ever used as a seed, or offered as a pick.
Choose 24 seeds from the obscure end. Non-hub artists, sorted by plays per album owned â four plays across one album is a stronger statement of taste than six spread across twelve. (No play history yet? It falls back to most-owned.)
Walk out. Seeds resolve to MusicBrainz IDs, then ListenBrainz returns similar artists in batches â each result tagged with which seed reached it.
Filter. Drop anything you already own, anything famous, anything youâve blocked, anything shown in the last 120 days.
Rank by distance, not similarity. This is the part every other recommender gets backwards. An artist reachable from one seed beats one reachable from twelve â because the latter is somebody youâve had every opportunity to buy and havenât.
Deal round-robin across seeds. Ranking alone produced a monoculture in testing: five ambient records, all neighbours of one album. Now each seed contributes one pick per round, so five picks are five different corners of your library.
Resolve to a real album. Each pick becomes an actual Qobuz album you can favourite. Capped at 40 lookups, with a 429 abort.
The stretch pick. Genre weights come from your snapshot; a genre at â¤2% of your library is âoutsideâ. MusicBrainzâs relevance order gives that genreâs canonical names â Flamenco â CamarĂłn de la Isla â so itâs a stretch worth listening to rather than just an unfamiliar one.
Design decisions
⢠No LLM. The reason line is derived from the chain that produced the pick (âBecause you play Stars of the Lidâ), so itâs always true. A generated sentence would read better and would sometimes be wrong â and a hallucinated album canât be favourited, it just looks broken.
⢠Silence is never rejection. Only an explicit âNot for meâ blocks an artist, permanently. The premise is albums youâd never reach for, so treating an ignored pick as a no would empty the pool within a week.
⢠Zero Roon calls. Library analysis reads the existing snapshot; everything else is plain HTTP to ListenBrainz, MusicBrainz and Qobuz.
I started off with LLM but decided upon good old cogs and gears and a lot of time to implement this. The failing part here is Roon not syncing Qobuz/Tidal albums to Roon. Note: this aspect of the extension is still under continuous work and improvements will follow.
This had crossed my mind when I added the Library carousel. Itâs expanded view can be manipulated into all sort-by options and it wouldnât be a simple A to Z, Z to A as itâd also be dates. It wouldnât take much to add. Iâll add this to the maybe pile.
What is lacking is a text based focus/filter on the library album grid screen.
The home screens search can act as a text based focus/filter.
From Monday Iâll have the time to work on this again. Iâve just finished working on the Lyrion Music Server version. Almost a 1:1 match.
The roadmap is looking like:
UI tweaks - sizing aspects of buttons and placements
Improve Smart Picks stretch pick selector
Library album grid screen - text based focus/filter
The Highlander - There can only be One MusicD Remote