Skip to main content

A command-line app for downloading songs, podcasts and videos from Spotify.

Project description

Votify

PyPI version Python versions License Downloads

A command-line app for downloading songs, podcasts and videos from Spotify.

Join our Discord Server: https://discord.gg/aBjMEZ9tnq

✨ Features

  • 🎵 Songs — Download songs in AAC 128kbps, or AAC 256kbps with an active premium subscription.
  • 🎙️ Podcasts — Download podcasts in Vorbis or AAC.*
  • 🎬 Videos — Download podcast videos and music videos.
  • 🎤 Synced Lyrics — Download synced lyrics in LRC format.
  • 🧑‍🎤 Artist Support — Download an entire discography by providing the artist's URL.
  • ⚙️ Highly Customizable — Extensive configuration options for advanced users.

*Vorbis codecs are not available at the moment. Podcasts can only be downloaded in AAC format, even if a Vorbis quality is selected.

📋 Prerequisites

Required

[!WARNING] Some users have reported that Spotify suspended their accounts after using Votify. Use it at your own risk.

[!NOTE]

  • A .wvd file is not needed if you only plan to download podcasts. In this case, you can use the --no-drm flag to disable the .wvd file requirement.
  • FFmpeg can also be skipped when downloading podcasts in Vorbis codec.

Optional

Add these tools to your system PATH or specify their paths via command-line arguments or the config file:

  • MP4Box — Required when using mp4box as remux mode.
  • Shaka Packager — Required for webm video format and music video downloads.
  • mp4decrypt — Required when using mp4box or mp4decrypt as remux mode.
  • aria2c — Required when using aria2c as download mode.
  • cURL — Required for when using curl as download mode.

📦 Installation

  1. Install Votify via pip:

    pip install -y
    
  2. Set up the cookies file:

    • Place the cookies file in your working directory as cookies.txt, or
    • Specify its path using --cookies-path or in the config file.
  3. Set up the .wvd file:

    • Place it in your working directory as device.wvd, or
    • Specify its path using --wvd-path or in the config file.

🚀 Usage

votify [OPTIONS] URLS...

Supported URL types

  • Song
  • Album
  • Playlist
  • Podcast episode
  • Podcast series
  • Music video
  • Artist

Examples

Download a song:

votify "https://open.spotify.com/track/18gqCQzqYb0zvurQPlRkpo"

Download an album:

votify "https://open.spotify.com/album/0r8D5N674HbTXlR3zNxeU1"

Download a podcast episode:

votify "https://open.spotify.com/episode/3kwxWnzGH8T6UY2Nq582zx"

Download a podcast series:

votify "https://open.spotify.com/show/4rOoJ6Egrf8K2IrywzwOMk"

Download a music video:

votify "https://open.spotify.com/track/31k4hgHmrbzorLZMvMWuzq"

Download a music video from a song:

votify "https://open.spotify.com/track/18gqCQzqYb0zvurQPlRkpo" --prefer-video

Download a podcast video:

votify "https://open.spotify.com/episode/3kwxWnzGH8T6UY2Nq582zx" --prefer-video

Choose which media to download from an artist:

votify "https://open.spotify.com/artist/0gxyHStUsqpMadRV0Di1Qt"

Auto-select artist albums without a prompt:

votify "https://open.spotify.com/artist/0gxyHStUsqpMadRV0Di1Qt" --artist-media-option albums

Interactive prompt controls

Key Action
Arrow keys Move selection
Space Toggle selection
Ctrl + A Select all
Enter Confirm selection

⚙️ Configuration

Votify can be configured using command-line arguments or the config file.

Config file location:

  • Linux: ~/.votify/config.ini
  • Windows: %USERPROFILE%\.votify\config.ini

The file is created automatically on first run. Command-line arguments override config file values.

Configuration options

