tonhowtf/omniget · error

This video is private.

Error message

This video is private.

What it means

translate_ytdlp_error at ytdlp.rs:4471 maps stderr containing 'private video' to this message. The target video exists but its visibility is set to private, so extraction is refused for unauthenticated/non-authorized requests. The library throws it as a terminal failure distinct from general unavailability.

Solutions

  1. If it's your own video, change visibility to public/unlisted or import that account's cookies.
  2. Import cookies for an account that has access to the private video, then retry.
  3. Otherwise request access from the uploader — private media cannot be extracted without authorization.

Example fix

// before: anonymous attempt on a private video
run_ytdlp(&["-f", "best", private_url])?;

// after: use owner-account cookies
run_ytdlp(&["--cookies", &owner_cookies, "-f", "best", private_url])?;
Defensive patterns

Strategy: validation

Validate before calling

// Confirm accessibility with authenticated cookies before download
const res = await fetch(url, { headers: { cookie: cookiesFor(url) } });
const html = await res.text();
if (/this video is private/i.test(html)) throw new Error('Video is private — request access first.');

Try / catch

try {
  await download(url);
} catch (e) {
  if (isPrivateVideo(e)) notifyUser('This video is private; import cookies with access or skip.');
  else throw e;
}

Prevention

When it happens

Trigger: yt-dlp stderr contains 'private video' (or the related patterns 'this video is private' / 'video is private' from the PATTERNS list at ytdlp.rs:4404-4405) during URL extraction.

Common situations: Sharing a link to a private upload; the uploader flipped a previously public video to private; an unlisted-vs-private mix-up where the ID is valid but access is restricted; trying to download a private video from an account you don't control.

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/c4a1917e417e74d0. Report an issue: GitHub.

Appendix: source

Thrown at src-tauri/omniget-core/src/core/ytdlp.rs:4471

    }
    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.");
    }
    if lower.contains("unable to download") && lower.contains("webpage") {
        return anyhow!("Failed to access the page. Check the link and your connection.");

View on GitHub (pinned to 8600b91f42)