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
anyhow::bail! aborts the tweet `download` flow when, after fetching tweet metadata, `info.available_qualities` is empty — i.e. the tweet exists and was parsed but contains no downloadable media entries. Twitter tweets can be text-only, protected (private accounts), or deleted, in which case there is nothing to download.
Solutions
- Verify the tweet actually contains an image or video by opening it in a browser while logged out
- If the account is protected, authenticate or make the media accessible — the downloader cannot see protected media
- Re-check the tweet is not deleted (404 in browser) and use the canonical twitter.com/x.com status URL
- Handle the empty-media case in UI: filter text-only URLs before invoking download
Example fix
// before
if info.available_qualities.is_empty() { /* crash path in caller */ }
// after
if info.available_qualities.is_empty() {
eprintln!("tweet has no media; skipping download");
return Ok(None);
} Defensive patterns
Strategy: validation
Validate before calling
fn tweet_has_media(info: &TweetInfo) -> bool { !info.available_qualities.is_empty() }
if !tweet_has_media(&info) { eprintln!("skipping: no downloadable media"); return Ok(None); } Type guard
fn has_media(info: &TweetInfo) -> bool { !info.available_qualities.is_empty() } Prevention
- Check the tweet in a browser before downloading
- Skip text-only URLs early in bulk pipelines
- Authenticate for protected accounts or skip them
When it happens
Trigger: Calling download with a Twitter URL whose tweet has no media entities (text-only tweet), whose account is protected so media isn't exposed to the caller, or which was deleted after metadata lookup produced an empty quality list.
Common situations: User pastes a link to a plain text tweet expecting video; tweet from a private/protected account; tweet deleted or account suspended between URL submission and download; API returned a truncated/unauthenticated response stripping media.
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
- Download cancelado
- external_data_cache: plugin_id must not be empty
- external_data_cache: namespace must not be empty
- external_data_cache: plugin_id/namespace must not contain…
- plugin id must not be empty
AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12).
Data as JSON: /api/errors/a21e7eb42011b241.
Report an issue: GitHub.
Appendix: source
Thrown at src-tauri/src/platforms/twitter/mod.rs:879
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)