github rawnaldclark/Stash v0.9.100
Stash v0.9.100

7 hours ago

YouTube playback works again

If tracks have been skipping instantly for the past week — every YouTube-sourced song failing the moment it started — this is the fix.

YouTube put its anti-bot PO Token in front of the client Stash had pinned since June. Once that happened, the extractor stopped being offered the audio-only formats and fell back to a combined 360p video stream whose URL was rejected on open, so every YouTube track died at the player and got skipped. With the lossless sources also unavailable for many tracks, that meant a lot of silence.

Stash now walks a chain of clients instead of trusting one, and — the part that actually matters — verifies a stream can serve its final byte before handing it to the player. A URL that only serves its first megabyte is caught here instead of becoming a skipped track. When one client gets blocked, the next is tried automatically rather than the app going quiet.

Your YouTube audio is also better than it was before the outage. Playback is back on Opus (~160 kbps, audio-only) rather than the combined video stream the broken path had degraded to — better sound, and no more downloading video frames that get thrown away.

One trade-off worth knowing: the first play of a YouTube track now takes noticeably longer to start, because the only client YouTube still allows requires extra work to unlock. Tracks queued behind the current one are prepared in advance, so this mostly shows up on the first tap rather than between songs.

Fewer stalls and duplicate work while streaming

  • A track that failed and retried used to be handed the same dead URL again, so the "retry" was never a real second attempt and playback gave up early. It now fetches a fresh one.
  • Tapping a track while the next one was being prepared could kick off two full resolutions of the same song at once, doubling the wait and hammering the sources. Those are now shared.

Now Playing tells the truth about what you're hearing

The quality badge was reporting a value from the database rather than the audio actually playing, so a YouTube stream showed "AAC" while genuinely playing Opus, and never showed where it came from. It now reads the real codec and source — OPUS · via YT. A related bug had the player rewriting that badge over a thousand times per track in the background; it now happens once.

Sync and library fixes

  • Playlist download choices stick. An old startup migration could quietly re-enable syncing for playlists you'd turned off. (#438)
  • The Synced / Off filters now filter everything. The chips only applied to your own playlists — Liked Songs and mixes ignored them, so switching to "Off" still showed rows that were clearly on. (#373)
  • "Check for updates" answers you. It ran and then said nothing at all, which looked broken — especially if you were already on the latest version. It now tells you what it found. (#377)
  • Albums and artists match multi-artist credits properly, so a track credited to several artists shows up under the right one. (#440)
  • Album actions wrap instead of running off the edge of narrower screens. (#441)
  • JioSaavn no longer fails silently — when it can't match a track it now says so in the logs, which makes the fallback chain diagnosable instead of invisible.

Thanks to @ParaliyzedEvo for diagnosing the three streaming reliability bugs (stale retry cache, duplicate resolves, and untrustworthy fast-client URLs), @chaudhary-lakshay for the sync-filter and update-check fixes, and @yuriikot2010 for the artist-credit matching and the album-hero layout fix.

Don't miss a new Stash release

NewReleases is sending notifications on new releases.