Classical Extras 2.0

This much dedication should not let go to waste.
So I started with a spanking new portable install and testing.
And I tried to see if I could do some things differently as from I remembered from my earlier tests.

I now get better results. Not ideal yet, but an improvement for sure.
Could it be related to this?:

In my previous testing I disabled the tab Works and Parts.
Because in my mind they had nothing to do with instruments, and I would like works and titles etc. completely untouched.

Could it be that this is a factor indeed, and should Works and Parts be left enabled for this?

I am not sure if this text of yours in another thread is in a way related to what I am trying to achieve with ‘cea_instruments’, but it is describing a bit how I was expecting how thing would/could work:

It should work fine with Works and Parts disabled, according to my tests.

Note that the ‘instruments and keys’ panel of the ‘Genres etc.’ tab will run with just ‘extra artist data’ enabled, and the defined tag for instruments (per that panel) will be filled as specified by the options below it (MB name, credited names or both).

_cea_instruments, and the related variables as I described, should deliver what you want. I was talking in that thread about adding additional data that is not currently exposed by Picard or CE. What I have in mind is adding all additional recording attributes as hidden variables. I need to spend a bit of time loooking at the database schema to pick these up. All of these variables should also be available without running ‘works and parts’

1 Like

Apropos the discussion above and at Please help me grab "recorded at", it appears that there are a great many potential attributes of recording. To see these, look at and the entries for the “Recording” row. There are so many that I doubt I will be able to do more than scratch the surface. If anyone has any particular requests (other than the already-requested ‘recorded at’ which is part of Place-Recording), please let me know.

Yeah, I got that. I was referring to the similarity between what I was expecting when I started this quest, and what was requested in that thread, and the suggestion what you might try for it: making hidden variables available without requiring any CE settings.

Anyway, I think enough information has now been shared and explained well enough.
I’ll see if I can tweak things further to make this work for me.

Thanks for all the support, explanations and considerations.

If possible, I would like to get the recording date for tagging.
Some conductor and orchestra have the same recordings in different years and I feel hard to distinguish them without recording date.


@cngcng Some examples, and a bit more…

Any extra dates that you may want that are outside of the “officially defined” date related tags you’ll need to create yourself. These are the basic ones:

copyright • Should begin with YEAR, followed by comments/details.
date • Date of release of this specific track/cut
originaldate • Release Date (YYYY-MM-DD) of the earliest release
originalyear • Release year of the earliest release

You can create any other tag you want, so if you have a different category / type of date that you want to track/see in the filename, just assign them and script them into the File Naming.

So if you wanted to have the performance date and location for this particular track in your filename, you’d just create a tag for that, set it’s value, use the value when saving and it will happen.

As an example:
In a Tagging Script you would create / set your tag. These creating / setting various custom tags. (any name you want, as long as it’s not an official one. There is no checking. The scripts just do exactly what they’re told to do.)

In these examples, there is already a value of that particular tag there, it just leaves it alone. So you’re not overwriting any existing stuff. Otherwise it will create it.

$set(boxsettitle,$if2(%boxsettitle%,The Title of Your Big Box of Discs))


$set(alttitle,$if2(%alttitle%,Symphony of Fate))

Now you probably wouldn’t set examples of these types as final values since these are things are are likely different at the track level. So in that case, if you want to add these tags to files as place holders, where they’re not there already, as I noted, doing it like that, will not over-write an existing one.

$set(boxsettitle,$if2(%boxsettitle%,Box Set Title))


$set(alttitle,$if2(%alttitle%,Alternate Title Placeholder))

If you want to just replace whatever value is already there outright:

$set(title,Title Holding place)

If you want to append to what’s there already, using the comment tag as an example since it’s one you might want to add to.

This will add to the end of what is already there
$set(comment,%comment% Additional Text... )

This will add to the beginning of what is already there.
$set(comment,Additional Text... %comment%)

This will use the filename as the title if there is not a title tag already

Here’s an example of setting a whole bunch of stuff as if you were putting together a top 100 for whatever year/month/day/minute… Again, this will only add if there is not already a value there. These are officially documented tags.

