A tiny desktop app that reads a Spotify playlist CSV and downloads each track as MP3.
It searches the track on YouTube (via yt-dlp), downloads best audio, and silently converts to .mp3 using ffmpeg from imageio-ffmpeg (no PATH needed, no console windows).
- CSV in → MP3 out (YouTube as the audio source)
- No ffmpeg on PATH required (bundled through
imageio-ffmpeg) - Silent conversion (no pop-up consoles)
- Multiprocessing: download/convert multiple tracks in parallel
- Unicode-safe: Cyrillic, CJK (Chinese/Japanese/Korean), accents, emoji in names
- Optional metadata embedding (cover/tags)
Export your Spotify playlist to CSV using Exportify (web tool for exporting Spotify playlists).
The CSV typically includes columns like Track Name, Artist, Album, and Duration (ms).
Only
Track NameandArtistare strictly required.Duration (ms)is optional but helps match the correct video.
pip install PyQt6 yt-dlp imageio-ffmpeg
imageio-ffmpegdownloads a compatible ffmpeg binary automatically the first time.
python main.pySteps:
- Choose your Spotify CSV.
- Select the output folder.
- Optionally tick “Embed metadata & cover”.
- Click “Start”.
pip install pyinstaller
pyinstaller --noconfirm --onefile --windowed --name SpotCSV2MP3 --collect-data imageio_ffmpeg main.py
or
pyinstaller --noconfirm --onefile --windowed --name SpotCSV2MP3 --collect-all imageio_ffmpeg --collect-all yt_dlp main.pyThe build works standalone — ffmpeg is auto-provided by imageio-ffmpeg.
- Parses the CSV into track objects.
- Searches YouTube for
artist - title. - Downloads best audio.
- Converts to MP3 silently.
- Optionally embeds metadata.
- Saves
Artist - Title.mp3.
- Multiprocess: up to 4 workers.
- Unicode-safe filenames.
- Duration matching helps accuracy.
- Silent ffmpeg (no popups).
.webminstead of.mp3: conversion failed → reinstallimageio-ffmpeg.NoneTypeerrors: yt-dlp couldn’t find results → try again later.- Broken characters: ensure CSV is UTF-8 (Exportify uses UTF-8).
This project does not download from Spotify — it uses YouTube as a source based on track names Use responsibly according to YouTube’s Terms of Service.
- PyQt6 GUI
- yt-dlp downloader
- imageio-ffmpeg backend
- multiprocessing
- Unicode-safe filename sanitizer
Happy listening! 🎧