-
-
Notifications
You must be signed in to change notification settings - Fork 849
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
Support multiple artists, with custom separator #238
Comments
Thanks, I will try to work on this after #211 |
I would like to see this available for multiple custom seperators, not limited to one or several single characters. For uses such as " feat. ", " featuring ", " vs ", " vs." and " versus " and possible " & ", " and ". All should be case insensitive (or optional) and after separation the values should be trimmed. Maybe we can allow regular expressions for separation? Keep in mind that introduces some possible security implications like ReDoS. |
Yes, the idea is to allow multiple words as separators. Not sure if Regex is any good here (and have the security implications as you said) |
Bear in mind that there is a standard separator: The fancier the separators are, the more chance of false positives. Some examples that get split accidentally:
Interesting discussions: |
To make this work, I'll need to find an alternative way to read tags (at least id3 tags, have to test with vorbis and mp4), that is robust enough and does not add extra dependencies to the project.... |
That is pretty terrible actually - three years and still not fixed? |
By the looks of it, the ffmpeg devs don't care, so the solution is either find another tag library or write a commit for ffmpeg (how's your C?) - what's the least amount of work? |
Both options are huge tasks (for my limited time). I tried replacing I'll take a look in the ffmpeg codebase, but I don't anticipate a easy change to fix this... |
So taglib is our new saviour? |
@certuna I'm still evaluating it, but it seems to be a better option for extracting metadata. Some of the bugs/annoyances we have with |
Is there any reason why there still seems to be (reasonably) recent commits but no releases since 2016? |
By the way, I see that Picard has introduced a custom tag for "artists" ( |
Will this feature be added in the future? |
Yes, definitely. Probably next after some big PRs are merged and I finish Smart playlists |
In the meantime, while Navidrome can only accept one artist, is there something that could be done about the multiple artist tags in Vorbis comments (flac)? If I have a track with
it only shows one of them - would be nice to simply display that as |
That's a good idea - I'll have a look how hard it is to implement that. BTW this can only be done when using TagLib as a scanner, since ffmpeg will never read the second value. I have been thinking whether it makes sense to treat album artists and track artists differently: Abum Artists, reduce "Artist1;Artist2" to "Artist1", Track Artist, store as "Artist1;Artist2". But this is probably confusing for users and also not how a lot of people would want it. All this is temporary anyway, until Navidrome supports multiple artists. |
I see LMS is supporting
|
Any progress on this feature? |
Seems this will be fixed in ffmpeg itself according to the latest comments in http://trac.ffmpeg.org/ticket/6949 |
id3v2.4 using |
the custom tag fields But once multivalued artists are implemented, it's relatively easy to add support for it - just on scan, do: if |
This will also help with multilingual tagging where the artist name can be in the native language and perhaps the "ARTISTSORT" tag can be used for the English version of the name etc |
Streaming services have made the best version of this right now. On Deezer the album/song appears on both artists pages and where the artists info is it displays both artists as separate clickable links to go to their artist page. Navidrome currently does not even SHOW that there is a second artists let alone let you click him etc. |
The advantage that Spotify/Deezer/Tidal have is that they can control the exact formatting of the tags, which is a luxury we don't have. Also, they likely have implemented M2M relations in their underlying DB, which Navidrome doesn't have (yet). There are basically three main ways that multiple artists are tagged these days:
All three methods would have to be supported. I now have an experimental build running with multiple artist support (all three variants), see screenshot below. However, due to the current DB/API limitations, the links in the UI only take you to the first artist. But it's a lot better than nothing. Search does work over all artists, and the album will show up in the artist details pages of both Jay-Z and Kanye West (and also Frank Ocean, Beyoncé, etc). |
Looks awesome @certuna |
One of the tricky things of the two-tags approach is the edge case |
I thought ARTIST and ALBUMARTIST typically included the join phrase, i.e. "Alice featuring Bob", "Alice, Bob", "Alice ft. Bob", etc. The app should use ARTISTS since it's more uniform. ARTIST should be treated more-so as the display artist |
But then again not everyone will have multi-tags, so maybe use ARTIST as a fall-back |
Exactly, but this assumes ARTIST has consistency with ARTISTS, which may be true for collections fully managed with autotaggers like Picard/beets, but otherwise not guaranteed, for example when someone has manually fixed tags. In my experimental branch, ARTISTS is only used when both of the following are true:
|
I know this is super old, but I'm investigating Navidrome because I have exactly this request. I'm aware of some of the edge cases that exist, but I always imagine there are ways around them. For example, "AC/DC" is a continuous string with no spaces, so if using / as a delimiter, put spaces around it. Also the use of & - to me, that's used to separate different artists, while "and" is not. Eg "Marina and The Diamonds" is one artist, while "Beyoncé & Lady Gaga" is two. And so if I want, I can treat "Prince and The Revolution" as one artist or, better for me, as two by changing the tag to "Prince & The Revolution", not because I need to see The Revolution as an artists, but I'll take that if it means that all of Prince's music is in one place, whether he was with one of his bands or not. One slight tweak to the request: I'd like to pull artists from the track name using a format like " (feat , , etc)". Am following the main thread on all the most recent updates. Amazing work by all involved, however far all of this gets. Such a shame commercial players like Plex aren't as dedicated to as high a quality of experience. V happy to pay / donate to something like the Navidrome prject, which is so responsive to such specific user requests. |
Splitting text strings reliably is very hard, this is why the I'm now experimenting with splitting on phrases like "feat." and "vs.", only if there's no ARTISTS tag. So far this works quite well, but even a phrase like "vs." can throw up annoying edge cases like "Angels vs. Animals", etc. Not to mention that this is a very Anglo-centric approach: characters like |
My two cents, if |
Absolutely true - and
Yeah, but these guys have full control over what goes in, they can just implement M2M relations in the DB, and ignore the millions of songs that the general public has tagged, out there in the wild. This is a luxury that self-hosted music servers don't have. Refactoring the Navidrome database would help with the multiple-artist functionality (hoping that deluan has some time for this somewhere after the UI migration), but we still have the problem of parsing what people have tagged, in a reliable/predictable manner. |
Supporting multiple artists for folks who don't have multi-tags, to put it bluntly, is not feasible, and trying to do so I think contributes to the problem of self-hosted music's messy standard for supporting multiple artists that we see today. The software that I use that does support multiple artists (Kodi, Jellyfin, MusicBee) treats Only using multi-tags for multiple artist support will both simplify your PR and help cement this standard. I think it's okay to leave behind folks who refuse to add multi-tags. (sorry if this comes off as brash, I just want the world to use multi-tags and enjoy multiple artist support like I do :P ) |
It's not so bad.
|
I was only thinking of these delimiters as optional characters, I'm aware something like "&" won't work for everyone but I know it would work for me. I'm all for using tags such as ARTISTS, although I use mp3Tag and I don't see it there so I guess I'd have to move apps, which won't kill me! As ever, I'm impressed by how engaged everyone here is and am very appreciative of the work done by @certuna and all other contributors. |
@pjadeslandes I think it's under extended tags |
BTW I'm just discovering that Musicbrainz Picard by default writes |
They have it but you have to enable it manually. See the bottom of https://kodi.wiki/view/Music_tagging |
Yeah I saw that - I've had that for testing, but it's a bit annoying for widespread adoption that it's not on by default. |
The Navidrome fork I'm using for testing is now open and available for all to try, if you're interested: https://github.com/certuna/navidrome/tree/multi-artists . Still doing more testing before I submit the PR to the main Navidrome repo, but so far I see no showstoppers. Scanning speed appears to be unchanged on my 160k song library. Four new server options (default):
|
@certuna Do you trim the resulting array so that |
@certuna plz add id3v2.4 multi support for a separator type |
My library is separated like this and Emby works very well with it. Also it recognizes "feat." syntax in Artist name. |
As discussed here it would be a good idea to implement a setting where end user can select a custom character that will be used to split multiple artist into separate values.
Current Behavior
A song has Contributing Artist value
Artist1, Artist2
. Navidrome reads the artist as a single value with name"Artist1, Artist2"
Expected Behavior
A song has Contributing Artist value
Artist1, Artist2
. Navidrome reads the artist and recognizes there are two or multiple artists separated by comma and song show up under the Artist page ofArtist1
andArtist2
.The separator character can be selected (comma in the above example) by end user depending on how their library is tagged.
The text was updated successfully, but these errors were encountered: