chaphasilor / jellyfin-rewind Goto Github PK
View Code? Open in Web Editor NEWReview Your Music of 2023. A "Spotify Wrapped"-like app made for people who use Jellyfin for listening to music!
Home Page: https://jellyfin-rewind.chaphasilor.xyz
Review Your Music of 2023. A "Spotify Wrapped"-like app made for people who use Jellyfin for listening to music!
Home Page: https://jellyfin-rewind.chaphasilor.xyz
Hello,
I love the contributions you have made to the Jellyfin ecosystem! This year, Spotify opened up Spotify wrapped earlier than I expected (today, as of the time of posting). Could Jellyfin Rewind open early as well? I'm sorry if this is a bother.
Expected: When viewing the Rewind, either at the beginning or in the pop up settings, an option to filter out results from non-primary libraries. Most people don't/won't have multiple Music libraries, but in the instance where they do, the other ones might bring in bad data/noise.
Actual: Some song I don't even think I intentionally listened to showed up in the "Most Skips" section. I know this is a niche situation, and I'm not actually sure how the Playback Reporting plugin labels songs in different libraries, if at all.
Further information: This is comparison of two tracks from different libraries (first song is the wrong one, second one is the right one), from the report:
"mostSkipped": [
{
"name": "Not Afraid (remix)",
"id": "8e7084650762e0c47909e46e8965538c",
"artistsBaseInfo": [
{
"id": "23a2a8f858a14ff5814b77e0e8372128",
"name": "The League of Extraordinary G'"
}
],
"albumBaseInfo": {
"id": "048149f048a5cf314afcc7f4d168b14a",
"name": "Concealed Weapons 2",
"albumArtistBaseInfo": {
"id": "23a2a8f858a14ff5814b77e0e8372128",
"name": "The League of Extraordinary G'"
}
},
"genreBaseInfo": [],
"image": {
"parentItemId": "048149f048a5cf314afcc7f4d168b14a",
"primaryTag": "674b59bc4bc7486c02887ac45541f366"
},
"year": null,
"duration": 262,
"skips": {
"partial": 0,
"full": 2,
"total": 2,
"score": {
"jellyfin": 1.2,
"playbackReport": 6,
"average": 2
}
},
"playCount": {
"jellyfin": 5,
"playbackReport": 1,
"average": 3
},
"plays": [
{
"date": "2023-10-24T15:03:09.942Z",
"duration": 33,
"wasFullSkip": true,
"wasPartialSkip": false,
"client": "Android",
"device": "asus ASUS-AI2202",
"method": "directStream"
},
{
"date": "2023-10-25T07:27:49.874Z",
"duration": 0,
"wasFullSkip": true,
"wasPartialSkip": false,
"client": "Android",
"device": "asus ASUS-AI2202",
"method": "directStream"
}
],
"mostSuccessivePlays": {
"playCount": 1,
"totalDuration": 0
},
"lastPlayed": "2023-10-25T13:27:29.264Z",
"totalPlayDuration": {
"jellyfin": 21.8078912,
"playbackReport": 0.55,
"average": 12
},
"isFavorite": false
},
{
"name": "Co-Star",
"id": "a7117d08a6d3260baddeddecfb212015",
"artistsBaseInfo": [
{
"id": "3899c089ac98a1fb036d49a0620840d8",
"name": "amaarae"
}
],
"albumBaseInfo": {
"id": "6e3f0a5e180ddb70a32fd6513e42759d",
"name": "Fountain Baby",
"albumArtistBaseInfo": {
"id": "3899c089ac98a1fb036d49a0620840d8",
"name": "amaarae"
}
},
"genreBaseInfo": [
{
"id": "f1f202f389018ad2c0766af4b0fcb155",
"name": "Pop"
}
],
"image": {
"parentItemId": "a7117d08a6d3260baddeddecfb212015",
"primaryTag": "52c004042781323ed9b3043a1da48b28",
"blurhash": "eUFhbeo#0et7WB9ERj-qo0kBJCxaxCNGoLx]slRjX9NG9ZjZozayt7"
},
"year": 2023,
"duration": 167,
"skips": {
"partial": 0,
"full": 2,
"total": 2,
"score": {
"jellyfin": 0.2857142857142857,
"playbackReport": 0.35294117647058826,
"average": 0.3157894736842105
}
},
"playCount": {
"jellyfin": 21,
"playbackReport": 17,
"average": 19
},
"plays": [
{
"date": "2023-08-02T01:39:08.560Z",
"duration": 165,
"client": "Finamp",
"device": "ASUS_AI2202",
"method": "directPlay"
},
{
"date": "2023-08-02T10:39:57.077Z",
"duration": 165,
"client": "Finamp",
"device": "ASUS_AI2202",
"method": "directPlay"
},
{
"date": "2023-08-02T13:16:02.120Z",
"duration": 144,
"client": "Sonixd",
"device": "PC",
"method": "directPlay"
},
{
"date": "2023-08-02T17:00:11.030Z",
"duration": 167,
"wasFullSkip": false,
"wasPartialSkip": false,
"client": "Sonixd",
"device": "PC",
"method": "directPlay"
},
{
"date": "2023-08-03T09:53:44.121Z",
"duration": 145,
"client": "Sonixd",
"device": "PC",
"method": "directPlay"
},
{
"date": "2023-08-03T17:10:16.627Z",
"duration": 165,
"client": "Finamp",
"device": "ASUS_AI2202",
"method": "directPlay"
},
{
"date": "2023-08-04T12:49:24.900Z",
"duration": 144,
"client": "Sonixd",
"device": "PC",
"method": "directPlay"
},
{
"date": "2023-08-04T16:03:35.282Z",
"duration": 167,
"wasFullSkip": false,
"wasPartialSkip": false,
"client": "Sonixd",
"device": "PC",
"method": "directPlay"
},
{
"date": "2023-08-04T16:24:20.415Z",
"duration": 145,
"client": "Sonixd",
"device": "PC",
"method": "directPlay"
},
{
"date": "2023-08-04T19:34:21.443Z",
"duration": 145,
"client": "Sonixd",
"device": "PC",
"method": "directPlay"
},
{
"date": "2023-08-06T14:26:25.358Z",
"duration": 145,
"client": "Sonixd",
"device": "PC",
"method": "directPlay"
},
{
"date": "2023-08-16T10:13:03.146Z",
"duration": 145,
"client": "Sonixd",
"device": "PC",
"method": "directPlay"
},
{
"date": "2023-08-31T08:59:13.632Z",
"duration": 144,
"client": "Sonixd",
"device": "PC",
"method": "directPlay"
},
{
"date": "2023-09-11T10:03:27.491Z",
"duration": 0,
"wasFullSkip": true,
"wasPartialSkip": false,
"client": "Feishin",
"device": "PC",
"method": "directPlay"
},
{
"date": "2023-09-11T10:03:31.142Z",
"duration": 0,
"wasFullSkip": true,
"wasPartialSkip": false,
"client": "Feishin",
"device": "PC",
"method": "directPlay"
},
{
"date": "2023-09-11T10:03:39.993Z",
"duration": 164,
"client": "Feishin",
"device": "PC",
"method": "directPlay"
},
{
"date": "2023-10-12T19:32:15.295Z",
"duration": 164,
"client": "Finamp",
"device": "ASUS_AI2202",
"method": "directPlay"
},
{
"date": "2023-12-06T18:49:05.156Z",
"duration": 166,
"client": "Finamp",
"device": "ASUS_AI2202",
"method": "directPlay"
},
{
"date": "2023-12-30T14:38:19.527Z",
"duration": 165,
"client": "Finamp",
"device": "ASUS_AI2202",
"method": "directPlay"
}
],
"mostSuccessivePlays": {
"playCount": 1,
"totalDuration": 165
},
"lastPlayed": "2023-12-30T21:37:58.399Z",
"totalPlayDuration": {
"jellyfin": 58.30400128,
"playbackReport": 44.083333333333336,
"average": 52
},
"isFavorite": false
},
Expected: On screens where Artists are the only/main information being portrayed, if an image is present on the server, that image should be used. On artists where there is no Primary or Other image for an artist, perhaps the most recent album's art would be used.
Actual: Images aren't shown for Artists, even when present on the server
Further information: I'm not seeing any failed calls for Artist Images, or any failed network calls in general. I'm using HTTP for my server.
I tried to go through the code to see how the Artist requests and rendering were working, but my eyes glaze over when I look at Javascript unfortunately. It certainly looks like you're getting Image information, but maybe I'm missing something.
I've noticed there's been a lot of talk about how and whether finamp should tell the server whether a song has been played. Therefore, I have the following question: Are songs played offline in finamp taken into account by Rewind?
Hello, I stumbled across #4 to see if I could solve my problem getting Rewind working on my local only Jellyfin instance (http only also). But both the included sites in this repos readme, and the locally run version you have provided here end up with the following result:
Any help would be muchly appreciated!
Hi! I had to migrate my Jellyfin server recently and annoyingly my listening stats did not survive the migration... Would it be possible to add monthly reports (Like I think apple music does). Would be cool to be able to have a mini-wrapped every month.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.