Troubleshooting guide
Fix "nsig extraction failed" in yt-dlp
The full warning is usually "nsig extraction failed: Some formats may be missing", often followed by slow, throttled downloads or missing quality options. It means YouTube changed the JavaScript that signs video URLs, and your yt-dlp build no longer knows how to solve it. This is a YouTube-side change, not something your flags caused.
Quick answer
yt-dlp -U
yt-dlp --versionUpdate and retry. The nsig solver lives inside yt-dlp itself, so the fix always ships as a new release. Confirm the version actually changed — a package-manager install (pip, brew, apt) can silently stay on an old build while -U reports there is nothing to do. If so, update through the same package manager you installed with.
If the latest release still fails
- • YouTube may have changed the player in the last day or two and the counter-fix has not shipped yet. Check the yt-dlp issue tracker — during a breakage the top issue is usually exactly this, with a timeline.
- • Try the nightly build. Fixes land in nightly before the stable release:
yt-dlp --update-to nightly. - • Downloads work but crawl at a few hundred KB/s? That is the same problem — YouTube throttles unsigned requests. Do not tune rate flags; fix the nsig extraction.
Why this error is a repeat offender
YouTube rotates its player JavaScript regularly, and every rotation is a fresh puzzle for yt-dlp to solve. The maintainers are fast — fixes often land within days — but if your pipeline depends on yt-dlp, this warning is the one that will page you at 2am a few times a year. The mitigation is boring and effective: keep yt-dlp on a fast update channel and treat "update first" as step zero of every incident.
The mistake to avoid
Do not pin an old yt-dlp version in production and expect it to keep working. Extractor code has a shelf life measured in weeks. Pinning trades a known small risk (update regressions) for a guaranteed outage later.
If it keeps breaking
Tired of fixing this every time a site changes?
Paste a link to see what a managed import API returns — the one that stays current so your workflow doesn't break.