A command-line app for downloading Apple Music songs, music videos and post videos.
A command-line app for downloading Apple Music songs, music videos and post videos.
A command-line app for downloading Apple Music songs, music videos and post videos.
Join our Discord Server: https://discord.gg/aBjMEZ9tnq
Run the Wrapper v2 server for wrapper-backed account, playback, and decryption requests. Enable it with --use-wrapper or use_wrapper = true. Configure wrapper HTTP account/playback calls with --wrapper-url or wrapper_url, and configure WV2D batch TCP decrypt with --wrapper-decrypt-host / --wrapper-decrypt-port.
gamdl builds a private Rust extension from gamdl/downloader/ammuxer as gamdl._ammuxer. That native media engine handles wrapper TCP decrypt/reassembly plus MP4/M4A writing and muxing; Python remains responsible for the CLI, downloads, metadata tagging, and high-level orchestration.
The wrapper is recommended when using the alac song codec. ALAC can be attempted without wrapper, but it probably won't work due to API limitations.
Note:
10020 for decrypt.alac do not require the wrapper.Use N_m3u8DL-RE as a faster download alternative to the default yt-dlp download mode. Enable it with --download-mode nm3u8dlre or download_mode = nm3u8dlre.
If the executable is not available in your system PATH, set its location with --nm3u8dlre-path or nm3u8dlre_path.
N_m3u8DL-RE also needs FFmpeg. If the FFmpeg executable is not available in your system PATH, set its location with --ffmpeg-path or ffmpeg_path.
Install Gamdl via pip:
pip install gamdlSet up the cookies file:
cookies.txt, or--cookies-path or in the config fileOptional: Set up dependencies (only if you need the functionality) See the Optional Dependencies section to determine which optional tools you need.
gamdl [OPTIONS] URLS...Download a song:
gamdl "https://music.apple.com/us/album/never-gonna-give-you-up-2022-remaster/1624945511?i=1624945512"Download an album:
gamdl "https://music.apple.com/us/album/whenever-you-need-somebody-2022-remaster/1624945511"Download from an artist:
gamdl "https://music.apple.com/us/artist/rick-astley/669771"Interactive Prompt Controls:
| Key | Action |
|---|---|
| Arrow keys | Move selection |
| Space | Toggle selection |
| Ctrl + A | Select all |
| Enter | Confirm selection |
Configure Gamdl using command-line arguments or a config file.
Config file location:
~/.gamdl/config.ini%USERPROFILE%\.gamdl\config.iniThe file is created automatically on first run. Command-line arguments override config values.
| Option | Description | Default |
|---|---|---|
| General Options | ||
--read-urls-as-txt, -r |
Read URLs from text files | false |
--config-path |
Config file path | <home>/.gamdl/config.ini |
--log-level |
Logging level | INFO |
--log-file |
Log file path | - |
--no-exceptions |
Don't print exceptions | false |
--artist-auto-select |
Automatically select artist content to download (artist URLs) | - |
--database-path |
Path to the SQLite database file for registering downloaded media | - |
--no-config-file, -n |
Don't use a config file | false |
| Apple Music Options | ||
--cookies-path, -c |
Cookies file path | ./cookies.txt |
--wrapper-url |
Wrapper HTTP control base URL | http://127.0.0.1 |
--wrapper-decrypt-host |
Wrapper TCP decrypt host | 127.0.0.1 |
--wrapper-decrypt-port |
Wrapper TCP decrypt port | 10020 |
--language, -l |
Metadata language | en-US |
| Interface Options | ||
--cover-format |
Cover format | jpg |
--cover-size |
Cover size in pixels | 1200 |
--wvd-path |
.wvd file path | - |
--use-wrapper |
Use wrapper for account, playback, and decryption requests | false |
| Song Options | ||
--synced-lyrics-format |
Synced lyrics format | lrc |
--song-codec-priority |
Comma-separated codec priority | aac-web |
--use-album-date |
Use album release date for songs | false |
--no-synced-lyrics |
Don't download synced lyrics | false |
--synced-lyrics-only |
Download only synced lyrics | false |
| Music Video Options | ||
--music-video-resolution |
Max music video resolution | 1080p |
--music-video-codec-priority |
Comma-separated codec priority | h264,h265 |
--music-video-remux-format |
Music video remux format | m4v |
| Post Video Options | ||
--uploaded-video-quality |
Post video quality | best |
| Download & Path Options | ||
--output-path, -o |
Output directory path | ./Apple Music |
--temp-path |
Temporary directory path | . |
--nm3u8dlre-path |
N_m3u8DL-RE executable path | N_m3u8DL-RE |
--ffmpeg-path |
FFmpeg executable path | ffmpeg |
--download-mode |
Download mode | ytdlp |
| Template Options | ||
--album-folder-template |
Album folder template | {album_artist}/{album} |
--compilation-folder-template |
Compilation folder template | Compilations/{album} |
--no-album-folder-template |
No album folder template | {artist}/Unknown Album |
--playlist-folder-template |
Playlist folder template | Playlists/{playlist_artist} |
--single-disc-file-template |
Single disc file template | {track:02d} {title} |
--multi-disc-file-template |
Multi disc file template | {disc}-{track:02d} {title} |
--no-album-file-template |
No album file template | {title} |
--playlist-file-template |
Playlist file template | {playlist_title} |
--date-tag-template |
Date tag template | %Y-%m-%dT%H:%M:%SZ |
--exclude-tags |
Comma-separated tags to exclude | - |
--truncate |
Max filename length | - |
| File Output Options | ||
--overwrite |
Overwrite existing files | false |
--save-cover, -s |
Save cover as separate file | false |
--save-playlist |
No open issues yet, or sync has not completed.