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

  1. Wait and retry later (minutes to hours depending on the site's limit window).
  2. Slow down: reduce concurrent downloads and batch size in the app queue.
  3. Use cookies/browser authentication for the site so authenticated quotas apply.
  4. 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

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

Related errors


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)