SubMusic icon indicating copy to clipboard operation
SubMusic copied to clipboard

Jellyfin support?

Open CrazyWolf13 opened this issue 1 year ago • 3 comments

Jellyfin support would be very cool as it basically replaces the paid plex.

CrazyWolf13 avatar Jul 01 '23 14:07 CrazyWolf13

Thanks for your feedback and suggestion! There have been more requests to implement Jellyfin support, so I thought it would be useful to start documenting the required information. If you have a server available to test and find out how to obtain the below information from the API, please feel free to share your insights.

  • [ ] how to obtain access to the API? Authentication flow, username password, keys.
  • [ ] how to obtain the required data? Below you can find the current features that are supported by SubMusic that require communication with the backend server.
provider method Jellyfin API description Content-Type
ping / returns an object with server version application/json
recordPlay submit a play application/json
getAllPlaylists returns array of all playlists available for the user application/json
getPlaylist returns an array of one playlist object with {id} application/json
getPlaylistSongs returns an array of songs on the playlist with id application/json
getRefId returns a refId for a song by {id} (this downloads the song) audio/*
getArtwork returns a BitmapResource for a song id image/*
getAllPodcasts returns array of all podcasts available for the user application/json
getPodcast returns an array of one podcast object with {id} application/json
getEpisodes returns array of episodes for podcast with {id} application/json

The Jellyfin API is documented here.

memen45 avatar Sep 29 '23 09:09 memen45

Thanks for your feedback and suggestion! There have been more requests to implement Jellyfin support, so I thought it would be useful to start documenting the required information. If you have a server available to test and find out how to obtain the below information from the API, please feel free to share your insights.

  • [ ] how to obtain access to the API? Authentication flow, username password, keys.
  • [ ] how to obtain the required data? Below you can find the current features that are supported by SubMusic that require communication with the backend server.

provider method Jellyfin API description Content-Type ping / returns an object with server version application/json

https://api.jellyfin.org/#tag/System/operation/GetSystemInfo Resp: Version

recordPlay submit a play application/json

meaning?

getAllPlaylists returns array of all playlists available for the user application/json

https://api.jellyfin.org/#tag/Items includeItemTypes "Playlist"

getPlaylist returns an array of one playlist object with {id} application/json

What's taking in input?

getPlaylistSongs returns an array of songs on the playlist with id application/json

https://api.jellyfin.org/#tag/Playlists/operation/GetPlaylistItems

getRefId returns a refId for a song by {id} (this downloads the song) audio/*

https://api.jellyfin.org/#tag/Library/operation/GetDownload ?

getArtwork returns a BitmapResource for a song id image/*

https://api.jellyfin.org/#tag/Image/operation/GetItemImage

getAllPodcasts returns array of all podcasts available for the user application/json

https://api.jellyfin.org/#tag/Items includeItemTypes "Series" => some kind of? I'm not sure here

getPodcast returns an array of one podcast object with {id} application/json

https://api.jellyfin.org/#tag/Items ids

getEpisodes returns array of episodes for podcast with {id} application/json

https://api.jellyfin.org/#tag/TvShows/operation/GetEpisodes

The Jellyfin API is documented here.

trying

thank you, this would be great as Jellyfin has everything you need for free and it's really opensource.

mattgit avatar Oct 04 '23 15:10 mattgit

Thanks for your help! I see that the Items endpoint is the one to use for discovering the playlists, couldn't find it before.

Found the authentication method here: /Users/AuthenticateByName. Username and password are sent in plain text, response contains the AuthToken key. This token can be used in Authorization header as described here.

The recordPlay function submits a timestamp + song id to record that the song has been played. This is typically used for statistics on the server side. Still unclear which endpoint could achieve it.

I've been searching for podcast support. Unfortunately, it looks like Jellyfin does not support it yet, see more details here. For SubMusic, this is not a problem at all, as the Plex backend also lacks podcast support. For normal playlists you can still enable podcast mode if needed.

memen45 avatar Oct 04 '23 20:10 memen45