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

  1. Confirm the block in a browser; if blocked, the video cannot be legally fetched — stop retrying.
  2. Look for an authorized or alternative source of the same content.
  3. If the block is region-only and legitimate for you, retry via a network in a permitted region.
  4. 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

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


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)