{"record":{"id":"7511909b84f90b09","repo":"ytdl-org/youtube-dl","slug":"unable-to-recognize-tab-page","errorCode":null,"errorMessage":"Unable to recognize tab page","messagePattern":"Unable to recognize tab page","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/youtube.py","lineNumber":4144,"sourceCode":"        if tabs:\n            return self._extract_from_tabs(item_id, webpage, data, tabs)\n        playlist = try_get(\n            data, lambda x: x['contents']['twoColumnWatchNextResults']['playlist']['playlist'], dict)\n        if playlist:\n            return self._extract_from_playlist(item_id, url, data, playlist)\n        # Fallback to video extraction if no playlist alike page is recognized.\n        # First check for the current video then try the v attribute of URL query.\n        video_id = try_get(\n            data, lambda x: x['currentVideoEndpoint']['watchEndpoint']['videoId'],\n            compat_str) or video_id\n        if video_id:\n            return self.url_result(video_id, ie=YoutubeIE.ie_key(), video_id=video_id)\n\n        # Capture and output alerts\n        self._extract_and_report_alerts(data)\n\n        # Failed to recognize\n        raise ExtractorError('Unable to recognize tab page')\n\n\nclass YoutubePlaylistIE(InfoExtractor):\n    IE_DESC = 'YouTube.com playlists'\n    _VALID_URL = r'''(?x)(?:\n                        (?:https?://)?\n                        (?:\\w+\\.)?\n                        (?:\n                            (?:\n                                youtube(?:kids)?\\.com|\n                                invidio\\.us\n                            )\n                            /.*?\\?.*?\\blist=\n                        )?\n                        (?P<id>%(playlist_id)s)\n                     )''' % {'playlist_id': YoutubeBaseInfoExtractor._PLAYLIST_ID_RE}\n    IE_NAME = 'youtube:playlist'\n    _TESTS = [{","sourceCodeStart":4126,"sourceCodeEnd":4162,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/youtube.py#L4126-L4162","documentation":"The terminal failure of YoutubeTabIE._real_extract: after all playlist/tab parsing attempts fail, and the fallback (currentVideoEndpoint.watchEndpoint.videoId from the data, or a 'v' query parameter) yields no video id and no fatal alerts were reported, the extractor raises 'Unable to recognize tab page'. It means the response was neither a recognizable playlist/channel page nor redirectable to a single video.","triggerScenarios":"Extracting a youtube.com URL matched by the Tab IE where the underlying data lacks channel/playlist metadata and tabs: handle-only URLs, degenerate/error pages, or schema changes that break every parsing branch before the fallback check.","commonSituations":"YouTube changes the shape of browse/watch-next responses; URLs like /user/... or /c/... resolving to pages the old extractor cannot classify; embedded responses missing currentVideoEndpoint.","solutions":["Update youtube-dl (preferably yt-dlp) — tab-page recognition is under constant repair.","Try a more specific URL form: the /videos tab, the canonical channel URL, or directly the watch?v= URL of a known video.","If you know the target is a single video, pass its watch URL so YoutubeIE handles it instead of the tab extractor.","Reproduce with --verbose to see which branch failed and what keys the response data actually contains."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"video_id = try_get(data, lambda x: x['currentVideoEndpoint']['watchEndpoint']['videoId'], str) \\\n    or parse_qs(urlparse(url).query).get('v', [None])[0]\nif video_id:\n    target = 'https://www.youtube.com/watch?v=%s' % video_id  # use video URL instead","typeGuard":null,"tryCatchPattern":"try:\n    info = ydl.extract_info(tab_url)\nexcept ExtractorError as e:\n    if 'Unable to recognize tab page' in str(e):\n        info = ydl.extract_info(canonical_watch_url)  # fall back to known video URL\n    else:\n        raise","preventionTips":["Prefer canonical, explicit URLs (watch?v=..., channel /videos) over ambiguous page URLs.","Run with --verbose when tab recognition fails to see which data keys were absent."],"tags":["youtube","tab-page","site-change","fallback-exhausted"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}