tonhowtf/omniget · error

nao foi possivel iniciar o whisper-cli

Error message

nao foi possivel iniciar o whisper-cli: {}

What it means

The whisper-cli child process could not be spawned after all argument assembly (language, translate, max_len, prompt, threads) and stdio piping. The {} is the std::io::Error from spawn(), typically meaning the whisper-cli binary is missing from PATH, not executable, or the system refused to create the process.

Solutions

  1. Verify whisper-cli is installed and on PATH (or at the path the app expects) and rerun the transcription
  2. Check the binary is executable and matches the current platform/architecture
  3. Run whisper-cli manually with the same arguments to confirm it starts
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at src-tauri/omniget-core/src/core/tools/whisper.rs:362 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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

Appendix: source

Thrown at src-tauri/omniget-core/src/core/tools/whisper.rs:362

    cmd.args(["-l", lang]);
    if opts.translate {
        cmd.arg("-tr");
    }
    if opts.max_len > 0 {
        cmd.args(["-ml", &opts.max_len.to_string(), "-sow"]);
    }
    if !opts.prompt.trim().is_empty() {
        cmd.args(["--prompt", opts.prompt.trim()]);
    }
    if opts.threads > 0 {
        cmd.args(["-t", &opts.threads.to_string()]);
    }
    cmd.stdin(std::process::Stdio::null())
        .stdout(std::process::Stdio::piped())
        .stderr(std::process::Stdio::piped());
    let mut child = cmd
        .spawn()
        .map_err(|e| anyhow!("nao foi possivel iniciar o whisper-cli: {}", e))?;

    // `-pp` escreve "progress = 42%" no stderr.
    let stderr = child.stderr.take();
    let p2 = progress.clone();
    let id2 = id.clone();
    let stderr_task = tokio::spawn(async move {
        use tokio::io::{AsyncBufReadExt, BufReader};
        let mut tail = String::new();
        if let Some(err) = stderr {
            let mut lines = BufReader::new(err).lines();
            while let Ok(Some(line)) = lines.next_line().await {
                if let Some(rest) = line.trim().strip_prefix("progress =") {
                    if let Ok(pct) = rest.trim().trim_end_matches('%').trim().parse::<u64>() {
                        report(&p2, &id2, "transcribe", pct.min(100), Some(100), None);
                    }
                } else if !line.trim().is_empty() {
                    tail = line;
                }

View on GitHub (pinned to 8600b91f42)