ytdl-org/youtube-dl · error · ExtractorError
Unable to log in
Error message
Unable to log in
What it means
Raised by VimeoBaseInfoExtractor._login when the login POST fails for any reason other than the 418 bad-credentials case — network errors, unexpected status codes, HTML challenge pages, or the endpoint changing. It is the generic fallback of the except block and is NOT expected=True, so it usually surfaces as an unexpected extraction error.
Source
Thrown at youtube_dl/extractor/vimeo.py:74
'email': username,
'password': password,
'service': 'vimeo',
'token': token,
}
self._set_vimeo_cookie('vuid', vuid)
try:
self._download_webpage(
self._LOGIN_URL, None, 'Logging in',
data=urlencode_postdata(data), headers={
'Content-Type': 'application/x-www-form-urlencoded',
'Referer': self._LOGIN_URL,
})
except ExtractorError as e:
if isinstance(e.cause, compat_HTTPError) and e.cause.code == 418:
raise ExtractorError(
'Unable to log in: bad username or password',
expected=True)
raise ExtractorError('Unable to log in')
def _get_video_password(self):
password = self._downloader.params.get('videopassword')
if password is None:
raise ExtractorError(
'This video is protected by a password, use the --video-password option',
expected=True)
return password
def _verify_video_password(self, url, video_id, password, token, vuid):
if url.startswith('http://'):
# vimeo only supports https now, but the user can give an http url
url = url.replace('http://', 'https://')
self._set_vimeo_cookie('vuid', vuid)
return self._download_webpage(
url + '/password', video_id, 'Verifying the password',
'Wrong password', data=urlencode_postdata({
'password': password,View on GitHub (pinned to 956b8c5855)
Solutions
- Retry after a delay or from a different IP if rate-limited or bot-challenged.
- Confirm plain password login still works in a browser on the same network; if Vimeo now requires JS/verification, extractor password login may be dead — prefer cookies (--cookies).
- If credentials are actually wrong, you will get the 418 branch instead; check which message you received before debugging the network.
- Keep youtube-dl updated for changes to the login flow.
Defensive patterns
Strategy: retry
Try / catch
try:
ydl.extract_info(url)
except ExtractorError as e:
if not e.expected and 'Unable to log in' in str(e):
backoff_retry(url, max_attempts=3) # generic login failure: may be transient (rate limit, challenge)
else:
raise Prevention
- Rate-limit login attempts to avoid 429s and bot challenges.
- Distinguish this generic failure from the 418 bad-password variant before debugging.
- Consider cookie-based auth (--cookies) when password login is challenged.
When it happens
Trigger: The POST to https://vimeo.com/log_in raises an ExtractorError whose cause is not a 418 HTTPError — e.g. 429 rate limit, Cloudflare/interstitial response, timeout, or markup change breaking the follow-up handling.
Common situations: Repeated automated logins triggering rate limiting; Vimeo adding bot protection to the login flow; transient proxy/TLS failures; the login form flow changing (CSRF token extraction already done via _extract_xsrft_and_vuid failing first would raise earlier).
Related errors
- No such Python version: %s
- No login info available, needed for using %s.
- Unable to log in: bad username or password
- This album is protected by a password, use the --video-passw
- Wrong password
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/a7e9a9a756be9478.
Report an issue: GitHub.