A Python CLI app for downloading songs/podcasts/videos from Spotify.
Discord Server: https://discord.gg/aBjMEZ9tnq
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
as remux mode and when setting mp4
or webm
as video format.mp4box
as remux mode.webm
as video format and for downloading music videos.mp4box
or mp4decrypt
as remux mode.aria2c
as download mode.aac
as audio quality or when downloading music videos.votify
using pip
pip install votify
cookies.txt
or specify its path using the command-line arguments/config file.votify [OPTIONS] URLS...
Votify supports the following types of URLs:
votify "https://open.spotify.com/track/18gqCQzqYb0zvurQPlRkpo"
votify "https://open.spotify.com/album/0r8D5N674HbTXlR3zNxeU1"
votify "https://open.spotify.com/episode/3kwxWnzGH8T6UY2Nq582zx"
votify "https://open.spotify.com/show/4rOoJ6Egrf8K2IrywzwOMk"
votify "https://open.spotify.com/track/31k4hgHmrbzorLZMvMWuzq" --enable-videos
votify "https://open.spotify.com/track/0a0n6u6j3t6m0p4k0t0k0u0" --enable-videos --download-music-videos
votify "https://open.spotify.com/episode/3kwxWnzGH8T6UY2Nq582zx" --enable-videos --download-podcast-videos
votify "https://open.spotify.com/artist/0gxyHStUsqpMadRV0Di1Qt"
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%.votifyconfig.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. |
|
--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 |
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
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)The following video formats are available:
mp4
webm
ask
The following modes are available:
ytdlp
aria2c
ytdlp
The following remux modes for videos are available:
ffmpeg
mp4box
The following remux modes for songs and podcasts are available when downloading in AAC quality:
ffmpeg
mp4box
mp4decrypt