.github/workflows | ||
gamdl | ||
.gitignore | ||
pyproject.toml | ||
README.md | ||
requirements.txt |
Glomatico's Apple Music Downloader
A Python script to download Apple Music songs/music videos/albums/playlists/posts.
Features
- Download songs in AAC/Spatial AAC/Dolby Atmos/ALAC*
- Download music videos up to 4K
- Download synced lyrics
- Choose between FFmpeg and MP4Box for remuxing
- Choose between yt-dlp and N_m3u8DL-RE for downloading
- Highly customizable
Prerequisites
- Python 3.8 or higher
- The cookies file of your Apple Music account (requires an active subscription)
- You can get your cookies by using one of the following extensions on your browser of choice at the Apple Music website with your account signed in:
- Firefox: https://addons.mozilla.org/addon/export-cookies-txt
- Chromium based browsers: https://chrome.google.com/webstore/detail/gdocmgbfkjnnpapoeobnolbbkoibbcif
- You can get your cookies by using one of the following extensions on your browser of choice at the Apple Music website with your account signed in:
- FFmpeg on your system PATH
- Older versions of FFmpeg may not work.
- Up to date binaries can be obtained from the links below:
- (Optional) mp4decrypt on your system PATH
- Required to download music videos and songs in non-legacy formats.
- Binaries can be obtained from here: https://www.bento4.com/downloads/.
Installation
- Install the package
gamdl
using pippip install gamdl
- Place your cookies in the same directory you will run the script from and name it as
cookies.txt
Usage
- Download a song
gamdl "https://music.apple.com/us/album/never-gonna-give-you-up-2022-remaster/1626265761?i=1626265765"
- Download an album
gamdl "https://music.apple.com/us/album/whenever-you-need-somebody-2022-remaster/1626265761"
Configuration
You can configure gamdl 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%\.gamdl\config.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. | 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. | <home>/.spotify-web-downloader/config.json |
--log-level / log_level |
Log level. | INFO |
--print-exceptions / print_exceptions |
Print exceptions. | false |
--cookies-path , -c / cookies_path |
Path to .txt cookies file. | ./cookies.txt |
--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-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. | 40 |
--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-best |
--quality-post / quality_post |
Post video quality. | best |
--no-config-file , -n / - |
Do not use a config file. | false |
Tags variables
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
rating
storefront
title
title_id
title_sort
track
track_total
xid
Song Codecs
The following codecs are available:
aac-legacy
aac-he-legacy
aac
aac-he
aac-binaural
aac-downmix
aac-he-binaural
aac-he-downmix
alac
atmos
Support for non-legacy codecs are not guaranteed, as most of the songs cannot be decrypted when using non-legacy codecs.
Music videos codecs
The following codecs are available:
h264-best
(with AAC 256kbps, up to 1080p)h265-best
(With AAC 256kpbs, up to 2160p)ask
- When using this option, the script will ask you which audio and video codec to use.
Post videos/extra videos quality
best
(with AAC 256kbps, up to 1080p)ask
- When using this option, the script will ask you which video quality to use.
Remux mode
The following remux modes are available:
ffmpeg
- Can be used without mp4decrypt only for songs and when using legacy song codecs
mp4box
- Requires mp4decrypt
- Doesn't convert closed captions in music videos that have them
- Can be obtained from here: https://gpac.wp.imt.fr/downloads
Post videos don't require remuxing.
Download mode
The following download modes are available:
ytdlp
- Post videos are limited to this mode only.
nm3u8dlre
- Faster than
ytdlp
- Requires FFmpeg
- Can be obtained from here: https://github.com/nilaoda/N_m3u8DL-RE/releases
- Faster than