Skip to main content

A Python CLI app for downloading songs/podcasts from Spotify.

Project description

Votify

A Python CLI app for downloading songs/podcasts/videos from Spotify.

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

Features

  • Download songs and podcasts in Vorbis or AAC
  • Download podcast videos
  • Download music videos with a premium account
  • Support for artist links to download all of their albums
  • Download synced lyrics
  • Highly configurable

Prerequisites

Optional dependencies

The following tools are optional but required for specific features. Add them to your system’s PATH or specify their paths using command-line arguments or the config file.

  • FFmpeg
    • Used when setting ffmpeg as remux mode.
    • Used when setting mp4 or webm as video format.
  • MP4Box
    • Used when setting mp4box as remux mode.
  • Shaka Packager
    • Used when setting webm as video format and when downloading music videos.
  • mp4decrypt
    • Used when setting mp4box or mp4decrypt as remux mode.
  • aria2c
    • Used when setting aria2c as download mode.
  • .wvd file
    • Used when setting aac as audio quality or when downloading music videos.
    • A .wvd file contains the Widevine keys from a device and is required to decrypt music videos and songs in AAC. The easiest method of obtaining one is using KeyDive, which extracts it from an Android device. Detailed instructions can be found here: https://github.com/hyugogirubato/KeyDive.
    • Note: .wvd files extracted from emulated devices may not work.

Installation

  1. Install the package votify using pip
    pip install votify
    
  2. Set up the cookies file.
    • You can either move to the current directory from which you will be running Votify as cookies.txt or specify its path using the command-line arguments/config file.

Usage

votify [OPTIONS] URLS...

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" --enable-videos
    
  • List and select a related music video to download from a song
    votify "https://open.spotify.com/track/0a0n6u6j3t6m0p4k0t0k0u0" --enable-videos --download-music-videos
    
  • Download a podcast video
    votify "https://open.spotify.com/episode/3kwxWnzGH8T6UY2Nq582zx" --enable-videos --download-podcast-videos
    
  • Choose which albums to download from an artist
    votify "https://open.spotify.com/artist/0gxyHStUsqpMadRV0Di1Qt"
    

Interactive prompt controls

  • Arrow keys - Move selection
  • Space - Toggle selection
  • Ctrl + A - Select all
  • Enter - Confirm selection

Configuration

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

The config file is created automatically when you run Votify for the first time at ~/.votify/config.json on Linux and %USERPROFILE%\.votify\config.json on Windows.

Config file values can be overridden using command-line arguments.

