what's changed
added
- filenames can now be song title only (closes #91). a third naming shape alongside
Song - ArtistandArtist - Song: title only keeps the artist out of the filename while every tag (artist, album, year, cover art) is still written, for players like MusicBee and Musicolet that render metadata and make the filename artist redundant. in Settings the three shapes are one "Filename style" picker with a live preview of the resulting filename; in the CLI it's--title-only, generated from the same settings registry so the two can never drift (explicitly passing--title-only --artist-firsttogether is a typed usage error per the cli guidelines on catching likely mistakes, since a title-only filename has no order). - same-title tracks can no longer collide, in any naming mode. two different songs called "Home" get a short id suffix instead of overwriting or skipping against each other: filename claims are case-folded (macOS's APFS and Windows's NTFS treat
Home.mp3andhome.mp3as the same file by default), and the resume manifest's ownership map is consulted across runs and updated live within a run. crash recovery still skips instead of re-downloading, and a collision leaves a forensic line in the log. - the settings window now fits every screen. it opens at its natural size (computed via Qt's height-for-width layout protocol, since word-wrapped hints only know their height once the width is fixed) clamped to the display, and the settings column scrolls when a small laptop or windows dpi scaling would otherwise push the buttons off-screen.
changed
- build toolchain bumps in the release lock (pyinstaller 6.22.0, setuptools 84.0.0); app dependencies unchanged.
naming changes apply to new downloads; files already on disk keep their names, and switching naming styles re-downloads nothing because resume tracks spotify ids, not filenames.
verifying this release: every asset is covered by SLSA build L3 provenance - gh attestation verify <asset> --repo sunnypatell/sunnify-spotify-downloader, or check checksums.txt with sha256sum -c.
install via homebrew (macos):
brew tap sunnypatell/sunnify https://github.com/sunnypatell/sunnify-spotify-downloader
brew install --cask sunnifyfull changelog: v2.2.1...v2.3.0
⭐ 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):
- build provenance: Sunnify-Windows.exe
- build provenance: Sunnify-Linux
- build provenance: Sunnify-macOS.zip
- build provenance: Sunnify-macOS-Intel.zip
- sbom attestation for the binaries
- build provenance for the source tarball
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.