Retry oversized video downloads instead of giving up permanently

VK can briefly serve a not-yet-transcoded master stream on a capped-height
URL right after a video is published, tripping the size check on the very
first attempt. Treat that as transient (retry with a longer backoff) instead
of failing permanently, and merge the fallback note into a single "Смотреть
видео в VK" link instead of two separate lines.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-04 23:24:06 +05:00
parent 4ad047b5c3
commit d01a17146e
2 changed files with 18 additions and 13 deletions
+9 -4
View File
@@ -112,11 +112,16 @@ class MediaProcessor:
return path, err, is_permanent
last_result = (path, err, is_permanent)
if attempt <= settings.yt_dlp_retry_attempts:
# A fresh upload's lower-quality renditions can still be mid-transcode on
# VK's side - the "720p" URL then briefly serves the full-res master until
# the ladder catches up, which trips our size cap. That's not a permanent
# rejection, just needs more time than a stalled connection does.
delay = 60.0 if "exceeds size limit" in (err or "") else 3.0
logger.warning(
"yt-dlp attempt {}/{} failed transiently for {}: {} - retrying",
attempt, settings.yt_dlp_retry_attempts + 1, url, err,
"yt-dlp attempt {}/{} failed transiently for {}: {} - retrying in {}s",
attempt, settings.yt_dlp_retry_attempts + 1, url, err, delay,
)
await asyncio.sleep(3.0)
await asyncio.sleep(delay)
return last_result
async def _download_video_ytdlp_attempt(
@@ -219,7 +224,7 @@ class MediaProcessor:
)
output_path.unlink(missing_ok=True)
await unregister_active_path(output_path)
return None, "video exceeds size limit", True
return None, "video exceeds size limit", False
return output_path, None, False