{"record":{"id":"728ed4d5c15132f3","repo":"tonhowtf/omniget","slug":"yt-dlp-extractor-is-broken-for-this-site-update-yt-dlp-in","errorCode":null,"errorMessage":"yt-dlp extractor is broken for this site. Update yt-dlp in Settings → Dependencies, then retry.","messagePattern":"yt-dlp extractor is broken for this site\\. Update yt-dlp in Settings → Dependencies, then retry\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src-tauri/omniget-core/src/core/ytdlp.rs","lineNumber":4458,"sourceCode":"        || lower.contains(\"this video is only available\") && lower.contains(\"members\")\n    {\n        return anyhow!(\n            \"This video requires login. Import cookies for this site in Settings → Cookies, then retry.\"\n        );\n    }\n    if lower.contains(\"invalid data found when processing input\") {\n        return anyhow!(\n            \"Downloaded streams are DRM-protected and cannot be merged. This content is not supported.\"\n        );\n    }\n    if lower.contains(\"nsig extraction failed\") || lower.contains(\"nsig\") {\n        return anyhow!(\"Video extraction failed. Update yt-dlp or try again.\");\n    }\n    if lower.contains(\"cannot parse data\")\n        || lower.contains(\"please report this issue\")\n        || (lower.contains(\"confirm you are on the latest version\") && lower.contains(\"yt-dlp\"))\n    {\n        return anyhow!(\n            \"yt-dlp extractor is broken for this site. Update yt-dlp in Settings → Dependencies, then retry.\"\n        );\n    }\n    if lower.contains(\"requested format\") && lower.contains(\"not available\") {\n        return anyhow!(\n            \"Requested format is not available. The download will retry with a compatible format.\"\n        );\n    }\n    if lower.contains(\"video unavailable\") || lower.contains(\"not available\") {\n        return anyhow!(\"Video unavailable or removed.\");\n    }\n    if lower.contains(\"private video\") {\n        return anyhow!(\"This video is private.\");\n    }\n    if lower.contains(\"copyright\") {\n        return anyhow!(\"Video blocked due to copyright.\");\n    }\n    if lower.contains(\"geo\") && lower.contains(\"block\") {","sourceCodeStart":4440,"sourceCodeEnd":4476,"githubUrl":"https://github.com/tonhowtf/omniget/blob/8600b91f4246848bac346874daa9e61c1fc5677a/src-tauri/omniget-core/src/core/ytdlp.rs#L4440-L4476","documentation":"translate_ytdlp_error at ytdlp.rs:4458 maps stderr matching 'cannot parse data', 'please report this issue', or ('confirm you are on the latest version' plus 'yt-dlp') to this message. yt-dlp's extractor for the site encountered markup/data it cannot interpret, indicating a broken or outdated extractor rather than a user mistake. The library throws it to direct the user to update yt-dlp.","triggerScenarios":"yt-dlp emits 'unable to extract ... cannot parse data', a 'please report this issue' bug-report trailer, or 'please confirm you are on the latest version' during extraction for the target URL.","commonSituations":"A site redesigned its pages so the extractor's regexes no longer match; running an old yt-dlp build shipped with the app; niche sites whose extractors regressed upstream.","solutions":["Update yt-dlp in Settings → Dependencies and retry.","Try the nightly/master yt-dlp build if the stable release predates the site change.","Verify the URL is a supported page of that site (not an embedded/stripped variant).","If it persists on the latest version, report the issue upstream to yt-dlp."],"exampleFix":"// before: failing pinned version\n// yt-dlp 2024.03.10 -> 'unable to extract ... cannot parse data'\n\n// after: upgrade to latest\nlet status = Command::new(\"yt-dlp\").arg(\"-U\").status()?;","handlingStrategy":"retry","validationCode":"// Surface yt-dlp's own update hint before extraction fails\nconst { stderr } = await exec(`yt-dlp --simulate --skip-download ${url}`);\nif (/latest version|cannot parse/i.test(stderr)) await exec('yt-dlp -U');","typeGuard":null,"tryCatchPattern":"try {\n  await download(url);\n} catch (e) {\n  if (isExtractorBroken(e)) {\n    await exec('yt-dlp -U');\n    await download(url); // single retry after update\n  } else throw e;\n}","preventionTips":["Ship an update mechanism for yt-dlp (stable or nightly channel)","Test representative URLs after every yt-dlp upgrade","Report persistent extractor breakage upstream instead of patching around it"],"tags":["ytdlp","extractor","outdated-dependency","parsing"],"backgroundTag":"upstream-api-error","analyzedSha":"8600b91f4246848bac346874daa9e61c1fc5677a","analyzedAt":"2026-09-12T14:29:19.317Z","contentChangedAt":"2026-09-12T14:29:19.317Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}