Skip to content

Releases: StepaniaH/navidrome-stat

Navidrome Stat v0.9.5

Choose a tag to compare

@github-actions github-actions released this 03 Oct 05:57

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

Choose a tag to compare

@github-actions github-actions released this 02 Oct 03:38

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

Choose a tag to compare

@github-actions github-actions released this 11 Sep 02:58

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 getSongHistory importer follows upstream PR #5650's current count/offset and songHistory.song contract 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

Choose a tag to compare

@github-actions github-actions released this 02 Sep 03:44

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

Choose a tag to compare

@github-actions github-actions released this 02 Sep 02:12

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

Choose a tag to compare

@github-actions github-actions released this 01 Sep 03:06

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

Choose a tag to compare

@github-actions github-actions released this 31 Aug 06:23

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

Choose a tag to compare

@github-actions github-actions released this 31 Aug 02:34

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 DELETE shrinks 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_at in datetime(), 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 getSongHistory imports 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.