tonhowtf/omniget · error
Unsupported URL. Check that the link is correct.
Error message
Unsupported URL. Check that the link is correct.
What it means
Raised when yt-dlp reports 'unsupported url' or 'no suitable infojson': the extractor cannot handle the given link or cannot obtain a valid info JSON for it. The wrapper maps this to a friendly message telling the user to verify the link.
Solutions
- Verify the URL points directly to a supported media page
- Update yt-dlp (pip install -U yt-dlp or via app Settings → Dependencies) since extractors change frequently
- Test the same URL with `yt-dlp -J <url>` on the CLI to confirm
- Use `yt-dlp --list-extractors | grep <site>` to check extractor support
Example fix
// before
let out = run_ytdlp(url);
// after
if lower.contains("unsupported url") || lower.contains("no suitable infojson") {
return anyhow!("Unsupported URL. Check that the link is correct.");
} Defensive patterns
Strategy: validation
Validate before calling
// sanity-check the URL before handing it to yt-dlp
let parsed = url::Url::parse(input)?;
if !parsed.has_host() { return Err(anyhow!("Invalid or unsupported URL")); } Try / catch
match result {
Err(e) if e.to_string().contains("Unsupported URL") => {
eprintln!("Check the link; update yt-dlp if the site should be supported");
}
other => other?,
} Prevention
- Validate URL scheme/host before invoking yt-dlp
- Keep yt-dlp updated; extractors break often
- Support a known-hosts allowlist to fail fast
- Test questionable URLs with `yt-dlp -J` first
When it happens
Trigger: Calling download/info extraction with a URL yt-dlp has no extractor for, a URL to a page with no media, or a site whose extractor broke after a site-side layout/API change.
Common situations: Typos or truncated links, links to login-walled pages masquerading as public, expired share links, or outdated yt-dlp that lacks a new site extractor.
Understand the failure class
Background: "Invalid URL" / "URL cannot be empty": fix the malformed or missing URL behind request-construction failures — this error's family across 50 libraries.
Related errors
- No video formats found for this link.
- a API oficial so aceita URLs publicas (https://…) para os…
- cole a URL de um .m3u8 ou .mpd
- cole o link do vídeo do Bilibili
- cole um link do slideshare.net
AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12).
Data as JSON: /api/errors/a467ec618613f0dd.
Report an issue: GitHub.
Appendix: source
Thrown at src-tauri/omniget-core/src/core/ytdlp.rs:4486
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.");
}
if lower.contains("is not a valid url") || lower.contains("no video formats") {
return anyhow!("No video formats found for this link.");
}
let last_error_line = stderr
.lines()
.rev()
.find(|l| {
let t = l.trim().to_lowercase();
t.starts_with("error:") || t.starts_with("error ")
})
.unwrap_or("")
.trim();
View on GitHub (pinned to 8600b91f42)