Polished Apple Music playlist downloader stack with:
gamdl-downloader(scheduled sync loop)gamdl-webui(playlist + settings + cookie upload UI)- default downloader mode set to N_m3u8DL-RE
- automatic in-container tool updates (gamdl + N_m3u8DL-RE)
-
N_m3u8DL-RE default mode
DOWNLOAD_MODE=nm3u8dlreis the default in settings and runtime env.- Entry point passes
--download-mode nm3u8dlrewhen supported by installedgamdl.
-
Automatic updates
- Downloader container auto-updates tools on interval:
AUTO_UPDATE=trueAUTO_UPDATE_INTERVAL=86400(24h)
- Optional Watchtower service is included behind profile
updates.
- Downloader container auto-updates tools on interval:
-
Persistent cookie upload
- WebUI accepts Netscape cookie uploads.
- Uploaded cookie file is persisted to both:
config/music.apple.com_cookies.txtconfig/cookies.txt
- Downloader reads
config/cookies.txt, with automatic mirror fallback frommusic.apple.com_cookies.txt.
-
Playlist m3u export location
- Playlist files are moved into
/playlistsunder the music output folder. - Default path:
PLAYLIST_M3U_DIR=/data/music/playlists.
- Playlist files are moved into
-
Theme mode toggle
- Web UI includes Light, Dark, and System appearance modes.
From this folder (Github/):
cp .env.example .env
docker compose up -d --buildOpen:
- Web UI:
http://localhost:3000
Stop:
docker compose downdocker compose --profile updates up -dThis only updates pullable tagged images (gamdl-downloader:latest, gamdl-webui:latest) when they are available.
- Open Settings tab.
- Upload your Netscape
cookies.txtexport. - Verify status badge shows cookie file loaded.
Place your cookie file at either path:
config/music.apple.com_cookies.txt(preferred)config/cookies.txt
Add playlist URLs from the UI, or edit:
config/playlists.txt
One URL per line. # comments are allowed.
If no playlists are configured, downloader stays alive and retries every 60s.
FREQUENCY=3600OUTPUT_LOCATION=/data/musicPLAYLIST_M3U_DIR=/data/music/playlistsDOWNLOAD_MODE=nm3u8dlreAUTO_UPDATE=trueAUTO_UPDATE_INTERVAL=86400TZ=America/New_York
GET/POST /api/settingsGET/POST/DELETE /api/playlistsPOST /api/download(restarts downloader container to trigger immediate cycle)GET/POST /api/cookies
This same folder is server-ready. After syncing to server:
docker compose up -d --buildFor remote host permission issues, run docker commands with sudo.