tonhowtf/omniget · error
Video unavailable or removed.
Error message
Video unavailable or removed.
What it means
translate_ytdlp_error at ytdlp.rs:4468 maps stderr containing 'video unavailable' or 'not available' to this message. yt-dlp reported that the target video cannot be accessed at all — it has been removed, made unavailable, or never existed. The library throws it as a terminal, non-retryable extraction failure.
Solutions
- Verify the URL opens in a browser; if not, the video is genuinely gone — stop retrying.
- Search for a re-upload or an archive (e.g. Wayback) copy of the media.
- If it plays in a browser but fails here, update yt-dlp and retry (client-specific availability quirks).
- Confirm the URL/ID was copied correctly and points to the intended page.
Defensive patterns
Strategy: validation
Validate before calling
// Check the URL resolves before enqueueing
const res = await fetch(url, { method: 'HEAD' });
if (res.status === 404 || res.status === 410) throw new Error('Video unavailable — skip without invoking yt-dlp.'); Try / catch
try {
await download(url);
} catch (e) {
if (isVideoUnavailable(e)) markDead(url); // terminal: no retries
else throw e;
} Prevention
- Validate/normalize URLs before adding them to the queue
- Mark unavailable videos as terminal to avoid futile retries
- Re-check periodically if archival of the content matters
When it happens
Trigger: yt-dlp stderr includes 'video unavailable', 'this video is not available', 'has been removed', 'http error 404', or 'http error 410' while extracting the URL (see the PATTERNS list at ytdlp.rs:4400-4412 that feeds the same family of cases).
Common situations: The uploader deleted the video or set it unavailable; the platform took it down for policy reasons; a typo'd or stale URL/ID; region account restrictions; videos pulled during live-stream end processing.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- Video extraction failed. Update yt-dlp or try again.
- This video is private.
- Video blocked due to copyright.
- Video restricted in your region.
- FFmpeg binary not found after extraction
AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12).
Data as JSON: /api/errors/e5716eba7f238eb1.
Report an issue: GitHub.
Appendix: source
Thrown at src-tauri/omniget-core/src/core/ytdlp.rs:4468
}
if lower.contains("nsig extraction failed") || lower.contains("nsig") {
return anyhow!("Video extraction failed. Update yt-dlp or try again.");
}
if lower.contains("cannot parse data")
|| lower.contains("please report this issue")
|| (lower.contains("confirm you are on the latest version") && lower.contains("yt-dlp"))
{
return anyhow!(
"yt-dlp extractor is broken for this site. Update yt-dlp in Settings → Dependencies, then retry."
);
}
if lower.contains("requested format") && lower.contains("not available") {
return anyhow!(
"Requested format is not available. The download will retry with a compatible format."
);
}
if lower.contains("video unavailable") || lower.contains("not available") {
return anyhow!("Video unavailable or removed.");
}
if lower.contains("private video") {
return anyhow!("This video is private.");
}
if lower.contains("copyright") {
return anyhow!("Video blocked due to copyright.");
}
if lower.contains("geo") && lower.contains("block") {
return anyhow!("Video restricted in your region.");
}
if lower.contains("timed out") || lower.contains("timeout") {
return anyhow!("Connection timed out. Check your internet and try again.");
}
if lower.contains("ffmpeg") && (lower.contains("not found") || lower.contains("no such file")) {
return anyhow!("FFmpeg not found. Install FFmpeg to download this format.");
}
if lower.contains("unsupported url") || lower.contains("no suitable infojson") {
return anyhow!("Unsupported URL. Check that the link is correct.");View on GitHub (pinned to 8600b91f42)