Repository navigation
Releases: StepaniaH/navidrome-stat
Release list
Navidrome Stat v0.9.5
Added
- Settings can choose calendar-day or active-day averages. Calendar days are the default; the dashboard labels both choices as a daily average, and existing API average fields retain their earlier definitions.
- Individual listening history supports track, artist, and album search with stable pagination, inherited filters, and duration-quality labels.
- Listening Review shows albums heard again after a gap of at least 90 days and the largest play-count increase among the current top ten artists.
Changed
- Summary, ranking, relationship, and UTC time-bucket queries aggregate in SQLite before loading results.
- Missing album artwork resolves when requested, with bounded upstream concurrency and timeouts. Statistics responses no longer wait for cover lookup.
- The header reports collection health independently of statistics requests, distinguishes enabled ingestion from active polling, and warns when both collection methods are enabled.
Fixed
- A process lock prevents a second instance from recovering or collecting into the same database. Background tasks and collectors are stopped when application lifespan exits.
- Selected server filters remain in effect when the current window has no matching server options.
- First-recorded track counts and review metadata use the same authorized history and source-qualified track identities.
Security
- Individual-history and legacy album-cover requests enforce the existing viewer source and username restrictions.
- Git and container build exclusions cover SQLite databases, sidecars, lock files, logs, and local agent configuration directories.
Container image
Image: stepaniah/navidrome-statistic:v0.9.5
Digest: stepaniah/navidrome-statistic@sha256:42596cb48a080c08d8ba96d2b71b50b4a5f7eb9e0b9ac117de701c57d9951fb8
To roll back, deploy a previously published version tag. If the target version predates a schema migration, restore the matching data-volume backup instead of starting an unsupported downgrade.
Navidrome Stat v0.9.4
Added
- A maintenance command previews and fills missing artist credits in older Navidrome records using song details from the original source.
Fixed
- Polling retrieves missing artist lists from song details and updates existing sessions when artist metadata arrives later, so separate artist attribution can use the full list without duplicating plays (#40).
- ListenBrainz submissions preserve separate artist names and corresponding IDs instead of discarding collaboration metadata.
Changed
- Updated Uvicorn to 0.54.0 and Ruff to 0.16.9.
- Documentation screenshots now use synthetic listening data.
Security
- Excluded local development screenshots, coverage reports, and lint caches from the container build context.
Container image
Image: stepaniah/navidrome-statistic:v0.9.4
Digest: stepaniah/navidrome-statistic@sha256:b3b5d66e4ab2751808a7f1abfabc0c54b89de7cbbc3f35d2af7ce6ce58f17664
To roll back, deploy a previously published version tag. If the target version predates a schema migration, restore the matching data-volume backup instead of starting an unsupported downgrade.
Navidrome Stat v0.9.3
Added
- Listening Review can show a calendar month or year, compare play counts with the previous period, and list tracks first recorded in the selected period.
- An optional read-only token can be restricted to one server, one username, or both.
- An optional ListenBrainz-compatible endpoint can receive scrobbles from Navidrome.
Changed
- The experimental
getSongHistoryimporter follows upstream PR #5650's currentcount/offsetandsongHistory.songcontract and treats unknown response shapes as retryable import failures. - Imported history leaves listening duration and transcoding status unset when the source does not provide them.
- Dashboard and Listening Review totals use the stored duration without estimate or minimum prefixes. Non-zero seconds are retained, missing duration uses an em dash, and unavailable duration comparisons are omitted.
Fixed
- Successful playback observations separated by an outage no longer turn the unobserved interval into continuous listening time. Recovered sessions retain a lower-bound quality marker through later checkpoints.
- Username-scoped viewers no longer receive unrelated server options or cover art from sources with no matching history. Protected operational metrics require an administrator token.
- ListenBrainz submissions with different recording or release identifiers are no longer treated as duplicate retries.
Security
- Administrator, viewer, and ListenBrainz ingestion tokens must use different values. Invalid combinations stop the application during startup.
Container image
Image: stepaniah/navidrome-statistic:v0.9.3
Digest: stepaniah/navidrome-statistic@sha256:4e29968ae886bd310e6361f3ee371923bae226124522416d9aa5d14d5e944db7
To roll back, deploy a previously published version tag. If the target version predates a schema migration, restore the matching data-volume backup instead of starting an unsupported downgrade.
Navidrome Stat v0.9.2
Added
- Collaborating artists can be displayed together or separately in Settings. Separate mode credits each artist once per play across rankings, detail views, relationship charts, and year-in-review, while preserving recording totals.
- Structured OpenSubsonic artist credits are stored with recordings and preserved by privacy archive v5. Archive formats v1–v4 remain importable.
Fixed
- Changing the settings language immediately updates theme-mode cards, palette labels, and theme-editor status messages while preserving unsaved color changes.
Changed
- Updated the English and Chinese README screenshots for the dashboard, client details, relationship charts, rankings, and theme settings.
Container image
Image: stepaniah/navidrome-statistic:v0.9.2
Digest: stepaniah/navidrome-statistic@sha256:4f2ccf8185e97dec699c55bf71f29a77cd228bc48041b6cad64cc61f7716bff9
To roll back, deploy a previously published version tag. If the target version predates a schema migration, restore the matching data-volume backup instead of starting an unsupported downgrade.
Navidrome Stat v0.9.1
Changed
- Detail track rows consistently show play count and total recorded listening time. Estimated values use
≈, older incomplete checkpoint values use≥, and missing durations remain unknown instead of appearing as zero seconds. - Privacy exports use format v4 to preserve duration-quality semantics across restore. Formats v1 through v3 remain importable, and existing v3 fingerprints keep their original duplicate/conflict behavior.
Fixed
- Album cover lookup no longer replaces the stored album identity. Details for pre-album-ID history now use the original server, album, and artist identity instead of opening an empty ID-scoped view.
- Interrupted durable checkpoints retain their lower-bound duration marker after startup recovery. Privacy export/import preserves derived duration quality, including missing durations.
Container image
Image: stepaniah/navidrome-statistic:v0.9.1
Digest: stepaniah/navidrome-statistic@sha256:328e2a9b7d3f6fa369f43dc2b5d2e897c5a7ecfaeea45c556ee4e87c0624b553
To roll back, deploy a previously published version tag. If the target version predates a schema migration, restore the matching data-volume backup instead of starting an unsupported downgrade.
Navidrome Stat v0.9.0
Added
- A relationship section compares the top artists, albums, or clients over time, across four local-time dayparts, and against the immediately preceding equal-length period. Charts can use play count or recorded listening time and preserve the dashboard date, timezone, server, and user scope.
- Client rows and relationship chart values open scoped client details with totals, trend, top tracks, recent plays, and current/previous-period rank.
Changed
- Relationship charts report duration-field coverage when listening time is selected and keep missing durations distinguishable from recorded values.
- Dashboard controls and detail layouts remain contained across all seven interface languages at desktop, tablet, mobile, and 320-pixel viewport widths.
- The synthetic statistics benchmark now includes all three relationship dimensions at 100,000 and 1,000,000-row scales.
Security
- Client detail names are sent in POST request bodies and are not stored in shareable URLs, browser history, copied links, or query-string access logs.
Container image
Image: stepaniah/navidrome-statistic:v0.9.0
Digest: stepaniah/navidrome-statistic@sha256:92ccc509447070f41b19919e560197a19ac254008b5925b90e52d0bf3ebee56c
To roll back, deploy a previously published version tag. If the target version predates a schema migration, restore the matching data-volume backup instead of starting an unsupported downgrade.
Navidrome Stat v0.8.9
Added
- Artist and album rankings now open a scoped detail drawer with playback and listening-time trends, first and latest play times, top tracks, recent plays, prior-period rank changes, and a stable shareable URL.
Changed
- Client averages now include seconds, making similar minute-level values easier to compare.
- Detail summaries now include unique-track count and average time per play. Track rows show album, server, playback time, user, and client metadata on separate lines.
Fixed
- OpenSubsonic sessions no longer lose the playing intervals between sparse position reports, which could pin multi-minute client averages near the 30-second counting threshold.
Container image
Image: stepaniah/navidrome-statistic:v0.8.9
Digest: stepaniah/navidrome-statistic@sha256:8aa20d29a1869292650e69bed36e0dca32111e0d0a044cceb45f0dbdeb4c4218
To roll back, deploy a previously published version tag. If the target version predates a schema migration, restore the matching data-volume backup instead of starting an unsupported downgrade.
Navidrome Stat v0.8.8
Added
- Prometheus metrics now cover dashboard builds and cache outcomes, SQLite busy retries, imports, cover-art caching, and fixed-section query budgets.
- Recent Plays now offers on-demand details for attempts below the configured counting threshold. The details follow the current date, server, user, and timezone filters without labeling short sessions as intentional skips.
- Privacy export format v3 adds stable record IDs and fingerprints. Merge imports now report inserted, skipped, and conflicting rows; formats v1 and v2 remain importable and gain deterministic repeat-import deduplication.
- Readiness reports durable playback-write health separately from upstream polling health.
Changed
- First-use dashboards keep connection guidance, current collection status, and playback-accounting details available while collapsing empty historical charts and tables. Filtered empty results still show section-specific guidance.
- Dashboard cache misses now read all local sections from one consistent SQLite snapshot. IANA-timezone bucket scans stream rows to reduce peak memory use.
- The product display name is consistently "Navidrome Stat" across the interface, documentation, API metadata, and releases. Existing repository and Docker image names remain unchanged.
- New local checkouts keep runtime data under
.data/, while existing root-level databases remain automatically discoverable and Docker deployments continue using/data. - Tag releases now require strict SemVer, matching source and Docker versions, release notes, the complete test workflow, and a container smoke test. Stable releases publish
latest; prereleases do not. Successful image builds create a GitHub Release with the image digest and rollback guidance. - Backup guidance archives the complete data volume and includes a restore integrity check before production recovery.
- Advanced theme settings summarize contrast by text role without exposing raw ratios, while retaining validation across every editable background.
Fixed
- Cover-art caching preserves validated WebP and AVIF content types instead of defaulting unrecognized images to JPEG. The cache no longer writes unused MIME sidecar files.
- Cover-art proxy responses enforce a streaming size limit, verify the image signature, perform file operations off the event loop, and release per-key request locks after use.
- Retention previews no longer claim that
DELETEshrinks the SQLite database file; they report deleted record payload while explaining that SQLite reuses freed pages internally. - Older application versions now refuse databases with a newer schema before creating or changing schema objects and provide upgrade-or-restore guidance.
- Finite date-window queries now use schema v13 UTC epoch columns and source/user/time indexes instead of wrapping
played_atindatetime(), allowing SQLite to use the time index while preserving local-calendar and DST boundaries. - The Settings header distinguishes browser-only display preferences from connections and data controls saved by the service.
- Recent playback metadata is selected by playback time rather than insertion order, so importing older history cannot replace the latest title or timestamp.
- Album rankings persist upstream album IDs and keep same-named albums separate by source and artist; multi-server cover art uses each ranking row's source.
- Native
getSongHistoryimports commit and checkpoint each page, resume after limited batches or restarts, and retry failures with persisted exponential backoff. - Deleting a user's data discards active in-memory sessions and suppresses their already queued writes while allowing future plays to start fresh sessions.
- Year-in-review links, requests, responses, cache entries, aggregates, and visible labels preserve year, server, user, and timezone scope; the page reports loading and retry states, prevents outdated responses from replacing the selected year, and provides text summaries for charts.
- The review login dialog keeps keyboard focus within the dialog, the dashboard localizes its review link, and recent-play column preferences apply on mobile.
- The recent-play column menu remains visible outside short empty-state cards and stays open while multiple columns are changed.
- Playback-attempt rates now exclude backfill and native-history imports because those records were not observed as live playback sessions. Privacy-archive restores remain included.
- A cache invalidation error after a successful playback write is logged separately and no longer marks durable playback persistence as unhealthy.
Security
- Docker build contexts exclude local credential keys, databases, cover-art caches, backups, and
.data/contents. - Metrics use fixed section labels and do not include users, servers, tracks, or other high-cardinality identifiers.
Container image
Image: stepaniah/navidrome-statistic:v0.8.8
Digest: stepaniah/navidrome-statistic@sha256:b32e5621a4f3b90ae5eebbdb1bb15f3275579c55cc1222d7fe85ab2d8590c300
To roll back, deploy a previously published version tag. If the target version predates a schema migration, restore the matching data-volume backup instead of starting an unsupported downgrade.