ytdl-org/youtube-dl · error · ExtractorError

No downloadable videos found

Error message

No downloadable videos found

What it means

Raised by ToggleIE when zero usable formats were collected and no DRM flag was found. The code comment says this is most likely geo-blocking: Toggle restricts streams to Singapore, and the API returns metadata but strips stream URLs for foreign IPs. Marked expected=True.

Source

Thrown at youtube_dl/extractor/toggle.py:161

            elif ext == 'ism':
                formats.extend(self._extract_ism_formats(
                    video_url, video_id, ism_id=vid_format,
                    note='Downloading %s ISM manifest' % vid_format,
                    errnote='Failed to download %s ISM manifest' % vid_format,
                    fatal=False))
            elif ext == 'mp4':
                formats.append({
                    'ext': ext,
                    'url': video_url,
                    'format_id': vid_format,
                })
        if not formats:
            for meta in (info.get('Metas') or []):
                if meta.get('Key') == 'Encryption' and meta.get('Value') == '1':
                    raise ExtractorError(
                        'This video is DRM protected.', expected=True)
            # Most likely because geo-blocked
            raise ExtractorError('No downloadable videos found', expected=True)
        self._sort_formats(formats)

        thumbnails = []
        for picture in info.get('Pictures', []):
            if not isinstance(picture, dict):
                continue
            pic_url = picture.get('URL')
            if not pic_url:
                continue
            thumbnail = {
                'url': pic_url,
            }
            pic_size = picture.get('PicSize', '')
            m = re.search(r'(?P<width>\d+)[xX](?P<height>\d+)', pic_size)
            if m:
                thumbnail.update({
                    'width': int(m.group('width')),
                    'height': int(m.group('height')),

View on GitHub (pinned to 956b8c5855)

Solutions

  1. Use a Singapore VPN/exit and retry
  2. Log in with a Singapore account via cookies if the content needs auth
  3. Confirm in an SG-IP browser that the video actually streams
  4. Catch this expected error in bulk jobs and tag the URL as geo-blocked
Defensive patterns

Strategy: retry

Try / catch

try:
    ydl.extract_info(toggle_url)
except ExtractorError as e:
    if e.expected and 'No downloadable videos found' in str(e):
        retry_with_sg_exit(url)  # likely geo-block; retry via SG IP once

Prevention

When it happens

Trigger: Extracting toggle.sg/mewatch.sg content from outside Singapore; the format loop adds nothing (no ISM, no mp4), Metas lacks an Encryption flag, so the extractor concludes 'No downloadable videos found'.

Common situations: Running downloads from non-SG IPs without a VPN; region-locked live channels; some content restricted even for logged-out SG users.

Related errors


AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14). Data as JSON: /api/errors/ae4e12c0b7415884. Report an issue: GitHub.