Skip to content

Stash v0.9.26

Choose a tag to compare

@rawnaldclark rawnaldclark released this 15 May 13:33
· 1127 commits to master since this release

Stash v0.9.26 — Stash Mixes opt-out + library-wide album backfill + faster album downloads

Stash Mixes (beta) opt-out — issues #56, #57

New "Stash Mixes (beta)" toggle in Settings (between Downloads and
Appearance). On by default — flipping off:

  • cancels every Stash-Mix background worker (refresh, discovery,
    discovery download, tag enrichment, track info enrichment) so no
    more "random songs downloading the moment you reconnect to internet";
  • hides Daily Discover, Deep Cuts, and First Listen from Home and
    Library by flipping is_active on the built-in recipes + their
    materialized playlists;
  • leaves previously-downloaded discovery tracks on disk so nothing
    destructive happens.

Re-enabling restores the recipes and playlists with their existing
track lists, re-schedules the workers, and fires a one-shot refresh
so the surfaces repopulate immediately.

Library Albums tab now actually works

Three issues collided to keep downloaded albums from grouping under
album cards:

  1. Search-tab downloads dropped the album field. Plumbed through
    TrackItem -> SearchDownloadCoordinator -> TrackEntity insert.
  2. Album-page tracklist parser left artist empty (InnerTube omits
    the artist column on album pages). Falls back to the album header's
    artist now.
  3. Library Albums query grouped by (album, artist), so multi-artist
    collab albums fragmented into one card per per-track artist string.

Schema bump v24 -> v25 adds an album_artist column so albums with
the same name by different artists ("Singles" by Usher vs by Drake)
stay separated, while multi-artist collab albums (Drake & 21 Savage
Her Loss, Drake & PartyNextDoor Some Sexy Songs 4 U) stay grouped.

One-shot startup backfill walks every downloaded track with empty
album / album_artist and fills the columns from the file's embedded
album tag (preferred) or the file path's artist/album folder
(de-kebabbed). Existing libraries are auto-organised on next launch
— no re-download required.

Album downloads are fast again

The v0.9.25 loudness work serialised every download behind a 25-50s
ffmpeg ebur128 pass inside TrackFinalizer, so a 25-track album took
~12 minutes of additional dead time waiting for measurements. Moved
measurement off the download path to a fire-and-forget background
scope; the download flow returns as soon as the file is on disk, the
loudness DB write trickles in over the next few minutes.

Spinner state also fixed — a DB-write exception inside upsertSearchTrack
could prevent the Completed flow event from emitting, leaving the
per-row spinner stuck even though the file had landed. Wrapped in
runCatching so the spinner always clears.

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.9.25...v0.9.26