New plugin: beets-bpmanalyser

Hi all! The beets-bpmanalyser plugin will help you with all those songs that you don’t have tempo(bpm) information on. It scans your songs with the aid of aubio and calculates the average tempo(bpm) value for them, storing it into your library and/or on your mediaFiles.

The first release is up and working. :star_struck: It is also published on PyPi so you can just do:
pip install beets-bpmanalyser
Activate and configure the usual way.

Note: Automatic tagging during import is not yet implemented so for now you will have to call the command manually.


Wow, I do need something like this. Will your plugin be included in the standard distribution?

Amazing!! So i tried to set this up and im getting an error…
python/3.7.6_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/concurrent/futures/", line 128, in __init__ if max_workers <= 0: TypeError: '<=' not supported between instances of 'str' and 'int'

Any reason why im getting this?

Hi @thedevilisinthedetai,
Is there any chance you can you can open an issue on github for this? The forum is not the best place for assisting you in this. Also, you need to tell me how to reproduce this error. I have a pretty good idea of what’s going on and how to help you but I need a little more detail.

Hey! I don’t think this plugin will ever be included in the standard distribution. Why? Have you got issues installing it?

will do, thanks!

1 Like

No, I haven’t tried it yet. I just like installing the whole official package from one source – the core application and plugins – to avoid a Frankenstein. So I thought your creation deserved to be included along with the BPM plugin.

It might happen at one point. Who knows. But it is not the sort of plugin many people need so maybe it is better to keep it external to the core application. Only time will tell. But thanks for the appreciation of the idea. Have a go at it! And once you don’t need it just uninstall it. :wink: That’s what’s good about :electric_plug: plugins.

This looks great, having problems getting it installed though.

Initially received an error related to not having C++ 14, so I installed MSVC v140 - VS 2015 C++ build tools (v14.00). That seemed to resolve the errors related to that but now I’m getting a series of additional errors related to aubio install. I tried installing Aubio directly and receive the same error.

Here is a pastebin that includes the errors.

Thanks for all your hardwork and making this! If I can get it working it will resolves one of the biggest gaps in my library.

Hey @philo! Yeah, that’s a mess! Unfortunately, this is an aubio issue and I do not know what is going on. From your pastebin it looks like your C++ linker is complaining about some missing files when trying to compile aubiomodule. I would suggest to open an issue for aubio - I am sure they will be able to help. I also saw that there are the compiled binaries of aubio on the website. You might try installing them and then retry installing the aubio bindings for python. I hope you get this sorted out.

Wanted to update in case anyone else ran into this issue-

I resolved this issue by installing the latest Windows 10 SDK

Then copying these files:

From: C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64 (platform dependent)

To - C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin

After that everything installed 100% correctly, now to test and try it out :slight_smile:

1 Like

Does it work offline? beet's template functionality is contingent on autotag's state. Simply put, can beets-bpmanalyzer analyze recursively, with autotag disabled? :slightly_smiling_face:


Read the docs, turns out it can write the values!!! Great plugin @jakabadambalazs, my playlists thank you! :star_struck:

1 Like

I just read the github repo and your plugin “Going Running” and its iust amazing and exactly what I was looking for. I was selecting tracks manually and thats tedious! Right now I am in the process of getting bpm tag updated, but I cant wait :slight_smile:

1 Like

I’m wondering about the following.
I had to stop the process of tagging my collection halfway. So part of my collection is now without BPM info, part is tagged with AcousticBrainz BMP info en part is tagged with BPMAnalyzer BPM info.

Is there a way for the plugin to recognize which tracks have a BPM set by your plugin so that running the command only sets BPM for the tracks that have a BPM set with AcousticBrainz or are without a BPM?

So that I don’t have redo the whole process -f on my whole collection. Because My estimate is that it will take 24-36 hours.

unfortunately no. the only information the plugin generates and stores is the value of the bpm field. So there is no way to distinguish between if the bpm value you have on an item comes from the plugin itself, from AB or from anywhere else.

Why do you want to reanalyse all your songs? Do you have reasons to think that the AB values are off?

One thing you could do at this point if you are planning to re-analyse all your library is to set all bpm values to zero. so even if you have to interrupt in the middle you can just re-run without the --force flag and it will continue where it left off

The reason I wanted to redo my BPMs was that your plugin provides rounded BPMs, I know that’s a bit compulsive. Drummer’s habit I guess.

But you’re right maybe I can just calculate the BPM for the files that have no BPM.

If at a later date I can always use your suggestion to zero everything and do the whole catalog again with your plugin. Thanks!

I see. It bugged me a lot too. But bpm being treated as a float (decimal number) has been fixed in the code:

and should be part of the next release. :clap: :clap: :clap: - This means that from that point onwards you will get floats from AB but beets will round it and store it as an integer.

1 Like