Genre/decade/artist-title

I hope that someone can help me. I don’t know python coding. I have a library of over 60,000 songs. However, most came from cds with various artists or from soundtracks. Because of the size of the library, it has gotten to the point, that I don’t even remember what I do have or not. So what I would like to do is the following.

I would like to arrange the files in master folder of genre of artist, then in a folder based on decade of year of original release. I want original release and not release of the greatest hits cd or whatever.

Here is an example, “You Give Love a Bad Name” was released in 1986 by the band Bon Jovi and it is genre of Hard Rock.

So I would like to have a genre Hard Rock with a folder 80s in it. Then the file inside 80s would be Bon Jovi-You Give Love a Bad Name.

I don’t care about album name, featuring artist, actual date of release, track number, etc. All I want is when I open folder Hard Rock and see folders for 70s 80s 90s 2000s 2010s I can find files in those folders based on original release date.

I have installed lastfmng. Just can’t figure it all out. Running MusicBrainz 1.4.2 on Ubuntu.

Thanks for any help you can give me on this.

First off I would recommend you update to Picard 2.2.3. Picard 1.4 is a very old release and things have improved significantly since then. Many advice you will find here does not apply to Picard 1.4, especially in regards to genres. Also the current lastfmng is not compatible with Picard 1.4, you need Picard 2 for this.

For Ubuntu 18.04 or later we offer the latest Picard version in our PPA, please see Downloads - MusicBrainz Picard for directions.

For genre I would actually recommend you use the builtin genre support in Picard 2.2, which you can configure in Options > Metadata > Genres. For folder organization you probably want to limit this to a single genre, so set the maximum number of genres to 1.

For the decades and original date it gets a bit more complicated. Picard has a tag %originalyear% which can hold the original release date, but this currently deals only with the first release date of a specific album. Earliest release date for a single recording currently cannot be easily supported. So even if you don’t care about the album you still will need to make sure to tag against the proper album or single (and not some compilation) to get the actual %originalyear%.

Second thing is writing this out as decades. You can quite easily use the %originalyear%, but there is currently no function to get this as the decade. Best way would probably to have a plugin doing this. Some people might also have this solved with some tagger script logic, but it would be a bit cumbersome.

Regarding earliest release date see also the following discussions.

You might be interested in using the “No release” plugin. It removes some tags that are only relevant when tagging releases (sich as catalogue number or releasestatus) and it can be configured to do this automatically. It also can be customized to remove additional tags you don’t care about.

1 Like

I implemented a small plugin providing a $decade() scripting function.

For now the plugin is available on my Github page. To use it:

  • In Picard in Options > Plugins click on “Open plugin folder”
  • Create a folder decade inside the plugin folder.
  • Inside the decade folder place the file __init__.py (click to view the file and download it with your browser)
  • Restart Picard and activate the “Decade function” plugin in Options > Plugins

To use this inside your naming script you could add:

$decade($if2(%originaldate%,%date%))

This would convert the date into something like 70s, 80s, 90s, 2000s, 2010s.

3 Likes

as the repository is down
for anyone who is still interested in the decade thing.
i hardcoded it and i think it works

$if($and($lt(%originalyear%,1930),$gt(%originalyear%,1919)),1920)

$if($and($lt(%originalyear%,1940),$gt(%originalyear%,1929)),1930)

$if($and($lt(%originalyear%,1950),$gt(%originalyear%,1939)),1940)

$if($and($lt(%originalyear%,1960),$gt(%originalyear%,1949)),1950)

$if($and($lt(%originalyear%,1970),$gt(%originalyear%,1959)),1960)

$if($and($lt(%originalyear%,1980),$gt(%originalyear%,1969)),1970)

$if($and($lt(%originalyear%,1990),$gt(%originalyear%,1979)),1980)

$if($and($lt(%originalyear%,2000),$gt(%originalyear%,1989)),1990)

$if($and($lt(%originalyear%,2010),$gt(%originalyear%,1999)),2000)

$if($and($lt(%originalyear%,2020),$gt(%originalyear%,2009)),2010)

$if($and($lt(%originalyear%,2030),$gt(%originalyear%,2019)),2020)

/