tonhowtf/omniget · warning
Requested format is not available. The download will retry…
Error message
Requested format is not available. The download will retry with a compatible format.
What it means
translate_ytdlp_error at ytdlp.rs:4463 maps stderr containing both 'requested format' and 'not available' to this message. yt-dlp could not satisfy the -f format selector because none of the video's available streams match it. The library throws it with a note that the download will retry with a compatible format.
Solutions
- Let the pipeline retry with a fallback/compatible format selector.
- Loosen the format selector (e.g. use 'best' or 'bestvideo*+bestaudio/best' with height caps like '[height<=720]').
- Update yt-dlp so format extraction reflects the site's current stream list.
- Check the video's actual available resolutions and pick an existing one.
Example fix
// before: rigid selector fails on a 720p-only video let args = ["-f", "bestvideo[height=1080]+bestaudio", url]; // after: capped, with a generic fallback let args = ["-f", "bestvideo[height<=1080]+bestaudio/best", url];
Defensive patterns
Strategy: fallback
Validate before calling
// Probe available formats and pick one that exists before downloading
const formats = await listFormats(url);
const pick = formats.find(f => f.height <= 1080) ?? formats[0];
const selector = pick ? `${pick.format_id}` : 'best'; Try / catch
try {
await download(url, '-f bestvideo[height<=1080]+bestaudio/best');
} catch (e) {
if (isFormatUnavailable(e)) await download(url, '-f best'); // fallback selector
else throw e;
} Prevention
- Always include a generic '/best' fallback in format selectors
- Cap heights (e.g. [height<=1080]) instead of pinning exact resolutions
- Probe formats first for videos known to have limited quality options
When it happens
Trigger: yt-dlp stderr reports 'ERROR: Requested format is not available' — the format selector (e.g. 'bestvideo+bestaudio', a specific format id or height like 1080p) matched no stream offered for this video.
Common situations: Requesting 1080p from a video only uploaded at 720p; format ids shifted after a site change; client-based format filters (e.g. android/ios clients) returning different format lists; stale metadata after a partially failed extraction.
Understand the failure class
Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.
Related errors
- Access denied (403). The video may be private or…
- Console encoding error (non-UTF-8 locale). Update yt-dlp in…
- Downloaded streams are DRM-protected and cannot be merged…
- esse vídeo não tem legenda; ligue o Whisper para transcrever
- Failed to run yt-dlp
AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12).
Data as JSON: /api/errors/04568682cfabda76.
Report an issue: GitHub.
Appendix: source
Thrown at src-tauri/omniget-core/src/core/ytdlp.rs:4463
}
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") {
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.");
}View on GitHub (pinned to 8600b91f42)