Skip to content

Latest commit

 

History

257 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sunnify Spotify Playlist Downloader: download Spotify playlists, albums, and tracks to local MP3s with artwork and tags

Sunnify · Spotify Playlist Downloader

Download Spotify playlists, albums, and tracks to local MP3s with embedded artwork and tags.
Free, open source, cross-platform. Point-and-click desktop app with a built-in headless CLI. No account, no subscription.

Latest release Total downloads GitHub stars Runs on macOS, Windows, and Linux Tests status License



Download  ·  Features  ·  How to use  ·  Build from source  ·  Disclaimer

Caution

Educational / student portfolio project. Sunnify is a technical demonstration, not a piracy tool. Use it only for content you own or are permitted to download, and only where doing so is legal in your jurisdiction. See the full legal disclaimer and DISCLAIMER.md.


What is Sunnify?

Sunnify is a free, open-source Spotify playlist downloader for macOS, Windows, and Linux. Paste any Spotify playlist, album, or track link and Sunnify saves it as local audio files (MP3, M4A, FLAC, Opus, or WAV) with the cover art, title, artist, album, year, and track number written straight into the file's tags. No Spotify account, no API keys, no separate FFmpeg install, and nothing that requires a terminal unless you want one.

It is a desktop GUI built with Python and PyQt6, and every binary doubles as a headless CLI for scripts, servers, and AI agents. Metadata is read from Spotify's public pages and audio is sourced and transcoded locally, so everything runs on your own machine.

Sunnify desktop app downloading a Spotify playlist to local MP3s

Download

Platform Get it Notes
macOS (Apple Silicon) Sunnify-macOS.zip or Homebrew (below) M-series Macs, macOS 13+
macOS (Intel) Sunnify-macOS-Intel.zip or Homebrew (below) Intel Macs, macOS 13+
Windows Sunnify-Windows.exe Run directly, no install
Linux Sunnify-Linux chmod +x Sunnify-Linux then run
CLI (all platforms) Ships inside every binary above (CLI reference) One-liners below put sunnify on your PATH

Homebrew picks the right architecture automatically. Intel builds ride GitHub's final x86_64 runner image (macos-15-intel, supported until August 2027), covering Intel Macs through the rest of their supported life.

FFmpeg is bundled inside every prebuilt app, so there is nothing else to install.

Homebrew (macOS)

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

The cask verifies the download's checksum and clears macOS quarantine for you, so the app opens normally on first launch. It also puts the sunnify command on your PATH.

Command line (headless)

Every Sunnify binary doubles as a headless CLI: same engine, same settings, no window.

sunnify download "https://open.spotify.com/playlist/..."   # or album/track
sunnify info "<url>" --json                                # metadata only
sunnify doctor                                             # self-check

Each one-liner below is a complete install: it fetches the latest release (the app and CLI are one binary) and puts the sunnify command on your PATH. No admin rights, checksum-verified, and identical to the commands in the CLI reference, so run them from either page. Already downloaded the app? You already have the CLI; the one-liner just adds the sunnify command name to your terminal.

# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/sunnypatell/sunnify-spotify-downloader/main/scripts/install.sh | sh
# Windows
iwr -useb https://raw.githubusercontent.com/sunnypatell/sunnify-spotify-downloader/main/scripts/install.ps1 | iex

Full reference (commands, flags, NDJSON output for scripts and AI agents, exit codes) in docs/CLI.md.

macOS: opening the app from a direct download

The app is ad-hoc signed but not notarized (notarization needs a paid Apple Developer account; this is an unfunded student project). The Homebrew install above is friction-free. For a direct .zip download from the Releases page, remove the quarantine flag once:

xattr -r -d com.apple.quarantine /Applications/Sunnify.app

Or use Gatekeeper's flow: double-click once, then System Settings → Privacy & Security → Open Anyway (macOS Sequoia and later removed the old right-click-Open shortcut).


Features

  • Playlists, albums, and single tracks. Paste a normal link, an intl-xx locale link, or a spotify: URI copied from the desktop app. Each playlist or album downloads into its own folder.
  • Five audio formats. MP3, M4A, Opus (lossy at 128 / 192 / 256 / 320 kbps) and FLAC / WAV (lossless). Your choice is remembered between sessions.
  • Real metadata, written correctly. Title, artist(s), album, year, and track number are embedded for every format, with the front cover art baked in. MP3 tags are written for maximum player compatibility, so artwork and tags show up everywhere, including older car head-units, stock Android, and Windows Media Player.
  • Per-track cover art. Each song gets its own artwork, not one shared playlist cover.
  • Parallel downloads. Multiple songs download at once, so a playlist finishes much faster, with a cooperative Stop that takes effect immediately.
  • Resume large playlists. A per-folder manifest records what already landed, so a playlist throttled by rate limits finishes across multiple sessions instead of starting over.
  • Filenames your way. Song - Artist, Artist - Song, or just Song (the artist stays in the tags), with optional 01. track-number prefixes so folders sort in playlist order. A live preview in Settings shows the result as you toggle.
  • Unicode-safe filenames. Accented, CJK, and Cyrillic titles are preserved; only characters your filesystem actually rejects are stripped.
  • Accurate audio matching. Sunnify matches on title, artist, and duration rather than grabbing the first search hit, so you get the real recording, not a remix or a sped-up edit.
  • Bundled FFmpeg, no account. Everything needed ships inside the app, and nothing asks you to log in.
  • Headless CLI built in. sunnify download <url> scripts every feature of the app: machine-readable output, meaningful exit codes, resume, and a doctor self-check. Made for terminals, cron jobs, and AI agents. See docs/CLI.md.
