-
-
Notifications
You must be signed in to change notification settings - Fork 798
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
Import all artists found in tracks, and make them browseable/searchable/filterable #211
Comments
Thanks for the beautiful work you've done already on Navidrome! I just wanted to add maybe to this issue that such artist-related tags (especially composer) was essential to efficiently use the Navidrome for classical music. It would be amazing to see this land! |
Hey @Nelyah (and @certuna), how do you see all these "artist" fields being exposed through the Subsonic API? Would they appear as individual artists, and when you select ex: an artist that is only a composer, the API would return all album/songs where they worked on? If we enable this, remember that the API only have provision for one "artist", so which one should we return in the API in the case of a song/album having multiple "artists" tags/fields available? |
Yes this is where the limitations of the Subsonic API hit hard. I think it's impossible to expose this in a meaningful way to Subsonic clients. Even restricting it to Artist is suboptimal since the API can't even handle multiple artists per track. This functionality might have to be limited to the WebUI or other API's, unfortunately. This is the point where navidrome becomes way more powerful than Subsonic. |
As a client app developer (play:Sub, iOS), I would really like to this exposed in the API in some way. I'm going to spitball a bunch of thoughts here and see if any of them catches on... Add metadata to album and tracks in APIAdding
Enhanced artist listThis is an interpretation of what's being proposed.
Example (trimmed for brevity):
The modified name-properties would be picked up by all existing client apps, and the x-artist-role property would allow client apps to build special support if needed/wanted. |
In the current documentation of the subsonic API I can't see provisions for custom fields, so you'd basically fork/extend the subsonic API away from its current 1.16.1, and (presumably) merge any changes that subsonic makes back into it. So it's hacky any way you spin it I guess :) I like the It could also be a way to get around subsonics "no multiple values per field" limitation (ie, A completely different way to support richer metadata than subsonic allows, is to push the entire metadata database to the client app, or allow the client to pull it (after auth of course). Either as a single big csv table (since presumably the client app will just import/map it to its own internal db) or as a straight copy of the relational navidrome db. This is how iOS app Prism works with Plex, and it has allowed the developer to a) vastly speed up search/smart playlists/etc (since it's all local) and b) implement things that the database holds but the API doesn't cater for yet. Downside is that when the db changes serverside, the clients need some way to find out about it. Prism basically just seems to do 'dumb' periodic checks/manual refreshes. Pushing back changes (playcounts etc) can then still be done over the API. |
Agreed - this would be an extension of the Subsonic API.
At least "type" is kind of defacto standard across many server-variants. On this topic: Dumping the relational navidrome db to client apps will probably not fly with general purpose Subsonic client apps, and maybe even have it's own world of pain with versioning of the db schema and whatnot. |
Agreed, custom properties are the least hacky. From a client point of view, how would you ideally receive multiple values per field (multiple artists, composers or genres for 1 song), something like:
Or with a custom property that can hold multiple values:
Or can you just send do multiple "x-artist" elements in the xml (xs:list)? |
I think a null-separated list would take most clients by surprise, and not in a good way :D As for multiple values per field, I guess there can be multiple values for all the composer, conductor, etc fields, yes? Personally I would prefer some kind of list structure over the x-artistN scheme. Seems more explicit about intent.
|
My concern with extending the API with the I'm not saying I'm not gonna implement or evaluate a PR with this approach, but I'd like to have consensus from other server/client developers. What I really wanted to do re: Subsonic API is start a new API, version 2 if you will, that would tackle the current limitations of the API:
I have more ideas for it, but I'm not sure this is the right place to document this. @MichaelBechHansen / @certuna Feel free to join our current discussions about this and other dev topics in our Discord server |
Do you know what the Subsonic developers think of this? If you can get them on board it would benefit everyone, and prevent clients for having to support/choose between two API's. |
I don't know. There has been pretty much total radio silence from Sindre Mehus for some years. But I think it's worth a try to reach out and probe the interest. |
The airsonic folks appear to have some thoughts in the same direction, as has the LMS developer. |
Put up an issue at the Sonic Extensions API project to enable multi-valued artist/genre: https://gitlab.com/sonic-extensions-api/specification/-/issues/3 Is this initiative dormant/dead? |
I think it is dormant.... not dead. From my side, I'd like to get to implement these changes in the DB first, I don't have much to add until I actually see what the implementation will require (I also don't have much free time to delve into that ATM) |
This issue has been automatically marked as stale because it has not had recent activity. The resources of the Navidrome team are limited, and so we are asking for your help. |
Still relevant and valueble! |
Any news on this feature? You have it on the official page for 3 years now. |
I'm now working on and testing an experimental build where all artist tags are added to the search keywords, so they will show up in search. Composer/Conductor/Lyricist/RemixerProducer/etc, plus any additional Artists & Album Artist when those tags contain more than one value. This means: when you type "beethoven" in search, all songs that have "Ludwig von Beethoven" in the Composer tag will show up - even if the UI can't display composer credits yet. This is not a "full" implementation, where we'd have a nice list of all the involved people with full credits in the UI, or all credits nicely sorted under the artist Discogs-style, but it's relatively easy to add. If it all works well I'll submit a PR so we can test it, maybe in one of the next versions. |
Will multiple artists display correctly on the player? Like on streaming services that each artists is clickable on the player and not 2 artists stuck together with their delimiter? Right now Navidrome only shows the first artist right? |
Unfortunately not - for this, the database and API have to be refactored, and that's a much more complex job. You'd have to ask @deluan about this. This is what was done with Genre a while ago, albums and songs can now have multiple genres in Navidrome. But artists/credits is a trickier design since there's three relations: a song/album can have multiple artists, but also multiple credits (Artist, Composer, Producer, etc). Indeed Navidrome only shows the first artist, and either discards the other artists (in the case of 'correct' multi-valued tags) or doesn't split them (in the case of 'non-standard' semicolon or comma separated values). It behaves the same as Plex and Apple Music in this respect. It is relatively easy to make Navidrome read multiple artists and display them all as one concatenated string, like "Jay-Z;Kanye West", but then the artists not individually clickable, this would then be a new artist separate from "Jay-Z" and "Kanye West", which is probably not the behaviour we want. Bear in mind that the (current) Subsonic API does not support multiple artists at all - whatever we do internally in Navidrome, we cannot change that. All 3rd party clients have the same limitations, unfortunately. |
Here's the roadmap for what I'm working on: Goals that can be achieved without full M2M database/API refactoring of artists:
Milestones reached in my experimental Navidrome fork, will be submitted as PRs in this order:
Goals that (probably) can only be achieved after a database refactoring & API rework:
Goals that can only be achieved after database/API rework AND the migration to React Admin v4:
|
Why not implement something like SlimProto and abandon AirSonic. It’s not fit for purpose for a modern music server, and frankly it serves only to hold Navidrome back. |
One word: clients! The idea of implementing the Subsonic API was to leverage the already existing ecosystem of clients, without having to spend lots of time writing at least one good client for each platform. At the time the project started, Subsonic was the most healthy ecosystem. And I would argue it still is as of today. This does not prevent Navidrome to have other API implementations working in parallel. In fact, it already have two APIs: Subsonic and the Native one, used by the WebUI, Feichin and Thunderdrome. AFAIU, SlimProto is a dying protocol, but I can be proved wrong and if anyone is interested in implementing it, I can support that. Or the Jellyfin API, or any other API for that matter. Just keep in mind that the Subsonic API is evolving, with the OpenSubsonic initiative, and one of the new features is Multiple Artists. This has not been implemented yet due to limitations in Navidrome itself, not the API. But supporting it is in the roadmap and should be one of the next features. |
I’d disagree re SlimProto being a dying protocol. It’s decades old and has been able to support playback of virtually all audio types to an endpoint which feeds into a DAC. It’s been implemented in Squeezelite which makes virtually any PC or SOC a viable endpoint for streaming to a DAC. Navidrome’s protocol support means you can’t easily get lossless tunes to a Hi-Fi. Great for on the road playback via a mobile device or sitting at a desktop, but a non-starter for any Hi-Fi based listening. you should install Logitechmediaserver with its Material skin plugin to see how it’s developed. It’s decades old yet eons ahead of any Navidrome server / subsonic client config in terms of leveraging metadata to find and explore and play music. Subsonic is what holds Navidrome back in this area. |
Read about OpenSubsonic and test Symfonium then you'll probably revise your thinking. |
SlimProto is designed to get an audio stream to a DAC seamlessly, and it does that with aplomb, supporting multi-room playback and synchronisation streaming to multiple endpoints. That LMS still enjoys a large user base decades after initial release is in itself quite telling. If it were added to Navidrome it’d suddenly open up a whole new community of users that use hi-fi to listen to music as opposed to sitting in front of a pc or using a phone with iem’s. With OpenSubsonic you’re all hailing the ability to pass multiple artists, in 2023! As a Navidrome user (when commuting) it’s clear the data model is pretty rudimentary and I’d posit that’s because it’s been a slave to a protocol that should have been put to pasture eons back. In any event, it’d be good to see opensubsonic modernise what’s possible to bring metadata rich browsing, exploration and capabilities to Navidrome. |
No with OpenSubsonic we hailing to finally have brought together tons of servers and client to build the future on a proper open base without breaking an existing working API to ensure success. SlimProto is made for the client part connected to the DAC not for the server to expose it's data for clients to consume ... Navidrome is not an endpoint it's a source point ;) So while you can add support for SlimProto for Navidrome webinterface to play to SlimProto clients, this is completely unrelated to the API and OpenSubsonic. It would be a setting for the Jukebox API to play on SlimProto. |
This issue has been automatically marked as stale because it has not had recent activity. The resources of the Navidrome team are limited, and so we are asking for your help. |
Currently Navidrome only add AlbumArtists to the Artist table. It should collect all artists from the imported tags.
Ref: #94 (comment)
The text was updated successfully, but these errors were encountered: