Command Line Interface version of SpotiFLAC.
Basic usage:
python3 SpotiFLAC.py [options] <spotify-url> <output_dir>Options
--service:tidal(default) ordeezer.--filename-format:title_artist(default),artist_title,title_only.--use-track-numbers: Prepend track numbers for albums/playlists.--use-artist-subfolders: Create artist subfolders for playlists.--use-album-subfolders: Create album subfolders for playlists.--quality:lossless(FLAC) orhigh(320kbps MP3/M4A).--loop <minutes>: Re-run downloads in a loop.
New / Useful options added in this fork
--tidal-api <url>: Use a specific Tidal proxy API instance (e.g.https://vogel.qqdl.site).--auto-fallback: When enabled, the downloader will try other known API instances automatically if the selected API returns HTTP 429 or fails.--verbose: Enable more detailed output for debugging (colored logs are used).
Download a single track (lossless) to a folder:
python3 SpotiFLAC.py --service tidal --quality lossless "https://open.spotify.com/track/..." /path/to/outDownload a playlist with a preferred Tidal API and auto-fallback enabled, minimal output:
python3 SpotiFLAC.py --service tidal --quality high --tidal-api https://vogel.qqdl.site --auto-fallback "https://open.spotify.com/playlist/..." /path/to/outVerbose output (colors + info/debug):
python3 SpotiFLAC.py --verbose --service tidal --quality high "https://open.spotify.com/track/..." /path/to/outWhen running multiple SpotiFLAC.py invocations from a shell loop reading from a file, avoid piping cat list | while read ... — a child process may consume stdin and cause the loop to stop after one iteration. Use this safe form instead:
xargs -d '\n' -I {} python3 SpotiFLAC.py \
--service tidal --quality high "{}" \
'/destination/' \
--filename-format title_only --auto-fallback < /dev/null \
< list.txtNotes about rate-limits (HTTP 429)
- Many public Tidal proxy APIs have strict rate limits. Use
--tidal-apito point at a less-used instance, or enable--auto-fallbackto try multiple instances automatically. - Adding a short delay between downloads (e.g.
sleep 1) helps reduce hitting rate limits.
- This fork fixes an issue where renaming/moving downloaded files across different filesystems (e.g., WSL -> Windows paths) would leave the original file behind. The tool now tries an atomic
os.replace()and falls back toshutil.move()to ensure the original is removed.
- Output is colorized for Success/Warning/Error messages. Use
--verboseto enable info/debug messages which are otherwise suppressed. - If your terminal does not support ANSI colors, you can disable colors by setting the environment variable
NO_COLOR=1when running the script.
- Python 3.8+
requestsmutagenpyotp(for Spotify metadata access)ffmpeg(only required if converting M4A -> MP3)
Install dependencies (example using pip):
pip install -r requirements.txt --break-system-packages
# or
pip install requests mutagen pyotp --break-system-packages- If you see a lot of HTTP 429 responses, try
--auto-fallbackor provide a different--tidal-apiURL. - If renaming fails across filesystems, ensure
ffmpegor required tools are installed and you have write permissions to both source and target paths.