At which point in the source code does Picard decide the final tag name?

Sometimes I see that MusicBrainz Picard creates some special tags like COMPOSER or ARRANGER and some more advanced tag names as mentioned here:
https://picard-docs.musicbrainz.org/en/variables/tags_advanced.html

At which point in the source code does Picard decide what kind of involved people at track level will be written into own tags or in a combined INVOLVEDPEOPLE tag?

In the help file I can see this part:

mixer
The names of the “Mixed By” engineers associated with the track

but I can’t find this code part and all the other types.

From the linked relationship type website I can see this part for COMPOSER:

**ID:** 168
...
**UUID:** d59d99ea-23d4-4a80-b066-edca32ee158f

Is my assumption correct that you search for this UUID and then use the tag COMPOSER?

Parsing the MusicBrainz metadata into tags happens in picard/picard/mbjson.py at master · metabrainz/picard · GitHub

There is actually no “involvedpeople” tag in Picard. There is a “performer:{role}” tag.

For ID3 v2.3 there is a frame IPLS (involved people list), which can hold various people’s and their roles. For ID3 v2.4 there are separate TMCL (musician credits list) and TIPL (involved people list). Other tag formats are different.

Mapping from / to format specific tags happens on loading / saving in the format implementations at picard/picard/formats at master · metabrainz/picard · GitHub

3 Likes

Thank you very much for this very useful information and the links!

At first glance, this doesn’t look like something simple. :blush: :innocent:

Just to clarify a little further…

  1. The standard list of tags held internally (variable names and English descriptions) is defined in picard/util/tags.py.

  2. Data from MB is split into the relevant tags by the picard/picard/mbjson.py file that Philipp referred to previously.

  3. When you read tags from or write tags to files, the format handler in picard/picard/formats for the specific tag type (such as ID3 used in mp3 files) handles the translation between the internal variables and the specific tag names used by that file format (i.e. it translates between performer:{role} and the TMCL and TIPL tags in ID3).

2 Likes