New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Tracking metadata enhancements #1036
Comments
Related to navidrome#1036. Adds BPM to the stored metadata about MediaFiles. Displays BPM in the following locations: - Listing songs in the song list (desktop, sortable) - Listing songs in playlists (desktop, sortable) - Listing songs in albums (desktop) - Expanding song details When listing, shows a blank field if no BPM is present. When showing song details, shows a question mark. Updates test MP3 file to have BPM tag. Updated test to ensure tag is read correctly. Updated localization files. Most languages just use "BPM" as discovered during research on Wikipedia. However, a couple use some different nomenclature. Spanish uses PPM and Japanese uses M.M.
* BPM metadata enhancement Related to #1036. Adds BPM to the stored metadata about MediaFiles. Displays BPM in the following locations: - Listing songs in the song list (desktop, sortable) - Listing songs in playlists (desktop, sortable) - Listing songs in albums (desktop) - Expanding song details When listing, shows a blank field if no BPM is present. When showing song details, shows a question mark. Updates test MP3 file to have BPM tag. Updated test to ensure tag is read correctly. Updated localization files. Most languages just use "BPM" as discovered during research on Wikipedia. However, a couple use some different nomenclature. Spanish uses PPM and Japanese uses M.M. * Enhances support for BPM metadata extraction - Supports reading floating point BPM (still storing it as an integer) and FFmpeg as the extractor - Replaces existing .ogg test file with one that shouldn't fail randomly - Adds supporting tests for both FFmpeg and TagLib * Addresses various issues with PR #1087. - Adds index for BPM. Removes drop column as it's not supported by SQLite (duh). - Removes localizations for BPM as those will be done in POEditor. - Moves BPM before Comment in Song Details and removes BPM altogether if it's empty. - Omits empty BPM in JSON responses, eliminating need for FunctionField. - Fixes copy/paste error in ffmpeg_test.
@certuna: Navidrome don't read the |
Yeah I think this is indeed best handled upstream by the tag library. I've marked it as done in the list above for clarity. |
Is metadata in .dsf supposed to extract/scan intact at this point? Because I don't believe it's working; should I file a separate issue? |
Correct, DSF at this point can only be read by ffmpeg, not by Taglib. Not much we can do about that... |
ffmpeg scanner did indeed fix it - apologies for the noise. |
Please display 'MusicBrainz Album Comment' field if present in ID3 tags. Beets adds this to metadata if release has it set. https://musicbrainz.org/release/c28de232-bb53-4ccc-aa29-60ca5decbbad |
any plan to handle the |
@certuna navidrome reads and uses replaygain. Can you please update the first Post here ? |
Hey @SenorSmartyPants, what is the difference between this tag and _releasecomment? By the way, do you need to configure anything in Picard for it to import this tag? My Picard (with default settings) can't seem to import it. Maybe it is a Beets thing? |
I think they are the same (I am by no means an expert). I followed that link and this one from there https://community.metabrainz.org/t/add-album-version-tag-using-picard/539876 and came up with this Picard script.
Yes, by default it seems that Picard does not tag this field and beets does. It appears that I have the correct field name as Picard matches the one it makes with the beets tag one. But I could always send you an mp3 with the field in it, or ffmpeg dump of one. |
Ah yes, |
A non-numeric disc number doesn't seem to be honoured by Navidrome's web interface, merging all discs into one. Yes, this could be referenced as "Disc Subtitle", but there is no disc number in this case. Should Navidrome's web interface simply be squashing a disc number of "BLOG" or "TV" or "RED"/"GREEN" into a flat no-disc album? Probably not. If the desire is to keep this field numeric for player compatibility purposes, maybe giving the discs a(n arbitrary) number and moving the text to the subtitle field internally? Note: This would also impact vinyl numbering like A1, A2, B1, B2, C1, C2. Note: Differs from #1652 and #2104 as this is disc number and not track number |
This is an issue to track various metadata enhancements in Navidrome's tag scanner, database and API, and their dependencies on other parts of Navidrome. Will make it easier to see in one central place which metadata is already implemented, which enhancements could be implemented relatively easily now, and which ones require more fundamental changes first.
Note that the four-letter tags below are as defined in id3v2.4. Tags in Vorbis (FLAC) are generally much more descriptive (eg,
PRODUCER
orRELEASETYPE
) but they generally follow the id3 definitions in what they contain. MP4 (AAC) and id3v2.3 tags have small differences vs id3v2.4 but are also largely the same.Track level metadata
Exposed to the web client through the
song
API endpoint.APIC
Song ImageTRCK
Track NumberTIT1
Work Add support for Work, Movement & Subtitle #279 - used to group various individual files (either songs, or movements in classical music) together that are part of one work.TIT2
Song TitleTIT3
Song subtitle/description for example "Live at Wembley" or "12 Inch Extended Mix" . Relatively easy to add to the scanner, database and API, but on the front end probably needs to be concatenated withTIT2
like Spotify does, so the UI dispayed title becomesSong Title · Song Subtitle
, for example "Missing · Todd Terry Remix"TSOT
Song Title Sort Order [WebUI] utilize Sort Order tags #643 - alternative sort order forTIT2
note: Navidrome currently reads and stores this, but does not use it so farMVIN
Movement Index - like track number, but for MovementsMVMN
Movement Name Add support for Work, Movement & Subtitle #279 - intended for classical music movements, to be used in conjunction with Work and Movement Index. Should be relatively easy to add to the scanner, database and API, but needs some UI choices client side. Probably best to do something like: if both Work and Movement fields are not empty, then concatenate the title toTIT1: MVIN. MVMN
(eg, "Preludes: III. Le Vent Dans La Plaine" this is how Apple does it) as the song title in the player, otherwise concatenate toTIT1: TIT2 - TIT3
(dropping any empty fields)TDRC
(Recording) Date, supported by Navidrome as Year/Date. This is the date used for sorting-by-Year. note: the popular tag editor Musicbrainz Picard populates this field not with the song recording date, but with the album (re-)release date, so in this case Navidrome maps it to Release Date, see belowTDOR
Original Date of the song/composition: according to the id3v2.4 specs, this field has the release date of the original song in the case of a cover, remix, live version or a performance of a classical composition note: Musicbrainz Picard populates this field instead with the "original album date", so in this case Navidrome maps it to Year/Date, see aboveTDRL
Release DateTOAL
Original Album Title this is meant to store the name of the album that a cover/live version/etc was originally featured on, or the original album where a compilation track came from. note: is anyone using Original Album Title in the wild?TCON
Genre (multi-valued) [WebUI] display multiple genres for album #119TMOO
Mood (multi-valued) note: in order to support multiple mood tags, this needs a database schema redesign first, to accommodate the many-to-many relationship between mood-mediafileTLAN
Language (multi-valued) Support for the Language tag #1377TXXX:ITUNESADVISORY
Content Advisory aka the Explicit tag, to protect the young, the elderly, and the linguistically sensitive (Add suppport for metdata explicit tag (itunes advisory) #1357). Standardized in mp4 (rtng
, used extensively by Apple), somewhat exotic in id3v2.4 and Vorbis CommentsTKEY
Key - useful primarily in DJ applicationsTBPM
BPM BPM metadata enhancement #1086COMM
Comments UI doesn't seem to display comments from DESCRIPTION tag #963 note: Navidrome assumes that when comments of all tracks in an album are all identical, they are album-level comments, if they are different, the comments are song-level. Note that a file can technically have multiple comments fields - although currently Navidrome only reads/uses the firstGRP1
Grouping it has never become quite clear whether this field is meant to work on the album level, song level or other, as Apple never specified how it should be used. This field was never defined in the id3v2 specs, and Vorbis doesn't have specs, however people seem to use it as a freeform tag field Browse collection by grouping #2045USLT
Unsynced lyrics _note: supported in the Subsonic API, but not displayed in the web player as unsynced lyrics are not supported in the upstream jinke-react-player, see Support lyrics without timestamps? lijinke666/react-music-player#346SYLT
Time-synced lyrics Support for Lyrics - Web UI #491 Support for Lyrics - Subsonic API #249 Support external .lrc file #1421 note: the web player now supports synced lyrics, but the Subsonic API doesn'tCHAP
/CTOC
Chapters Big Feature Request: Support for audio books (e.g. m4b) #1419 : mainly for audiobooks but could also be useful for single-file DJ mixes. note: will probably need support in the upstream jinke-react-playerPOPM
andPCNT
Rating/popularity and Playcount note: since Navidrome does not write ratings to tags (that would require write access) but keeps them in the database, there needs to be some careful thought how to handle ratings-in-tags: do we read them once, when the file is first scanned? Or keep track of ratings-in-tags independently, and update them whenever the tag gets updated outside of Navidrome?TXXX
Musicbrainz Original Release IDTXXX
Musicbrainz Work IDTXXX
Musicbrainz Recording ID note: Navidrome reads and stores this, but does not use itTXXX
Musicbrainz Release Track IDTXXX
Musicbrainz AcoustIDTXXX
ReplayGain Track Gain/Peak/Range Volume normalization (in web player) #233 note: trivial to read, store and include in thesong
API, but needs support in the upstream jinke-react-player: ReplayGain lijinke666/react-music-player#299TXXX
ReplayGain Reference LoudnessSTREAMINFO
in FLAC/Vorbis)TSSE
Encoding settings: software/hardware and settings used for encodingTLEN
Song length/duration/time - note: this id3 frame is not guaranteed to be there (if you tell a tagging application to clear all tags, this also gets flushed), and not guaranteed to be accurate, so most encoders don't bother with this, compute the duration by simply summing up the duration in all the frame headers in the file, and store the length in a (XING or VBRI) header. "Proper" container formats like Vorbis, MP4, etc have their own stream property headers for the duration of the audio streams.TPE1
aka "Lead Performer" aka "Track Artist". If the tag contains multiple artists, it reads only the first value.Disc level metadata
This is a sub-grouping of songs within an album. Exposed through the
song
API endpoint, so all subsequent grouping needs to be done clientside.TPOS
Disc Number ("Part Of Set")TSST
Disc Subtitle ("Set Sub Title") Show discSubtitle also for 1-disc albums #947Album level metadata
Exposed to the web client through the
album
API endpoint.These fields are stored per song/file in the tags, but apply to the album as a whole, typically they have identical values for all songs of the album. Navidrome currently splits albums on Album Title and Album Artist, i.e. all files with those two fields are one album item. Navidrome could apply super-strict disambiguation rules and split albums as soon as any of the below fields are not identical for all songs - but that's currently not the case, since it might not be the behaviour that users expect.
TALB
Album TitleTSOA
Album Title Sort Order [WebUI] utilize Sort Order tags #643 note: Navidrome reads and stores this, but does not use itAPIC
Album coverCOMM
Comments UI doesn't seem to display comments from DESCRIPTION tag #963 note: when the comments of all songs of an album are identical, they are rolled up to album-level commentsTCMP
Compilation note: already supported, Navidrome assumes any album with thisTRUE
and emptyAlbum Artist
is a various artists compilationTPUB
Label/Publisher Import, display and filter by Label/Publisher #389TXXX
Catalog Number note: Navidrome reads and stores this, but does not use itTSRC
ISRC/UPC codeTMED
Media Type: source of the audio, values are for example "CD/DD" for DDD audio CD, "TT/33" for 33rpm LP, "ANA/8CA" for analogue 8-track cassette note: in principle this could be song-level info, but in practice this is nearly always an album-level field since it's rare that individual songs on an album come from different sourcesTDRL
Release date of the album, used to disambiguate various re-releases: differentreleasedate
tag = different albumTDRC
(Recording) Date When the same for all songs on the album, it's rolled up to album level, when not the same, it's shown as a range like"1995-2015"TDOR
Original Date When the same for all songs, it's rolled up to album level, when not the same, it's shown as a range like"1995-2015"TXXX
Release TypeTXXX:Musicbrainz Album Type
add Release Type field #369 such as "album", "single", "live", "dj-mix", "audiobook". Can be multivalued, semicolon separated or comma separated!TXXX
Musicbrainz Release Status note: "official", "non-official"TXXX
Musicbrainz Album Comment note: for example "remastered"TXXX
Musicbrainz Album ID note: Navidrome reads and stores this, but does not use itTXXX
Musicbrainz Release Group ID note: Navidrome reads and stores this, but does not use itTXXX
Album Release countryTXXX:MusicBrainz Album Release Country
TXXX
ReplayGain Album Gain/Peak/Range Volume normalization (in web player) #233 note: trivial to read, store and include in thesong
API, but needs support in the upstream jinke-react-player: ReplayGain lijinke666/react-music-player#299TPE2
aka "Album Artist": it reads only the first artist when there's multiple values in this tag.Artist metadata
Exposed to the web client through the
artist
API endpoint, thesong
endpoint for song-level credits and thealbum
endpoint for album-level credits.Some credits tags are unambiguously album-level (Album Artist, Album Artist Sort, MusicBrainz Album Artist ID), but the rest are ambiguous. Users probably expect that when a producer, artist or composer credit is tagged for each song of the album, this becomes an album-level credit (so, included in the
album
API endpoint), otherwise it should remain song-level. Note that Navidrome already does this track-level-unless-all-the-same with the Artist field when Album Artist is empty.Most of this info cannot be exposed over the Subsonic API, since its specs only define one artist, one album artist, and no other roles/credits. Discussion on it here: #211
IMPORTANT Supporting multiple artists and additional credits (composer, remixer, producer etc) requires fundamental changes to the Database schema to accommodate the complex many-to-many-to-many relationships artist-role-mediafile.
Fields:
TPE1
andTXXX:Artists
) and Album Artist (TPE2
,TXXX:Album Artists
) are currently supported only for one value: add support for multi-valued fields: Support multiple artists, with custom separator #238TPE3
Conductor Add support for Conductor #281TPE4
Remixer Add support for Remixer #277TOPE
Original Artist (for tagging covers)TCOM
Composer add support for Composer #275TEXT
Lyricist Add support for Lyricist #276TMCL
musician credits (Guitar, Vocals)TIPL
"involved people" (Producer, DJ-mixer)TSOP
Artist Sort Order,TSO2
Album Artist Sort Order ,TSOC
Composer Sort Order [WebUI] utilize Sort Order tags #643 note: while this field is helpful to sort "Beatles, The" under B, this field also has values like "West, Kanye" to sort him under W, which is something that a lot of users dislike.TXXX
Musicbrainz Artist ID note: Navidrome reads and stores this, but does not use itTXXX
Musicbrainz Album Artist ID note: Navidrome reads and stores this, but does not use itAPIC
Artist Image Add support for artist artwork #394 note: can be an embedded tag, but Navidrome currently only gets this externally from last.fm, Spotify, MusicBrainz, Allmusic, Wikipedia, etcCOMM
, but I've never seen this in the wild. Usually this comes from last.fm, Spotify, MusicBrainz, Allmusic, Wikipedia, etcTXXX:Artist Country
or something, but I've never seen this in the wild. Usually this comes from last.fm, Spotify, MusicBrainz, Allmusic, Wikipedia, etcThe text was updated successfully, but these errors were encountered: