AI image edit changed my crop: aspect_ratio auto vs omitted on Sume
On edit calls, aspect_ratio auto matches the reference; leaving the field out is not the same thing. Ideogram 4.5 keeps the source shape when you omit it.

Send aspect_ratio: "auto" on the edit. The public Image API docs say that on edit and image-to-image calls auto matches the reference, and that omitting the field gives a result that is not the same as auto. The one exception stated in the docs is ideogram/ideogram-v4.5: an edit without aspect_ratio keeps the shape of the source image.
Which rows list auto
auto is only valid on rows whose ratio descriptor lists it. From the repo's capability data:
| Sume model id | Lists auto | Notes |
|---|---|---|
| openai/gpt-image-2.5, 2 | Yes | Also 9 ratios total |
| google/nano-banana-2.1, pro | Yes | Plus resolution tier |
| bytedance-seed/seedream-4 | Yes | Seedream 4.0 only in this family |
| bytedance-seed/seedream-5-lite, 4.5 | No | Pick a ratio from the list |
| black-forest-labs/flux.2-pro, flex | No | Pick a ratio from the list |
| ideogram/ideogram-v4.5 | No | Omit the field to keep the source |
Checklist
If an edit comes back cropped or stretched, check these in order. Each is a parameter fix, not a prompt change.
- Is the row's descriptor listing
auto? If not, pick the closest listed ratio. - Did you send a ratio that differs from the source? That forces a new frame.
- For Ideogram 4.5, did you leave the field out?
- Did you pass
image_size? It has priority overaspect_ratio.
{
"model": "google/nano-banana-2.1",
"prompt": "change the jacket to dark green, keep everything else",
"input_references": [{"type": "image_url", "image_url": {"url": "https://example.com/photo.jpg"}}],
"aspect_ratio": "auto"
}Why it matters
A silent crop breaks product listings that need the same frame in every colorway. Compare the output size with the source in your test before you run a batch.
Sources
Related posts
More in Developers
- Stream partial images from the Sume Image API? 400, use async events
stream: true returns 400 streaming_not_supported and every catalog row reports supports_streaming false. For progress, submit async and read job events.
- 402 insufficient_credits: read required and available credits
The Sume 402 body gives details.required_credits and details.available_credits, whole credits. Compute the shortfall in Python and stop a batch cleanly.
- k6 2.3 --once and --scenario: smoke-test the Sume API without spend
Use k6 --once and --scenario for a Sume API smoke test that costs nothing: models, a deliberate 400, and a paced balance read that counts 429s.
- Kling 4 or Vidu Q4 on Sume: model_not_found and what to call
Sume has no kling-4 or vidu-q4 row, so a submit with those ids fails with 404 model_not_found. Call kling-3, wan-3.0 or sume/auto. Read 2026-10-13.
Written by Sume