tonhowtf/omniget · error
Video extraction failed. Update yt-dlp or try again.
Error message
Video extraction failed. Update yt-dlp or try again.
What it means
translate_ytdlp_error at ytdlp.rs:4452 maps stderr containing 'nsig extraction failed' (or the substring 'nsig') to this message. yt-dlp failed to solve the site's 'n-signature' throttling challenge, so it cannot generate working stream URLs. This almost always means the installed yt-dlp is outdated relative to the site's current obfuscation.
Solutions
- Update yt-dlp (Settings → Dependencies) to the latest release.
- Retry the download after the update.
- If the latest yt-dlp still fails, report/wait upstream — the extractor fix usually lands within days.
- As a stopgap, retry later since the challenge may resolve with a player-code refresh.
Example fix
// before: stale pinned binary fails on new nsig scheme // yt-dlp 2024.01.16 -> 'nsig extraction failed' // after: keep yt-dlp self-updating // run: yt-dlp -U (or reinstall via package manager) let out = run_ytdlp(&["-U"])?; // then retry extraction
Defensive patterns
Strategy: retry
Validate before calling
// Check yt-dlp version freshness before long download sessions
const { stdout } = await exec('yt-dlp --version');
const ageDays = daysSince(ytdlpReleaseDate(stdout.trim()));
if (ageDays > 30) await exec('yt-dlp -U'); Try / catch
try {
await download(url);
} catch (e) {
if (isNsigFailure(e)) {
await exec('yt-dlp -U'); // update, then retry once
await download(url);
} else throw e;
} Prevention
- Auto-update yt-dlp on app start or weekly
- Never pin ancient yt-dlp versions in shipped builds
- Retry with backoff right after site-side player updates
When it happens
Trigger: yt-dlp stderr includes 'nsig extraction failed' or 'nsig' during YouTube extraction — the JavaScript n-parameter deobfuscation player code changed and the local yt-dlp build can't solve it.
Common situations: YouTube shipped a new player JS revision; the bundled/packaged yt-dlp is weeks old; downloads fail or fall back to throttled/broken URLs right after a site-side update.
Related errors
- yt-dlp extractor is broken for this site. Update yt-dlp in…
- Video unavailable or removed.
- This video is private.
- Video blocked due to copyright.
- Video restricted in your region.
AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12).
Data as JSON: /api/errors/6dd33544481c1a5e.
Report an issue: GitHub.
Appendix: source
Thrown at src-tauri/omniget-core/src/core/ytdlp.rs:4452
if lower.contains("sign in to confirm")
|| lower.contains("login required")
|| stderr.contains("请先登录")
|| stderr.contains("需要登录")
|| stderr.contains("登录后可")
|| stderr.contains("仅登录用户")
|| lower.contains("this video is only available") && lower.contains("members")
{
return anyhow!(
"This video requires login. Import cookies for this site in Settings → Cookies, then retry."
);
}
if lower.contains("invalid data found when processing input") {
return anyhow!(
"Downloaded streams are DRM-protected and cannot be merged. This content is not supported."
);
}
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") {View on GitHub (pinned to 8600b91f42)