tonhowtf/omniget · error · anyhow::Error

gallery-dl process failed

Error message

gallery-dl process failed: {}

What it means

The gallery-dl child process exited with a non-zero status; the {} is the last stderr line matching error/forbidden/not found/unsupported (falling back to 'gallery-dl failed'). The download itself crashed or was rejected by the site — auth failure, removed gallery, or unsupported URL are the usual causes.

Solutions

  1. Read the embedded stderr detail — it names the actual gallery-dl error
  2. Provide valid cookies via the cookie file for sites requiring login
  3. Confirm the gallery URL is still alive and supported by your gallery-dl version (update gallery-dl)
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at src-tauri/src/platforms/gallerydl/mod.rs:282 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/005e5526806752c7. Report an issue: GitHub.

Appendix: source

Thrown at src-tauri/src/platforms/gallerydl/mod.rs:282

                    let _ = progress_tx.send(ProgressUpdate::percent(pct)).await;
                    last_emit = std::time::Instant::now();
                }
            }
            count
        });

        let stderr_task = tokio::spawn(async move {
            let mut buf = String::new();
            let mut lines = BufReader::new(stderr_pipe).lines();
            while let Ok(Some(line)) = lines.next_line().await {
                buf.push_str(&line);
                buf.push('\n');
            }
            buf
        });

        let status = tokio::select! {
            s = child.wait() => s.map_err(|e| anyhow!("gallery-dl process failed: {}", e))?,
            _ = opts.cancel_token.cancelled() => {
                let _ = child.kill().await;
                let _ = reader_task.await;
                let _ = stderr_task.await;
                anyhow::bail!("Download cancelled");
            }
        };

        let _ = reader_task.await;
        let stderr_content = stderr_task.await.unwrap_or_default();

        if !status.success() {
            let detail = stderr_content
                .lines()
                .rev()
                .find(|l| {
                    let l = l.to_lowercase();
                    l.contains("error")

View on GitHub (pinned to 8600b91f42)