Skip to content

Releases: xmorose/spindle

v0.4.0

Choose a tag to compare

@xmorose xmorose released this 26 Sep 00:44

New Flow page: a streamgraph of how your listening shifts over time.

Flow

  • Under Insights in the sidebar, grouped by artists, albums or genres, measured by plays or listening time
  • Streams are filled with cover art, or with colours taken from each cover (toggle between Artwork and Colors)
  • Drag across the graph to zoom into a period, or pick exact dates; Back and Reset zoom step out again
  • Tap a cover below the graph to follow one stream through time
  • Everything outside the top 16 (8 on phones) is grouped as "Other", which you can include or hide
  • Available to the read token as /api/flow

Install

image: ghcr.io/xmorose/spindle:0.4.0

Or :0.4 to track patches, :latest for the newest.

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

v0.3.2

Choose a tag to compare

@xmorose xmorose released this 18 Sep 17:59

Fix artist names for multi-artist tracks in stats and Wrapped.

Spindle Collector 0.1.1

Choose a tag to compare

@xmorose xmorose released this 13 Sep 17:37

Fixes scrobble forwarding after upgrading Navidrome to 0.64.

  • Uses Navidrome’s host HTTP service instead of disabled Extism HTTP.
  • Adds the playback-report callback required by the current SDK.
  • Corrects plugin packaging and build instructions.

Replace your existing collector .ndp with the attached file, restart
Navidrome, and confirm the plugin is enabled for your users.
No backend update is required.

Built against the Navidrome 0.64 SDK. Live scrobbling verified on
0.63.0-SNAPSHOT; confirmation on 0.64 is still pending.

Related: #16

v0.3.1

Choose a tag to compare

@xmorose xmorose released this 31 Aug 15:05

The date range picker got a lot more clickable, and Wrapped now lists every year you have data for.

Range picker

  • The year and month strips are selectable: click a year or a month to set the range to it
  • A year jump, and the calendar arrows step a year at a time instead of a month
  • A "to today" button that extends the current range to today
  • New "Last 90 days" preset, in both the range bar and the picker

Wrapped

The year picker lists every year you have data for instead of a fixed window, and collapses to a dropdown on narrow screens.

Fixes

  • The play count previewed inside the range picker dropped a day on ranges crossing a daylight-saving change. Applied ranges were never affected - those totals come from the backend.

Install

image: ghcr.io/xmorose/spindle:0.3.1

Or :0.3 to track patches, :latest for the newest.

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

v0.3.0

Choose a tag to compare

@xmorose xmorose released this 29 Aug 20:52

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.

v0.1.0

Choose a tag to compare

@xmorose xmorose released this 07 Jun 16:51

First release.

The main thing here is a prebuilt Navidrome plugin — grab spindle-collector.ndp below and you can start collecting plays without setting up a Rust/WASM toolchain.

Install the plugin

  1. Download spindle-collector.ndp.
  2. Drop it in your Navidrome plugins folder (the Folder under [Plugins] in navidrome.toml), make sure plugins are enabled, and restart Navidrome.
  3. In Navidrome → Settings → Plugins → Spindle Collector, set:
    • backend_url — your Spindle backend, e.g. http://spindle-backend:3590
    • shared_secret — must match the backend's INGEST_SECRET

After that, anything you play (from any client that scrobbles to your server) shows up in Spindle.

Backend + frontend setup is in the README and docs/DEPLOY.md.