ytdl-org/youtube-dl · error · ExtractorError
This video is currently unavailable. It may still be uploadi
Error message
This video is currently unavailable. It may still be uploading or processing.
What it means
Raised by StreamableIE when the AJAX endpoint ajax.streamable.com/videos/<id> returns a status code other than 2. Status 0 = still uploading, 1 = still processing, 3 = error/unavailable; only 2 (at least one file ready) proceeds. Marked expected=True because it is a normal transient or terminal site state.
Source
Thrown at youtube_dl/extractor/streamable.py:81
return mobj.group('src')
def _real_extract(self, url):
video_id = self._match_id(url)
# Note: Using the ajax API, as the public Streamable API doesn't seem
# to return video info like the title properly sometimes, and doesn't
# include info like the video duration
video = self._download_json(
'https://ajax.streamable.com/videos/%s' % video_id, video_id)
# Format IDs:
# 0 The video is being uploaded
# 1 The video is being processed
# 2 The video has at least one file ready
# 3 The video is unavailable due to an error
status = video.get('status')
if status != 2:
raise ExtractorError(
'This video is currently unavailable. It may still be uploading or processing.',
expected=True)
title = video.get('reddit_title') or video['title']
formats = []
for key, info in video['files'].items():
if not info.get('url'):
continue
formats.append({
'format_id': key,
'url': self._proto_relative_url(info['url']),
'width': int_or_none(info.get('width')),
'height': int_or_none(info.get('height')),
'filesize': int_or_none(info.get('size')),
'fps': int_or_none(info.get('framerate')),
'vbr': float_or_none(info.get('bitrate'), 1000)
})View on GitHub (pinned to 956b8c5855)
Solutions
- If the video was just uploaded, wait for transcoding to finish (typically seconds to a few minutes) and retry the extraction.
- Check https://streamable.com/<id> in a browser: if the page says deleted/expired, the video is gone — re-upload or find a mirror.
- For pipelines, poll with a bounded retry/backoff on this specific expected error rather than failing on the first attempt.
Example fix
# before: single-shot extraction
info = ydl.extract_info(url, download=True)
# after: bounded retry while Streamable processes the upload
import time
for attempt in range(10):
try:
info = ydl.extract_info(url, download=True)
break
except ExtractorError as e:
if not (e.expected and 'unavailable' in str(e)):
raise
if attempt == 9:
raise
time.sleep(15) Defensive patterns
Strategy: retry
Validate before calling
# Check readiness via the same AJAX endpoint the extractor uses
import json, urllib.request
v = json.load(urllib.request.urlopen('https://ajax.streamable.com/videos/%s' % vid))
if v.get('status') != 2:
print('not ready: status=%s (0=uploading 1=processing 3=error)' % v.get('status')) Type guard
def streamable_ready(v):
"""True when the Streamable video has at least one ready file."""
return isinstance(v, dict) and v.get('status') == 2 and bool(v.get('files')) Try / catch
for _ in range(MAX_TRIES):
try:
info = ydl.extract_info(url, download=True)
break
except ExtractorError as e:
if not (e.expected and 'currently unavailable' in str(e)):
raise
time.sleep(BACKOFF)
else:
raise RuntimeError('streamable never became ready: %s' % url) Prevention
- Poll status==2 before handing freshly uploaded Streamable URLs to the downloader.
- Distinguish status 3 (permanent) from 0/1 (transient) and only retry the latter.
- Free Streamable uploads expire — download soon after creation.
When it happens
Trigger: Extracting a streamable.com video immediately after upload (status 0/1), or extracting one whose encode failed or was removed (status 3).
Common situations: Automated pipelines that download a video seconds after it is created on streamable.com; clips deleted by the uploader or by moderation; clips expired from free accounts (Streamable deletes old free uploads).
Related errors
- Unable to download video info
- A network error has occurred.
- Video %s is unavailable
- %s said: %s
- Unable to login: %s
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/44d05f42959a8b4e.
Report an issue: GitHub.