ytdl-org/youtube-dl · warning · ExtractorError

Uploading for replay. Please wait...

Error message

Uploading for replay. Please wait...

What it means

VLive live-stream status error: when the video's status field is 'ENDED', the VOD replay has not been uploaded yet, so the extractor raises 'Uploading for replay. Please wait...' with expected=True. There is nothing to download until the platform finishes processing the replay.

Solutions

  1. Wait for the replay upload to finish (typically minutes to hours) and retry the same URL
  2. Schedule a delayed retry instead of hammering the endpoint
  3. If the replay never appears, the broadcaster may have disabled replays
Defensive patterns

Strategy: retry

Try / catch

from youtube_dl.utils import ExtractorError
import time
for attempt in range(6):
    try:
        ydl.extract_info(url); break
    except ExtractorError as e:
        if 'Uploading for replay' not in str(e):
            raise
        time.sleep(600)  # exponential backoff in production

Prevention

When it happens

Trigger: Extracting a VLive video URL whose API-returned status == 'ENDED' (broadcast finished but replay not yet published).

Common situations: Polling a finished livestream URL minutes after it ended; scheduled jobs that grab the URL as soon as the stream drops.

Related errors


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

Appendix: source

Thrown at youtube_dl/extractor/vlive.py:168

                self._extract_video_info(video_id, vod_id, inkey))
        elif video_type == 'LIVE':
            status = video.get('status')
            if status == 'ON_AIR':
                stream_url = self._call_api(
                    'old/v3/live/%s/playInfo',
                    video_id)['result']['adaptiveStreamUrl']
                formats = self._extract_m3u8_formats(stream_url, video_id, 'mp4')
                self._sort_formats(formats)
                info = get_common_fields()
                info.update({
                    'title': self._live_title(video['title']),
                    'id': video_id,
                    'formats': formats,
                    'is_live': True,
                })
                return info
            elif status == 'ENDED':
                raise ExtractorError(
                    'Uploading for replay. Please wait...', expected=True)
            elif status == 'RESERVED':
                raise ExtractorError('Coming soon!', expected=True)
            elif video.get('exposeStatus') == 'CANCEL':
                raise ExtractorError(
                    'We are sorry, but the live broadcast has been canceled.',
                    expected=True)
            else:
                raise ExtractorError('Unknown status ' + status)


class VLivePostIE(VLiveIE):
    IE_NAME = 'vlive:post'
    _VALID_URL = r'https?://(?:(?:www|m)\.)?vlive\.tv/post/(?P<id>\d-\d+)'
    _TESTS = [{
        # uploadType = SOS
        'url': 'https://www.vlive.tv/post/1-20088044',
        'info_dict': {

View on GitHub (pinned to 956b8c5855)