Command-line argument / Config file key Description Default
General
--wait-interval, -w / wait_interval Wait interval between downloads in seconds 10
--read-urls-as-txt, -r / - Interpret URLs as paths to text files containing URLs false
--config-path / - Path to config file <home>/.votify/config.ini
--log-level / log_level Log level INFO
--log-file / log_file Log file path null
--no-exceptions / no_exceptions Don't print exceptions false
--no-config-file, -n / - Do not use a config file false
Spotify
--cookies-path, -c / cookies_path Path to cookies file cookies.txt
--wvd-path / wvd_path Path to .wvd file device.wvd
--prefer-video / prefer_video Prefer video streams when available false
--no-drm / no_drm Don't allow DRM-protected media false
Output
--output, -o / output Path to output directory ./Spotify
--temp / temp Path to temporary directory .
--save-cover-file / save_cover_file Save cover as a separate file false
--save-playlist-file / save_playlist_file Save a M3U8 playlist file when downloading a playlist false
--overwrite / overwrite Overwrite existing files false
--cover-size / cover_size Cover size extra-large
--exclude-tags / exclude_tags Comma-separated tags to exclude null
--truncate / truncate Maximum length of file/folder names null
Template
--album-folder-template / album_folder_template Folder template for album tracks {album_artist}/{album}
--compilation-folder-template / compilation_folder_template Folder template for compilation tracks Compilations/{album}
--no-album-folder-template / no_album_folder_template Folder template for tracks not in an album {artist}/Unknown Album
--single-disc-file-template / single_disc_file_template File template for single-disc album tracks {track:02d} {title}
--multi-disc-file-template / multi_disc_file_template File template for multi-disc album tracks {disc}-{track:02d} {title}
--no-album-file-template / no_album_file_template File template for tracks not in an album {title}
--playlist-file-template / playlist_file_template File template for M3U8 playlists Playlists/{playlist_artist}/{playlist_title}
--date-tag-template / date_tag_template Date tag template %Y-%m-%dT%H:%M:%SZ
Song / Podcast
--audio-quality, -a / audio_quality Audio quality aac-medium
--audio-download-mode / audio_download_mode Download mode for songs and podcasts ytdlp
--audio-remux-mode / audio_remux_mode Remux mode for songs and podcasts ffmpeg
--synced-lyrics-only / synced_lyrics_only Download only the synced lyrics false
--no-synced-lyrics-file / no_synced_lyrics_file Don't download synced lyrics false
Video
--video-format / video_format Video format mp4
--video-resolution / video_resolution Video resolution 1080p
--video-remux-mode / video_remux_mode Remux mode for videos ffmpeg
Artist
--artist-media-option / artist_media_option Auto-select which media type to download from artist URLs null
Executables
--aria2c-path / aria2c_path Path to aria2c binary aria2c
--curl-path / curl_path Path to curl binary curl
--ffmpeg-path / ffmpeg_path Path to FFmpeg binary ffmpeg
--mp4box-path / mp4box_path Path to MP4Box binary mp4box
--mp4decrypt-path / mp4decrypt_path Path to mp4decrypt binary mp4decrypt
--shaka-packager-path / shaka_packager_path Path to Shaka Packager binary packager

Template variables

Tags usable in template folder/file options and in the exclude_tags list:

  • album, album_artist
  • artist
  • composer
  • date (supports strftime format: {date:%Y})
  • disc, disc_total
  • isrc
  • label
  • media_id
  • media_type
  • playlist_id, playlist_artist, playlist_title, playlist_track
  • producer, publisher
  • rating
  • title, track, track_total

Tags usable in the exclude_tags list only:

  • compilation, copyright, cover
  • description
  • lyrics
  • url

Cover sizes

  • small - Up to 64px
  • medium - Up to 300px
  • large - Up to 640px
  • extra-large - Up to 2000px

Audio qualities

  • aac-medium - AAC 128kbps
  • aac-high - AAC 256kbps, requires an active premium subscription
  • vorbis-low - Vorbis 96kbps, podcasts only
  • vorbis-medium - Vorbis 160kbps, podcasts only
  • vorbis-high - Vorbis 320kbps, podcasts only, requires an active premium subscription

Video formats

  • mp4 - H.264 up to 1080p with AAC 128kbps
  • webm - VP9 up to 1080p with Opus 160kbps
  • ask - Prompt to choose available video and audio codecs

Download modes

  • ytdlp - Default download mode
  • aria2c - Faster alternative
  • curl - Alternative using curl

Video remux modes

  • ffmpeg
  • mp4box

Audio remux modes

  • ffmpeg
  • mp4box
  • mp4decrypt

Video resolutions

  • 144p, 240p, 360p, 480p, 576p, 720p, 1080p

Artist media options

  • albums - Auto-select albums
  • compilations - Auto-select compilations
  • singles - Auto-select singles
  • videos - Auto-select music videos

Log levels

  • DEBUG, INFO, WARNING, ERROR

📄 License

MIT License — see the LICENSE file for details.

🤝 Contributing

I'm generally not reviewing pull requests that change or add features at this time. Only critical bug fixes will be considered. Feel free to open issues for bugs or feature requests.

🙏 Credits

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

votify-1.6.1.tar.gz (42.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

votify-1.6.1-py3-none-any.whl (50.1 kB view details)

Uploaded Python 3

File details

Details for the file votify-1.6.1.tar.gz.

File metadata

  • Download URL: votify-1.6.1.tar.gz
  • Upload date:
  • Size: 42.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for votify-1.6.1.tar.gz
Algorithm Hash digest
SHA256 6ee5f9d3dde0747004a870a0abfd2169767c79628cef545bf1237c21608444d9
MD5 cf925eb501b40bdd31e7864adaea17c1
BLAKE2b-256 61647fe222d0d61d8fbcf649b6d60bbf69e5410bd50937fb452549f63929aed4

See more details on using hashes here.

Provenance

The following attestation bundles were made for votify-1.6.1.tar.gz:

Publisher: python-publish.yml on glomatico/votify

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file votify-1.6.1-py3-none-any.whl.

File metadata

  • Download URL: votify-1.6.1-py3-none-any.whl
  • Upload date:
  • Size: 50.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for votify-1.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0d80040839887bdb9db2a06ed15d85c803327b0433f2cb2cde9b42673bca8363
MD5 bdcdb5d642a341729699de17643b60f7
BLAKE2b-256 6d512560813a799418723ae8aecacd0386f232d5a9c4e186c134c199d46b8187

See more details on using hashes here.

Provenance

The following attestation bundles were made for votify-1.6.1-py3-none-any.whl:

Publisher: python-publish.yml on glomatico/votify

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page