tonhowtf/omniget · error

o yt-dlp não está instalado

Error message

o yt-dlp não está instalado

What it means

ytdlp_path resolves the yt-dlp executable via find_tool("yt-dlp"). If the tool is not found anywhere it searches, it throws "o yt-dlp não está instalado". yt-dlp is an external binary dependency, so the archive feature cannot run without it.

Solutions

  1. Install yt-dlp (pip install yt-dlp, brew install yt-dlp, or the app's built-in dependency installer).
  2. Ensure the yt-dlp binary's directory is on PATH and the binary is named exactly "yt-dlp".
  3. Verify with `yt-dlp --version` in a terminal that it resolves.
  4. If bundled, re-run the app's dependency download step so find_tool locates it.

Example fix

// before
let out = run_ytdlp(&args).await?;
// after
if crate::core::dependencies::find_tool("yt-dlp").await.is_none() {
    eprintln!("instale o yt-dlp primeiro (pip install yt-dlp)");
    return Ok(());
}
let out = run_ytdlp(&args).await?;
Defensive patterns

Strategy: validation

Validate before calling

// Rust
let installed = crate::core::dependencies::find_tool("yt-dlp").await.is_some();
if !installed {
    eprintln!("instale o yt-dlp antes de usar o arquivo (pip install yt-dlp)");
    return Ok(());
}

Try / catch

match yt_archive::run(&opts, &progress).await {
    Ok(r) => use(r),
    Err(e) if e.to_string().contains("não está instalado") => {
        eprintln!("instale yt-dlp: pip install yt-dlp");
    }
    Err(e) => return Err(e),
}

Prevention

When it happens

Trigger: Calling run_ytdlp or run when yt-dlp is not on PATH and not installed in the app's managed tools directory.

Common situations: Fresh install where the in-app dependency downloader was never run; yt-dlp removed from PATH; using a venv/container without the binary; yt-dlp installed under a different name (e.g. youtube-dl).

Understand the failure class

Background: "not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries — this error's family across 34 libraries.

Related errors


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

Appendix: source

Thrown at src-tauri/omniget-core/src/core/tools/yt_archive.rs:57

        if let Some(p) = &self.path {
            args.push("--cookies".to_string());
            args.push(p.to_string_lossy().to_string());
        }
    }
}

impl Drop for CookieFile {
    fn drop(&mut self) {
        if let Some(p) = &self.path {
            let _ = std::fs::remove_file(p);
        }
    }
}

async fn ytdlp_path() -> anyhow::Result<PathBuf> {
    crate::core::dependencies::find_tool("yt-dlp")
        .await
        .ok_or_else(|| anyhow!("o yt-dlp não está instalado"))
}

/// Roda o yt-dlp e devolve a saída padrão. Erro traz o fim do stderr.
pub async fn run_ytdlp(args: &[String]) -> anyhow::Result<String> {
    let bin = ytdlp_path().await?;
    let out = crate::core::ytdlp::ytdlp_command(&bin)
        .args(args)
        .stdin(std::process::Stdio::null())
        .output()
        .await
        .map_err(|e| anyhow!("o yt-dlp não iniciou: {}", e))?;
    if !out.status.success() {
        let err = String::from_utf8_lossy(&out.stderr);
        let tail: Vec<&str> = err.lines().rev().take(3).collect();
        return Err(anyhow!(
            "yt-dlp falhou: {}",
            tail.into_iter().rev().collect::<Vec<_>>().join(" / ")
        ));

View on GitHub (pinned to 8600b91f42)