New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

votify

Package Overview
Dependencies
Maintainers
1
Versions
42
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

votify

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

pipPyPI
Version
1.9.4
Maintainers
1

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.
  • 🎙️ Podcasts - Download podcasts.
  • 🎬 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.

📋 Prerequisites

Required

  • Python 3.10 or higher
  • Spotify cookies - Export your browser cookies in Netscape format while logged in at the Spotify homepage:

[!WARNING]

  • Some users have reported that Spotify suspended their accounts after using Votify. Use it at your own risk.
  • You may not be able to download songs with default settings if your account is too new. In this case, refer to the Dependencies section for alternative configurations that may support new accounts.

Dependencies

Add these tools to your system PATH or specify their paths via command-line arguments or the config file. The tools needed depend on which audio quality, video format, and download speed you want. Use the table below to find the required tools for your use case:

FeatureConfigurationRequired Tools
Songs in Vorbis (default)audio_quality: vorbis-low|vorbis-medium|vorbis-high
session_type: librespot
None
audio_quality: vorbis-low|vorbis-medium|vorbis-high
session_type: desktop
Spotify DLL
Songs in AAC Qualityaudio_quality: aac-medium|aac-high
session_type: librespot|web
audio_remux_mode: ffmpeg
.wvd file
FFmpeg
audio_quality: aac-medium|aac-high
session_type: librespot|web
audio_remux_mode: mp4box
.wvd file
MP4Box
mp4decrypt
audio_quality: aac-medium|aac-high
session_type: librespot|web
audio_remux_mode: mp4decrypt
.wvd file
mp4decrypt
Songs in FLAC Qualityaudio_quality: flac-mp4|flac-mp4-24
session_type: librespot|web
audio_remux_mode: ffmpeg
L1-certified .wvd file
FFmpeg
audio_quality: flac-flac|flac-flac-24
session_type: desktop
Spotify DLL
Podcasts in Vorbisaudio_quality: vorbis-low|vorbis-medium|vorbis-highNone
Podcasts in AAC Qualityaudio_quality: aac-medium|aac-high
audio_remux_mode: ffmpeg
FFmpeg
audio_quality: aac-medium|aac-high
audio_remux_mode: mp4box
MP4Box
mp4decrypt
audio_quality: aac-medium|aac-high
audio_remux_mode: mp4decrypt
mp4decrypt
Music Videossession_type: librespot|web
video_format: mp4
video_remux_mode: ffmpeg
.wvd file
FFmpeg
mp4decrypt
session_type: librespot|web
video_format: mp4
video_remux_mode: mp4box
.wvd file
MP4Box
mp4decrypt
session_type: librespot|web
video_format: webm
video_remux_mode: ffmpeg
.wvd file
FFmpeg
Shaka Packager
session_type: librespot|web
video_format: webm
video_remux_mode: mp4box
.wvd file
MP4Box
Shaka Packager
Podcast Videosprefer_video: true
video_remux_mode: ffmpeg
FFmpeg
prefer_video: true
video_remux_mode: mp4box
MP4Box
Faster Downloadsaudio_download_mode: aria2caria2c
audio_download_mode: curlcURL

Reference

ToolDownloadNotes
.wvd fileExtract using KeyDiveRequired for AAC/FLAC quality. L1-certified required for FLAC. Extract from Android device (emulator files may not work)
Spotify DLLExtract from the Spotify for Windows desktop app version 1.2.85.519 inside its installation directory (Spotify.dll)Required for desktop session
FFmpegWindows / LinuxUsed for audio/video remuxing and conversion
MP4BoxDownloadAlternative for audio/video remuxing
mp4decryptDownloadDecrypts MP4 files when used with MP4Box
Shaka PackagerDownloadDecrypts WebM video files
aria2cDownloadFaster download alternative
cURLDownloadDownload alternative

📦 Installation

  • Install Votify via pip:

    pip install votify[librespot]
    
  • 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.

[!NOTE]

  • The 'librespot' extra is required when session_type is set to librespot. If you want to use the desktop or web session types, the extra is not required and you can install the package with pip install votify instead.

🚀 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" --auto-media-option albums

Download liked tracks:

votify --auto-media-option liked-tracks

Interactive prompt controls

