{"id":15064469,"url":"https://github.com/glomatico/gytmdl","last_synced_at":"2025-05-16T09:02:39.445Z","repository":{"id":49336996,"uuid":"477169127","full_name":"glomatico/gytmdl","owner":"glomatico","description":"A Python CLI app for downloading YouTube Music songs with tags from YouTube Music.","archived":false,"fork":false,"pushed_at":"2025-03-14T18:14:01.000Z","size":944,"stargazers_count":188,"open_issues_count":4,"forks_count":23,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-05-14T08:48:22.674Z","etag":null,"topics":["downloader","itunes","m4a","music","youtube","youtube-music","youtubemusic","yt-dlp","yt-music"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/glomatico.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-04-02T20:54:18.000Z","updated_at":"2025-05-11T21:44:22.000Z","dependencies_parsed_at":"2024-05-17T01:32:06.041Z","dependency_job_id":"a33dda92-2bcb-4ca4-9fcb-1820649b192a","html_url":"https://github.com/glomatico/gytmdl","commit_stats":{"total_commits":168,"total_committers":3,"mean_commits":56.0,"dds":"0.24404761904761907","last_synced_commit":"6c8729e53d91ece9256cebb731816e9331bdbb83"},"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/glomatico%2Fgytmdl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/glomatico%2Fgytmdl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/glomatico%2Fgytmdl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/glomatico%2Fgytmdl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/glomatico","download_url":"https://codeload.github.com/glomatico/gytmdl/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254501548,"owners_count":22081526,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["downloader","itunes","m4a","music","youtube","youtube-music","youtubemusic","yt-dlp","yt-music"],"created_at":"2024-09-25T00:19:05.397Z","updated_at":"2025-05-16T09:02:39.406Z","avatar_url":"https://github.com/glomatico.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Glomatico’s YouTube Music Downloader\nA Python CLI app for downloading YouTube Music songs with tags from YouTube Music.\n\n**Discord Server:** https://discord.gg/aBjMEZ9tnq\n\n## Features\n* **Precise metadata**: [YouTube Music API](https://github.com/sigma67/ytmusicapi) is used to get accurate metadata that yt-dlp alone can’t provide, like high-resolution square covers, lyrics, track numbers, and total track counts.\n* **Synced Lyrics**: Download synced lyrics in LRC.\n* **Artist Support**: Download all albums of an artist using their link.\n* **Highly Customizable**: Extensive configuration options for advanced users.\n\n## Prerequisites\n* **Python 3.9 or higher** installed on your system.\n* **FFmpeg** on your system PATH.\n    * **Windows**: Download from [AnimMouse’s FFmpeg Builds](https://github.com/AnimMouse/ffmpeg-stable-autobuild/releases).\n    * **Linux**: Download from [John Van Sickle’s FFmpeg Builds](https://johnvansickle.com/ffmpeg/).\n* (Optional) The **cookies file** of your YouTube Music browser session in Netscape format (requires an active subscription).\n    * **Firefox**: Use the [Export Cookies](https://addons.mozilla.org/addon/export-cookies-txt) extension.\n    * **Chromium-based Browsers**: Use the [Open Cookies.txt](https://chromewebstore.google.com/detail/open-cookiestxt/gdocmgbfkjnnpapoeobnolbbkoibbcif) extension.\n    * With cookies, you can download **age-restricted content**, **private playlists**, and songs in **premium formats** if you have an active Premium subscription. You’ll have to set the cookies file path using the command line arguments or the config file (see [Configuration](#configuration)).\n    * **YouTube cookies can expire very quickly**. As a workaround, export your cookies in an incognito/anonymous window so they don’t expire as quickly.\n    *  **You may need to provide a PO token** by using the command line arguments or the config file if you encounter issues when downloading with cookies. To get a PO token, you can follow yt-dlp's instructions [here](https://github.com/yt-dlp/yt-dlp/wiki/PO-Token-Guide).\n\n### Optional dependencies\nThe 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.\n* [aria2](https://aria2.github.io/): Required for `aria2c` download mode.\n\n## Installation\nInstall the package `gytmdl` using pip:\n```bash\npip install gytmdl\n```\n\n## Usage\nRun Gytmdl with the following command:\n```bash\ngytmdl [OPTIONS] URLS...\n```\n\n### Supported URL types\n* Song\n* Album\n* Playlist\n* Artist\n\n**Songs that are not part of an album (standard YouTube videos) are not supported**. To make sure you get valid links, use YouTube Music for searching and enable filtering by songs, albums or artists.\n\n### Examples\n* Download a song:\n    ```bash\n    gytmdl \"https://music.youtube.com/watch?v=3BFTio5296w\"\n    ```\n* Download an album:\n    ```bash\n    gytmdl \"https://music.youtube.com/playlist?list=OLAK5uy_lvpL_Gr_aVEq-LaivwJaSK5EbFd4HeamM\"\n    ```\n* Choose which albums or singles to download from an artist:\n    ```bash\n    gytmdl \"https://music.youtube.com/channel/UCwZEU0wAwIyZb4x5G_KJp2w\"\n    ```\n\n### Interactive prompt controls\n* **Arrow keys**: Move selection\n* **Space**: Toggle selection\n* **Ctrl + A**: Select all\n* **Enter**: Confirm selection\n\n## Configuration\nGytmdl can be configured by using the command line arguments or the config file.\n\nThe config file is created automatically when you run Gytmdl for the first time at `~/.gytmdl/config.json` on Linux/macOS and `%USERPROFILE%\\.gytmdl\\config.json` on Windows.\n\nConfig file values can be overridden using command line arguments.\n| Command line argument / Config file key       | Description                                                                  | Default value                |\n| --------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------- |\n| `--save-cover`, `-s` / `save_cover`           | Save cover as a separate file.                                               | `false`                      |\n| `--overwrite` / `overwrite`                   | Overwrite existing files.                                                    | `false`                      |\n| `--read-urls-as-txt`, `-r` / -                | Interpret URLs as paths to text files containing URLs separated by newlines. | `false`                      |\n| `--config-path` / -                           | Path to config file.                                                         | `\u003chome\u003e/.gytmdl/config.json` |\n| `--log-level` / `log_level`                   | Log level.                                                                   | `INFO`                       |\n| `--no-exceptions` / `no_exceptions`           | Don't print exceptions.                                                      | `false`                      |\n| `--output-path`, `-o` / `output_path`         | Path to output directory.                                                    | `./YouTube Music`            |\n| `--temp-path` / `temp_path`                   | Path to temporary directory.                                                 | `./temp`                     |\n| `--cookies-path`, `-c` / `cookies_path`       | Path to .txt cookies file.                                                   | `null`                       |\n| `--ffmpeg-path` / `ffmpeg_path`               | Path to FFmpeg binary.                                                       | `ffmpeg`                     |\n| `--aria2c-path` / `aria2c_path`               | Path to aria2c binary.                                                       | `aria2c`                     |\n| `--download-mode` / `download_mode`           | Download mode.                                                               | `ytdlp`                      |\n| `--po-token` / `po_token`                     | Proof of Origin (PO) Token.                                                  | `null`                       |\n| `--itag`, `-i` / `itag`                       | Itag (audio codec/quality).                                                  | `140`                        |\n| `--cover-size` / `cover_size`                 | Cover size.                                                                  | `1200`                       |\n| `--cover-format` / `cover_format`             | Cover format.                                                                | `jpg`                        |\n| `--cover-quality` / `cover_quality`           | Cover JPEG quality.                                                          | `94`                         |\n| `--template-folder` / `template_folder`       | Template of the album folders as a format string.                            | `{album_artist}/{album}`     |\n| `--template-file` / `template_file`           | Template of the song files as a format string.                               | `{track:02d} {title}`        |\n| `--template-date` / `template_date`           | Date tag template.                                                           | `%Y-%m-%dT%H:%M:%SZ`         |\n| `--no-synced-lyrics` / `no_synced_lyrics`     | Don't save synced lyrics.                                                    | `false`                      |\n| `--synced-lyrics-only` / `synced_lyrics_only` | Skip track download and only save synced lyrics.                             | `false`                      |\n| `--exclude-tags`, `-e` / `exclude_tags`       | Comma-separated tags to exclude.                                             | `null`                       |\n| `--truncate` / `truncate`                     | Maximum length of the file/folder names.                                     | `null`                       |\n| `--no-config-file`, `-n` / -                  | Don't load the config file.                                                  | `false`                      |\n\n### Tag variables\nThe following variables can be used in the template folder/file and/or in the `exclude_tags` list:\n* `album`\n* `album_artist`\n* `artist`\n* `cover`\n* `date`\n* `lyrics`\n* `media_type`\n* `rating`\n* `title`\n* `track`\n* `track_total`\n* `url`\n\n### Itags (audio codec/quality)\n* Free itags:\n    * `140`: (AAC 128kbps)\n    * `139`: (AAC 48kbps)\n    * `251`: (Opus 128kbps)\n    * `250`: (Opus 64kbps)\n    * `249`: (Opus 48kbps)\n* Premium itags (requires cookies and an active Premium subscription):\n    * `141`: (AAC 256kbps)\n    * `774`: (Opus 256kbps)\n\n### Download modes\n* `ytdlp`: Default download mode.\n* `aria2c`: Faster than `ytdlp`.\n\n### Cover formats\n* `jpg`: Default format.\n* `png`: Lossless format.\n* `raw`: Raw cover without processing (requires `save_cover` to save separately).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fglomatico%2Fgytmdl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fglomatico%2Fgytmdl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fglomatico%2Fgytmdl/lists"}