tonhowtf/omniget · error
No downloadable media found for this tweet (it may be…
Error message
No downloadable media found for this tweet (it may be text-only, protected, or deleted)
What it means
The Twitter downloader fetches tweet metadata and builds available_qualities; when the tweet exposes zero downloadable media variants it bails with this message. It guards against trying to select a quality from an empty list.
Solutions
- Verify the tweet actually contains media (video/image) before downloading.
- Check the account is public and the tweet is not deleted.
- Pass valid auth cookies if the media requires login to view.
- Update the extractor/core if Twitter changed its API response shape.
Defensive patterns
Strategy: validation
Validate before calling
let info = fetch_tweet_info(url).await?;
if info.available_qualities.is_empty() {
// surface a friendly message or skip before calling download
return Err(anyhow!("tweet has no downloadable media"));
} Try / catch
match download(url, opts).await {
Err(e) if e.to_string().contains("No downloadable media") => notify_user_no_media(),
other => other?,
} Prevention
- Check the tweet contains media before downloading
- Confirm the account is public and tweet not deleted
- Supply auth cookies for protected content
- Keep the extractor updated
When it happens
Trigger: Calling download on a tweet whose info.available_qualities.len() == 0 — text-only tweets, protected/private accounts, deleted tweets, or media that failed extraction.
Common situations: User pastes a URL to a plain-text tweet; tweet requires login (protected); tweet was deleted between listing and download; extractor changes broke variant parsing.
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/2d1d579cbd2219fd.
Report an issue: GitHub.
Appendix: source
Thrown at src-tauri/omniget-core/src/platforms/twitter.rs:813
opts.download_mode.as_deref(),
opts.format_id.as_deref(),
opts.filename_template.as_deref(),
opts.referer.as_deref().or(Some("https://x.com/")),
opts.cancel_token.clone(),
None,
opts.concurrent_fragments,
false,
&extra_flags,
opts.audio_format.as_deref(),
)
.await;
}
}
let count = info.available_qualities.len();
if count == 0 {
anyhow::bail!(
"No downloadable media found for this tweet (it may be text-only, protected, or deleted)"
);
}
if count == 1 {
let quality = info.available_qualities.first().unwrap();
let filename = format!(
"{}.{}",
sanitize_filename::sanitize(&info.title),
quality.format
);
let output = opts.output_dir.join(&filename);
let bytes = direct_downloader::download_direct(
&self.client,
&quality.url,
&output,
progress,View on GitHub (pinned to 8600b91f42)