tonhowtf/omniget · error
Video blocked due to copyright.
Error message
Video blocked due to copyright.
What it means
translate_ytdlp_error at ytdlp.rs:4474 maps stderr containing 'copyright' to this message. The platform blocked the video for copyright reasons (takedown or content-ID match), so extraction is refused. The library throws it to make the legal/policy cause explicit to the user.
Solutions
- Confirm the block in a browser; if blocked, the video cannot be legally fetched — stop retrying.
- Look for an authorized or alternative source of the same content.
- If the block is region-only and legitimate for you, retry via a network in a permitted region.
- Update yt-dlp and retry if the block message is spurious/outdated.
Defensive patterns
Strategy: validation
Validate before calling
// Detect copyright-block pages before downloading
const html = await (await fetch(url, { headers: { cookie: cookiesFor(url) } })).text();
if (/blocked it on copyright grounds|copyright claim/i.test(html)) throw new Error('Copyright-blocked: do not attempt download.'); Try / catch
try {
await download(url);
} catch (e) {
if (isCopyrightBlock(e)) markBlocked(url); // terminal, policy-driven
else throw e;
} Prevention
- Treat copyright blocks as terminal — never auto-retry
- Source content from authorized channels
- Check region-specific availability in a browser when a block is suspected
When it happens
Trigger: yt-dlp stderr contains the substring 'copyright' during extraction — typically 'This video contains content from ... who has blocked it on copyright grounds' or an equivalent takedown notice.
Common situations: Content-ID matched music/footage causing regional or global blocks; DMCA takedowns of re-uploaded material; broadcaster-licensed streams blocked outside specific territories.
Understand the failure class
Background: Permission denied / not authorized / 403 Forbidden: access-control rejections when the caller lacks the required role, grant, or ownership — this error's family across 18 libraries.
Related errors
- Video extraction failed. Update yt-dlp or try again.
- Video unavailable or removed.
- This video is private.
- 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/80d86baaa85d3698.
Report an issue: GitHub.
Appendix: source
Thrown at src-tauri/omniget-core/src/core/ytdlp.rs:4474
|| (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.");
}
if lower.contains("unable to download") && lower.contains("webpage") {
return anyhow!("Failed to access the page. Check the link and your connection.");
}
if lower.contains("is not a valid url") || lower.contains("no video formats") {
return anyhow!("No video formats found for this link.");View on GitHub (pinned to 8600b91f42)