tonhowtf/omniget · error
No video formats found for this link.
Error message
No video formats found for this link.
What it means
Raised when yt-dlp reports 'is not a valid url' or 'no video formats': either the input is malformed as a URL, or the page parsed fine but yielded no playable formats (removed/private/DRM video). The wrapper maps both to a 'no formats' message.
Solutions
- Confirm the URL is well-formed and points to an actual video page
- Check the video is public and not region/age-restricted in a browser
- Update yt-dlp, as extractor fixes often restore format extraction
- Try `yt-dlp -F <url>` to list formats and confirm availability
Example fix
// before
if !url.starts_with("http") { /* unvalidated input passed down */ }
// after
if lower.contains("is not a valid url") || lower.contains("no video formats") {
return anyhow!("No video formats found for this link.");
} Defensive patterns
Strategy: validation
Validate before calling
// require a well-formed http(s) URL before extraction
let parsed = url::Url::parse(input)?;
if parsed.scheme() != "http" && parsed.scheme() != "https" {
return Err(anyhow!("Not a valid media URL"));
} Try / catch
match result {
Err(e) if e.to_string().contains("No video formats") => {
eprintln!("Video may be private, removed, or region-locked");
}
other => other?,
} Prevention
- Validate URL format and scheme up front
- Check video availability in a browser before automating
- Handle age/region-restricted content explicitly
- Keep yt-dlp updated for extractor fixes
When it happens
Trigger: Passing a non-URL string or a URL with no scheme to the extractor; or a video exists but exposes zero downloadable formats (private/deleted/age/DRM-restricted).
Common situations: Users pasting search-result page URLs, region-locked videos that hide formats, removed livestream VODs, or DRM-protected content yt-dlp cannot parse.
Understand the failure class
Background: "Invalid URL" errors: why new URL(), URI.parse, and reqwest::Url reject your string — missing scheme, whitespace, and bad path format — this error's family across 39 libraries.
Related errors
- Unsupported URL. Check that the link is correct.
- 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/3ab287ad1f8cc041.
Report an issue: GitHub.
Appendix: source
Thrown at src-tauri/omniget-core/src/core/ytdlp.rs:4492
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();
let msg = if !last_error_line.is_empty() {
last_error_line
.strip_prefix("ERROR: ")
.or_else(|| last_error_line.strip_prefix("ERROR:"))
.or_else(|| last_error_line.strip_prefix("error: "))
.unwrap_or(last_error_line)View on GitHub (pinned to 8600b91f42)