Releases: xmorose/spindle
Release list
v0.4.0
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.0Or :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
Spindle Collector 0.1.1
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
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.1Or :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
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.0Or :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
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
- Download
spindle-collector.ndp. - Drop it in your Navidrome plugins folder (the
Folderunder[Plugins]innavidrome.toml), make sure plugins are enabled, and restart Navidrome. - In Navidrome → Settings → Plugins → Spindle Collector, set:
backend_url— your Spindle backend, e.g.http://spindle-backend:3590shared_secret— must match the backend'sINGEST_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.