ytdl-org/youtube-dl · error · ExtractorError
This video is %s.
Error message
This video is %s.
What it means
Raised by the Ruutu extractor when no formats were extracted, there is no DRM element, but the PassthroughVariables variable ns_st_cds is not 'free' - the value (e.g. 'ad', 'subscription', 'rental') is interpolated: 'This video is <ns_st_cds>.'. Expected=True. It distinguishes non-free-but-not-DRM content from DRM content.
Source
Thrown at youtube_dl/extractor/ruutu.py:208
'tbr': tbr,
'preference': preference,
})
extract_formats(video_xml.find('./Clip'))
def pv(name):
node = find_xpath_attr(
video_xml, './Clip/PassthroughVariables/variable', 'name', name)
if node is not None:
return node.get('value')
if not formats:
drm = xpath_text(video_xml, './Clip/DRM', default=None)
if drm:
raise ExtractorError('This video is DRM protected.', expected=True)
ns_st_cds = pv('ns_st_cds')
if ns_st_cds != 'free':
raise ExtractorError('This video is %s.' % ns_st_cds, expected=True)
self._sort_formats(formats)
themes = pv('themes')
return {
'id': video_id,
'title': xpath_attr(video_xml, './/Behavior/Program', 'program_name', 'title', fatal=True),
'description': xpath_attr(video_xml, './/Behavior/Program', 'description', 'description'),
'thumbnail': xpath_attr(video_xml, './/Behavior/Startpicture', 'href', 'thumbnail'),
'duration': int_or_none(xpath_text(video_xml, './/Runtime', 'duration')) or int_or_none(pv('runtime')),
'age_limit': int_or_none(xpath_text(video_xml, './/AgeLimit', 'age limit')),
'upload_date': unified_strdate(pv('date_start')),
'series': pv('series_name'),
'season_number': int_or_none(pv('season_number')),
'episode_number': int_or_none(pv('episode_number')),
'categories': themes.split(',') if themes else [],
'formats': formats,View on GitHub (pinned to 956b8c5855)
Solutions
- Check the interpolated value: 'subscription'/'rental' means payment-gated content - it is not downloadable without entitlement.
- Log in with an account that has the entitlement if the extractor version supports credentials.
- If the clip is visibly free on the site, the ns_st_cds flag is stale - update youtube-dl or the check.
Defensive patterns
Strategy: try-catch
Try / catch
try:
ydl.extract_info(url)
except ExtractorError as e:
if str(e).startswith('This video is ') and str(e).endswith('.'):
tier = str(e)[len('This video is '):-1]
if tier in ('subscription', 'rental'):
skip_permanently(video_id)
else:
investigate(tier)
else:
raise Prevention
- Check the interpolated ns_st_cds tier to know whether payment (not a bug) is the blocker.
- Authenticate with an entitled account if your youtube-dl version supports it.
- Do not retry paywalled clips without credentials - the outcome cannot change.
When it happens
Trigger: Extracting a ruutu.fi clip whose ns_st_cds passthrough variable is e.g. 'subscription' or 'rental' - content gated behind payment but not DRM-wrapped.
Common situations: Non-subscribers hitting paywalled Ruutu clips; content whose free window expired.
Related errors
- Video %s is locked
- This content is only available for subscribers
- This video is DRM protected.
- Cannot download file. Are you logged in?
- This video is only available via cable service provider subs
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/4ef5954bbdffee34.
Report an issue: GitHub.