{"id":27776791,"url":"https://github.com/jesseward/jellyfin-plugin-lastfm","last_synced_at":"2026-01-12T13:03:05.018Z","repository":{"id":38797614,"uuid":"169970322","full_name":"jesseward/jellyfin-plugin-lastfm","owner":"jesseward","description":"LastFM plugin for the Jellyfin media system. Fork of the Emby Last.FM plug-in","archived":false,"fork":false,"pushed_at":"2025-10-25T20:02:34.000Z","size":2216,"stargazers_count":291,"open_issues_count":16,"forks_count":17,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-10-25T20:39:41.979Z","etag":null,"topics":["audioscrobbler","csharp","dotnet-core","htpc","jellyfin","lastfm","lastfm-api","mediacenter","plugin"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jesseward.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-02-10T11:21:17.000Z","updated_at":"2025-10-25T19:58:38.000Z","dependencies_parsed_at":"2024-01-09T17:02:15.028Z","dependency_job_id":"f241deb5-4952-474e-a05a-1027ffc964a6","html_url":"https://github.com/jesseward/jellyfin-plugin-lastfm","commit_stats":null,"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/jesseward/jellyfin-plugin-lastfm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jesseward%2Fjellyfin-plugin-lastfm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jesseward%2Fjellyfin-plugin-lastfm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jesseward%2Fjellyfin-plugin-lastfm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jesseward%2Fjellyfin-plugin-lastfm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jesseward","download_url":"https://codeload.github.com/jesseward/jellyfin-plugin-lastfm/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jesseward%2Fjellyfin-plugin-lastfm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28338990,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T12:22:26.515Z","status":"ssl_error","status_checked_at":"2026-01-12T12:22:10.856Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audioscrobbler","csharp","dotnet-core","htpc","jellyfin","lastfm","lastfm-api","mediacenter","plugin"],"created_at":"2025-04-30T06:02:48.081Z","updated_at":"2026-01-12T13:03:05.006Z","avatar_url":"https://github.com/jesseward.png","language":"C#","funding_links":[],"categories":["C# #"],"sub_categories":[],"readme":"## jellyfin-plugin-lastfm\n\nEnables audio scrobbling to Last.FM as well as a metadata fetcher source.\n\nThis plug-in was migrated from the original Emby repository and has been adapted to function within the Jellyfin ecosystem. This plugin *cannot* be distributed with Jellyfin due to a missing compatible license. I will attempt to keep this repo up-to-date and in-sync as the Jellyfin project matures.\n\n## 🔧 Installation and Configuration\n\nInstall the plugin via the Jellyfin plugin repository (see: [announcement](https://jellyfin.org/posts/plugin-updates/)). Navigate to `plugins` section of the admin dashboard, add the following repository to follow stable builds for this plugin.\n* Repo name: LastFM Stable\n* Repo URL: https://jellyfin-repo.jesseward.com/manifest.json\n\n![plugins](https://github.com/jesseward/jellyfin-plugin-lastfm/assets/465993/9adf1434-0ba8-4182-b267-6ce34d5933a7)\n\n## ❓ Known Issues\n\n###  When enabling the plugin, you receive `Authentication Failed - You do not have permissions to access this service` when authenticating using your last.fm credentials.\n\nThis error is returned from the last.fm API. If you're certain you have correctly entered your username and password. Try resetting your last.fm username and password (change the password and change it back) via the last.fm site. This may be due to stale credentials cached on the last.fm infastructure. See https://github.com/jesseward/jellyfin-plugin-lastfm/issues/51 for context.\n\n### 3rd party Jellyfin applications (Gelli, Finamp) may not scrobble.\n\nThis appears to be due to the method in which these clients play media files. This plugin relies the invocation of the `PlaybackStartEvent` and `PlaybackStopEvent` events. Some details and references to upstream issues is located at https://github.com/jesseward/jellyfin-plugin-lastfm/issues/27#issuecomment-744031810\n\nAs an workaround, you can enable \"Alternative Mode\" in settings, which will scrobble on `UserDataSaved` events instead. See the [documentation of `jellyfin-plugin-listenbrainz`](https://github.com/lyarenei/jellyfin-plugin-listenbrainz/blob/main/doc/configuration.md#use-alternative-event-for-recognizing-listens) for the differences of the events.\n\n### (very) Poor matching of artist/album/track names in the `LovedTracks` flow.\n\nSyncing of Loved tracks between LastFM and this plugin is subpar. This is due to the `IsLike` method that is used to compare track metadata. See https://github.com/jesseward/jellyfin-plugin-lastfm/issues/24\n\n## 🚧 Developing\n\n### Developer: Local Builds\n\nInstall the .NET SDK on Linux or macOS, see the download page at https://dotnet.microsoft.com/download . Native package manager instructions can be found for Debian, RHEL, Ubuntu, Fedora, SLES, and CentOS.\n\nOnce the SDK is installed, run the following.\n\n```\ngit clone https://github.com/jesseward/jellyfin-plugin-lastfm.git\ncd jellyfin-plugin-lastfm\ndotnet build\n```\n\nIf the build is successful, the tool will report the path to your Plugin dll (`Jellyfin.Plugin.Lastfm/bin/Debug/*/Jellyfin.Plugin.Lastfm.dll`)\n\nThe plugin should then be copied into your Jellyfin `${CONFIG_DIR}/plugins/LastFM` directory.\n\n### Developer: Docker\n\n```sh\ndocker build -t jellyfin-lastfm-plugin .\n```\n\n```sh\ndocker run --rm -v \"$(pwd)/build/config/plugins/LastFM:/out\" jellyfin-lastfm-plugin cp /app/publish/Jellyfin.Plugin.Lastfm.dll /out/\n```\n\n```sh\ndocker run --rm -d   --name jellyfin-lastfm-dev   -p 8096:8096   -v \"$(pwd)/build/config:/config\"   -v \"$(pwd)/build/cache:/cache\"   -v \"$(pwd)/build/media:/media\" jellyfin/jellyfin:10.11\n```\n\n### Running Jellyfin from Docker\n\n```\nCACHE_DIR=/path/to/cache\nMEDIA_DIR=/path/to/media\nCONFIG_DIR=/path/to/config\n\ndocker run -d \\\n    --name jelly \\\n    --volume ${CONFIG_DIR}:/config \\\n    --volume ${MEDIA_DIR}:/media \\\n    --volume ${CACHE_DIR}:/cache \\\n    --publish 8096:8096 \\\n    --rm \\\njellyfin/jellyfin\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjesseward%2Fjellyfin-plugin-lastfm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjesseward%2Fjellyfin-plugin-lastfm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjesseward%2Fjellyfin-plugin-lastfm/lists"}