tonhowtf/omniget · error · anyhow::Error
No stdout from gallery-dl
Error message
No stdout from gallery-dl
What it means
A defensive guard in download(): child.stdout was None when taken, meaning the gallery-dl process was spawned without a piped stdout handle (stdio was not configured as piped before spawn). No download output or JSON result can ever be read; this is an internal plumbing error, not a gallery-dl failure.
Solutions
- Ensure the gallery-dl command is built with stdout piped before spawn
- Update the app — newer builds configure stdio correctly
- Report the issue if it reproduces with a current version
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at src-tauri/src/platforms/gallerydl/mod.rs:243 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/3c813e853ad95ba9.
Report an issue: GitHub.
Appendix: source
Thrown at src-tauri/src/platforms/gallerydl/mod.rs:243
if std::fs::metadata(&cookie_file)
.map(|m| m.len() > 0)
.unwrap_or(false)
{
cmd.arg("--cookies").arg(&cookie_file);
}
}
cmd.arg("--").arg(&url);
cmd.kill_on_drop(true);
let mut child = cmd
.spawn()
.map_err(|e| anyhow!("Failed to start gallery-dl: {}", e))?;
let stdout = child
.stdout
.take()
.ok_or_else(|| anyhow!("No stdout from gallery-dl"))?;
let stderr_pipe = child
.stderr
.take()
.ok_or_else(|| anyhow!("No stderr from gallery-dl"))?;
let started_at = SystemTime::now();
let progress_tx = progress.clone();
let reader_task = tokio::spawn(async move {
let mut lines = BufReader::new(stdout).lines();
let mut count: u64 = 0;
let mut last_emit = std::time::Instant::now();
while let Ok(Some(line)) = lines.next_line().await {
let trimmed = line.trim();
if trimmed.is_empty() || trimmed.starts_with('#') || trimmed.starts_with('[') {
continue;
}
count += 1;View on GitHub (pinned to 8600b91f42)