Skip to content

Add support for Original Date & Release Date tags #278

@certuna

Description

@certuna

Navidrome currently only reads one date tag: date (TDRC in id3, DATE in FLAC, aka "Recording Date"). There are two more tags:

  • releasedate (TDRL in id3, RELEASEDATE in FLAC)
  • originaldate (TDOR in id3, ORIGINALDATE in FLAC)

Support for the releasedate tag would be useful: id3-compliant taggers will put the (re-)release date of the album in releasedate, which would allow for better distinguishing between different editions of the same album.

Support for the originaldate tag would also be useful, since the popular auto-tagger MusicBrainz Picard (mis-)uses this tag to store the release date of the "master" edition of an album, and many users would like to see this field used for sorting albums/tracks chronologically, instead of the date tag (where Picard stores the reissue date from years later).

This topic will follow the efforts to implement them in a useful way.

Update 13 Jan 2023

I think a good way to implement this without any inconvenience to people who don't use these two tags would be as below. This concept does not add any additional complexity to the UI, just a few extra dates to display.

Work in progress is ongoing in this fork: https://github.com/certuna/navidrome

Serverside (Go)

  • new server configuration option Scanner.GroupAlbumEditions = true/false (default true)
  • new columns date & release_date (date) in media_file table
  • new columns date & release_date (date) in album table
  • scanner: rollup date and release_date to album level if they're all the same
  • count number of different releasedates on an album, and store that as editions (int) in the album table

Normally, we do like the id3 & Vorbis specs prescribe:

  • scanner: date tag -> year(= already implemented) and date (new, full date)
  • scanner: releasedate tag -> release_date (new)

If files are tagged like MusicBrainz Picard does (originaldate tag has the 'real' album date, the date tag has the (re-)release date, and there's nothing in the releasedate tag):

  • scanner: originaldate -> year & date (= the date used for sorting/filtering etc)
  • scanner: date tag -> release_date

If GroupAlbumEditions = true (default)

  • no change to current behaviour, i.e. all tracks that happen to have the exact same album artist + album name ("Alice & Bob - Sing Songs Together") are grouped as 1 album, so the 1997 original and 2005 reissue are 1 album - but with visual dividers, see below.

If GroupAlbumEditions = false:

  • create a separate albumID for each releasedate (i.e. the 2005 reissue and the 1997 original will be two different albums)

Native API:

  • send new fields date and releaseDate in the song API endpoint
  • send new fields date, releaseDate and editions in the album API endpoint

Subsonic API:

  • nothing changes

WebUI (JavaScript)

  • Song List: no changes needed
  • AlbumGrid: no changes needed
  • AlbumList: no changes needed
  • Year filter in Album List view: no changes needed
  • Now Playing: no changes needed
  • AlbumDetails: display in the desktop view like: ♫ 1993-1997 · Released 6 September 2005 · 6 Songs · 35:43 · 48.92 MB If year = releaseyear, just display the short form 2005 · 6 Songs · 35:43 · 48.92 MB (= how it's done now). In the mobile view: ♫ 1993-1997 · ○ 2005 · 6 Songs
  • AlbumSongs: sort album tracklists first by releaseDate, then discNumber, then trackNumber. Use a divider to divide different release versions of the same album, like "1997 Release" -> (tracklist of the 1997 edition) -> "2005 Release" -> (tracklist of the 2005 reissue) - note: this can only happen whenGroupAlbumEditions = true, because otherwise, a different release year means a different album.
  • AlbumGridView for Artist View: display the release year in the second line under the album cover like:
  • either 2005, when the release year is not different (= how it's done now)
  • or ♫ 1993-1997 · ○ 2005 when they are not equal
  • or ♫ 1993-1997 · ( 3 ))) when there are multiple release dates/editions of the album.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions