id = "gamdl"
name = "Gamdl"
homepage = "https://github.com/glomatico/gamdl"
description = "A command-line app for downloading Apple Music songs, music videos and post videos."
executables = ["gamdl"]
[dotfiles]
paths = ["~/.gamdl/config.ini"]
exclude = []
secret = []
side_effect = false
[commands]
format = 1
label = "Download Apple Music"
description = "Download songs, albums, playlists, artists or videos from Apple Music URLs. Wrapper, DRM, and filename template options are left out."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = true, short_bundles = false }
[[commands.source]]
id = "readme"
kind = "manual"
url = "https://github.com/glomatico/gamdl/blob/main/README.md"
revision = "main 2026-10"
evidence = """
| `--read-urls-as-txt`, `-r` | Read URLs from text files | `false` |
| `--cookies-path`, `-c` | Cookies file path | `./cookies.txt` |
| `--language`, `-l` | Metadata language | `en-US` |
| `--cover-size` | Cover size in pixels | `1200` |
| `--no-synced-lyrics` | Don't download synced lyrics | `false` |
| `--synced-lyrics-only` | Download only synced lyrics | `false` |
| `--music-video-resolution` | Max music video resolution | `1080p` |
| `--output-path`, `-o` | Output directory path | `./Apple Music` |
| `--download-mode` | Download mode | `ytdlp` |
| `--no-config-file`, `-n` | Don't use a config file | `false` |
Enable it with `--download-mode nm3u8dlre`
"""
[[commands.field]]
id = "urls"
label = "URLs or text files"
type = "string"
position = 0
multiple = true
sources = ["readme"]
[[commands.field]]
id = "read_urls_as_txt"
label = "Read URLs from text files"
description = "Treat each positional argument as a text file of URLs."
type = "boolean"
option = ["--read-urls-as-txt", "-r"]
sources = ["readme"]
[[commands.field]]
id = "cookies_path"
label = "Cookies file"
type = "path"
option = ["--cookies-path", "-c"]
path = { kind = "file", role = "input" }
sources = ["readme"]
[[commands.field]]
id = "output_path"
label = "Output directory"
type = "path"
option = ["--output-path", "-o"]
path = { kind = "directory", role = "output" }
sources = ["readme"]
[[commands.field]]
id = "language"
label = "Metadata language"
type = "string"
option = ["--language", "-l"]
suggestions = [{ value = "en-US", label = "en-US" }]
sources = ["readme"]
[[commands.field]]
id = "download_mode"
label = "Download mode"
type = "enum"
option = ["--download-mode"]
choices = [{ value = "ytdlp", label = "yt-dlp" }, { value = "nm3u8dlre", label = "N_m3u8DL-RE" }]
sources = ["readme"]
[[commands.field]]
id = "music_video_resolution"
label = "Max music video resolution"
type = "string"
option = ["--music-video-resolution"]
suggestions = [{ value = "1080p", label = "1080p" }]
sources = ["readme"]
[[commands.field]]
id = "cover_size"
label = "Cover size (pixels)"
type = "integer"
option = ["--cover-size"]
sources = ["readme"]
[[commands.field]]
id = "no_synced_lyrics"
label = "Skip synced lyrics"
type = "boolean"
option = ["--no-synced-lyrics"]
sources = ["readme"]
[[commands.field]]
id = "synced_lyrics_only"
label = "Synced lyrics only"
type = "boolean"
option = ["--synced-lyrics-only"]
sources = ["readme"]
[[commands.field]]
id = "no_config_file"
label = "Ignore config file"
type = "boolean"
option = ["--no-config-file", "-n"]
sources = ["readme"]
[[commands.task]]
id = "download"
label = "Download URLs"
fields = ["urls", "cookies_path", "output_path", "language", "no_synced_lyrics"]
required = ["urls"]
[[commands.task]]
id = "from-file"
label = "Download from a URL list"
set = { read_urls_as_txt = [true] }
lock = ["read_urls_as_txt"]
fields = ["urls", "read_urls_as_txt", "cookies_path", "output_path"]
required = ["urls"]
[[commands.group]]
id = "basic"
label = "Basic"
fields = ["urls", "read_urls_as_txt", "cookies_path", "output_path", "language"]
[[commands.group]]
id = "advanced"
label = "Advanced"
fields = ["download_mode", "music_video_resolution", "cover_size", "no_synced_lyrics", "synced_lyrics_only", "no_config_file"]