Turns a YouTube DJ set or concert into a tagged, gapless album in Apple Music. Paste a link, review the tracklist, click Download — everything runs on your own Mac.
Go to Releases and download the latest .dmg.
Everything the app needs — the media engine, ffmpeg, yt-dlp — ships inside it. There is nothing else to install.
- Paste a YouTube URL and get a finished album: best-quality audio, encoded to Apple-Music-native ALAC (or AAC 256), tagged, with a square cover.
- Finds the tracklist for you — YouTube chapters, description timestamps, or 1001tracklists — and cuts the set into per-track files losslessly at the cue points.
- Review before anything is written: edit title, artist, album, year, genre, and every cue; preview any cue in the embedded player.
- Change your mind later: Edit Set on any finished set fixes titles or cues and replaces the files — the encoded master is cached, so a re-run skips the download.
- Add to Apple Music in one click when the set is done; files import as a single gapless album.
- Remembers every set in a Recent sidebar; one set is produced at a time, with live download speed, ETA and per-track status.
- No account, no API key. Nothing to sign up for or paste in; the app is complete as downloaded.
- Runs from the menu bar. Nothing leaves your Mac except the requests to YouTube and 1001tracklists.
- Completely free and open source.
- Download the app and open the
.dmg. - Drag Setlist into your Applications folder.
- Open it. macOS will say it "could not verify" the app, because Setlist is a free project without an Apple Developer ID. Click Done, then go to System Settings » Privacy & Security, scroll down and click Open Anyway (or right-click the app » Open). You only do this once.
- Paste a YouTube URL and click Resolve.
- Check the metadata and tracklist, then click Download.
- When it's done, click Add to Apple Music. The first time, macOS asks whether Setlist may control Music — that permission is what performs the import.
- Spotted a wrong title afterwards? Pick the set in Recent, click Edit Set, fix it, then Replace Files. Old files go to the Trash, never straight to deletion.
- Open Settings… (
⌘,) to pick the output folder (default~/Music/YouTube Sets) or switch to AAC. That's all there is to configure.
| Setlist version | macOS version |
|---|---|
| v0.1.0 – v0.1.1 | Tahoe 26 or newer, Apple Silicon |
Setlist downloads audio from YouTube on your Mac for your own library, the same way yt-dlp does. Whether that's allowed for a given video depends on your local law and the rights of the video's owner. The app is a tool; how you use it is up to you.
Issues and pull requests are welcome. Before a large change, open an issue first so we can talk it through.
- Xcode 27 / Swift 6.2
- uv (
brew install uv) — fetches the CPython that gets bundled - Python 3.11+ and
ffmpegonly if you want to run the engine from source (./run.sh)
git clone https://github.com/JanOstrowka/setlist.git
cd setlist
./scripts/build_macos_app.sh # → dist/Setlist.app
./scripts/build_dmg.sh # → dist/Setlist-<version>-arm64.dmgThe build bundles a relocatable Python, the backend, and static ffmpeg/ffprobe into the .app and signs it ad-hoc. Configuration keys, the web UI, tests, and the output layout are described in docs/development.md.
- yt-dlp — download
- FFmpeg — encode, split, cover art; static macOS builds by Martin Riedl
- mutagen — MP4 tagging
- FastAPI + uvicorn — the local engine API
- Pillow, httpx, pydantic, python-dotenv
- python-build-standalone via
uv— the bundled interpreter
- @JanOstrowka — author
- README layout borrowed from MonitorControl

