Skip to content

Stash v0.4.1

Choose a tag to compare

@github-actions github-actions released this 19 Apr 17:45
· 1796 commits to master since this release

feat(mixes): 0.4.1 — single-mix beta, Last.fm connect fix, Home/Settings polish

Stash Mixes is now explicitly labeled "Stash Mixes (Beta)" on Home and
sits below Daily Mixes while the feature is in beta. The default recipe
set shrinks from seven to a single "Stash Discover" flagship so the
scoring + discovery + rotation loop gets validated end-to-end on one
experience before we add more. Existing installs are auto-reset via a
one-shot migration gated by STASH_MIX_RECIPE_VERSION; user-created
recipes are preserved (only is_builtin=1 rows are touched).

Last.fm Connect was broken in 0.4.0 — the web-auth request ran on the
main thread and threw NetworkOnMainThreadException before reaching the
server. All three HTTP helpers in LastFmApiClient (signedGet /
signedPost / unsignedGet) now wrap OkHttp's blocking execute() in
withContext(Dispatchers.IO). Same fix implicitly unblocks every
subsequent call (tag enrichment, similar artists, cold-start import)
that invokes the client from a Main-dispatched VM scope.

Home card art switches from two-tile mosaic to single album art.
DiffWorker.materializeMix and StashMixRefreshWorker.materializeMix
both take the first unique album art (no "|" separator). Refresh
semantics unchanged — the cover rotates with the tracklist. Older
rows written before this change are not rewritten retroactively;
next sync handles them.

Settings layout: Last.fm sign-in moved from its own section further
down the page into the Accounts section, right after the YouTube
Music AccountConnectionCard, so all three connect surfaces are
grouped together where users scan for them.

Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com


Install

Download the .apk below and open it on your Android device. If you've got a previous Stash release installed, this upgrades in place — your library, sync history, and settings are preserved.

Requires: Android 8.0 (API 26) or newer.

See the README for first-time setup.

Full Changelog: v0.4.0...v0.4.1