Do you want to see what's in your library? 🀩

Hi Beeters!

The other day I had to sit through a super-long meeting over skype so I started to play around with numpy and pandas and firends. Since I needed some datasets to work with I though: β€œWhy not play around with my music library?”

So, this is what I ended up with at the end of the meeting:

$ beet describe bpm albumartist:'Various Artists'
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Name       β”‚                      Value β”‚
β•žβ•β•β•β•β•β•β•β•β•β•β•β•β•ͺ════════════════════════════║
β”‚ Field name β”‚                        bpm β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Field type β”‚ beets.dbcore.types.Integer β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Count      β”‚                       1392 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Min        β”‚              65.9922409058 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Max        β”‚                      185.0 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Mean       β”‚         122.99097545119291 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Median     β”‚                      122.0 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Empty      β”‚                          0 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Distribution(bins=10) histogram
66.0 - 77.9    [ 30]  β–ˆβ–ˆβ–ˆβ–ˆβ–Š
77.9 - 89.8    [ 73]  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–
89.8 - 101.7   [203]  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š
101.7 - 113.6  [221]  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ
113.6 - 125.5  [256]  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ
125.5 - 137.4  [208]  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ
137.4 - 149.3  [183]  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹
149.3 - 161.2  [ 87]  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹
161.2 - 173.1  [107]  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š
173.1 - 185.0  [ 24]  β–ˆβ–ˆβ–ˆβ–Š

let’s see genres:

$ beet describe genre albumartist:'Various Artists'
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Name           β”‚                     Value β”‚
β•žβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•ͺ═══════════════════════════║
β”‚ Field name     β”‚                     genre β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Field type     β”‚ beets.dbcore.types.String β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Count          β”‚                      1392 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Unique         β”‚                        91 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Most frequent  β”‚               Oldies(202) β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Least frequent β”‚              Dance-Pop(1) β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Empty          β”‚                        19 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Unique element histogram
Oldies                  [202]  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ
Classic Rock            [139]  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ
Soul                    [124]  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ
Blues                   [120]  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š
Rock                    [109]  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹
Pop                     [105]  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š
Dance                   [ 86]  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ
New Wave                [ 48]  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ
Reggae                  [ 44]  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š
Heavy Metal             [ 33]  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ
Trance                  [ 24]  β–ˆβ–ˆβ–ˆβ–ˆβ–Š
Jazz                    [ 20]  β–ˆβ–ˆβ–ˆβ–ˆ
Blues Rock              [ 20]  β–ˆβ–ˆβ–ˆβ–ˆ
                        [ 19]  β–ˆβ–ˆβ–ˆβ–Š
