beetbox / beets

music library manager and MusicBrainz tagger
http://beets.io/
MIT License
12.89k stars 1.82k forks source link

Importer: match and store metadata from multiple sources #2866

Open dbogdanov opened 6 years ago

dbogdanov commented 6 years ago

Different metadata sources (be it MusicBrainz, Discogs, or something else) have different coverage and users might have to use both for tagging their music. As an example, very often, I cannot find metadata on MusicBrainz and I end up using Discogs instead, and this, as #604 mentions, pollutes the MBID tag space.

In general, it will be great to to make tagging approach more generic and agnostic to metadata sources because:

This can be achieved by adding an option to allow mining metadata from multiple sources simultaneously having a custom TXXX namespace for each one. To select which source metadata is used as a "master" source for the main ID3 tags, a user should be able to define his own order of preference (similar to a proposal in #2686). The TXXX namespaces for each source could be all customizable by a user too.

sampsyo commented 6 years ago

Hi! This is an interesting direction, but I don't quite understand what the concrete suggestion is yet. Is the idea that you would like to, for example, fetch the "artist" field from both Discogs and MusicBrainz? The beets library database could store flexible attributes with names like discogs_artist and mb_artist in addition to the canonical (fixed) attribute, artist. Is that what you'd want?

If so, it's important to consider the UI implications. In the importer, you'd need to choose a match for every metadata source. If you have both MB and Discogs enabled, for instance, we'd first confirm the match from MB and then offer a second menu of matches from Discogs. Would that be desirable?

And just to check: do you know about beets's flexible attribute system already? If not, it might be worth reading up for background. This blog post is a good starting point.

dbogdanov commented 6 years ago

Yes, as an example, I would like to fetch as much metadata as possible from both Discogs and Musicbrainz: artist, titles, country, label, release number, IDs, genres, etc. The UI can offer matches from all sources that it found one by one, asking user whether to apply each source, as well as which source to use a a canonical.

At the moment I am a bit outsider to beets, as I purely use it for fixing metadata in files and I don't use the library functionality. Therefore, what I am mostly interested in is writing those tags to the audio files themselves. I guess this should still be a good option to have (ideally, the audio files should be self-descriptive), as well as storing those tags in the library.

sampsyo commented 6 years ago

OK—it sounds like the answer is "yes," that you would like the UI to try to tag each album multiple times (and do the entire UI dance multiple times) to get matches from each source. Interesting!

For what it's worth, here's how it would have to work to match the beets philosophy: these would go into flexible attributes in the database. Separately, you would map those flexible attributes to specific mechanisms of storage in files' metadata. Of course, this would need to be done in a cross-format way, so you can save tags in both MP3 and FLAC files, for example. The latter is already possible by defining custom plugins that define media fields.

dbogdanov commented 6 years ago

Yes, that would be it

sampsyo commented 6 years ago

OK! Marked as a feature request.