tonhowtf/omniget · error
No resolution available
Error message
No resolution available
What it means
download_video_with_fallback seeds its fallback loop with a sentinel error that is returned only when no resolution variant download ever succeeds. If get_resolution_variants returns nothing usable or every variant fails, the caller receives 'No resolution available' (or the last variant's error).
Solutions
- Log each variant URL and test it with curl to see whether all candidates 403/404.
- Regenerate the video URL from fresh media info (do not cache URLs; Reddit CDN links expire).
- Fix get_resolution_variants to always include the unmodified source URL as the last candidate.
- Check that fallback_url query strings are stripped correctly before building DASH URLs (see construct_audio_url pattern).
- Fall back to an external downloader (yt-dlp) when all internal variants fail.
Example fix
// before
let variants = Self::get_resolution_variants(video_url);
let mut last_err = anyhow!("No resolution available");
// after
let mut variants = Self::get_resolution_variants(video_url);
if variants.is_empty() {
variants.push(video_url.to_string()); // always keep the original URL as a last resort
}
let mut last_err = anyhow!("No resolution variants generated for {}", video_url); Defensive patterns
Strategy: fallback
Try / catch
match download(url, out).await {
Err(e) if e.to_string().contains("No resolution available") => {
// last-resort external downloader
yt_dlp::download(url, out).await
}
other => other,
} Prevention
- Always keep the original video URL as the last variant candidate
- Never cache Reddit CDN URLs — re-fetch media info before each download
- Strip query strings from fallback URLs before building DASH candidates
- Log each variant URL + HTTP status to diagnose why all candidates fail
When it happens
Trigger: Calling native_download for a Reddit video whose generated fallback candidate URLs (DASH playlist variants) are all invalid — typically because the video's fallback_url lacks the expected DASH base or Reddit removed/rotated the HLS/DASH assets.
Common situations: Reddit posts whose video was re-hosted/removed after publishing; fallback URLs with query parameters that break candidate construction; posts with video but no DASH renditions; expired CDN links for old posts.
Understand the failure class
Background: 'Something went wrong' / 'Request failed (500)' / 'HTTP error! status: 404' — what failed HTTP requests actually mean and how to find the real cause — this error's family across 28 libraries.
Related errors
AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12).
Data as JSON: /api/errors/6fee38a31090f500.
Report an issue: GitHub.
Appendix: source
Thrown at src-tauri/src/platforms/reddit/mod.rs:213
if let Some(base) = video_url.rfind("DASH_") {
let mut variant = video_url[..base].to_string();
variant.push_str(res);
variants.push(variant);
}
}
}
variants
}
async fn download_video_with_fallback(
&self,
video_url: &str,
output: &std::path::Path,
progress_tx: mpsc::Sender<ProgressUpdate>,
cancel: Option<&tokio_util::sync::CancellationToken>,
) -> anyhow::Result<u64> {
let variants = Self::get_resolution_variants(video_url);
let mut last_err = anyhow!("No resolution available");
for variant in &variants {
if let Some(token) = cancel {
if token.is_cancelled() {
return Err(anyhow!("Download cancelled"));
}
}
match direct_downloader::download_direct(
&self.client,
variant,
output,
progress_tx.clone(),
cancel,
)
.await
{
Ok(bytes) => return Ok(bytes),
Err(e) => {View on GitHub (pinned to 8600b91f42)