Better Browsing, a proof of concept

With an extensive local collection browsing becomes an issue. Genres seem to be the logical entry point, yet when autotagging your files with lastgenre etc. you possibly end up with a couple hundred genres, some of which you never heard of. Well at least it is like that for me. Or it used to be.
Now i have:
1 Subgenres
Genres can be hierarchically structured like so:
- electronic music
- - All Artists
- - idm
- - - All Artists
- - - breakcore
- - trip hop
The ‘All Artists’ directory shows a a flat list of all artists of the top genre.
2 dynamic grouping
Even with a hierarchical genre structure you might end up with too many entries in a folder to conveniently browse it. When organising and tagging your collection with beets (http://beets.io) there is a tag ‘grouping’, that can be used to cluster your collection to your liking.
Now whenever and only if more than 30 entries are found below a directory the entries are clustered by groups.
- electronic music
- - : Audiophile
- - : Chillout
- - All Artists
You can group by what ever works best for you.
3 alternate browse structure
The most common browse structure genre:artists:albums:tracks does not work well for some types of audio files.
Radio plays,compilations, singletons are better with a different browse structure.
Dynamic grouping helps to get them nicely clustered.

Futher entry points like

  • Label
  • (Classical) Composer
  • Format
  • Samplerate
  • Release Year
    etc.

If this got you interested, you can use my docker image to give it a try.

docker run -d
–name mopidy
–net host
–device /dev/snd
-v ~/.config/mopidy/mopidy-docker.conf:/root/.config/mopidy/mopidy.conf
-v /data/raid1/music/:/data/raid1/music/
-v ~/.config/beets/:/root/.config/beets/
-v ~/.local/share/mopidy/bigbeet/:/root/.local/share/mopidy/bigbeet/
rawdlite/mopidy:bigbeet

of course you need to adapt the directories according to your file system.
The mapping of ~/.config/mopidy/mopidy-docker.conf allows for the container to run alongside an existing mopidy instance. Just edit the mpd and http port. And maybe the audio device.

For defining the genre tree 2 files are used.

  • genres.txt defines which genre names are accepted
  • genres-tree.yaml defines the tree structure.

i provided sample files to get you started, that can be copied with:

` docker exec mopidy setup.sh`

it is probably best to reference these files also in the beets config:

lastgenre:
   canonical: ~/.local/share/mopidy/bigbeet/genres-tree.yaml
   whitelist: ~/.local/share/mopidy/bigbeet/genres.txt

You can use beets inside the container like so:

`docker exec mopidy beet ls Aphex Twin`

and so on.

to keep the bigbeet database in sync to the beets library, you need to point beets to my plugin.

pluginpath:
- /mopidy-bigbeet/beetsplug

if you already have a beets library, you can scan it with

docker exec mopidy mopidy bigbeet scan

Source code is at

This is a proof of concept momentarily, so i would be surprised if everything worked right away.