v2.1.0 — "Open Library"
Big minor: multi-media expansion (Music + Books), admin-defined custom badges with compound criteria, JS Injector fallback for tricky Linux installs, plus fixes for two reported issues.
What's new
Multi-media achievements
Music and Books now have first-class achievement support — Audio, AudioBook, and Book items all flow through the same playback pipeline that previously only handled Movies and Episodes.
- 18 built-in Music badges across Plays, Listening Hours, Unique Albums, Unique Artists, Unique Genres, and Unique Decades.
- 8 built-in Book badges across Books Completed, Audiobook Hours, and Series Completed.
- Audiobook routing policy — new admin setting controls whether audiobook plays count toward Books only (default), Music only, or both.
Custom badge builder
Admins can now define their own badges with compound AND/OR criteria — nuanced unlocks the built-in catalog can't express (e.g. "Watch 100 films AND listen to 50 music tracks" or "Complete 5 horror series OR listen to 10 hours of audiobooks").
- Up to 500 custom badges per instance, up to 5 levels deep of compound criteria, up to 64 total nodes per badge.
- Sidecar JSON storage (
custom-badges.json) — separate fromPluginConfiguration.xml. - CRUD + import/export API under
/Plugins/AchievementBadges/custom-badges(RequiresElevation). - All mutations audit-logged.
- v2.1.0 ships URL-only icons; hosted icon upload queued for a follow-up patch.
JS Injector hybrid (#26, jojolll)
For Linux bare-metal installs where /usr/share/jellyfin/web is owned by root and the on-disk patch fails, the plugin now detects the Jellyfin JavaScript Injector plugin and surfaces admin guidance with the exact 3 script URLs to paste into JS Injector's settings. The on-disk patch remains the default path.
Anime detection fix (#25, Daemon-Network)
v2.0.x missed anime items in two cases: (a) when classification lived in Tags rather than Genres, and (b) when Genres were on the parent Series rather than each Episode. v2.1.0 reads both Genres AND Tags from both the item AND its parent Series. Admins can configure match strings + library allowlist via new settings:
AnimeLibraries[]— library names that count every item as animeAnimeGenres[]— substring matches against Genres (default["anime"])AnimeTags[]— substring matches against Tags (default["anime"])
Daily badge backfill fix (#27, jojolll)
Pre-v2.1.0 backfill could wrongly award daily badges ("Watch 10 films in one day") when a user just had 10 films in history across multiple days. v2.1.0 fixes this two ways:
- For new installs / fresh upgrades: time-windowed badges are skipped during the initial backfill scan; they're earned organically going forward via real-time play events. Controlled by
BackfillSkipTimeWindowedBadgesadmin setting (defaulttrue). - For users with already-wrongly-awarded badges from v2.0.x: new admin audit + cleanup tool at
/Plugins/AchievementBadges/time-windowed/auditreturns a report; POST to/cleanupwith the badge+user pairs to clear. Audit-logged.
Foundation work (internal)
- New
MediaTypeenum classifying badges by media (Film / TV / Music / Book / Anime / Multi). - New
BadgeTimeWindowenum (Daily / Weekly / Monthly) — auto-tagged on built-in badges via metric inference. - New
EarnSourcefield on every badge unlock (Initial / Backfill / RealTime / Recompute / Manual).
Upgrade notes
- Drop-in upgrade — existing user profiles and badge unlocks migrate transparently. Pre-v2.1.0 unlocks deserialize with
EarnSource = Initialand are never touched by the audit-cleanup tool. - After upgrade, if you have wrongly-awarded daily badges from v2.0.x, run the audit endpoint and review the results.
- New config defaults are conservative — no admin action needed for the multi-media tracking to start counting.
Compatibility
Tested against Jellyfin 10.11.6. ABI 10.11.6.0 as before.
Verifying the release
Each release zip is Cosign-signed with sigstore + has a SLSA build provenance attestation. Verify with:
gh attestation verify Jellyfin.Plugin.AchievementBadges_2.1.0.zip --repo ZL154/AchievementBadges_for_JellyfinIssues fixed
- #25 Anime badges not firing when classification was on parent Series or in Tags (Daemon-Network)
- #26 On-disk index.html patch fails on Linux bare metal (jojolll) — fallback path + admin guidance
- #27 Daily cumulative badges incorrectly unlock during initial scan (jojolll) — skip-default + cleanup tool
Issues partially addressed
- #24 Music + Books achievements (Daemon-Network) — Music + Books shipped; library-completion % sub-metrics queued for follow-up if there's demand.