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
- If it's your own video, change visibility to public/unlisted or import that account's cookies.
- Import cookies for an account that has access to the private video, then retry.
- 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
- Only queue URLs you can open in your own logged-in browser
- Import cookies from the account that owns or can view the video
- Don't retry private videos — access won't change without the uploader
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
- Access denied (403). The video may be private or…
- This video requires login. Import cookies for this site in…
- Video extraction failed. Update yt-dlp or try again.
- Video unavailable or removed.
- Video blocked due to copyright.
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)