A cross-platform desktop app that turns Spotify playlists, albums, and tracks into tagged local audio files, no Spotify account or API key required.

Spotify has no "download my playlist" path, and the usual scripts break once a playlist passes a few hundred tracks or hits a rate limit. Sunnify handles the full pipeline from URL to tagged file.
The hard part is the data layer. Instead of an official API, it parses the __NEXT_DATA__ JSON blob from Spotify's public embed pages, using layered path resolution and recursive fallbacks to survive the structural drift Spotify's A/B tests introduce. Embed pages cap near 100 tracks, so larger playlists fall back to Spotify's internal spclient API with a short-lived anonymous token to recover canonical order.
Matching is where correctness lives. Each track is scored against YouTube candidates on normalized title, artist, and a duration tolerance, so it grabs the right recording instead of a remix or live cut, with multi-client and query-widening fallbacks when a search comes back empty. Around that: a 4-worker thread pool, 429-aware exponential backoff, an append-only JSONL manifest for resume across sessions, and cooperative cancellation.
The suite runs 160+ pytest cases on every push across a 15-job matrix (3 OSes x Python 3.9-3.13), and releases ship SLSA Build Level 3 provenance, CycloneDX SBOMs, and Sigstore signatures.
__NEXT_DATA__ embed blob, with recursive fallbacks that ride out A/B driftspclient API fallback past the ~100-track embed cap, recovering canonical order on 1000+ track playlists