Skip to content

v0.3.0

Choose a tag to compare

@xmorose xmorose released this 29 Aug 20:52
· 9 commits to master since this release

Wrapped now covers every year you have data for, not just the current one.

That's the newest change, but there hasn't been a release since June, so here's the rest of it.

Wrapped

Rebuilt as a full-screen story with a shareable card, and it now covers past years and all-time history instead of just the current one.

New screens

  • Search palette for jumping to any artist, album or track
  • Day drill-down: click a day, see what you played
  • A real pulse screen
  • Tops has a podium, a segmented control, and rows that reorder when you change the sort
  • Ranked lists render as bar charts instead of flat rows
  • Sessions expand to the tracks they contain

Date ranges

Custom range picker with a heatmap calendar, quick-range presets, year and month history nav, and date labels on the home timeline. On mobile the picker collapses, and sign out moved into the sidebar.

Multi-user

User switcher for viewing any user's stats, browser time zone handling, and expired sessions send you back to login instead of hanging.

Imports

Last.fm import, plus a Spotify importer refactor: fuzzy matching, non-Latin titles (Greek and Russian included), and a CSV of the tracks it could not match.
Last.fm and Last.fm and Spotify importer work by @Blavkentropy1 in #6 and #10.

Look

Every screen recolors from the current cover art, with accents pulled from hue buckets instead of a pixel average. Skeleton placeholders while lists load, staggered cover grids, entrance animations that replay on navigation, and one consistent label scale.

Fixes

  • Plays are no longer counted twice across live, import and baseline
  • Track ids heal through Navidrome's base62 id migration, with scripts to run it
  • All-time stats work on large libraries, and the repeated scans are gone
  • Progress bars no longer render a stub at zero plays

Self-hosting

A compose setup that works out of the box, hardened config, documented password hash generation, a boot warning when DEFAULT_USER has no plays, and a read-only API token for external dashboards.

Install

image: ghcr.io/xmorose/spindle:0.3.0

Or :0.3 to track patches, :latest for the newest. Every version back to 0.1.1 is on ghcr.

The Navidrome plugin has not changed since v0.1.0, so the spindle-collector.ndp on that release is still the current one.