github ZL154/AchievementBadges_for_Jellyfin v2.3.1

2 hours ago

v2.3.1 — Music that counts, and leaderboards that show you

A fast follow to 2.3.0. The music feature that shipped in 2.3.0 had two holes that surfaced within a day, both fixed here, along with leaderboard and deleted-account cleanup. Drop-in upgrade from v2.3.0 / v2.2.x — no schema breakage or manual migration.

Fixed — music

Thanks to @Daemon-Network for testing 2.3.0 against a real music library and reporting these precisely, and to @camarigor for tracing all of them to his own code and fixing them.

  • Tracks no longer inherit genres and tags from the album or artist (#93/#94). GetEffectiveGenres/GetEffectiveTags unioned an item's genres with its parent's — correct for episodes, where the classification lives on the Series, but wrong for audio, where the parent chain is track → album → artist. So every track by a disco-tagged artist was counted as disco, which is why a "50 disco tracks" badge advanced on dance and pop plays. Audio now reads only its own genres and tags; episodes are unchanged.
  • The watch-history scan now replays played music (#95/#96). The scan replayed Movie, Episode and Book but never Audio, so music counters — including the new artist discography completion from 2.3.0 — could only ever be built from live playback and never rebuilt. A music-heavy profile therefore came back from a scan with empty counters and looked like a broken backfill. The scan now replays played tracks the same way it does books, crediting each track's own genres, and recomputes artist completion at the end. The scan summary reports the track count alongside movies, episodes and series.

Fixed — leaderboards and deleted accounts

  • Deleted accounts no longer appear anywhere. Removing a Jellyfin account left its achievement profile behind, so a deleted user showed on the leaderboard as their raw GUID and inflated the admin user count. Leaderboards (global, category, prestige) and the server-stats totals now filter to accounts that still exist.
  • Admin Stats and Leaderboard tabs refresh on open, so a just-deleted account drops off immediately rather than lingering until the next full reload.
  • Prune deleted accounts. A new admin button permanently removes the on-disk profiles for accounts that no longer exist, reclaiming their storage. Confirmation required; reports how many were pruned.

Added — see your own rank

  • Both the admin and the user-facing leaderboards now always show your own position. If you land in the visible top ten you are highlighted; if you rank lower, your row is appended below the list with your true rank. On the standalone page this applies across all six category boards.

Changed

  • The "Xbox 360 — Blades" shareable card skin is now simply "Aurora", matching its redesign, and the label is localized across all eight languages (French Aurore, Chinese 极光, Japanese オーロラ; the slug is unchanged so existing selections are preserved).

Verification

  • 202/202 automated tests pass on .NET 9 / Jellyfin 10.11.x with zero build warnings, including new coverage that a deleted account is excluded from the leaderboard and the user count.
  • Both browser bundles pass JavaScript syntax validation; all eight translation files parse and are at full key parity.
  • Deployed and smoke-tested on a healthy Jellyfin 10.11.x instance.

Note on the music fixes: neither the maintainer nor @camarigor has audio in their library, so #94 and #96 are verified by reading, matching the reported symptoms, and the full test suite — but not yet by running a real track through them on a large music library. If you have music, a watch-history scan that credits your tracks and advances the discography badges is the final confirmation.

Upgrade

Drop-in upgrade from v2.3.0 / v2.2.x / v2.1.x. Existing profiles deserialize with safe defaults; no manual migration or schema reset is required. The release ZIP is Sigstore-signed and carries GitHub SLSA build provenance.

Don't miss a new AchievementBadges_for_Jellyfin release

NewReleases is sending notifications on new releases.