{
  "title": "YouTube Transcript Scraper Input",
  "description": "Extract timestamped transcripts and rich metadata from YouTube videos, channels, and playlists, with optional AI transcription.",
  "type": "object",
  "schemaVersion": 1,
  "properties": {
    "mode": {
      "title": "Mode",
      "type": "string",
      "description": "What to scrape: specific videos, a channel's uploads, or a playlist.",
      "editor": "select",
      "enum": [
        "videos",
        "channel",
        "playlist"
      ],
      "enumTitles": [
        "Video URLs",
        "Channel uploads",
        "Playlist videos"
      ],
      "default": "videos",
      "prefill": "videos"
    },
    "videoUrls": {
      "title": "Video URLs",
      "type": "array",
      "description": "YouTube watch URLs, youtu.be short links, Shorts/embed URLs, or plain 11-character video IDs (mode=videos). Duplicate IDs are processed once.",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "prefill": [
        "https://www.youtube.com/watch?v=jNQXAC9IVRw"
      ]
    },
    "channelUrls": {
      "title": "Channel URLs",
      "type": "array",
      "description": "Channel URLs or handles (mode=channel), e.g. https://www.youtube.com/@TED, https://www.youtube.com/channel/UC..., or @TED. Each channel's latest uploads are enumerated and every video is transcribed.",
      "editor": "stringList",
      "items": {
        "type": "string"
      }
    },
    "maxVideosPerChannel": {
      "title": "Max Videos per Channel",
      "type": "integer",
      "description": "Maximum number of videos to enumerate from each channel (mode=channel). 1-1,000.",
      "default": 50,
      "minimum": 1,
      "maximum": 1000
    },
    "playlistUrls": {
      "title": "Playlist URLs",
      "type": "array",
      "description": "Playlist URLs or IDs (mode=playlist), e.g. https://www.youtube.com/playlist?list=PL... or PL.... Every video in the playlist is transcribed.",
      "editor": "stringList",
      "items": {
        "type": "string"
      }
    },
    "maxVideosPerPlaylist": {
      "title": "Max Videos per Playlist",
      "type": "integer",
      "description": "Maximum number of videos to enumerate from each playlist (mode=playlist). 1-1,000.",
      "default": 50,
      "minimum": 1,
      "maximum": 1000
    },
    "language": {
      "title": "Preferred Language",
      "type": "string",
      "description": "Caption language to fetch. Leave Auto-detect to use the video's original language.",
      "default": "",
      "editor": "select",
      "enum": [
        "",
        "af",
        "sq",
        "am",
        "ar",
        "hy",
        "az",
        "eu",
        "be",
        "bn",
        "bs",
        "bg",
        "my",
        "ca",
        "ceb",
        "zh-Hans",
        "zh-Hant",
        "co",
        "hr",
        "cs",
        "da",
        "nl",
        "en",
        "eo",
        "et",
        "fil",
        "fi",
        "fr",
        "fy",
        "gl",
        "ka",
        "de",
        "el",
        "gu",
        "ht",
        "ha",
        "haw",
        "he",
        "hi",
        "hmn",
        "hu",
        "is",
        "ig",
        "id",
        "ga",
        "it",
        "ja",
        "jv",
        "kn",
        "kk",
        "km",
        "rw",
        "ko",
        "ku",
        "ky",
        "lo",
        "la",
        "lv",
        "lt",
        "lb",
        "mk",
        "mg",
        "ms",
        "ml",
        "mt",
        "mi",
        "mr",
        "mn",
        "ne",
        "no",
        "ny",
        "or",
        "ps",
        "fa",
        "pl",
        "pt",
        "pa",
        "ro",
        "ru",
        "sm",
        "gd",
        "sr",
        "sn",
        "sd",
        "si",
        "sk",
        "sl",
        "so",
        "st",
        "es",
        "su",
        "sw",
        "sv",
        "tg",
        "ta",
        "tt",
        "te",
        "th",
        "tr",
        "tk",
        "uk",
        "ur",
        "ug",
        "uz",
        "vi",
        "cy",
        "xh",
        "yi",
        "yo",
        "zu"
      ],
      "enumTitles": [
        "Auto-detect (video's original language)",
        "Afrikaans",
        "Albanian",
        "Amharic",
        "Arabic",
        "Armenian",
        "Azerbaijani",
        "Basque",
        "Belarusian",
        "Bengali",
        "Bosnian",
        "Bulgarian",
        "Burmese",
        "Catalan",
        "Cebuano",
        "Chinese (Simplified)",
        "Chinese (Traditional)",
        "Corsican",
        "Croatian",
        "Czech",
        "Danish",
        "Dutch",
        "English",
        "Esperanto",
        "Estonian",
        "Filipino",
        "Finnish",
        "French",
        "Frisian",
        "Galician",
        "Georgian",
        "German",
        "Greek",
        "Gujarati",
        "Haitian Creole",
        "Hausa",
        "Hawaiian",
        "Hebrew",
        "Hindi",
        "Hmong",
        "Hungarian",
        "Icelandic",
        "Igbo",
        "Indonesian",
        "Irish",
        "Italian",
        "Japanese",
        "Javanese",
        "Kannada",
        "Kazakh",
        "Khmer",
        "Kinyarwanda",
        "Korean",
        "Kurdish",
        "Kyrgyz",
        "Lao",
        "Latin",
        "Latvian",
        "Lithuanian",
        "Luxembourgish",
        "Macedonian",
        "Malagasy",
        "Malay",
        "Malayalam",
        "Maltese",
        "Maori",
        "Marathi",
        "Mongolian",
        "Nepali",
        "Norwegian",
        "Nyanja",
        "Odia",
        "Pashto",
        "Persian",
        "Polish",
        "Portuguese",
        "Punjabi",
        "Romanian",
        "Russian",
        "Samoan",
        "Scots Gaelic",
        "Serbian",
        "Shona",
        "Sindhi",
        "Sinhala",
        "Slovak",
        "Slovenian",
        "Somali",
        "Sesotho",
        "Spanish",
        "Sundanese",
        "Swahili",
        "Swedish",
        "Tajik",
        "Tamil",
        "Tatar",
        "Telugu",
        "Thai",
        "Turkish",
        "Turkmen",
        "Ukrainian",
        "Urdu",
        "Uyghur",
        "Uzbek",
        "Vietnamese",
        "Welsh",
        "Xhosa",
        "Yiddish",
        "Yoruba",
        "Zulu"
      ]
    },
    "includeAutoGenerated": {
      "title": "Include Auto-Generated Captions",
      "type": "boolean",
      "prefill": true,
      "description": "Whether to include auto-generated captions when manual captions are not available.",
      "default": true
    },
    "useWhisper": {
      "title": "Use Whisper AI fallback",
      "type": "boolean",
      "prefill": true,
      "description": "When YouTube has no transcript (disabled captions, music-only, or blocked), download the audio and transcribe with Whisper AI (faster-whisper, CPU). Adds ~30-180 s per video. Enabled by default to guarantee transcript output even when YouTube captions are unavailable.",
      "default": true,
      "editor": "checkbox"
    },
    "whisperModel": {
      "title": "Whisper Model",
      "type": "string",
      "description": "Whisper model size to use when `useWhisper` is enabled. Larger = more accurate but slower and more RAM. 'base' is balanced.",
      "editor": "select",
      "default": "base",
      "prefill": "tiny",
      "enum": [
        "tiny",
        "base",
        "small",
        "medium",
        "large-v3-turbo"
      ],
      "enumTitles": [
        "Tiny (fastest, ~39 MB)",
        "Base (balanced, ~74 MB)",
        "Small (~244 MB)",
        "Medium (best quality/speed, ~769 MB)",
        "Large-v3-turbo (highest accuracy, ~800 MB)"
      ]
    },
    "includeWordTimings": {
      "title": "Include Word Timings",
      "type": "boolean",
      "description": "Add a wordTimings array with word-level start/end times. Only auto-generated YouTube captions expose word timings; manual captions and AI transcripts do not.",
      "default": false,
      "prefill": false,
      "editor": "checkbox"
    },
    "maxWhisperMinutes": {
      "title": "Max AI Length (minutes)",
      "type": "integer",
      "description": "Leave unset for the legacy behavior (AI enabled with no length limit). Set to 0 explicitly to disable AI transcription. A positive value only sends videos of that length or shorter to AI. AI still requires Use Whisper AI fallback.",
      "minimum": 0,
      "maximum": 1440
    },
    "proxyCountry": {
      "title": "Proxy Country",
      "type": "string",
      "description": "Country/region for the proxy IP. Useful if transcripts are geo-blocked in the default US region.",
      "default": "US",
      "sectionCaption": "Advanced",
      "editor": "select",
      "enum": [
        "US",
        "GB",
        "CA",
        "AU",
        "DE",
        "FR",
        "JP",
        "KR",
        "BR",
        "IN",
        "MX",
        "IT",
        "ES",
        "NL",
        "PL",
        "RU",
        "SE",
        "NO",
        "DK",
        "FI",
        "ZA",
        "SG",
        "HK",
        "TW",
        "ID",
        "MY",
        "TH",
        "PH",
        "AR",
        "CO",
        "CL"
      ],
      "enumTitles": [
        "United States",
        "United Kingdom",
        "Canada",
        "Australia",
        "Germany",
        "France",
        "Japan",
        "South Korea",
        "Brazil",
        "India",
        "Mexico",
        "Italy",
        "Spain",
        "Netherlands",
        "Poland",
        "Russia",
        "Sweden",
        "Norway",
        "Denmark",
        "Finland",
        "South Africa",
        "Singapore",
        "Hong Kong",
        "Taiwan",
        "Indonesia",
        "Malaysia",
        "Thailand",
        "Philippines",
        "Argentina",
        "Colombia",
        "Chile"
      ],
      "prefill": "GB"
    },
    "outputFormat": {
      "title": "Output Format",
      "type": "string",
      "description": "How transcript data is included. 'full' = segments and full_text; 'text_only' = full_text only; 'segments_only' = segments only; 'srt' / 'vtt' = ready-to-use subtitle text derived from the segments.",
      "default": "full",
      "editor": "select",
      "enum": [
        "full",
        "text_only",
        "segments_only",
        "srt",
        "vtt"
      ],
      "enumTitles": [
        "Full (segments + text)",
        "Text Only (no segments array)",
        "Segments Only (no full_text)",
        "SRT subtitles",
        "WebVTT subtitles"
      ]
    }
  }
}
