Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UPAC

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

Quick Start

To get a local copy:

git clone https://github.com/aaroncapron/upac.git
cd upac

Then follow the setup steps below for the Flutter app or the Python prototype.

What it does

  • 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

Architecture overview

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
Loading

Project structure

Requirements

Flutter app

  • Flutter SDK installed and on your PATH
  • a desktop target available for your OS
  • yt-dlp available in PATH
  • ffmpeg installed

Python script

  • Python 3
  • yt-dlp installed
  • ffmpeg installed

Typical setup on Linux:

sudo apt update
sudo apt install ffmpeg
pip3 install yt-dlp

Running the Flutter app

cd universal_playlist_converter
flutter pub get
flutter run -d linux

Use 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

Running the Python prototype

From the repository root:

python3 spotify_downloader.py

This reads playlist.csv and writes files into the downloads folder.

Notes

  • 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.

License

This repository is intended for personal use and local experimentation.

About

UPAC is a state-driven media downloader built with Dart and Flutter, adhering to the "UI = f(state)" paradigm. It features a decoupled architecture that separates core domain logic from the visual layer, ensuring high cohesion through formal UML modeling and executable evidence provided by specification-derived unit tests.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages