{"record":{"id":"1a55fb6893b3b49a","repo":"ytdl-org/youtube-dl","slug":"unsupported-url","errorCode":null,"errorMessage":"Unsupported URL","messagePattern":"Unsupported URL","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/lbry.py","lineNumber":180,"sourceCode":"        'url': 'https://lbry.tv/$/download/Episode-1/e7d93d772bd87e2b62d5ab993c1c3ced86ebb396',\n        'only_matching': True,\n    }, {\n        'url': 'https://lbry.tv/@lacajadepandora:a/TRUMP-EST%C3%81-BIEN-PUESTO-con-Pilar-Baselga,-Carlos-Senra,-Luis-Palacios-(720p_30fps_H264-192kbit_AAC):1',\n        'only_matching': True,\n    }]\n\n    def _real_extract(self, url):\n        display_id = self._match_id(url)\n        if display_id.startswith('$/'):\n            display_id = display_id.split('/', 2)[-1].replace('/', ':')\n        else:\n            display_id = display_id.replace(':', '#')\n        display_id = compat_urllib_parse_unquote(display_id)\n        uri = 'lbry://' + display_id\n        result = self._resolve_url(uri, display_id, 'stream')\n        result_value = result['value']\n        if result_value.get('stream_type') not in self._SUPPORTED_STREAM_TYPES:\n            raise ExtractorError('Unsupported URL', expected=True)\n        claim_id = result['claim_id']\n        title = result_value['title']\n        streaming_url = self._call_api_proxy(\n            'get', claim_id, {'uri': uri}, 'streaming url')['streaming_url']\n        info = self._parse_stream(result, url)\n        urlh = self._request_webpage(\n            streaming_url, display_id, note='Downloading streaming redirect url info')\n        if determine_ext(urlh.geturl()) == 'm3u8':\n            info['formats'] = self._extract_m3u8_formats(\n                urlh.geturl(), display_id, 'mp4', entry_protocol='m3u8_native',\n                m3u8_id='hls')\n            self._sort_formats(info['formats'])\n        else:\n            info['url'] = streaming_url\n        info.update({\n            'id': claim_id,\n            'title': title,\n        })","sourceCodeStart":162,"sourceCodeEnd":198,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/lbry.py#L162-L198","documentation":"Raised by the LBRY extractor when a resolved claim's value.stream_type is not in _SUPPORTED_STREAM_TYPES, i.e. the lbry:// URL points to a claim that exists but is not a downloadable media stream (e.g. a channel, repost, or document/other content type). It is expected=True so unsupported-but-valid claims fail with a clear message.","triggerScenarios":"Passing an lbry.tv / open.lbry.com URL that resolves via the 'stream' proxy to a claim whose stream_type is not audio/video (for example a channel claim, a reposted non-media claim, or an image/document post).","commonSituations":"Following links to LBRY channels or blog-style posts thinking they are videos; claim names that shadow a channel; content types added by newer LBRY releases that the extractor's _SUPPORTED_STREAM_TYPES predates.","solutions":["Open the URL in a browser and confirm it is actually a video/audio claim, not a channel or post","If it is a repost/channel, navigate to the underlying stream claim and use that URL","Update youtube-dl/yt-dlp so newly supported stream types are handled","For non-media claims, fetch the content directly from the LBRY API/daemon instead of youtube-dl"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"def is_probable_lbry_stream(url):\n    # channel claims resolve via 'claim'/'channel'; streams usually linked from content pages\n    from urllib.parse import urlparse, unquote\n    path = unquote(urlparse(url).path)\n    return ':' not in path.split('@')[-1] and not path.startswith('/@')","typeGuard":null,"tryCatchPattern":"try:\n    ydl.extract_info(url)\nexcept ExtractorError as e:\n    if 'Unsupported URL' in str(e):\n        resolve_claim_and_follow_to_stream(url)  # e.g. resolve channel -> find video claim\n    else:\n        raise","preventionTips":["Resolve lbry:// claims via the LBRY API first and check value.stream_type before invoking the extractor","Link directly to media claims, not channels or reposts"],"tags":["lbry","unsupported-content","claim-type","extractor"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}