calesthio/OpenMontage · error · AtlasError

Prediction {prediction_id} reported '{last_status}' but retu

Error message

Prediction {prediction_id} reported '{last_status}' but returned no outputs.

What it means

Raised by poll when the prediction reaches a terminal-success status (e.g. succeeded) but the outputs list in the response is empty or missing. The job claims completion yet produced nothing downloadable, which the client treats as a hard failure rather than returning an empty result that downstream code would mis-handle.

Source

Thrown at tools/atlas_client.py:169

            consecutive_transport_errors += 1
            if consecutive_transport_errors >= 5:
                raise AtlasError(
                    f"Polling prediction {prediction_id} failed after "
                    f"{consecutive_transport_errors} consecutive transport errors: {exc}"
                ) from exc
            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:

View on GitHub (pinned to 95e1c3d0ab)

Solutions

  1. Retry the generation — if it was a transient storage/render glitch the rerun succeeds
  2. Inspect the full prediction JSON via the documented PREDICTION_ENDPOINT/<id> to see logs/alternate output fields
  3. Loosen prompt/parameters if content filtering is suspected (this is speculative — check the job's error/logs fields)
  4. If the field was renamed by an API update, update the client's outputs key
Defensive patterns

Strategy: retry

Try / catch

try:
    data = atlas_client.poll(pid, api_key)
except AtlasError as e:
    if "returned no outputs" in str(e):
        data = atlas_client.poll(*resubmit(endpoint, payload, api_key), api_key)  # one regeneration
    else:
        raise

Prevention

When it happens

Trigger: A video/image model finishing with zero output files (server-side rendering bug, content policy silently dropping output, output upload to storage failing after render); envelope drift where outputs moved to another field name (e.g. output singular).

Common situations: Safety filters consuming the generation without setting a failure status; transient storage-upload failures on Atlas's side; API version changes renaming the outputs field; zero-second or degenerate generation parameters producing no frames.

Related errors


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