# Stacks: virtual crate digging for Roon

**URL:** <https://community.roonlabs.com/t/stacks-virtual-crate-digging-for-roon/326578>\
**Category:** Roon API\
**Created:** [October 26, 2026, 6:03pm UTC](https://community.roonlabs.com/t/stacks-virtual-crate-digging-for-roon/326578 "2026-10-26T18:03:29Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![RBM](https://community.roonlabs.com/user_avatar/community.roonlabs.com/rbm/32/48302_2.png) [@RBM](https://community.roonlabs.com/u/RBM)\
**Post date:** [October 26, 2026, 6:03pm UTC](https://community.roonlabs.com/t/stacks-virtual-crate-digging-for-roon/326578/1 "2026-10-26T18:03:29Z")

</div>

For my own App Basso, I developed Stacks: a fun way of browsing your digital library as if digging though a crate of albums:

 ![Screenshot 2026-10-25 at 20.34.28](https://roon-community-uploads.s3.amazonaws.com/original/4X/f/1/0/f10b5fccfb24b309997ef944ee256a283cbc83d4.jpeg)

 ![Screenshot 2026-10-25 at 20.32.10](https://roon-community-uploads.s3.amazonaws.com/original/4X/0/1/9/0191d9ceb3418baf836396d2c6f957fc5417d205.jpeg)

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:

 ![Screenshot 2026-10-26 at 18.51.02](https://roon-community-uploads.s3.amazonaws.com/original/4X/b/d/c/bdc978b95987f6a41de4b26f1d7a2f6c13c3672f.jpeg)

---

<div class="post-metadata">

**Author:** ![goat](https://community.roonlabs.com/user_avatar/community.roonlabs.com/goat/32/107892_2.png) [@goat](https://community.roonlabs.com/u/goat)\
**Post date:** [October 26, 2026, 7:31am UTC](https://community.roonlabs.com/t/stacks-virtual-crate-digging-for-roon/326578/2 "2026-10-26T07:31:10Z")

</div>

That is so cool

you should add the catalogue number in the stacks 😉 so it really resembles a stack of disks / vinyls

---

<div class="post-metadata">

**Author:** ![goat](https://community.roonlabs.com/user_avatar/community.roonlabs.com/goat/32/107892_2.png) [@goat](https://community.roonlabs.com/u/goat)\
**Post date:** [October 26, 2026, 4:07pm UTC](https://community.roonlabs.com/t/stacks-virtual-crate-digging-for-roon/326578/3 "2026-10-26T16:07:49Z")

</div>

drewl

and sort by cataloguenumber - soo cool for organising your electronic music

🤤

---

<div class="post-metadata">

**Author:** ![RBM](https://community.roonlabs.com/user_avatar/community.roonlabs.com/rbm/32/48302_2.png) [@RBM](https://community.roonlabs.com/u/RBM)\
**Post date:** [October 26, 2026, 4:22pm UTC](https://community.roonlabs.com/t/stacks-virtual-crate-digging-for-roon/326578/4 "2026-10-26T16:22:51Z")

</div>

Already there – that’s the easy part. 🙂

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.

---

<div class="post-metadata">

**Author:** ![RBM](https://community.roonlabs.com/user_avatar/community.roonlabs.com/rbm/32/48302_2.png) [@RBM](https://community.roonlabs.com/u/RBM)\
**Post date:** [October 26, 2026, 4:40pm UTC](https://community.roonlabs.com/t/stacks-virtual-crate-digging-for-roon/326578/5 "2026-10-26T16:40:36Z")

</div>

I could consider building a separate version of Stacks towards Roon.

Roon does not have catalogue numbers, but does have the barcodes (UPC, like 0602547586995). Does that help you?

---

<div class="post-metadata">

**Author:** ![goat](https://community.roonlabs.com/user_avatar/community.roonlabs.com/goat/32/107892_2.png) [@goat](https://community.roonlabs.com/u/goat)\
**Post date:** [October 26, 2026, 4:51pm UTC](https://community.roonlabs.com/t/stacks-virtual-crate-digging-for-roon/326578/6 "2026-10-26T16:51:19Z")

</div>

I always tag my files and I do have the cataloguenumber in my tags

They get displayed in the credits / release info like this

Label and catalog

But in Roon nothing you can much do with it

If these default tags would be visible and sortable that would be soo cool

 ![IMG_6287](https://roon-community-uploads.s3.amazonaws.com/original/4X/2/f/8/2f8f3ae4c5fdae2414baceed62b8ba4435c9b218.png)

---

<div class="post-metadata">

**Author:** ![RBM](https://community.roonlabs.com/user_avatar/community.roonlabs.com/rbm/32/48302_2.png) [@RBM](https://community.roonlabs.com/u/RBM)\
**Post date:** [October 26, 2026, 3:25pm UTC](https://community.roonlabs.com/t/stacks-virtual-crate-digging-for-roon/326578/7 "2026-10-26T15:25:45Z")

</div>

Like this? 😉

 ![Screenshot 2026-10-26 at 16.24.08](https://roon-community-uploads.s3.amazonaws.com/original/4X/c/1/a/c1a953f33746f52d6ed963cd507b2746c3ab290b.jpeg)

---

<div class="post-metadata">

**Author:** ![RBM](https://community.roonlabs.com/user_avatar/community.roonlabs.com/rbm/32/48302_2.png) [@RBM](https://community.roonlabs.com/u/RBM)\
**Post date:** [October 26, 2026, 7:47pm UTC](https://community.roonlabs.com/t/stacks-virtual-crate-digging-for-roon/326578/8 "2026-10-26T19:47:03Z")

</div>

Making progress:

- Full booklet: cover, tracks, credits, play/shuffle/play next/play later
- Sorting options (incl. catalog #, optional), with keyboard type-ahead
- Zone selection
- Miniplayer (optional), leading to
- Now playing sidebar overlay, with progress bar, play controls, what’s next and queue

Booklet:

 ![Screenshot 2026-10-26 at 20.39.15](https://roon-community-uploads.s3.amazonaws.com/original/4X/c/8/b/c8be2c488eaf7c7c3e793af03d6568bed040f962.jpeg)

Sort by catalog #:

 ![Screenshot 2026-10-26 at 20.20.21](https://roon-community-uploads.s3.amazonaws.com/original/4X/5/2/3/5236736e120b78a00762701d7e14a30912727db8.jpeg)

Miniplayer:

 ![Screenshot 2026-10-26 at 20.17.09](https://roon-community-uploads.s3.amazonaws.com/original/4X/a/c/e/ace7b86e159972ec125068ff39d7b06563be756f.jpeg)

Now Playing:

 ![Screenshot 2026-10-26 at 21.05.25](https://roon-community-uploads.s3.amazonaws.com/original/4X/5/e/5/5e57835a5f2f88e198bb17d702aa730ae4b3ce16.jpeg)

That’s about it. Let me know if anyone is interested in digging their Roon crate themselves. Next step would be looking into packaging it up.

---

<div class="post-metadata">

**Author:** ![Mark\_McClusky1](https://community.roonlabs.com/letter_avatar/mark_mcclusky1/32/5_5575768a8748004e209b776fc1b2916d.png) [@Mark\_McClusky1](https://community.roonlabs.com/u/Mark_McClusky1)\
**Post date:** [October 26, 2026, 8:39pm UTC](https://community.roonlabs.com/t/stacks-virtual-crate-digging-for-roon/326578/9 "2026-10-26T20:39:26Z")

</div>

I love this, would love to try it out.

---

<div class="post-metadata">

**Author:** ![RBM](https://community.roonlabs.com/user_avatar/community.roonlabs.com/rbm/32/48302_2.png) [@RBM](https://community.roonlabs.com/u/RBM)\
**Post date:** [October 26, 2026, 8:40pm UTC](https://community.roonlabs.com/t/stacks-virtual-crate-digging-for-roon/326578/10 "2026-10-26T20:40:04Z")

</div>

Filter on the following – and any combination thereof:

- Title
- Artist
- Label
- Catalog number
- Barcode
- Year
- Format (e.g. 24/96)
- Source (Qobuz, Tidal, Local)

 ![Screenshot 2026-10-26 at 21.34.26](https://roon-community-uploads.s3.amazonaws.com/original/4X/9/d/9/9d93093ba205fefb85bc18dc77e844d05197e809.jpeg)

 ![Screenshot 2026-10-26 at 21.32.10](https://roon-community-uploads.s3.amazonaws.com/original/4X/3/a/a/3aa493e855359f37d3d485b488b1b52d6194bda9.jpeg)

---

<div class="post-metadata">

**Author:** ![goat](https://community.roonlabs.com/user_avatar/community.roonlabs.com/goat/32/107892_2.png) [@goat](https://community.roonlabs.com/u/goat)\
**Post date:** [October 27, 2026, 7:43am UTC](https://community.roonlabs.com/t/stacks-virtual-crate-digging-for-roon/326578/11 "2026-10-27T07:43:38Z")

</div>

love to try it out 🙂

---

<div class="post-metadata">

**Author:** ![goat](https://community.roonlabs.com/user_avatar/community.roonlabs.com/goat/32/107892_2.png) [@goat](https://community.roonlabs.com/u/goat)\
**Post date:** [October 27, 2026, 8:04am UTC](https://community.roonlabs.com/t/stacks-virtual-crate-digging-for-roon/326578/12 "2026-10-27T08:04:18Z")

</div>

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:

 ![image](https://roon-community-uploads.s3.amazonaws.com/original/4X/5/2/f/52ff81372051c278befd61addad279faa4615707.png)

it does a lookup in discogs and musicbrainz - combines all info and writes to de default flac / mp3 tags:

 ![image](https://roon-community-uploads.s3.amazonaws.com/original/4X/d/b/e/dbe09d33469492b094eba20897dd0ccc934ac867.png)

in Roon they get displayed in the release info

so if we just can use these as a basic in the stacks, that would be awesome

 ![image](https://roon-community-uploads.s3.amazonaws.com/original/4X/8/a/9/8a9865848dfdec88aa1652e0c4dbfd1837adf559.jpeg)

---

<div class="post-metadata">

**Author:** ![RBM](https://community.roonlabs.com/user_avatar/community.roonlabs.com/rbm/32/48302_2.png) [@RBM](https://community.roonlabs.com/u/RBM)\
**Post date:** [October 27, 2026, 9:22am UTC](https://community.roonlabs.com/t/stacks-virtual-crate-digging-for-roon/326578/13 "2026-10-27T09:22:43Z")

</div>

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,

---

<div class="post-metadata">

**Author:** ![Mark\_McClusky1](https://community.roonlabs.com/letter_avatar/mark_mcclusky1/32/5_5575768a8748004e209b776fc1b2916d.png) [@Mark\_McClusky1](https://community.roonlabs.com/u/Mark_McClusky1)\
**Post date:** [October 27, 2026, 7:01pm UTC](https://community.roonlabs.com/t/stacks-virtual-crate-digging-for-roon/326578/14 "2026-10-27T19:01:29Z")

</div>

Can’t wait!

---

<div class="post-metadata">

**Author:** ![RBM](https://community.roonlabs.com/user_avatar/community.roonlabs.com/rbm/32/48302_2.png) [@RBM](https://community.roonlabs.com/u/RBM)\
**Post date:** [October 28, 2026, 6:58pm UTC](https://community.roonlabs.com/t/stacks-virtual-crate-digging-for-roon/326578/15 "2026-10-28T18:58:22Z")

</div>

Party time: 🎉

> **[GitHub - renebouwmeester/stacks: Stacks for Roon – virtual crate digging served by...](https://github.com/renebouwmeester/stacks)**
>
> Stacks for Roon – virtual crate digging served by a Roon extension

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](https://github.com/renebouwmeester/deep-roon-mcp), which builds on Arthur Soares’ [roon-api-reverse-engineering](https://github.com/arthursoares/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.

---

<div class="post-metadata">

**Author:** ![Mark\_McClusky1](https://community.roonlabs.com/letter_avatar/mark_mcclusky1/32/5_5575768a8748004e209b776fc1b2916d.png) [@Mark\_McClusky1](https://community.roonlabs.com/u/Mark_McClusky1)\
**Post date:** [October 28, 2026, 8:41pm UTC](https://community.roonlabs.com/t/stacks-virtual-crate-digging-for-roon/326578/16 "2026-10-28T20:41:52Z")

</div>

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!

---

<div class="post-metadata">

**Author:** ![RBM](https://community.roonlabs.com/user_avatar/community.roonlabs.com/rbm/32/48302_2.png) [@RBM](https://community.roonlabs.com/u/RBM)\
**Post date:** [October 28, 2026, 8:48pm UTC](https://community.roonlabs.com/t/stacks-virtual-crate-digging-for-roon/326578/17 "2026-10-28T20:48:01Z")

</div>

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?

---

<div class="post-metadata">

**Author:** ![Mark\_McClusky1](https://community.roonlabs.com/letter_avatar/mark_mcclusky1/32/5_5575768a8748004e209b776fc1b2916d.png) [@Mark\_McClusky1](https://community.roonlabs.com/u/Mark_McClusky1)\
**Post date:** [October 28, 2026, 8:54pm UTC](https://community.roonlabs.com/t/stacks-virtual-crate-digging-for-roon/326578/18 "2026-10-28T20:54:06Z")

</div>

![Screenshot 2026-10-28 at 4.53.29 PM](https://roon-community-uploads.s3.amazonaws.com/original/4X/5/8/b/58bbaacc178f5117d019572d9fefd7145652385e.png)

---

<div class="post-metadata">

**Author:** ![RBM](https://community.roonlabs.com/user_avatar/community.roonlabs.com/rbm/32/48302_2.png) [@RBM](https://community.roonlabs.com/u/RBM)\
**Post date:** [October 28, 2026, 8:58pm UTC](https://community.roonlabs.com/t/stacks-virtual-crate-digging-for-roon/326578/19 "2026-10-28T20:58:08Z")

</div>

Hmmm… Interesting… Can you check what it says in the extension?

 ![Screenshot 2026-10-28 at 21.57.47](https://roon-community-uploads.s3.amazonaws.com/original/4X/7/a/4/7a481f968da7ff702b9a9984bcc9f48da5a9fe73.png)

---

<div class="post-metadata">

**Author:** ![Mark\_McClusky1](https://community.roonlabs.com/letter_avatar/mark_mcclusky1/32/5_5575768a8748004e209b776fc1b2916d.png) [@Mark\_McClusky1](https://community.roonlabs.com/u/Mark_McClusky1)\
**Post date:** [October 28, 2026, 9:02pm UTC](https://community.roonlabs.com/t/stacks-virtual-crate-digging-for-roon/326578/20 "2026-10-28T21:02:56Z")

</div>

![Screenshot 2026-10-28 at 5.02.40 PM](https://roon-community-uploads.s3.amazonaws.com/original/4X/0/3/f/03fbfa488b09d3eac37da943583f5d03075bafef.png)

[Next page](https://community.roonlabs.com/t/stacks-virtual-crate-digging-for-roon/326578.md?page=2)
