calesthio/OpenMontage · error · AtlasError

Atlas Cloud generation failed ({last_status}): {error}

Error message

Atlas Cloud generation failed ({last_status}): {error}

What it means

Raised by poll when the prediction reaches a terminal-failure status (e.g. failed, canceled, error). The server-side error detail from data.error is included, or 'no error detail provided' when the failure carries none. This is the definitive 'generation itself failed' signal, as opposed to transport or polling problems.

Source

Thrown at tools/atlas_client.py:175

            time.sleep(interval)
            elapsed += interval
            continue

        _raise_for_status(response, f"Atlas Cloud poll for {prediction_id}")
        consecutive_transport_errors = 0
        data = _payload_of(response)
        last_status = str(data.get("status", "unknown")).lower()

        if last_status in TERMINAL_SUCCESS:
            outputs = data.get("outputs") or []
            if not outputs:
                raise AtlasError(
                    f"Prediction {prediction_id} reported '{last_status}' but returned no outputs."
                )
            return data
        if last_status in TERMINAL_FAILURE:
            error = data.get("error") or "no error detail provided"
            raise AtlasError(f"Atlas Cloud generation failed ({last_status}): {error}")

        time.sleep(interval)
        elapsed += interval

    raise AtlasError(
        f"Prediction {prediction_id} did not finish within {timeout:.0f}s "
        f"(last status: {last_status}). The job may still complete — "
        f"check {PREDICTION_ENDPOINT}/{prediction_id}"
    )


def upload_media(file_path: str | Path, api_key: str, timeout: int = 120) -> str:
    """Upload a local file and return the hosted URL Atlas assigns to it.

    Used to turn a local reference image into the `image_url` that image-to-video
    models expect. Atlas has answered this endpoint with both {"data":
    {"download_url": ...}} and a bare {"url": ...}, so both shapes are accepted.
    """

View on GitHub (pinned to 95e1c3d0ab)

Solutions

  1. Read the embedded error detail — it usually names the exact constraint violated
  2. Adjust the payload per the detail: shorten prompt, use supported resolution/duration, replace expired reference URLs
  3. Retry once for transient GPU/infra failures before changing anything
  4. If no detail was provided, fetch the prediction record directly to inspect logs
Defensive patterns

Strategy: try-catch

Try / catch

try:
    data = atlas_client.poll(pid, api_key)
except AtlasError as e:
    msg = str(e)
    if "generation failed" in msg and "no error detail" not in msg:
        # parse the server reason and adjust the payload; do not blind-retry
        logger.error("Atlas generation rejected: %s", msg)
        raise
    raise

Prevention

When it happens

Trigger: Model crashing on the prompt (NSFW filter rejection, unsupported resolution/duration combo, prompt too long); GPU out-of-memory on Atlas for heavy requests; job canceled by the platform (queue timeout, maintenance); invalid reference media URL.

Common situations: Prompt content tripping safety systems; requesting aspect ratios or durations the model version doesn't support; expired image_url references passed into image-to-video; heavy multi-reference jobs exceeding platform limits.

Related errors


AI-assisted analysis of calesthio/OpenMontage@95e1c3d0ab (2026-08-15). Data as JSON: /api/errors/731651db407f7522. Report an issue: GitHub.