Package: beets-oldestdate
beets-oldestdateBeets plugin that fetches oldest recording or release date for each track. This is especially useful when tracks are from best-of compilations, remasters, or re-releases. Originally based onbeets-recordingdateby tweitzel, but almost entirely rewritten to actually work with MusicBrainz's incomplete information. The only thing left intact is therecording_MP3 tags, for compatibility withbeets-recordingdate.InstallationSimply runpip install beets-oldestdatethen addoldestdateto the list of active plugins in beets and configure as necessary. The plugin is intended to be used in singleton mode. Undefined behaviour may occur otherwise.ConfigurationKeyDefault ValueDescriptionautoTrueRun oldestdate during the import phaseignore_track_idFalseDuring import, ignore existing track_id. Needed if using plugin on a library already tagged by MusicBrainzfilter_on_importTrueDuring import, weight down candidates with no work_id so you are more likely to choose a recording with a work_idprompt_missing_work_idTrueDuring import, prompt to fix work_id if missing from chosen recordingforceFalseRun even ifrecording_tags have already been applied to the trackoverwrite_dateFalseOverwrite the date MP3 tag field, inluding year, month, and dayfilter_recordingsTrueSkip recordings that have attributes before fetching them. This is usually live recordingsapproachreleasesWhat approach to use to find oldest date. Possible values:recordings, releases, hybrid, both.recordingsworks likebeets-recordingdatedid,releasesis a far more accurate method. Hybrid only fetches releases if no date was found in recordings.release_typesNoneFilter releases by type, e.g.['Official']. Usually not neededuse_file_dateFalseUse the file's embedded date too when looking for the oldest dateOptimal Configurationmusicbrainz:
  searchlimit: 20
plugins: oldestdate

oldestdate:
  auto: yes
  ignore_track_id: yes
  filter_on_import: yes
  prompt_missing_work_id: yes
  force: yes
  overwrite_date: yes
  filter_recordings: yes
  approach: 'releases'How it worksThe plugin will take the recording that was chosen and get itswork_id. From this, it gets all recordings associated with said work. If using therecordingsapproach, it will look through these recordings' dates and find the oldest. If using thereleasesapproach, it will instead go through the dates for all releases for all recordings and find the oldest (muchmore accurate). The difference between these two approaches is that withrecordingsit only takes one API call to get the necessary data, while withreleasesit takesncalls, wherenis the number of recordings. This takes significantly longer due to MusicBrainz's default ratelimit of 1 API call per second. Due to this, the optionfilter_recordingsexists to cut down on the amount of calls needed.Missing work_idIf the chosen recording has no Work associated with it, the plugin cannot do its job. This is wherefilter_on_importcomes in: it applies a negative score to tracks that don't have an associated work so they are much less likely to be chosen. However, this means some of the displayed tracks will be irrelevant. Thus, setting thesearchlimitto 20 or so tracks is needed to hit the one recording thatdoeshave a work. This happens to work quite well with famous songs because there is usually a single recording with an associated work that is the original recording, and thus the oldest. If we match with this one, the other recordings that we can't get to because they are not associated with the same work are irrelevant, because we already have the oldest date.However, it sometimes happens that there is no available recording that matches our track with an associated work. This is whatprompt_missing_work_idis for: it will prompt us to either just use the single matched recording, in which case only the matched recording's data is used, and checked against the embedded date, or we can try again, or skip the track. Trying again is so that we may go to the website and amend the data, so that the recordings will have an associated work. To help with this process, the plugin prints out a URL to a search for that specific track. Your task is to create a work and associate it with all the relevant recordings, then press try again. This can be quite a laborious task, so if we see that the date printed by the plugin as being the oldest date found with just the selected recording seems accurate, choosingUse this recordingwould be the best choice.CoversThe plugin is also programmed to deal with covers effectively. Because aworkactually contains both the recordings of a song by the original author and any cover artists, when the song we are processing is not a cover, any recordings tagged as covers are discarded, to save API calls. Conversely, if the processed songisa cover, then we only keep cover recordings, and filter them by author, so only the relevant recordings are kept. This is so the oldest date for a cover will be the oldest date in which that cover was made, and not the original song. This only works when inreleasesmode, as we need to fetch the recordings to get the author data. Inrecordingsmode, all covers are treated as the same, even if they may be from different authors.