I am trying to bring this to Roon, most likely as an extension + web app. This thread is for progress and discussion – I’d love to hear what you think and whether this is worth pursuing.
I’ll move over a few conversations from other threads over to start things off. A little teaser to wet the appetite – here’s my Roon library in Stacks:
The hard part is getting the catalogue # just right. Basso works with periodic automatching with Discogs & MusicBrainz. Matching Apple’s catalog is a bit messy.
I made my own tagger (also vibe coded in python) because as a DJ I have lots of Vinyl rips and promos, which are a pain to get identified in Roon unless they are perfectly tagged.
Songkong can do someting similar, but I wanted to resemble my workflow from tagscanner – so i made one from scratch with everything I want/need when tagging music
I scrape the label info and cataloguenumbers from discogs/Musicbrains
so my own collection already has these tags for all my local music:
Cool stuff. As long as the catalog # ends up in Roon, I can pick it up. I’ll wrap Stacks up in a Docker container sometime this week and update here.
I’m interested to see how things hold up with large collections – my test set is only about 2K albums. Spine colors are calculated on first run (will take some time). Values are stored in JSON – new albums are automatically analyzed and added. Spine height is somewhat indicative of album length,
Let me know how things go. On the first run, spine thickness and colors are automatically extracted from album duration and artwork. The latter will take some time (Stacks shows the progress) – values are stored in JSON so this process only needs to run once. Just don’t expect to be digging your crates immediately.
I am very interested in how things run with larger collections, both in the initial generation and in the browser behavior with lots of spines.
Happy digging!
Please read the following first before installing:
Richer data (on by default)
Roon’s official extension API gives the album list, covers and playback. It doesn’t give play times, release dates, catalogue numbers, barcodes, formats or credits. With Richer data, Stacks reads those from Roon’s internal protocol, the one Roon’s own apps use. It does this through code copied from Deep Roon MCP, which builds on Arthur Soares’ roon-api-reverse-engineering.
With Richer data, the spines get their thickness, play time, year and format, the booklet gets track times and credits, and Release Date, Date Added and Catalog # are added to the orders.
This is unofficial. It isn’t made, endorsed or supported by Roon Labs, and a Roon update can break it until Stacks is updated. Stacks uses it carefully:
it only reads: it never changes anything in your library;
it reads each album once, one at a time;
it then refreshes a small share each day;
it closes the connection when idle or when Stacks stops.
If Richer data breaks or is switched off, Stacks keeps working with the official API.
Richer data is on from the start, because it is what makes Stacks Stacks. To use only the official API, switch it off in Roon › Settings › Extensions › Stacks › Richer data.
Super easy install and first launch. Stacks says I have 2,990 albums; Roon reports 3,101, so I’m a little confused there. Using the native data connection, not API.
Scanned and colored all the spines in about 3 minutes. Looking forward to playing with it!
Stacks counts what Roon shows on its Albums screen. Roon’s Home count also includes hidden duplicates, the other versions of albums you have more than once. What does you Roon > Albums say?