Command-line argument / Config file key Description Default value
--wait-interval, -w / wait_interval Wait interval between downloads in seconds. 5
--enable-videos / enable_videos Enable video downloads when available. false
--download-music-videos / download_music_videos List and select a related music video to download from songs. false
--download-podcast-videos / download_podcast_videos Attempt to download the video version of podcasts. false
--force-premium, -f / force_premium Force to detect the account as premium. false
--read-urls-as-txt, -r / - Interpret URLs as paths to text files containing URLs. false
--config-path / - Path to config file. <home>/.spotify-web-downloader/config.json
--log-level / log_level Log level. INFO
--no-exceptions / no_exceptions Don't print exceptions. false
--cookies-path / cookies_path Path to cookies file. cookies.txt
--output-path, -o / output_path Path to output directory. Spotify
--temp-path / temp_path Path to temporary directory. temp
--wvd-path / wvd_path Path to .wvd file. device.wvd
--aria2c-path / aria2c_path Path to aria2c binary. aria2c
--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
--packager-path / packager_path Path to Shaka Packager binary. packager
--template-folder-album / template_folder_album Template folder for tracks that are part of an album. {album_artist}/{album}
--template-folder-compilation / template_folder_compilation Template folder for tracks that are part of a compilation album. Compilations/{album}
--template-file-single-disc / template_file_single_disc Template file for the tracks that are part of a single-disc album. {track:02d} {title}
--template-file-multi-disc / template_file_multi_disc Template file for the tracks that are part of a multi-disc album. {disc}-{track:02d} {title}
--template-folder-episode / template_folder_episode Template folder for episodes (podcasts). Podcasts/{album}
--template-file-episode / template_file_episode Template file for music videos. {track:02d} {title}
--template-folder-music-video / template_folder_music_video Template folder for music videos {artist}/Unknown Album
--template-file-music-video / template_file_music_video Template file for the tracks that are not part of an album. {title}
--template-file-playlist / template_file_playlist Template file for the M3U8 playlist. Playlists/{playlist_artist}/{playlist_title}
--date-tag-template / date_tag_template Date tag template. %Y-%m-%dT%H:%M:%SZ
--save-cover / save_cover Save cover as a separate file. false
--save-playlist / save_playlist Save a M3U8 playlist file when downloading a playlist. false
--overwrite / overwrite Overwrite existing files. false
--exclude-tags / exclude_tags Comma-separated tags to exclude. null
--truncate / truncate Maximum length of the file/folder names. null
--audio-quality, -a / audio_quality Audio quality for songs and podcasts. vorbis-medium
--download-mode, -d / download_mode Download mode for songs and podcasts. ytdlp
--remux-mode-audio / remux_mode_audio Remux mode for songs and podcasts. ffmpeg
--lrc-only, -l / lrc_only Download only the synced lyrics. false
--no-lrc / no_lrc Don't download the synced lyrics. false
--video-format / video_format Video format. mp4
--remux-mode-video / remux_mode_video Remux mode for videos. ffmpeg
--no-config-file, -n / - Do not use a config file. false

Tag variables

The following variables can be used in the template folder/file and/or in the exclude_tags list:

  • album
  • album_artist
  • artist
  • compilation
  • composer
  • copyright
  • cover
  • disc
  • disc_total
  • isrc
  • label
  • lyrics
  • media_type
  • playlist_artist
  • playlist_title
  • playlist_track
  • publisher
  • producer
  • rating
  • release_date
  • release_year
  • title
  • track
  • track_total
  • url

Audio qualities

The following qualities are available:

  • vorbis-high (320kbps, requires an active premium subscription)
  • vorbis-medium (160kbps)
  • vorbis-low (96kbps)
  • aac-medium (128kbps)
  • aac-high (256kbps, requires an active premium subscription)

Video formats

The following video formats are available:

  • mp4
  • webm
  • ask
    • When using this option, Votify will ask you which audio and video codec to use that is available for the video.

Download modes

The following modes are available:

  • ytdlp
  • aria2c
    • Will not be used for downloading videos
    • Faster than ytdlp

Video remux modes

The following remux modes for videos are available:

  • ffmpeg
  • mp4box

Audio remux modes

The following remux modes for songs and podcasts are available when downloading in AAC quality:

  • ffmpeg
  • mp4box
  • mp4decrypt

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.4.tar.gz (29.4 kB view details)

Uploaded Source

Built Distribution

votify-1.4-py3-none-any.whl (33.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: votify-1.4.tar.gz
  • Upload date:
  • Size: 29.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.32.3

File hashes

Hashes for votify-1.4.tar.gz
Algorithm Hash digest
SHA256 b03e71e4a4774ebb2dd1ddf07cc8df733724d2b857e7cb50d7c91fabf4f14aab
MD5 db4b894864ebb7bd4bbc5d163c235448
BLAKE2b-256 f81ec473021d669435a9d7d68ea53f5a00e9cfd327f134e95b5cbe72c119e6b0

See more details on using hashes here.

File details

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

File metadata

  • Download URL: votify-1.4-py3-none-any.whl
  • Upload date:
  • Size: 33.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.32.3

File hashes

Hashes for votify-1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 594a6735505d6f4c383c8aa18a381952daf11d747e65461c8efcbbcd0d5ed5f5
MD5 4a1b79e66c69e2d794e328b2e70dc7e1
BLAKE2b-256 5f165b68099b528be885b1f61164ab6f19b627cb2677ea7f7c8b8ee02d38e9e6

See more details on using hashes here.

Supported by

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