tonhowtf/omniget · error
o gallery-dl não conseguiu ler essa página
Error message
o gallery-dl não conseguiu ler essa página: {} What it means
dump() waits for gallery-dl to finish; if the process exited non-success AND nothing useful was printed on stdout (text.trim().is_empty()), it throws this error including the collected stderr tail, or 'sem detalhe' when stderr was empty. If stdout has content, the dump is still considered usable despite the failure exit code.
Solutions
- Inspect the stderr detail appended in the error message for the root cause
- Refresh the cookies passed as the cookies parameter if the page requires auth
- Retry if the stderr suggests a transient network/rate-limit issue
- Update gallery-dl if the extractor fails against a changed site layout
Example fix
// before
let dump = gdl::dump(&url, Some(&stale_cookies), limit).await?;
// after
match gdl::dump(&url, Some(&stale_cookies), limit).await {
Ok(d) => d,
Err(e) if e.to_string().contains("não conseguiu ler essa página") => {
refresh_cookies(&mut session)?;
gdl::dump(&url, Some(&session.cookie_path()), limit).await?
}
Err(e) => return Err(e),
} Defensive patterns
Strategy: try-catch
Try / catch
match gdl::dump(&url, cookies, limit).await {
Ok(d) => d,
Err(e) if e.to_string().contains("não conseguiu ler essa página") => {
let detail = e.to_string();
if detail.contains("403") || detail.contains("login") { refresh_cookies()?; }
else if detail.contains("timeout") || detail.contains("temporário") { retry_with_backoff(3, || gdl::dump(&url, cookies, limit)).await?; }
else { return Err(e); }
}
Err(e) => return Err(e),
} Prevention
- Keep cookies fresh and pass them explicitly
- Implement backoff retry for transient network failures
- Update gallery-dl when extractors break on site changes
- Respect rate limits to avoid blocking
When it happens
Trigger: gallery-dl exits with a non-zero status (network failure, 403/auth error, unsupported URL, rate limit) and produced no JSON on stdout; the stderr tail carries the underlying reason.
Common situations: Private or deleted Tumblr page; expired cookies passed to dump(); network outage or DNS failure; gallery-dl extractor broken for a changed page layout; rate limiting by the target site.
Understand the failure class
Background: "API error: {status}" and "HTTP 401/403/404/429/5xx" errors: non-2xx HTTP responses explained — this error's family across 27 libraries.
Related errors
AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12).
Data as JSON: /api/errors/375aec5b2344f884.
Report an issue: GitHub.
Appendix: source
Thrown at src-tauri/omniget-core/src/core/tools/tumblr/gdl.rs:305
super::super::report(progress, id, "started", 0, None, None);
let mut text = String::new();
let mut buf = vec![0u8; 64 * 1024];
let mut last = std::time::Instant::now();
loop {
let n = stdout.read(&mut buf).await?;
if n == 0 {
break;
}
text.push_str(&String::from_utf8_lossy(&buf[..n]));
if last.elapsed() > std::time::Duration::from_millis(300) {
super::super::report(progress, id, "progress", text.len() as u64, None, None);
last = std::time::Instant::now();
}
}
let status = child.wait().await?;
let tail = err_task.await.unwrap_or_default();
if !status.success() && text.trim().is_empty() {
return Err(anyhow!(
"o gallery-dl não conseguiu ler essa página: {}",
if tail.is_empty() {
"sem detalhe".to_string()
} else {
tail
}
));
}
parse_dump(&text)
}
#[derive(Debug, Clone, Default)]
pub struct Downloaded {
pub files: Vec<String>,
pub log_tail: String,
}
/// `gallery-dl -d <dest> --write-metadata <url>`: baixa a mídia e grava oView on GitHub (pinned to 8600b91f42)