tonhowtf/omniget · error

No media URL available

Error message

No media URL available

What it means

Thrown in download when info.available_qualities is empty after fetching media info, meaning no downloadable media URL was resolved for the Twitch resource. The downloader takes the first (or quality-matched) entry from that list, so an empty list makes selection impossible.

Solutions

  1. Check the media actually exists and is playable on Twitch
  2. Inspect media_info extraction logs for filtered-out formats
  3. Handle sub-only/removed content explicitly before calling download
  4. Retry with quality=None to accept the default

Example fix

// before
let first = info.available_qualities.first().ok_or_else(|| anyhow!("No media URL available"))?;
// after
if info.available_qualities.is_empty() {
    anyhow::bail!("No media URL available for {} (removed, sub-only, or unsupported)", opts.url);
}
let first = &info.available_qualities[0];
Defensive patterns

Strategy: validation

Validate before calling

// check before download
if info.available_qualities.is_empty() {
    // skip download or surface a user-facing 'media unavailable' state
}

Try / catch

match downloader.download(opts).await {
    Err(e) if e.to_string() == "No media URL available" => {
        ui.show_unavailable(&opts.url);
    }
    Err(e) => return Err(e.into()),
    Ok(path) => ui.show_done(path),
}

Prevention

When it happens

Trigger: native_get_media_info returned Ok with zero entries in available_qualities — e.g. the token/url extraction found formats but all were filtered out, or extraction silently produced nothing.

Common situations: VOD/clip deleted or sub-only so no playable formats exist; all qualities unsupported (e.g. only HLS ads); parsing bug after a Twitch player API change.

Understand the failure class

Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.

Related errors


AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12). Data as JSON: /api/errors/052d2999b8027191. Report an issue: GitHub.

Appendix: source

Thrown at src-tauri/omniget-core/src/platforms/twitch.rs:327

                    opts.download_mode.as_deref(),
                    opts.format_id.as_deref(),
                    opts.filename_template.as_deref(),
                    opts.referer.as_deref().or(Some("https://www.twitch.tv/")),
                    opts.cancel_token.clone(),
                    None,
                    opts.concurrent_fragments,
                    false,
                    &[],
                    opts.audio_format.as_deref(),
                )
                .await;
            }
        }

        let first = info
            .available_qualities
            .first()
            .ok_or_else(|| anyhow!("No media URL available"))?;

        let selected = if let Some(ref wanted) = opts.quality {
            info.available_qualities
                .iter()
                .find(|q| q.label == *wanted)
                .unwrap_or(first)
        } else {
            first
        };

        let filename = format!(
            "{}_{}.mp4",
            sanitize_filename::sanitize(&info.title),
            selected.label
        );
        let output_path = opts.output_dir.join(&filename);

        let total_bytes = direct_downloader::download_direct(

View on GitHub (pinned to 8600b91f42)