$set(album,$if2(%album%,A2 Airwaves Top))
$setmulti(releasetype,$if2(%releasetype%,album; compilation))
$set(artistsort,$if2(%artistsort%,A2 Airwaves))
$set(albumartist,$if2(%albumartist%,Various Artists))

This will strip “garbage” from titles that may be there because you used the filename as the title tag if there was not one there:

$set(title,$replace(%title%,_, ))
$set(artist,$replace(%artist%,_, ))
$set(title,$replace(%title%,-, ))
$set(artist,$replace(%artist%,-, ))

$replace($if2(%albumartist%,%artist%)-$title(%album%)-$if(%media%,$if($gt(%totaldiscs%,1),%totaldiscs%,)%media%-,) $if(%date%,$left(%date%,4)), ,_)

Then in your File Naming script you would use as desired:
%boxsettitle%/%title% - %copyright% - %date% - [%originaldate%]
to build your filename.

After that script runs/you’ve saved your files, you’d see:

If all these tags had values, this would give you a directory titled:
My Great Big Box of Music

With a file named:
My Track Title - Whatever Copyright - 1977-05-04 - [1976]

I’m having trouble with one particular release: For some reason that is completely unclear to me, the plugin is not pulling any data at all. Other albums work flawlessly. I’ve tried completely removing Picard and reinstalling it and the plugin but no luck. Here’s the debug log for one track. There’s no obvious error message or warning in any of the logs.

B: 2021-01-21 20:19:35.567925 : -------------------- Debug log --------------------
B: 2021-01-21 20:19:35.567925 : STARTING WORKS PROCESSING FOR ALBUM The Complete Warner Recordings, DISC 1, TRACK 1 Violin Concerto no. 1 in D major, op. 6: I. Allegro maestoso
B: 2021-01-21 20:19:35.567925 : Cache setting for track <Track 1ee75f15-aa1c-44b1-a6db-17852b42362a 'Violin Concerto no. 1 in D major, op. 6: I. Allegro maestoso'> is False
B: 2021-01-21 20:19:35.567925 : Workparts gets track first...
B: 2021-01-21 20:19:35.567925 : PartLevels - LOAD NEW TRACK: :<Track 1ee75f15-aa1c-44b1-a6db-17852b42362a 'Violin Concerto no. 1 in D major, op. 6: I. Allegro maestoso'>
B: 2021-01-21 20:19:35.567925 : Check for last track. Requests = 0, Tracknumber = 1, Totaltracks = 4, Discnumber = 1, Totaldiscs = 77
B: 2021-01-21 20:19:35.567925 : STARTING ARTIST PROCESSING FOR ALBUM The Complete Warner Recordings, DISC 1, TRACK 1 Violin Concerto no. 1 in D major, op. 6: I. Allegro maestoso
B: 2021-01-21 20:19:35.567925 : Artists gets track first...
B: 2021-01-21 20:19:35.567925 : ExtraArtists - add_artist_info
B: 2021-01-21 20:19:35.567925 : In get_artists. relation_type: release, relations: [[{'direction': 'forward', 'end': None, 'begin': None, 'url': {'resource': '', 'id': '8549c038-05c7-49d9-bdf2-015da877612c'}, 'type': 'amazon asin', 'ended': False, 'attribute-values': {}, 'attributes': [], 'target-credit': '', 'target-type': 'url', 'type-id': '4f2e710d-166c-480c-a293-2e2c8d658d87', 'attribute-ids': {}, 'source-credit': ''}, {'url': {'resource': '', 'id': '95eae820-d436-4a8b-a7a7-9e220ca27ccb'}, 'begin': None, 'end': None, 'direction': 'forward', 'source-credit': '', 'attribute-ids': {}, 'type-id': '4a78823c-1c53-4176-a5f3-58026c76f2bc', 'attributes': [], 'target-credit': '', 'target-type': 'url', 'ended': False, 'attribute-values': {}, 'type': 'discogs'}, {'target-credit': '', 'target-type': 'url', 'attributes': [], 'attribute-values': {}, 'ended': False, 'type': 'purchase for download', 'attribute-ids': {}, 'source-credit': '', 'type-id': '98e08c20-8402-4163-8970-53504bb6a1e4', 'end': None, 'direction': 'forward', 'url': {'id': '9d8b265a-c581-418c-aa7a-d7751378699b', 'resource': ''}, 'begin': None}, {'target-type': 'url', 'target-credit': '', 'attributes': [], 'type': 'purchase for mail-order', 'attribute-values': {}, 'ended': False, 'attribute-ids': {}, 'source-credit': '', 'type-id': '3ee51e05-a06a-415e-b40c-b3f740dedfd7', 'end': None, 'direction': 'forward', 'url': {'id': '800479c0-00ba-4508-ae24-6ffbf7ded9e6', 'resource': ''}, 'begin': None}]]
B: 2021-01-21 20:19:35.568926 : Getting recording details
B: 2021-01-21 20:19:35.568926 : In get_artists. relation_type: recording, relations: []

