tonhowtf/omniget · error
{}
Error message
{} What it means
The unclassified sibling of vimeo:{code}: when yt-dlp exits non-zero and error_code() finds no known pattern, run_json returns the raw scrubbed stderr tail as the anyhow message (vimeo.rs:762). Callers and downstream consumers (e.g., the omniget plugin layer that surfaces these messages) receive yt-dlp's own last stderr line verbatim, with no stable prefix to match.
Solutions
- Read the message text — it is the last non-empty stderr line from yt-dlp and names the actual problem.
- Update yt-dlp; most 'unrecognized' failures are extractor breakage fixed upstream.
- Test the URL directly with `yt-dlp -J <url>` to reproduce outside the app.
- If the failure is recurring and classifiable, add a new pattern to error_code() so it maps to vimeo:{code}.
Example fix
// before: raw passthrough
None => anyhow!("{}", msg),
// after: keep passthrough but tag origin for consumers
None => anyhow!("vimeo:unclassified: {msg}"), Defensive patterns
Strategy: try-catch
Try / catch
match one(url).await {
Err(e) if !e.to_string().starts_with("vimeo:") => {
// unclassified yt-dlp stderr — log verbatim, suggest yt-dlp upgrade
eprintln!("erro não classificado do yt-dlp: {e}; tente atualizar o yt-dlp");
}
other => other?,
} Prevention
- Keep yt-dlp current — most unclassified failures are new extractor breakage
- Reproduce with a direct `yt-dlp -J <url>` run before debugging the app
- Verify host DNS/TLS works when messages mention resolution or certificate errors
- Contribute recurring stderr patterns to error_code() so they become vimeo:{code}
When it happens
Trigger: run_json failing with an unrecognized yt-dlp failure: new/unknown Vimeo errors after a site change, network DNS/TLS failures, unsupported URL, yt-dlp crashing with a traceback, or any error message not yet in the error_code table.
Common situations: yt-dlp version outdated after a Vimeo extractor change; no internet/DNS failure on the host; malformed Vimeo URL passed to enumeration; unexpected yt-dlp bug surfaced as a Python traceback.
Related errors
- o yt-dlp devolveu um JSON que não deu para ler
- o yt-dlp não está disponível
- não foi possível iniciar o yt-dlp
- vimeo:{code}
- vimeo:unavailable
AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12).
Data as JSON: /api/errors/adda7160e2398d63.
Report an issue: GitHub.
Appendix: source
Thrown at src-tauri/omniget-core/src/core/tools/vimeo.rs:762
async fn run_json(bin: &Path, args: &[String], secrets: &[&str]) -> Result<String> {
let _slot = crate::core::ytdlp::acquire_ytdlp_slot("vimeo-list").await;
let mut cmd = crate::core::ytdlp::ytdlp_command(bin);
cmd.args(args).stdin(std::process::Stdio::null());
let out = cmd
.output()
.await
.map_err(|e| anyhow!("não foi possível iniciar o yt-dlp: {e}"))?;
if !out.status.success() {
let tail = scrub(&String::from_utf8_lossy(&out.stderr), secrets);
let msg = tail
.lines()
.rev()
.find(|l| !l.trim().is_empty())
.unwrap_or("")
.to_string();
return Err(match error_code(&msg) {
Some(code) => anyhow!("vimeo:{code}"),
None => anyhow!("{}", msg),
});
}
Ok(String::from_utf8_lossy(&out.stdout).to_string())
}
/// O que sobrou de um download. `tail` já passou pelo `scrub`.
struct DownloadOutcome {
file: Option<String>,
meta: Option<(String, String)>,
tail: String,
success: bool,
}
/// Roda um download e conta o que aconteceu.
async fn run_download(
bin: &Path,
args: &[String],
secrets: &[&str],View on GitHub (pinned to 8600b91f42)