multidl-cli
v0.4.1
Published

Readme
🎧 multidl
Universal Audio Downloader
Made by lunar0x4
multidl is a fast, clean, multi‑platform CLI tool for downloading non‑DRM audio tracks from supported platforms.
Note: Files are stored in the same directory of where you are running multidl.
Currently supports:
- SoundCloud (GraphQL + API‑v2 + HLS → MP3)
- Audio.com (JSON‑LD extraction via headless Chrome)
- Audiomack (HTML track‑ID extraction → API → direct audio URL) (Ad Bypass)
- Bandcamp (Embedded
data-tralbumJSON → direct MP3/FLAC stream URL) - Hearthis (Direct /listen/ endpoint → MP3 stream → FFmpeg copy)
- ReverbNation (HTML‑embedded JSON → CloudFront MP3 URL → FFmpeg copy)
- Archive.org (Direct
/serve/<identifier>/<file>URLs → single tracks + full playlists) - Jamendo (HTML Fetch → MP3 URL)
More platforms coming soon.
🚀 Features
- 🔗 Auto‑detects platform from URL
- 🧼 Clean CLI output (no debug spam)
- 🎨 Colorized UI + progress steps
- 🔐 Saves SoundCloud OAuth token locally
- 🖥️ Puppeteer browser automation to bypass bot protection
- 🛠 Works on Windows, macOS, Linux
📦 Requirements
- Node.js 18+
- FFmpeg installed and available in PATH
- Dependencies installed automatically via npm:
- axios
- chalk
- puppeteer
🔑 SoundCloud OAuth Token (Required for SoundCloud Only)
- Open soundcloud.com and log in
- Open DevTools → Network
- Click any request to
api-v2.soundcloud.com - Copy the Authorization header
- Paste it into the CLI when prompted (saved automatically)
Token is stored in:
config/config.jsonDelete it to reset.
🛠 Installation
npm install -g multidl-cli🎮 Usage
Download any supported track
multidl <url>Examples:
multidl https://soundcloud.com/neffexmusic/destiny
multidl https://audio.com/duckyboi-audio/audio/veki-veki-super-slowed
multidl https://audiomack.com/skyzen-1/song/veki-veki-2-instrumental-slowed
multidl https://jaymiesilk.bandcamp.com/album/until-we-meet-again-2
multidl https://www.reverbnation.com/alanwalkermusic/song/22564907-fade
multidl https://hearthis.at/nicolas-paul/nicolas-paul-episode-054
multidl https://archive.org/details/bad-apple-10th-anniversary-phase1🔍 What Happens Internally
SoundCloud
- Resolve permalink via GraphQL
- Fetch metadata via API‑v2
- Extract HLS playlist
- Download & convert to MP3
Audio.com
- Launch headless Chrome
- Extract JSON‑LD metadata
- Download MP3 directly
Audiomack
- Fetch HTML
- Extract track ID from aria-labelledby="am-labs-player"
- Call Audiomack playback API
- Receive direct audio URL
Bandcamp
- Fetch HTML page
- Extract embedded data-tralbum JSON (album/track metadata)
- Parse trackinfo array
- Read direct audio URL from
file["mp3-128"](or FLAC if available) - Download track(s) with proper naming + album folder support
Hearthis
- Parse track URL and build
/listen/endpoint - Request MP3 stream (server returns raw audio)
- Extract filename from
Content-Dispositionheader (if present) - Download MP3 via FFmpeg (faster than Node streams)
ReverbNation
- Fetch HTML page
- Extract embedded JSON containing CloudFront MP3 URL
- Unescape URL (
\/→/,\u0026→&) - Download MP3 via FFmpeg (direct, no redirects needed)
Archive.org
- Detect if URL is:
- a single‑file item
- a playlist track
- a full multi‑track playlist
- For playlist items, extract all
<link itemprop="associatedMedia">URLs - Build direct
/serve/<identifier>/<filename>download URLs - Download each file via FFmpeg (direct copy, no transcoding)
Jamendo
- Fetch HTML source of the licensing page
- Locate the embedded JSON containing the storage URL
- Extract the
trackidfrom the"url":"https://prod-1.storage.jamendo.com/?trackid=XXXXX"field - Build the direct MP3 endpoint:
https://prod-1.storage.jamendo.com/?trackid=<id>&format=mp32 - Download MP3 via FFmpeg (direct, no auth, no cookies)
⚠️ Limitations
- DRM‑protected SoundCloud Go+ tracks cannot be downloaded
- Some private SoundCloud tracks require a fresh OAuth token
- FFmpeg is required for MP3 conversion
- Audio.com requires Puppeteer (installed automatically)
📝 License
For educational and personal use only.
Respect artists and copyright laws.