For particular huge releases like this the MusicBrainz web service does not send the detailed relationships per track to avoid timing out and sending nothing. AFAIK there is no good workaround for this.

1 Like

That’s a shame. Being able to load a subset of discs would be great, but I imagine that would require changes to Picard itself, not just the plugin.

It would require first and foremost changes the MusicBrainz server API.

1 Like

Well I’m new and posted this problem, but I think may be it’s here the correct place to solve the problem.

I wanted to have the composer last name at the beggining of “tiltle” (1) and if there is an orchestra, add the “band” at the end of the title keeping the composer last name at the beggining (2). Also it could be nice if that could be alternate with conductors 3, etc.

  1. Mozart, title

if there is and Orchestra

  1. Mozart, title, Orchestra

  2. Mozart, title, Orchestra, conductor

I have used the Tagg Mapping in this way:

The problem is when I have a “composer_lastnames” but no “band” or “ensemble_names”.

If I unchek the condicional, it repetes the “title” in the tracks with band like this:

But I would like to have only one string with “title”, and no to individual select the second one each time.

Thanks in advance for the help.

I’ve raised this problem before, but I don’t think there is much chance of it being fixed. Classical Extras does need more data than vanilla Picard, so sometimes Picard appears to work OK but CE does not. As @outsidecontext says, it is an issue with the webservice.


Did you blank the title tag before filling it (at the top of the tag-mapping page)?CE blank tags

1 Like

@MetaTunes I am also finding the Options Page unusable on Dark Theme - any chance you can update the options page to use the standard Picard colour palette i.e. as shown in Options / User Interface / Colours and switching depending on Light / Dark theme?

This (Musicbrainz dropping relationship data on large releases) is fixable - it is a Simple Matter of Programming Effort in order to queue and process additional requests for relationship data that is dropped by MusicBrainz webservice on these large releases. Whether it is worth the effort needed, and whether it will actually be done, is a different matter.

I’ll look into that. My head is full of PHP at the moment, so I need to press a reset button for Python :slight_smile:


1 Like

Composer(s) Magnus Lindberg not found in reference database of classical composers
This is the entry:
> Magnus Lindberg
> Lindberg M
> 1958
> false
Original in XML
Other composers are found.

In the ‘period’ map you can specify the dates for a period.
And it says that dates may overlap.
Could you elaborate a little bit what happens to works that have a composition date that overlaps between two different date periods?


In the first track of this release, classical extras produced below error.

  1. Found parent which which is descendant of child - not using to prevent circular references. id = 9b1bd955-8635-43e6-9711-f2b820ffe8b8, name = Tannhäuser und der Sängerkrieg auf Wartburg, WWV 70

I checked the work relationship of the track and I confirmed it doesn’t have the circular reference.
The classical extra seems to produce this error if a track has two different level of work relationships to the top work.
In this case, the first track has both the relation to the overture of Tannhäuser (one level down of Tannhäuser ) and Bacchanale of Tannhäuser Act I. Scene I (Three level down of Tannhäuser).
Could you check this?


I have been running into several bugs with Classical Extras for some time. I have found a release where I can trigger them easily.

  1. The performer vocals credit “ビートまりお” is instead coming down as “Beat Mario”
  2. The performer vocals credit “大瀬良あい” is instead coming down as “あい”
  3. The performer vocals credit “ななひら” is instead coming down as “Nanahira”