ytdl-org/youtube-dl · error · ExtractorError
Video %s does not exist
Error message
Video %s does not exist
What it means
Raised by the XFileShare-family extractor when the page container matches one of the _FILE_NOT_FOUND_REGEXES. These regexes cover the various 'file not found' / 'file deleted' wordings used across the mirrored hosts, so the error means the requested file no longer exists on that host.
Source
Thrown at youtube_dl/extractor/xfileshare.py:211
return list(yield_urls())
def _real_extract(self, url):
host, video_id = self._match_valid_url(url).group('host', 'id')
url = 'https://%s/%s' % (
host,
'embed-%s.html' % video_id if host in ('govid.me', 'vidlo.us') else video_id)
webpage = self._download_webpage(url, video_id)
container_div = get_element_by_id('container', webpage) or webpage
if self._search_regex(
r'>This server is in maintenance mode\.', container_div,
'maint error', group=0, default=None):
raise ExtractorError(clean_html(container_div), expected=True)
if self._search_regex(
self._FILE_NOT_FOUND_REGEXES, container_div,
'missing video error', group=0, default=None):
raise ExtractorError('Video %s does not exist' % video_id, expected=True)
fields = self._hidden_inputs(webpage)
if fields.get('op') == 'download1':
countdown = int_or_none(self._search_regex(
r'<span id="countdown_str">(?:[Ww]ait)?\s*<span id="cxc">(\d+)</span>\s*(?:seconds?)?</span>',
webpage, 'countdown', default=None))
if countdown:
self._sleep(countdown, video_id)
webpage = self._download_webpage(
url, video_id, 'Downloading video page',
data=urlencode_postdata(fields), headers={
'Referer': url,
'Content-type': 'application/x-www-form-urlencoded',
})
title = (View on GitHub (pinned to 956b8c5855)
Solutions
- Confirm the link is dead by opening it in a browser.
- Find a re-upload or alternative host for the same content.
- Remove the URL from your queue — the file will not come back under the same ID.
Defensive patterns
Strategy: try-catch
Try / catch
try:
info = ydl.extract_info(url)
except ExtractorError as e:
if 'does not exist' in str(e):
drop_from_queue(url)
else:
raise Prevention
- Treat file-not-found on lockers as permanent — do not retry.
- Periodically prune dead links from scraped collections.
- Prefer multiple source URLs per item so one dead mirror does not lose the item.
When it happens
Trigger: Requesting a video ID whose page shows a file-deleted notice matched by _FILE_NOT_FOUND_REGEXES (checked right after the maintenance-mode check and before form handling).
Common situations: Files removed for inactivity or ToS violations on file lockers; dead links in scraped or archived playlists; mistyped video IDs.
Related errors
- Video %s has been removed
- clean_html(container_div)
- Invalid path
- Unauthorized user "%s"
- Missing "id" field in extractor result
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/29a3e45cb39f9917.
Report an issue: GitHub.