package capabilities// MetadataAgent provides artist and album metadata retrieval.// This capability allows plugins to provide external metadata for artists and albums,// such as biographies, images, similar artists, and top songs.//// Plugins implementing this capability can choose which methods to implement.// Each method is optional - plugins only need to provide the functionality they support.////nd:capability name=metadatatype MetadataAgent interface {// GetArtistMBID retrieves the MusicBrainz ID for an artist.//nd:export name=nd_get_artist_mbidGetArtistMBID(ArtistMBIDRequest) (*ArtistMBIDResponse, error)// GetArtistURL retrieves the external URL for an artist.//nd:export name=nd_get_artist_urlGetArtistURL(ArtistRequest) (*ArtistURLResponse, error)// GetArtistBiography retrieves the biography for an artist.//nd:export name=nd_get_artist_biographyGetArtistBiography(ArtistRequest) (*ArtistBiographyResponse, error)// GetSimilarArtists retrieves similar artists for a given artist.//nd:export name=nd_get_similar_artistsGetSimilarArtists(SimilarArtistsRequest) (*SimilarArtistsResponse, error)// GetArtistImages retrieves images for an artist.//nd:export name=nd_get_artist_imagesGetArtistImages(ArtistRequest) (*ArtistImagesResponse, error)// GetArtistTopSongs retrieves top songs for an artist.//nd:export name=nd_get_artist_top_songsGetArtistTopSongs(TopSongsRequest) (*TopSongsResponse, error)// GetAlbumInfo retrieves album information.//nd:export name=nd_get_album_infoGetAlbumInfo(AlbumRequest) (*AlbumInfoResponse, error)// GetAlbumImages retrieves images for an album.//nd:export name=nd_get_album_imagesGetAlbumImages(AlbumRequest) (*AlbumImagesResponse, error)// GetSimilarSongsByTrack retrieves songs similar to a specific track.//nd:export name=nd_get_similar_songs_by_trackGetSimilarSongsByTrack(SimilarSongsByTrackRequest) (*SimilarSongsResponse, error)// GetSimilarSongsByAlbum retrieves songs similar to tracks on an album.//nd:export name=nd_get_similar_songs_by_albumGetSimilarSongsByAlbum(SimilarSongsByAlbumRequest) (*SimilarSongsResponse, error)// GetSimilarSongsByArtist retrieves songs similar to an artist's catalog.//nd:export name=nd_get_similar_songs_by_artistGetSimilarSongsByArtist(SimilarSongsByArtistRequest) (*SimilarSongsResponse, error)}// ArtistMBIDRequest is the request for GetArtistMBID.type ArtistMBIDRequest struct {// ID is the internal Navidrome artist ID.ID string `json:"id"`// Name is the artist name.Name string `json:"name"`}// ArtistMBIDResponse is the response for GetArtistMBID.type ArtistMBIDResponse struct {// MBID is the MusicBrainz ID for the artist.MBID string `json:"mbid"`}// ArtistRequest is the common request for artist-related functions.type ArtistRequest struct {// ID is the internal Navidrome artist ID.ID string `json:"id"`// Name is the artist name.Name string `json:"name"`// MBID is the MusicBrainz ID for the artist (if known).MBID string `json:"mbid,omitempty"`}// ArtistURLResponse is the response for GetArtistURL.type ArtistURLResponse struct {// URL is the external URL for the artist.URL string `json:"url"`}// ArtistBiographyResponse is the response for GetArtistBiography.type ArtistBiographyResponse struct {// Biography is the artist biography text.Biography string `json:"biography"`}// SimilarArtistsRequest is the request for GetSimilarArtists.type SimilarArtistsRequest struct {// ID is the internal Navidrome artist ID.ID string `json:"id"`// Name is the artist name.Name string `json:"name"`// MBID is the MusicBrainz ID for the artist (if known).MBID string `json:"mbid,omitempty"`// Limit is the maximum number of similar artists to return.Limit int32 `json:"limit"`}// SimilarArtistsResponse is the response for GetSimilarArtists.type SimilarArtistsResponse struct {// Artists is the list of similar artists.Artists []ArtistRef `json:"artists"`}// ImageInfo represents an image with URL and size.type ImageInfo struct {// URL is the URL of the image.URL string `json:"url"`// Size is the size of the image in pixels (width or height).Size int32 `json:"size"`}// ArtistImagesResponse is the response for GetArtistImages.type ArtistImagesResponse struct {// Images is the list of artist images.Images []ImageInfo `json:"images"`}// TopSongsRequest is the request for GetArtistTopSongs.type TopSongsRequest struct {// ID is the internal Navidrome artist ID.ID string `json:"id"`// Name is the artist name.Name string `json:"name"`// MBID is the MusicBrainz ID for the artist (if known).MBID string `json:"mbid,omitempty"`// Count is the maximum number of top songs to return.Count int32 `json:"count"`}// SongRef is a reference to a song with metadata for matching.type SongRef struct {// ID is the internal Navidrome mediafile ID (if known).ID string `json:"id,omitempty"`// Name is the song name.Name string `json:"name"`// MBID is the MusicBrainz ID for the song.MBID string `json:"mbid,omitempty"`// ISRC is the International Standard Recording Code for the song.ISRC string `json:"isrc,omitempty"`// Artist is the artist name.Artist string `json:"artist,omitempty"`// ArtistMBID is the MusicBrainz artist ID.ArtistMBID string `json:"artistMbid,omitempty"`// Album is the album name.Album string `json:"album,omitempty"`// AlbumMBID is the MusicBrainz release ID.AlbumMBID string `json:"albumMbid,omitempty"`// Duration is the song duration in seconds.Duration float32 `json:"duration,omitempty"`}// TopSongsResponse is the response for GetArtistTopSongs.type TopSongsResponse struct {// Songs is the list of top songs.Songs []SongRef `json:"songs"`}// AlbumRequest is the common request for album-related functions.type AlbumRequest struct {// Name is the album name.Name string `json:"name"`// Artist is the album artist name.Artist string `json:"artist"`// MBID is the MusicBrainz ID for the album (if known).MBID string `json:"mbid,omitempty"`}// AlbumInfoResponse is the response for GetAlbumInfo.type AlbumInfoResponse struct {// Name is the album name.Name string `json:"name"`// MBID is the MusicBrainz ID for the album.MBID string `json:"mbid"`// Description is the album description/notes.Description string `json:"description"`// URL is the external URL for the album.URL string `json:"url"`}// AlbumImagesResponse is the response for GetAlbumImages.type AlbumImagesResponse struct {// Images is the list of album images.Images []ImageInfo `json:"images"`}// SimilarSongsByTrackRequest is the request for GetSimilarSongsByTrack.type SimilarSongsByTrackRequest struct {// ID is the internal Navidrome mediafile ID.ID string `json:"id"`// Name is the track title.Name string `json:"name"`// Artist is the artist name.Artist string `json:"artist"`// MBID is the MusicBrainz recording ID (if known).MBID string `json:"mbid,omitempty"`// Count is the maximum number of similar songs to return.Count int32 `json:"count"`}// SimilarSongsByAlbumRequest is the request for GetSimilarSongsByAlbum.type SimilarSongsByAlbumRequest struct {// ID is the internal Navidrome album ID.ID string `json:"id"`// Name is the album name.Name string `json:"name"`// Artist is the album artist name.Artist string `json:"artist"`// MBID is the MusicBrainz release ID (if known).MBID string `json:"mbid,omitempty"`// Count is the maximum number of similar songs to return.Count int32 `json:"count"`}// SimilarSongsByArtistRequest is the request for GetSimilarSongsByArtist.type SimilarSongsByArtistRequest struct {// ID is the internal Navidrome artist ID.ID string `json:"id"`// Name is the artist name.Name string `json:"name"`// MBID is the MusicBrainz artist ID (if known).MBID string `json:"mbid,omitempty"`// Count is the maximum number of similar songs to return.Count int32 `json:"count"`}// SimilarSongsResponse is the response for GetSimilarSongsBy* functions.type SimilarSongsResponse struct {// Songs is the list of similar songs.Songs []SongRef `json:"songs"`}