{
  "id": "yt-dlp",
  "name": "yt-dlp",
  "homepage": "https://github.com/yt-dlp/yt-dlp",
  "description": "A feature-rich command-line audio/video downloader.",
  "executables": [
    "yt-dlp"
  ],
  "since": "2023.01.02",
  "version_from": {
    "command": [
      "yt-dlp",
      "--ignore-config",
      "--version"
    ]
  },
  "dotfiles": {
    "paths": [
      "[configHome]/yt-dlp.conf",
      "[configHome]/yt-dlp/config",
      "[configHome]/yt-dlp/config.txt",
      "%APPDATA%/yt-dlp.conf",
      "%APPDATA%/yt-dlp/config",
      "%APPDATA%/yt-dlp/config.txt",
      "~/yt-dlp.conf",
      "~/yt-dlp.conf.txt",
      "~/.yt-dlp/config",
      "~/.yt-dlp/config.txt"
    ],
    "secret": []
  },
  "commands": {
    "format": 1,
    "label": "Download one URL",
    "description": "Only form settings are used: --ignore-config and --no-playlist are always included. Playlist/channel extraction, cookies/login, updates and --exec are outside this form. Format queries run only when explicitly requested.",
    "quality": "curated",
    "required_capabilities": [
      "yt-dlp.single-json"
    ],
    "parser": {
      "end_of_options": "--",
      "interleave": "permute",
      "long_equals": true,
      "short_attached": true,
      "short_bundles": true
    },
    "source": [
      {
        "id": "yt-dlp-readme",
        "kind": "curated",
        "url": "https://github.com/yt-dlp/yt-dlp#usage-and-options",
        "revision": "2026-10-27",
        "evidence": "--ignore-config, --no-playlist, --paths, --output, --format, --extract-audio, --audio-format, subtitle options and --skip-download --dump-single-json. Extracting audio requires FFmpeg and FFprobe."
      }
    ],
    "field": [
      {
        "id": "isolation",
        "label": "Only form settings / one video",
        "fixed": [
          "--ignore-config",
          "--no-playlist"
        ],
        "sources": [
          "yt-dlp-readme"
        ]
      },
      {
        "id": "paths",
        "label": "Download directory",
        "type": "path",
        "option": [
          "--paths",
          "-P"
        ],
        "path": {
          "kind": "directory",
          "role": "output",
          "must_exist": true
        },
        "sources": [
          "yt-dlp-readme"
        ]
      },
      {
        "id": "output",
        "label": "Output filename template",
        "description": "A yt-dlp template, not shell code; the directory is selected separately.",
        "type": "string",
        "option": [
          "--output",
          "-o"
        ],
        "effect": "overwrite",
        "sources": [
          "yt-dlp-readme"
        ]
      },
      {
        "id": "format",
        "label": "Media format",
        "type": "string",
        "option": [
          "--format",
          "-f"
        ],
        "provider": "builtin:yt-dlp.formats",
        "suggestions": [
          {
            "value": "best",
            "label": "Combined video + audio"
          },
          {
            "value": "bv*+ba/b",
            "label": "Best streams (FFmpeg merge may be required)"
          },
          {
            "value": "bestaudio/best",
            "label": "Best audio stream"
          }
        ],
        "sources": [
          "yt-dlp-readme"
        ]
      },
      {
        "id": "extract_audio",
        "label": "Extract audio",
        "description": "Requires FFmpeg and FFprobe on the caller PATH.",
        "type": "boolean",
        "option": [
          "--extract-audio",
          "-x"
        ],
        "sources": [
          "yt-dlp-readme"
        ]
      },
      {
        "id": "audio_format",
        "label": "Audio format",
        "type": "enum",
        "option": [
          "--audio-format"
        ],
        "choices": [
          {
            "value": "best",
            "label": "Keep best audio format"
          },
          {
            "value": "aac",
            "label": "AAC"
          },
          {
            "value": "alac",
            "label": "ALAC"
          },
          {
            "value": "flac",
            "label": "FLAC"
          },
          {
            "value": "m4a",
            "label": "M4A"
          },
          {
            "value": "mp3",
            "label": "MP3"
          },
          {
            "value": "opus",
            "label": "Opus"
          },
          {
            "value": "vorbis",
            "label": "Vorbis"
          },
          {
            "value": "wav",
            "label": "WAV"
          }
        ],
        "enabled_when": {
          "field": "extract_audio",
          "op": "is_set"
        },
        "sources": [
          "yt-dlp-readme"
        ]
      },
      {
        "id": "write_subs",
        "label": "Write subtitles",
        "type": "boolean",
        "option": [
          "--write-subs"
        ],
        "sources": [
          "yt-dlp-readme"
        ]
      },
      {
        "id": "write_auto_subs",
        "label": "Write auto-generated subtitles",
        "type": "boolean",
        "option": [
          "--write-auto-subs"
        ],
        "sources": [
          "yt-dlp-readme"
        ]
      },
      {
        "id": "sub_langs",
        "label": "Subtitle languages",
        "description": "Comma-separated language patterns interpreted by yt-dlp; Otty does not expand them.",
        "type": "string",
        "option": [
          "--sub-langs"
        ],
        "enabled_when": {
          "any": [
            {
              "field": "write_subs",
              "op": "is_set"
            },
            {
              "field": "write_auto_subs",
              "op": "is_set"
            }
          ]
        },
        "sources": [
          "yt-dlp-readme"
        ]
      },
      {
        "id": "url",
        "label": "Video URL (http/https)",
        "type": "url",
        "position": 0,
        "min": 1,
        "sources": [
          "yt-dlp-readme"
        ]
      }
    ],
    "task": [
      {
        "id": "video",
        "label": "Download video",
        "set": {
          "format": [
            "best"
          ]
        },
        "lock": [
          "format"
        ],
        "fields": [
          "url",
          "paths",
          "format",
          "write_subs",
          "write_auto_subs",
          "sub_langs"
        ],
        "required": [
          "url",
          "paths"
        ]
      },
      {
        "id": "audio",
        "label": "Audio only",
        "set": {
          "format": [
            "bestaudio/best"
          ],
          "extract_audio": [
            true
          ],
          "audio_format": [
            "mp3"
          ]
        },
        "lock": [
          "extract_audio"
        ],
        "fields": [
          "url",
          "paths",
          "audio_format",
          "format"
        ],
        "required": [
          "url",
          "paths"
        ]
      }
    ],
    "group": [
      {
        "id": "basic",
        "label": "Download",
        "fields": [
          "url",
          "paths",
          "format",
          "extract_audio",
          "audio_format"
        ]
      },
      {
        "id": "advanced",
        "label": "Advanced",
        "fields": [
          "output",
          "write_subs",
          "write_auto_subs",
          "sub_langs",
          "isolation"
        ]
      }
    ]
  }
}