KeyAction
Arrow keysMove selection
SpaceToggle selection
Ctrl + ASelect all
EnterConfirm 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 keyDescriptionDefault
General
--wait-interval / wait_intervalWait interval between downloads in seconds10
--read-urls-as-txt, -r / -Read URLs from text filesfalse
--config-path / -Config file path<home>/.votify/config.ini
--log-level / log_levelLogging levelINFO
--log-file / log_fileLog file pathnull
--no-exceptions / no_exceptionsDon't print exceptionsfalse
--no-config-file, -n / -Don't use a config filefalse
--database-path / database_pathPath to the SQLite database file for registering downloaded medianull
--auto-media-option / auto_media_optionAuto media optionnull
Spotify
--session-type / session_typeSession type to uselibrespot
--cookies-path, -c / cookies_pathCookies file path./cookies.txt
--wvd-path / wvd_path.wvd file pathnull
--spotify-dll-path / spotify_dll_pathSpotify DLL file path for desktop session decryptionnull
--prefer-video / prefer_videoPrefer video streams when availablefalse
Output
--output, -o / outputOutput directory path./Spotify
--temp / tempTemporary directory path.
--save-cover-file / save_cover_fileSave cover as a separate filefalse
--save-playlist-file / save_playlist_fileSave a M3U8 playlist file when downloading a playlistfalse
--overwrite / overwriteOverwrite existing filesfalse
--cover-size / cover_sizeCover size to useextra-large
--exclude-tags / exclude_tagsComma-separated tags to excludenull
--truncate / truncateMaximum length of file/folder namesnull
Template
--album-folder-template / album_folder_templateFolder template for album tracks{album_artist}/{album}
--compilation-folder-template / compilation_folder_templateFolder template for compilation tracksCompilations/{album}
--podcast-folder-template / podcast_folder_templateFolder template for podcast episodesPodcasts/{album}
--no-album-folder-template / no_album_folder_templateFolder template for tracks not in an album{artist}/Unknown Album
--single-disc-file-template / single_disc_file_templateFile template for single-disc album tracks{track:02d} {title}
--multi-disc-file-template / multi_disc_file_templateFile template for multi-disc album tracks{disc}-{track:02d} {title}
--podcast-file-template / podcast_file_templateFile template for podcast episodes{track:02d} {title}
--no-album-file-template / no_album_file_templateFile template for tracks not in an album{title}
--playlist-file-template / playlist_file_templateFile template for M3U8 playlistsPlaylists/{playlist_artist}/{playlist_title}
--date-tag-template / date_tag_templateDate tag template%Y-%m-%dT%H:%M:%SZ
Song / Podcast
--audio-quality / audio_qualityComma-separated audio quality priorityvorbis-medium
--audio-download-mode / audio_download_modeAudio download mode to useytdlp
--audio-remux-mode / audio_remux_modeAudio remux mode to useffmpeg
--synced-lyrics-only / synced_lyrics_onlyOnly download synced lyrics filefalse
--no-synced-lyrics-file / no_synced_lyrics_fileDon't create synced lyrics filefalse
Video
--video-format / video_formatVideo format to usemp4
--video-resolution / video_resolutionVideo resolution to use1080p
--video-remux-mode / video_remux_modeVideo remux mode to useffmpeg
Executables
--aria2c-path / aria2c_pathPath to aria2c binaryaria2c
--curl-path / curl_pathPath to curl binarycurl
--ffmpeg-path / ffmpeg_pathPath to FFmpeg binaryffmpeg
--mp4box-path / mp4box_pathPath to MP4Box binarymp4box
--mp4decrypt-path / mp4decrypt_pathPath to mp4decrypt binarymp4decrypt
--shaka-packager-path / shaka_packager_pathPath to Shaka Packager binarypackager

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

  • vorbis-low - Vorbis 96kbps
  • vorbis-medium - Vorbis 160kbps, songs only
  • vorbis-high - Vorbis 320kbps, songs only, requires an active premium subscription
  • aac-medium - AAC 128kbps, .wvd file required for songs
  • aac-high - AAC 256kbps, songs only, .wvd required, requires an active premium subscription
  • flac-flac - FLAC lossless (native), songs only, Spotify DLL required, requires an active premium subscription
  • flac-flac-24 - FLAC 24-bit (native), songs only, Spotify DLL required, requires an active premium subscription
  • flac-mp4 - FLAC lossless in MP4 container, songs only, L1-certified .wvd file required, requires an active premium subscription
  • flac-mp4-24 - FLAC 24-bit in MP4 container, songs only, L1-certified .wvd file required, requires an active premium subscription

[!NOTE]

  • L1-certified .wvd file is required for flac-mp4 and flac-mp4-24 qualities.
  • Spotify DLL is required for flac-flac and flac-flac-24 qualities (desktop session only).

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

Session types

  • librespot - Librespot session (for Vorbis quality with web support)
  • desktop - Spotify desktop session (for Vorbis and FLAC quality)
  • web - Spotify web session (for AAC quality and videos)

Download modes

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

[!NOTE]

  • yt-dlp is only used as a file download library. Tracks are still fetched directly from Spotify's servers, and yt-dlp is only responsible for handling the file download process.

Video remux modes

  • ffmpeg
  • mp4box

Audio remux modes

  • ffmpeg
  • mp4box
  • mp4decrypt

[!NOTE] Audio remux modes only apply for AAC qualities.

Video resolutions

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

Auto media options

  • artist-top-tracks - Auto-select artist top tracks
  • artist-albums - Auto-select albums
  • artist-compilations - Auto-select compilations
  • artist-singles - Auto-select singles
  • artist-videos - Auto-select music videos
  • liked-tracks - Auto-select liked tracks (URL not required)

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

FAQs

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts