{"record":{"id":"678e5357ed5fccbc","repo":"ytdl-org/youtube-dl","slug":"no-sources-found-for-video-s-maybe-a-plain-image","errorCode":null,"errorMessage":"No sources found for video %s. Maybe a plain image?","messagePattern":"No sources found for video (.+?)\\. Maybe a plain image\\?","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/imgur.py","lineNumber":137,"sourceCode":"            if not media_fmt.get('ext'):\n                media_fmt['ext'] = mimetype2ext(traverse_obj(\n                    data, ('media', 0, 'mime_type'))) or determine_ext(media_url)\n            if traverse_obj(data, ('media', 0, 'type')) == 'image':\n                media_fmt['acodec'] = 'none'\n                media_fmt.setdefault('preference', -10)\n\n        tw_formats = self._extract_twitter_formats(webpage)\n        if traverse_obj(tw_formats, (0, 'url')) == media_url:\n            tw_formats = []\n        else:\n            # maybe this isn't an animated image/video?\n            self._check_formats(tw_formats, video_id)\n\n        video_elements = self._search_regex(\n            r'(?s)<div class=\"video-elements\">(.*?)</div>',\n            webpage, 'video elements', default=None)\n        if not (video_elements or tw_formats or media_url):\n            raise ExtractorError(\n                'No sources found for video %s. Maybe a plain image?' % video_id,\n                expected=True)\n\n        def mung_format(fmt, *extra):\n            fmt.update({\n                'http_headers': {\n                    'User-Agent': 'youtube-dl (like wget)',\n                },\n            })\n            for d in extra:\n                fmt.update(d)\n            return fmt\n\n        if video_elements:\n            def og_get_size(media_type):\n                return dict((p, int_or_none(self._og_search_property(\n                    ':'.join((media_type, p)), webpage, default=None)))\n                    for p in ('width', 'height'))","sourceCodeStart":119,"sourceCodeEnd":155,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/imgur.py#L119-L155","documentation":"Raised by ImgurIE when three fallback sources all came up empty: the video-elements div regex found nothing, no Twitter player formats were extracted, and no media_url exists. The 'Maybe a plain image?' hint conveys that the post most likely contains only a still image.","triggerScenarios":"An imgur post where the API metadata suggests animation but the gifv webpage contains no <div class='video-elements'> and no alternative media URL - typically static images, deleted media, or pages rewritten by A/B tests.","commonSituations":"Static Imgur posts, removed images, or Imgur markup changes breaking the video-elements regex; mobile-only variants of the page.","solutions":["Open the Imgur page in a browser to see whether the content is animated at all.","If it is static, download it with curl/wget from i.imgur.com.","Update youtube-dl/yt-dlp for current Imgur page markup."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    ydl.extract_info(imgur_url)\nexcept ExtractorError as e:\n    if 'No sources found' in str(e):\n        # last resort: try the direct file endpoints\n        for ext in ('gifv', 'mp4', 'gif'):\n            attempt(f'https://i.imgur.com/{imgur_id}.{ext}')","preventionTips":["Prefer direct i.imgur.com/<id>.gifv|.mp4 URLs when known.","Treat as likely-static content: verify in a browser before retry tooling.","Update extractors when Imgur ships markup variants."],"tags":["extractor","imgur","media-type","scraping","static-image"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}