Soundtrack              [ 17]  β–ˆβ–ˆβ–ˆβ–
Synthpop                [ 16]  β–ˆβ–ˆβ–ˆβ–
Ska                     [ 16]  β–ˆβ–ˆβ–ˆβ–
Rap                     [ 15]  β–ˆβ–ˆβ–ˆ
Pop Rock                [ 14]  β–ˆβ–ˆβ–Š
Funk                    [ 12]  β–ˆβ–ˆβ–
Metal                   [ 12]  β–ˆβ–ˆβ–
Alternative Metal       [ 12]  β–ˆβ–ˆβ–
Alternative Rock        [ 11]  β–ˆβ–ˆβ–
Hard Rock               [ 10]  β–ˆβ–ˆ
Soft Rock               [ 10]  β–ˆβ–ˆ
Singer-Songwriter       [  9]  β–ˆβ–Š
Rockabilly              [  8]  β–ˆβ–‹
R&B                     [  6]  β–ˆβ–Ž
Rock And Roll           [  6]  β–ˆβ–Ž
Electronic              [  6]  β–ˆβ–Ž
Metalcore               [  6]  β–ˆβ–Ž
Progressive Rock        [  5]  β–ˆ
Disco                   [  5]  β–ˆ
House                   [  5]  β–ˆ
Psychedelic Rock        [  5]  β–ˆ
Punk Rock               [  4]  β–Š
Progressive Metal       [  4]  β–Š
Thrash Metal            [  4]  β–Š
Funk Soul               [  3]  β–‹
Nu Metal                [  3]  β–‹
Death Metal             [  3]  β–‹
Contemporary R&B        [  3]  β–‹
World Music             [  3]  β–‹
Symphonic Metal         [  3]  β–‹
Post-Grunge             [  2]  ▍
Pop Punk                [  2]  ▍
Industrial Metal        [  2]  ▍
Blue-Eyed Soul          [  2]  ▍
Black Metal             [  2]  ▍
Surf Rock               [  2]  ▍
Psychedelic             [  2]  ▍
PMEDIA                  [  2]  ▍
Motown                  [  2]  ▍
Industrial              [  2]  ▍
Indie Rock              [  2]  ▍
Rock, Hard Rock, Metal  [  2]  ▍
Britpop                 [  2]  ▍
Contemporary Classical  [  2]  ▍
Glam Rock               [  2]  ▍
Indie Pop               [  2]  ▍
Lo-Fi                   [  1]  β–Ž
Power Metal             [  1]  β–Ž
Pop Soul                [  1]  β–Ž
Folk Rock               [  1]  β–Ž
Pinoy Rock              [  1]  β–Ž
Post-Punk               [  1]  β–Ž
Speed Metal             [  1]  β–Ž
Doo Wop                 [  1]  β–Ž
Gothic Metal            [  1]  β–Ž
Hip Hop                 [  1]  β–Ž
Downtempo               [  1]  β–Ž
Southern Soul           [  1]  β–Ž
Melodic Metalcore       [  1]  β–Ž
Ragga                   [  1]  β–Ž
Classical               [  1]  β–Ž
Teen Pop                [  1]  β–Ž
Country                 [  1]  β–Ž
Grunge                  [  1]  β–Ž
Sludge Metal            [  1]  β–Ž
Industrial Rock         [  1]  β–Ž
Ballad                  [  1]  β–Ž
Southern Rock           [  1]  β–Ž
Grindcore               [  1]  β–Ž
Country Rock            [  1]  β–Ž
Indie                   [  1]  β–Ž
Gospel                  [  1]  β–Ž
Vocal Trance            [  1]  β–Ž
Gypsy Jazz              [  1]  β–Ž
Blackgaze               [  1]  β–Ž
Viking Metal            [  1]  β–Ž
Dance-Pop               [  1]  β–Ž

Quite neat isn’t it? You can easily catch missing/suspicious tags (I have β€œViking Metal” :rofl:) and probably much more. I haven’t give this plugin much thought yet… I have too many ideas…

Anyways, there is a repo of this stuff here but it is 0% tested and probably full of issues. You can clone it and add it to your beets deployment by using the pluginpath config option to have a go at it.

If you think this plugin can be a useful tool for you give your contribution in the form of ideas and/or PRs so we can make at least the first PyPi release so that less savvy users can also install it.

7 Likes

Thanks for sharing. This looks like a really useful tool. I’m going to try to install it. But not so tech savvy so not sure if I will succeed.

I put installation instructions on the github page. If you have issues let me know and I’ll give you a hand.

Works like a charm Adam @jakabadambalazs thanks a lot.

A suggestion for this plugin would be to add a album -a option so that I can check the stats for album genres with beet describe -a genre.

2 Likes

Great! Could you open an issue on github and add your request there so it does not disappear in the digital fog?

Will do that!

1 Like

Useful tool, thank you …

1 Like

Just a quick note: This plugin is now installable from pypi with pip install beets-describe.

2 Likes

Thanks a lot!

For those looking for a prettier (non cmdline) visualization library, I’ve had fun with Altair. Example Gallery β€” Altair 4.1.0 documentation

1 Like

Hey @RollingStar that looks really interesting. Would you be willing to elaborate a bit on how you went about visualizing your music collection?

For now I’ve only visualized my last year of music plays, tying in to listenbrainz. That’s what I’m interested in, not my collection. But there should be some overlap (ex. album covers could be used in both cases). Right now it’s just a simple bar chart, so the Altair examples should serve you well.

1 Like

Dear @jakabadambalazs I was wondering if you would be willing and could find the time to merge two pull requests in Github into your Master.
For the plugin β€˜Describe’ and 'BeetsGoingRunnin’g.
People have changed the code for the deprecated confit.py to confuse.
That way also Beets Macport will probably update your β€˜describe’ as a dependency.

Thank you very much

Hey @janpeeters.
Done. All plugin repos are now updated to use confuse.

Thanks a lot @jakabadambalazs. I read on GitHub that you don’t have much time to maintain them so I really appreciate it that you took the time to do this. Now they can continue being useful to people without the warning message. :pray: