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

  1. Log each variant URL and test it with curl to see whether all candidates 403/404.
  2. Regenerate the video URL from fresh media info (do not cache URLs; Reddit CDN links expire).
  3. Fix get_resolution_variants to always include the unmodified source URL as the last candidate.
  4. Check that fallback_url query strings are stripped correctly before building DASH URLs (see construct_audio_url pattern).
  5. 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

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)