Sunnify settings showing audio format and quality options

How to use

  1. Copy a Spotify link for a playlist, album, or track (the Share menu, or copy the URL from your browser).
  2. Paste it into Sunnify.
  3. Pick a format and quality in Settings, and choose where files should go (defaults to your Music folder).
  4. Download. Watch per-track progress; press Stop anytime.

Your downloads land in a folder named after the playlist or album, tagged and ready for any music library.


Build from source

Requires Python 3.10+. FFmpeg must be available (bundled in the prebuilt apps; otherwise install via Homebrew, your package manager, or PATH).

git clone https://github.com/sunnypatell/sunnify-spotify-downloader.git
cd sunnify-spotify-downloader
pip install -r req.txt
python Spotify_Downloader.py

To produce a standalone app with PyInstaller:

pip install pyinstaller
pyinstaller Sunnify.spec     # output in dist/

Verify your download

Every release since 2.0.8 ships a verifiable supply-chain trail. Each binary carries SLSA Build Level 3 provenance binding it to the exact source commit and the isolated builder workflow, plus a CycloneDX SBOM and offline Sigstore bundles, all logged to the public Rekor transparency log.

# plain checksums, no extra tooling
sha256sum -c checksums.txt --ignore-missing

# cryptographic provenance (GitHub CLI)
gh attestation verify Sunnify-Linux --repo sunnypatell/sunnify-spotify-downloader

Full details and the threat model are in SECURITY.md.


How it works

Sunnify reads track metadata from Spotify's public embed pages (no authentication), finds the matching audio via a YouTube search through yt-dlp, transcodes it to your chosen format with the bundled FFmpeg, and writes the tags and cover art with Mutagen. It is a pure-Python core wrapped in a PyQt6 interface, packaged per-platform with PyInstaller.


Legal Disclaimer

This is a student portfolio project, not a piracy tool

Sunnify was built solely as an educational demonstration of software engineering. It exists to showcase technical skills for academic and portfolio purposes. The developer does not condone, encourage, or support copyright infringement or piracy.

It demonstrates desktop application and headless CLI development with Python and PyQt6, public-API integration and reverse engineering, multi-threaded architecture, and a hardened CI/CD release pipeline. It is provided free of charge as an open-source educational resource, not for commercial use.

Terms of use

By downloading, installing, or using this software, you agree that:

  1. Personal use only. Use it for content you own, have purchased, or have explicit permission to download. Downloading copyrighted material without authorization may violate the law where you live.
  2. You are responsible for compliance with the laws of your country, state, or region. Some jurisdictions permit personal/backup downloads; others do not.
  3. No warranty. The software is provided "as is," without warranty of any kind.
  4. Limitation of liability. The developer is not liable for any damages or legal consequences arising from use or misuse. You assume all risk.
  5. No endorsement of piracy. This is a technical demonstration and must be used responsibly and legally.

Acceptable vs. not

  • ✅ Format-shifting music you have purchased elsewhere
  • ✅ Personal backups of content you own
  • ✅ Research into API design and audio processing, and learning software development
  • ❌ Distributing copyrighted content
  • ❌ Commercial use
  • ❌ Any use where such downloads are prohibited

DMCA & takedown requests

If you are a rights holder and believe this project infringes your intellectual property, email sunnypatel124555@gmail.com with details and I will respond promptly. This project complies with all valid takedown requests.

If you are looking for a tool to pirate music, this is not it. Please support artists by purchasing their music or using authorized streaming services. Use this software responsibly and legally, or do not use it at all.

See DISCLAIMER.md for the complete legal terms.


Contributing

Contributions, ideas, and bug reports are welcome.


Author

Created and maintained by Sunny Jayendra Patel. Questions or feedback: sunnypatel124555@gmail.com.

Licensed under a custom educational-use license. See LICENSE.

About

Sunnify is a Spotify downloader application + CLI that allows you to download entire playlists locally onto your Mac/Linux/Windows PC.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

740 stars

Watchers

4 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages