github sunnypatell/sunnify-spotify-downloader v2.2.0

8 hours ago

what's changed

added

  • every sunnify binary is now also a headless CLI (closes #81). run it with a command and it never opens a window: sunnify download <url> drives the exact engine the app uses - same matcher, file naming, tag writer, resume manifest, and settings file - so a scripted download behaves identically to a clicked one. commands: download, info, status, config, doctor. built to the command line interface guidelines: nothing is ever interactive, exit codes mean things (0 ok, 1 partial, 2 usage, 3 environment), --help shows your current saved defaults, re-running a playlist resumes it, and a per-folder lock stops two runs from racing the same destination. full reference in docs/CLI.md.
  • first-class output for scripts and AI agents. download --json streams NDJSON progress events ending in a run_summary terminator, and errors are typed envelopes (code + hint) so automation branches on codes instead of parsing english. info, status, config, and doctor --json each emit one clean JSON document.
  • sunnify lands on PATH through every install channel. brew install --cask sunnify now symlinks the CLI via the cask's binary stanza; new one-line installers for macOS/Linux (curl | sh) and Windows (iwr | iex) install user-scope with zero prompts, zero sudo, zero UAC - and verify the release asset's SHA256 against checksums.txt before installing anything; pipx install git+... works straight from source. every channel routes through the official release assets, so downloads stay counted and SLSA-attested.
  • cli runs leave the same forensic trail as the app. shared rotating session log, invocation and exit-code markers around every run, and the same signal forensics the app ships: a killed cli run logs its killer before dying with default semantics.
  • releases now smoke-test both personalities. the pipeline boots every freshly built binary AND exercises its CLI (--version, config) on all four platforms before anything gets attested - inside the same reusable workflow, so build l3 provenance is unchanged.

changed

  • yt-dlp 2026.6.9 -> 2026.7.4 in shipped binaries. youtube extraction moves fast; verified live before locking.

verifying this release

sha256sum -c checksums.txt --ignore-missing
gh attestation verify Sunnify-Linux --repo sunnypatell/sunnify-spotify-downloader

install via homebrew (macos)

brew tap sunnypatell/sunnify https://github.com/sunnypatell/sunnify-spotify-downloader
brew install --cask sunnify

full changelog: v2.1.1...v2.2.0


thanks @mattiadepaoli-hash for pushing on the headless story in #81 - this release exists because of that issue.

⭐ if sunnify saved you time, star the repo - stars are how people find it.

attestations from this build

direct links to each attestation generated by the workflow run that produced these binaries (sigstore-signed, public-good rekor log entry, SLSA build L3 via the release-build.yml reusable workflow):

the *.sigstore.json assets attached above are the same attestations as offline-verifiable bundles. these get auto-refreshed on every release re-build, so the links above always correspond to the binaries currently attached to this release.

Don't miss a new sunnify-spotify-downloader release

NewReleases is sending notifications on new releases.