feat: 0.9.0-beta1 — lossless FLAC integration (beta)
Stash can now download tracks as FLAC instead of Opus when a track
exists in Qobuz's catalogue. Mainstream commercial music gets pulled
as 16-bit/44.1kHz or 24-bit/up-to-192kHz lossless from Qobuz via
the public squid.wtf proxy; everything else falls through to the
existing yt-dlp pipeline unchanged.
This is a beta because the captcha gate is still manual — see "Known
limitations" below. The whole pipeline is correct and proven on real
tracks; the rough edge is purely the cookie workflow.
What's new
- Lossless source: Qobuz via qobuz.squid.wtf. Off by default —
flip Settings → "Lossless downloads (experimental)" on. When on,
every track first asks Qobuz; on a confident artist+title match
it streams the signed FLAC URL to disk through the existing
metadata-tagging + file-organising pipeline. On a miss (no
match, captcha expired, server hiccup) it silently falls through
to yt-dlp — lossless never surfaces a hard error. - FLAC quality badge. Small Hi-Res icon next to the title in
every track row: library, playlists, mini player, now playing,
queue, long-press menu. Visible only on lossless files. - FLAC library filter. Library → Tracks → new "FLAC" chip
alongside All / YouTube / Spotify. Filter to your lossless tracks
in one tap. - MAX quality tier (yt-dlp). Experimental tier that asks YouTube
Music for format 141 (AAC LC 256 kbps) on the music-specific
InnerTube clients before falling back to Opus 160. Real yield
depends on Google's gating — the Library Health screen lets you
see what you actually got. - Library Health screen. Settings → Library Health. Format and
bitrate breakdown of every downloaded file. Useful for sanity-
checking what MAX or lossless mode is actually pulling. - Duration reconciliation. Track lengths now come from the
file's container after download, not just Spotify's metadata.
When yt-dlp matches a different cut (live vs studio, extended vs
edit), the player shows the real length instead of the wrong one. - Home: full supporter messages. Ko-fi messages no longer
truncate at one line — the full quote is visible.
How to use lossless mode
- Settings → flip "Lossless downloads (experimental)" on.
- Open
https://qobuz.squid.wtf/in your browser, click Download
on any track, solve the captcha when prompted. - DevTools → Application → Cookies →
qobuz.squid.wtf→ copy the
captcha_verified_atvalue (a long number). - Paste it into Settings → "squid.wtf captcha cookie" field.
- Sync. Tracks Qobuz has show up as
.flacwith the Hi-Res badge.
Known limitations
- Captcha cookie expires every ~30 minutes server-side. When
downloads start falling back to yt-dlp again, repaste a fresh
value. WebView-based auto-harvest is the next iteration and
would eliminate the manual step entirely. - squid.wtf goes down sometimes. When it does, every lossless
attempt 403s and falls through to yt-dlp. Sync still completes;
you just don't get FLAC during the outage. - Library coverage is mixed. Mainstream commercial tracks
usually match. YouTube user-uploads ("wolverine9391 - Frankie
Valli cover", "Capitol Records - fade into you 🖤 #mazzystar")
correctly fall through to yt-dlp because Qobuz indexes by real
artist, not the YouTuber's handle. - No Qobuz subscription required for users. squid.wtf runs on
the operator's own paid sub. If you'd rather use your own Qobuz
account, that's a planned future toggle — not in this beta.
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.8.1...v0.9.0-beta1