ytdl-org/youtube-dl · error · ExtractorError
This video is private.
Error message
This video is private.
What it means
Raised by TriluliluExtractor when the media JSON's 'errors' map contains a truthy 'friends' key — Trilulilu's marker that the media is visible only to the uploader's friends. Expected=True, so it is a definitive access error.
Source
Thrown at youtube_dl/extractor/trilulilu.py:55
'description': 'pop music',
'uploader_id': 'VEVOmixt',
'upload_date': '20151204',
'uploader': 'VEVOmixt',
'timestamp': 1449187937,
'view_count': int,
'like_count': int,
'comment_count': int,
},
}]
def _real_extract(self, url):
display_id = self._match_id(url)
media_info = self._download_json('http://m.trilulilu.ro/%s?format=json' % display_id, display_id)
age_limit = 0
errors = media_info.get('errors', {})
if errors.get('friends'):
raise ExtractorError('This video is private.', expected=True)
elif errors.get('geoblock'):
raise ExtractorError('This video is not available in your country.', expected=True)
elif errors.get('xxx_unlogged'):
age_limit = 18
media_class = media_info.get('class')
if media_class not in ('video', 'audio'):
raise ExtractorError('not a video or an audio')
user = media_info.get('user', {})
thumbnail = media_info.get('cover_url')
if thumbnail:
thumbnail.format(width='1600', height='1200')
# TODO: get correct ext for audio files
stream_type = media_info.get('stream_type')
formats = [{View on GitHub (pinned to 956b8c5855)
Solutions
- Open the URL in an incognito browser to confirm it is friends-only
- If you own the media, change visibility to public
- Log in and pass cookies if the extractor supports it — otherwise the content is inaccessible to tools
- For archival lists, mark trilulilu URLs as likely dead/restricted and skip
Defensive patterns
Strategy: try-catch
Validate before calling
import json, urllib.request
info = json.load(urllib.request.urlopen('http://m.trilulilu.ro/%s?format=json' % display_id))
if info.get('errors', {}).get('friends'):
skip(display_id) # friends-only; extractor will refuse Try / catch
try:
ydl.extract_info(url)
except ExtractorError as e:
if e.expected and 'private' in str(e):
skip(url) Prevention
- Check media visibility anonymously in a browser before queueing
- Trilulilu is largely defunct — pre-check the domain before bulk runs
When it happens
Trigger: Extracting a trilulilu.ro URL for a friends-only upload; m.trilulilu.ro/<id>?format=json returns errors.friends and no stream data.
Common situations: Old Romanian media links where the uploader later restricted visibility; anonymous access attempted where only friend accounts may view. Note trilulilu.ro has been largely defunct, so many URLs now fail regardless.
Related errors
- This video is private
- Bigo says: %s (code %s)
- Video %s does not exist
- This video is DRM protected.
- No downloadable videos found
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/5709aae8f0974e8c.
Report an issue: GitHub.