ytdl-org/youtube-dl · error · ExtractorError

This album is protected by a password, use the --video-passw

Error message

This album is protected by a password, use the --video-password option

What it means

Thrown by VimeoAlbumIE when the target album's API metadata reports privacy.view == 'password' but no password was supplied. The extractor queries api.vimeo.com/albums/<id> with a JWT from the page's bootstrap_data and refuses to proceed without credentials. It is marked expected=True, so youtube-dl treats it as a user-facing extraction error, not a bug.

Source

Thrown at youtube_dl/extractor/vimeo.py:997

    def _real_extract(self, url):
        album_id = self._match_id(url)
        viewer = self._download_json(
            'https://vimeo.com/_rv/viewer', album_id, fatal=False)
        if not viewer:
            webpage = self._download_webpage(url, album_id)
            viewer = self._parse_json(self._search_regex(
                r'bootstrap_data\s*=\s*({.+?})</script>',
                webpage, 'bootstrap data'), album_id)['viewer']
        jwt = viewer['jwt']
        album = self._download_json(
            'https://api.vimeo.com/albums/' + album_id,
            album_id, headers={'Authorization': 'jwt ' + jwt},
            query={'fields': 'description,name,privacy'})
        hashed_pass = None
        if try_get(album, lambda x: x['privacy']['view']) == 'password':
            password = self._downloader.params.get('videopassword')
            if not password:
                raise ExtractorError(
                    'This album is protected by a password, use the --video-password option',
                    expected=True)
            self._set_vimeo_cookie('vuid', viewer['vuid'])
            try:
                hashed_pass = self._download_json(
                    'https://vimeo.com/showcase/%s/auth' % album_id,
                    album_id, 'Verifying the password', data=urlencode_postdata({
                        'password': password,
                        'token': viewer['xsrft'],
                    }), headers={
                        'X-Requested-With': 'XMLHttpRequest',
                    })['hashed_pass']
            except ExtractorError as e:
                if isinstance(e.cause, compat_HTTPError) and e.cause.code == 401:
                    raise ExtractorError('Wrong password', expected=True)
                raise
        entries = OnDemandPagedList(functools.partial(
            self._fetch_page, album_id, jwt, hashed_pass), self._PAGE_SIZE)

View on GitHub (pinned to 956b8c5855)

Solutions

  1. Pass the album password: youtube-dl --video-password <pass> <album_url>
  2. If the password is correct but the error persists, verify the album is a showcase whose auth endpoint (vimeo.com/showcase/<id>/auth) still accepts it
  3. Ensure you are not extracting the album through a wrapper tool that drops the videopassword parameter

Example fix

# before
youtube-dl https://vimeo.com/album/12345
# after
youtube-dl --video-password SECRET https://vimeo.com/album/12345
Defensive patterns

Strategy: validation

Validate before calling

import youtube_dl

opts = {'videopassword': 'SECRET'}
if not opts.get('videopassword'):
    raise SystemExit('Password required for this album')
ydl = youtube_dl.YoutubeDL(opts)

Try / catch

from youtube_dl.utils import ExtractorError
try:
    ydl.extract_info('https://vimeo.com/album/12345')
except ExtractorError as e:
    if 'protected by a password' in str(e):
        opts['videopassword'] = getpass('Vimeo password: ')
        ydl.extract_info(url)  # retry once
    else:
        raise

Prevention

When it happens

Trigger: Extracting any https://vimeo.com/album/<id> or /showcase/<id> URL whose album JSON has privacy.view == 'password' while the --video-password option (downloader param 'videopassword') is unset.

Common situations: Running youtube-dl/yt-dlp on a password-protected Vimeo showcase without passing credentials; scripts that enumerate album URLs where some are private; migrations where the password was previously cached.

Related errors


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