ytdl-org/youtube-dl · error · ExtractorError

Video %s has been removed

Error message

Video %s has been removed

What it means

Raised by the YapFiles extractor when the player JSON reports the video as deleted: either player['title'] equals the Russian string 'Ролик удален' ('video deleted') or the poster/thumbnail URL contains 'deleted.jpg'. Both are YapFiles' markers for removed files.

Source

Thrown at youtube_dl/extractor/yapfiles.py:70

                'player url', default=None, group='url')

        if not player_url:
            player_url = 'http://api.yapfiles.ru/load/%s/' % video_id
            query = {
                'md5': 'ded5f369be61b8ae5f88e2eeb2f3caff',
                'type': 'json',
                'ref': url,
            }

        player = self._download_json(
            player_url, video_id, query=query)['player']

        playlist_url = player['playlist']
        title = player['title']
        thumbnail = player.get('poster')

        if title == 'Ролик удален' or 'deleted.jpg' in (thumbnail or ''):
            raise ExtractorError(
                'Video %s has been removed' % video_id, expected=True)

        playlist = self._download_json(
            playlist_url, video_id)['player']['main']

        hd_height = int_or_none(player.get('hd'))

        QUALITIES = ('sd', 'hd')
        quality_key = qualities(QUALITIES)
        formats = []
        for format_id in QUALITIES:
            is_hd = format_id == 'hd'
            format_url = url_or_none(playlist.get(
                'file%s' % ('_hd' if is_hd else '')))
            if not format_url:
                continue
            formats.append({
                'url': format_url,

View on GitHub (pinned to 956b8c5855)

Solutions

  1. Confirm removal by opening the yapfiles page in a browser.
  2. Look for the content on another hosting service.
  3. Drop the URL from your queue; deleted files do not return under the same ID.
Defensive patterns

Strategy: try-catch

Try / catch

try:
    info = ydl.extract_info(url)
except ExtractorError as e:
    if 'has been removed' in str(e):
        drop_from_queue(url)
    else:
        raise

Prevention

When it happens

Trigger: Downloading a yapfiles.ru URL where the player metadata (fetched from the player_url JSON with type=json and ref=url) has the deleted title or the deleted.jpg poster.

Common situations: Files deleted by the uploader or for ToS/abuse reasons on the Russian hosting service; dead links in third-party embeds.

Related errors


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