tonhowtf/omniget · error

e

Error message

e

What it means

Inside the configure retry loop, errors matching IgError::Other containing 'Transcode', 'not ready', or '202' are treated as retryable and stored as the last error (anyhow!(e)); if all retries are exhausted this message is returned. It surfaces the raw transcode/pending message from Instagram.

Solutions

  1. Increase the number of retries or the sleep duration (4 + attempt*3 seconds)
  2. Re-encode the video to smaller dimensions/bitrate so transcoding completes faster
  3. Verify with the stored message whether processing eventually succeeds on a manual reconfigure

Example fix

// before
last = Some(anyhow!(e));
// after (bounded but longer window)
tokio::time::sleep(std::time::Duration::from_secs(4 + attempt * 5)).await; // and allow more attempts
Defensive patterns

Strategy: retry

Validate before calling

// prefer shorter, standard-encoded videos that transcode quickly
assert!(file_size_mb <= 100 && duration_secs <= 60);

Try / catch

loop with attempt cap: if error contains "Transcode"/"not ready"/"202", sleep with exponential backoff up to N attempts, then surface the last transcode message

Prevention

When it happens

Trigger: Instagram repeatedly reports the video as transcoding/not-ready (or HTTP 202) for every retry attempt in publish_web's video path.

Common situations: Very large or long videos taking longer than the retry window to process, or Instagram-side processing delays.

Understand the failure class

Background: Request timed out: what client-side request timeouts mean across libraries (Request timed out, TIMED_OUT, APITimeoutError) — this error's family across 39 libraries.

Related errors


AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12). Data as JSON: /api/errors/e011675e680bc496. Report an issue: GitHub.

Appendix: source

Thrown at src-tauri/omniget-core/src/core/tools/instagram/publish.rs:450

            ));
            // O Instagram pode ainda estar transcodificando: tenta algumas vezes.
            let mut last = None;
            for attempt in 0..6 {
                match client
                    .post_form("/api/v1/media/configure_to_clips/?video=1", &form)
                    .await
                {
                    Ok(json) if s(&json, "status") == "ok" => {
                        report("done", 3, 3);
                        return Ok(result_of(&json));
                    }
                    Ok(json) => last = Some(anyhow!("configure: {}", json)),
                    Err(IgError::Other(e))
                        if e.contains("Transcode")
                            || e.contains("not ready")
                            || e.contains("202") =>
                    {
                        last = Some(anyhow!(e));
                    }
                    Err(e) => return Err(m(e)),
                }
                tokio::time::sleep(std::time::Duration::from_secs(4 + attempt * 3)).await;
            }
            Err(last.unwrap_or_else(|| anyhow!("o Instagram nao confirmou o video")))
        }
        "carousel" => {
            if req.files.len() < 2 || req.files.len() > 20 {
                return Err(anyhow!("um carrossel tem de 2 a 20 arquivos"));
            }
            let total = req.files.len() as u64 + 1;
            let sidecar_id = upload_id();
            let mut children: Vec<Value> = Vec::new();
            for (i, f) in req.files.iter().enumerate() {
                report("upload", i as u64, total);
                let path = Path::new(f);
                let uid = format!("{}{}", upload_id(), i);

View on GitHub (pinned to 8600b91f42)