How to update a large collection?

I have a music collection of about 33,000 tracks, most of them with MusicBrainz tags. Every now and then I’d like to update those tags.

In my experience, it is not a good idea to throw the entire collection at Picard in a single chunk.
The album view gets crowded by albums that are not updated and which I don’t care about for my purpose. Worse, even for smaller sets of albums I regularly get “could not load album” errors; presumably as a reaction to swamping the server.

What I (think I) need, at minimum is an option (GUI and/or commandline) telling Picard to quietly drop or hide albums without updates. Additionally, I’d like to slow down Picard’s submission rate to the servers and make it retry unsuccessful requests.

As far as I can tell, Picard in its current state doesn’t help me here. So my question is what to do about it. Write a feature request and hope someone gets to it? Look into it myself? There was a time when I was almost competent at Python.

I’m looking forward to your suggestions.



I would use beets for this. My personal workflow is (ripping with morituri if it’s a CD, which will put MBIDs into the files from the get-go, then) tagging with Picard and then storing the files with beets and let beets handle any further updating of the files.


I forgot to mention, that I have used beets for more than a year. However, we parted ways as our notions of where to store albums diverged. If beets works for you, it’s a great tool indeed.

Anyway, I’d prefer a GUI tool as it happens that I have/want to “fix” the data I get from MB. Most often the (release) date for CD releases of albums from the “vinyl era”. (Yes, I already have a tagger script that handles this mostly.)

You might be interested to vote or comment PICARD-807.

Regular “could not load album” errors are related to this:

1 Like

Is this useful?
(“New plugin - remove “Perfect” album matches”)
Haven’t checked if it still works sorry, also not sure if it checks if tags need updating or not.


Uhm. In the literal sense as where on the harddisk/in the file structure they should be stored? If so, Configuration — beets 1.3.17 documentation and Configuration — beets 1.3.17 documentation are likely what you wanted…

Of course, that still won’t give you a GUI, but if the location beets stored things is the only thing that made you move away from it, it is actually pretty flexible in where to store things.


Let’s not make this about beets. I think, I knew it fairly well, even wrote a plugin for it. But in the end it didn’t work the way I wanted to.

I’ll look into the stuff aerozol has posted, but probably not until the weekend.


I just noticed this topic and thought I’d chime in.

Periodically, I like to refresh my library to get the latest updates from MB. My library is basically organized this way:
Letter of AlbumArtist (e.g., 0-9, A-Z, and [Various Artist]) / Artist / Album / Tracks

So, when I refresh, I will usually do a whole “letter” at a time (e.g., all the “A” artists). This works great and I can do a letter or a few in an evening. I create a dummy directory to mark where I am (e.g., “A - complete”) and just move it along when I have time.

I use the Remove Perfect Albums plugin - it works great, but I have noticed a different issue. If none of the Metadata has changed, but the artwork has, it still shows as unchanged! Due to this, I usually just re-save the albums even if they do not show changes.

As for the 503 (albums not loading), what I have been doing to cope with it until the servers are updated is to sort by the album name - they all go to the top or bottom, then select them all and hit Ctrl-R to reload them. It works pretty well, but if the servers are busy, it can take several passes to get every one.


That’s pretty much what I’m doing myself.

I’ve had a look at the source code some time after my last post, but unfortunately an easy way to add an automatic retry on 503 wasn’t obvious to me. The server wouldn’t have been thankful anyway.

1 Like

I have thought quite a bit about offline caching of the data with expirations (adding Sqlite to Picard) - that way, I could drop tracks into Picard without worrying that I just did it - those would immediately complete and I would be waiting only for the ones we haven’t tried for a while. I really want to do this with the plugin - that really slows things down.

But it sounds like Picard is a small part of the load, so it won’t help much with the 503s, although it could speed up my refreshes.

1 Like

Hey @mschuerig,

Hope this is useful

Kind regards

can you share this plugin? the version i found in the old forums (0.2) doesn’t seem to work with Picard 1.3.2

edit: nevermind. got it to work

PLUGIN_NAME = u'Remove Perfect Albums'
PLUGIN_AUTHOR = u'ichneumon, hrglgrmpf'
PLUGIN_DESCRIPTION = u'''Remove all perfectly matched albums from the selection.'''

from picard.album import Album
from picard.ui.itemviews import BaseAction, register_album_action

class RemovePerfectAlbums(BaseAction):
    NAME = 'Remove perfect albums'

    def callback(self, objs):
        for album in objs:
            if isinstance(album, Album) and album.is_complete() and album.get_num_unmatched_files() == 0\
               and album.get_num_matched_tracks() == len(list(album.iterfiles()))\
               and album.get_num_unsaved_files() == 0 and album.loaded == True:


Depends what you mean with simple. If simple means easy to do without much technical setup, just drag your files you already tagged with Picard back into Picard and save them again. For already MB tagged files Picard will load the proper album automatically, so this is really easy. But it might take a lot of time for a huge collection, and includes some manual steps.

If simple means simple to do often for large collections, but you can live with some manual effort in preparation once, try the beets solution.

But I agree, a more process that is more automated than Picard but need less setup would be great :slight_smile:

I too have a large collection I am trying to organize. 40-50k tracks.
I broke it up into 10k folders and loaded it into Picard. Picard will do a good job tagging but the “save” action seems to hang. Any ideas? is 10k to much?