A Python CLI app for downloading Apple Music songs/music videos/posts.
Discord Server: https://discord.gg/aBjMEZ9tnq
The following tools are optional but required for specific features. Add them to your system’s PATH or specify their paths using command-line arguments or the config file.
mp4box
as remux mode, for downloading music videos and for downloading songs in non-legacy formats.mp4box
as remux mode.nm3u8dlre
as download mode.gamdl
using pip
pip install gamdl
cookies.txt
or specify its path using the command-line arguments/config file.gamdl [OPTIONS] URLS...
Gamdl supports the following types of URLs:
gamdl "https://music.apple.com/us/album/never-gonna-give-you-up-2022-remaster/1624945511?i=1624945512"
gamdl "https://music.apple.com/us/album/whenever-you-need-somebody-2022-remaster/1624945511"
gamdl "https://music.apple.com/us/artist/rick-astley/669771"
Gamdl can be configured by using the command line arguments or the config file.
The config file is created automatically when you run Gamdl for the first time at ~/.gamdl/config.json
on Linux and %USERPROFILE%.gamdlconfig.json
on Windows.
Config file values can be overridden using command line arguments.
Command line argument / Config file key | Description | Default value |
---|---|---|
--disable-music-video-skip / disable_music_video_skip |
Don't skip downloading music videos in albums/playlists. | false |
--save-cover , -s / save_cover |
Save cover as a separate file. | false |
--overwrite / overwrite |
Overwrite existing files. | false |
--read-urls-as-txt , -r / - |
Interpret URLs as paths to text files containing URLs separated by newlines. | false |
--save-playlist / save_playlist |
Save a M3U8 playlist file when downloading a playlist. | false |
--synced-lyrics-only / synced_lyrics_only |
Download only the synced lyrics. | false |
--no-synced-lyrics / no_synced_lyrics |
Don't download the synced lyrics. | false |
--config-path / - |
Path to config file. |
|
--log-level / log_level |
Log level. | INFO |
--no-exceptions / no_exceptions |
Don't print exceptions. | false |
--cookies-path , -c / cookies_path |
Path to .txt cookies file. | ./cookies.txt |
--language , -l / language |
Metadata language as an ISO-2A language code (don't always work for videos). | en-US |
--output-path , -o / output_path |
Path to output directory. | ./Apple Music |
--temp-path / temp_path |
Path to temporary directory. | ./temp |
--wvd-path / wvd_path |
Path to .wvd file. | null |
--nm3u8dlre-path / nm3u8dlre_path |
Path to N_m3u8DL-RE binary. | N_m3u8DL-RE |
--mp4decrypt-path / mp4decrypt_path |
Path to mp4decrypt binary. | mp4decrypt |
--ffmpeg-path / ffmpeg_path |
Path to FFmpeg binary. | ffmpeg |
--mp4box-path / mp4box_path |
Path to MP4Box binary. | MP4Box |
--download-mode / download_mode |
Download mode. | ytdlp |
--remux-mode / remux_mode |
Remux mode. | ffmpeg |
--cover-format / cover_format |
Cover format. | jpg |
--template-folder-album / template_folder_album |
Template folder for tracks that are part of an album. | {album_artist}/{album} |
--template-folder-compilation / template_folder_compilation |
Template folder for tracks that are part of a compilation album. | Compilations/{album} |
--template-file-single-disc / template_file_single_disc |
Template file for the tracks that are part of a single-disc album. | {track:02d} {title} |
--template-file-multi-disc / template_file_multi_disc |
Template file for the tracks that are part of a multi-disc album. | {disc}-{track:02d} {title} |
--template-folder-no-album / template_folder_no_album |
Template folder for the tracks that are not part of an album. | {artist}/Unknown Album |
--template-file-no-album / template_file_no_album |
Template file for the tracks that are not part of an album. | {title} |
--template-file-playlist / template_file_playlist |
Template file for the M3U8 playlist. | Playlists/{playlist_title} |
--template-date / template_date |
Date tag template. | %Y-%m-%dT%H:%M:%SZ |
--exclude-tags / exclude_tags |
Comma-separated tags to exclude. | null |
--cover-size / cover_size |
Cover size. | 1200 |
--truncate / truncate |
Maximum length of the file/folder names. | null |
--codec-song / codec_song |
Song codec. | aac-legacy |
--synced-lyrics-format / synced_lyrics_format |
Synced lyrics format. | lrc |
--codec-music-video / codec_music_video |
Music video codec. | h264 |
--quality-post / quality_post |
Post video quality. | best |
--no-config-file , -n / - |
Do not use a config file. | false |
The following variables can be used in the template folders/files and/or in the exclude_tags
list:
album
album_artist
album_id
album_sort
artist
artist_id
artist_sort
comment
compilation
composer
composer_id
composer_sort
copyright
cover
date
disc
disc_total
gapless
genre
genre_id
lyrics
media_type
playlist_artist
playlist_id
playlist_title
playlist_track
rating
storefront
title
title_id
title_sort
track
track_total
xid
The following remux modes are available:
ffmpeg
mp4box
The following download modes are available:
ytdlp
nm3u8dlre
ytdlp
The following codecs are available:
aac-legacy
aac-he-legacy
The following codecs are also available, but are not guaranteed to work, as currently most (or all) of the songs fails to be downloaded when using them:
aac
aac-he
aac-binaural
aac-downmix
aac-he-binaural
aac-he-downmix
atmos
ac3
alac
ask
The following codecs are available:
h264
(up to 1080p, with AAC 256kbps)h265
(up to 2160p, with AAC 256kpbs)ask
The following qualities are available:
best
(up to 1080p, with AAC 256kbps)ask
Post videos doesn't require remuxing and are limited to ytdlp
download mode.
The following synced lyrics formats are available:
lrc
srt
ttml
The following cover formats are available:
jpg
png
raw
save_cover
option to save the cover as a separate file.