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

  1. Update yt-dlp (Settings → Dependencies) to the latest release.
  2. Retry the download after the update.
  3. If the latest yt-dlp still fails, report/wait upstream — the extractor fix usually lands within days.
  4. 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

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


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)