tonhowtf/omniget · error

configure

Error message

configure: {}

What it means

After uploading a video, publish_web polls Instagram's configure endpoint; when the response status is not 'ok' it stores 'configure: <json body>' as the last error. This means Instagram rejected or has not finished processing the video configure call.

Solutions

  1. Inspect the JSON body after 'configure: ' for the real Instagram error code/message
  2. Increase retry attempts / backoff window for slow transcodes
  3. Re-encode the video to Instagram-friendly settings (H.264/AAC MP4, correct duration/aspect)
  4. If the body shows a hard rejection, fix the media rather than retrying
Defensive patterns

Strategy: retry

Validate before calling

// ensure media is within Instagram constraints before upload
assert!(duration_secs >= 3.0 && duration_secs <= 90.0);
assert!(matches!(codec, "h264"));

Try / catch

match configure_result { Ok(json) if status(&json) != "ok" => { let body = json.to_string(); if is_pending(&body) { backoff_and_retry() } else { return Err(anyhow!("hard rejection: {body}")) } }, ... }

Prevention

When it happens

Trigger: Video configure response with status != 'ok' across retries — e.g. media still transcoding, 202-style pending responses that don't match the retry guard, or an outright rejection.

Common situations: Long videos still processing server-side, Instagram API instability, or videos violating constraints (duration, codec) causing a hard configure rejection.

Understand the failure class

Background: "invalid response format", "malformed payload", "missing data field": when an API returns 200 but the response shape is wrong — this error's family across 23 libraries.

Related errors


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

Appendix: source

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

                if req.share_to_feed || req.kind == "video" {
                    "1"
                } else {
                    "0"
                }
                .into(),
            ));
            // 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;

View on GitHub (pinned to 8600b91f42)