UPAC is a small desktop-oriented project for turning a Spotify-style CSV playlist into MP3 files. The repository contains:
- a Flutter desktop app in universal_playlist_converter for importing a CSV, downloading tracks, and tracking progress
- a simpler Python prototype in spotify_downloader.py that reads the CSV explicitly titled "playlist.csv" and downloads songs with yt-dlp
To get a local copy:
git clone https://github.com/aaroncapron/upac.git
cd upacThen follow the setup steps below for the Flutter app or the Python prototype.
- reads a playlist export from CSV
- sanitizes track, artist, and album names for file-safe output
- searches YouTube via yt-dlp
- downloads audio as MP3 files
- saves files into a local download folder
flowchart LR
User[User] --> Screen[CSV Converter Screen]
Screen --> Processor[Media Processor]
Processor --> Models[Track / Playlist Models]
Processor --> Runner[yt-dlp Runner]
Runner --> YtDlp[yt-dlp]
YtDlp --> Ffmpeg[ffmpeg]
YtDlp --> Downloads[Downloads Folder]
Python[Python Prototype] --> YtDlp
- playlist.csv — sample playlist input
- spotify_downloader.py — Python downloader prototype
- universal_playlist_converter — Flutter desktop application
- universal_playlist_converter/lib — app logic and UI
- universal_playlist_converter/test — regression tests
- Flutter SDK installed and on your PATH
- a desktop target available for your OS
- yt-dlp available in PATH
- ffmpeg installed
- Python 3
- yt-dlp installed
- ffmpeg installed
Typical setup on Linux:
sudo apt update
sudo apt install ffmpeg
pip3 install yt-dlpcd universal_playlist_converter
flutter pub get
flutter run -d linuxUse the app to pick a CSV file, then start the download flow. The desktop app saves downloaded files to:
- Linux/macOS: ~/Downloads/universal_playlist_converter
- Windows: %USERPROFILE%\Downloads\universal_playlist_converter
From the repository root:
python3 spotify_downloader.pyThis reads playlist.csv and writes files into the downloads folder.
- The downloader depends on YouTube availability and yt-dlp compatibility.
- Some tracks may fail depending on region, availability, or YouTube restrictions.
- The Flutter app includes retry and cancellation handling for a smoother experience.
This repository is intended for personal use and local experimentation.