tonhowtf/omniget · warning
Server returned error 429 (too many requests). Try again…
Error message
Server returned error 429 (too many requests). Try again later.
What it means
Friendly remapping (ytdlp.rs:4429) for yt-dlp stderr containing 'HTTP Error 429': the remote video host rate-limited the extractor's requests. The download cannot proceed until the limit window passes; the library translates the raw yt-dlp output into this user-facing message.
Solutions
- Wait and retry later (minutes to hours depending on the site's limit window).
- Slow down: reduce concurrent downloads and batch size in the app queue.
- Use cookies/browser authentication for the site so authenticated quotas apply.
- Switch network/VPN exit node if the current IP is throttled.
Defensive patterns
Strategy: retry
Try / catch
match result {
Err(e) if e.to_string().contains("429") => {
tokio::time::sleep(Duration::from_secs(300)).await;
retry_download().await; // with capped exponential backoff
}
other => other,
} Prevention
- Throttle batch downloads (limit concurrency and add delays between items).
- Authenticate with site cookies so per-user quotas apply instead of strict per-IP guest limits.
- Avoid datacenter/VPN IPs known to be throttled by video platforms.
- Implement capped exponential backoff around download attempts.
When it happens
Trigger: yt-dlp output matched by `lower.contains("http error 429")` — downloading many videos rapidly, sharing an IP with heavy users (VPN/proxy/datacenter), or a site with aggressive per-IP throttling (e.g. YouTube 'Please sign in' rate limiting, Instagram, Twitter).
Common situations: Batch/queue downloads from one IP; residential IP flagged; cookies absent so guest quotas apply; commercial VPN exit nodes heavily throttled by video platforms.
Understand the failure class
- HTTP status errors: handling 4xx and 5xx responses — how to handle 4xx and 5xx responses properly.
Related errors
- Twitch GQL não respondeu depois de 5 tentativas
- o servidor está limitando o acesso
- o Trakt está limitando o acesso
- o Reddit está limitando o acesso
- X_RATE_LIMIT
AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12).
Data as JSON: /api/errors/d61cd9ff155569af.
Report an issue: GitHub.
Appendix: source
Thrown at src-tauri/omniget-core/src/core/ytdlp.rs:4429
];
PATTERNS.iter().any(|p| stderr_lower.contains(p))
}
fn translate_ytdlp_error(stderr: &str) -> anyhow::Error {
let lower = stderr.to_lowercase();
if lower.contains("errno 22")
&& (lower.contains("textiowrapper")
|| lower.contains("encoding=")
|| lower.contains("exception ignored"))
{
return anyhow!(
"Console encoding error (non-UTF-8 locale). Update yt-dlp in Settings → Dependencies, or run `chcp 65001` in a terminal and reopen the app."
);
}
if lower.contains("http error 429") {
return anyhow!("Server returned error 429 (too many requests). Try again later.");
}
if lower.contains("http error 403") || lower.contains("forbidden") {
return anyhow!("Access denied (403). The video may be private or region-restricted.");
}
if lower.contains("sign in to confirm")
|| lower.contains("login required")
|| stderr.contains("请先登录")
|| stderr.contains("需要登录")
|| stderr.contains("登录后可")
|| stderr.contains("仅登录用户")
|| lower.contains("this video is only available") && lower.contains("members")
{
return anyhow!(
"This video requires login. Import cookies for this site in Settings → Cookies, then retry."
);
}
if lower.contains("invalid data found when processing input") {
return anyhow!(View on GitHub (pinned to 8600b91f42)