Sume image_size vs aspect_ratio: 1080x1350 and GPT size limits
image_size wins over aspect_ratio on Sume's image API. On Nano Banana 1080x1350 becomes 4:5 plus target pixels; GPT needs multiples of 16. Rules and checks.

If you send both image_size and aspect_ratio to the Sume image API, image_size wins. On GPT Image rows a custom size must be a multiple of 16 on each side, with a longest edge of 3840, an aspect no wider than 3:1, and between 655,360 and 8,294,400 pixels. On Nano Banana rows, 1080x1350 is turned into aspect_ratio of 4:5 plus a job target_pixels value, and the exact 1080 by 1350 is described in the docs as a post-step.
This catches people who copy a social-media size straight into a request. The right value depends on the row.
Rules by row family
| Row family | image_size accepted | Notes |
|---|---|---|
| GPT Image | Enum or width and height | x16, max edge 3840, ratio at most 3:1, 655,360 to 8,294,400 px |
| Seedream, FLUX, Qwen, Recraft | Custom pixels | Field wins over aspect_ratio |
| Nano Banana | Maps to a ratio | 1080x1350 becomes 4:5 and target_pixels; exact size is a post-step |
| Any row | size | Tier shorthand only; WxH is rejected, use image_size |
Pick the right field
- For a plain ratio such as 4:5 or 16:9, use
aspect_ratioand aresolutiontier. It works on every row that lists the ratio. - For exact pixels on GPT, FLUX, Seedream, Qwen or Recraft, use
image_sizeand check the rules above. - For Nano Banana, use
aspect_ratioand resize to the exact pixels yourself. - Never send
WxHinsize; it is rejected.
Two examples
A 1080 by 1350 feed post cannot be sent to GPT Image 2.5 as is, because 1080 divided by 16 is 67.5. Use 1088 by 1360, or send 4:5 and crop. The request below uses a safe size:
{
"model": "openai/gpt-image-2.5",
"prompt": "flat illustration of a bakery counter, warm colors",
"image_size": {"width": 1088, "height": 1360}
}Check before you send
Validate the numbers in your own code: both sides divisible by 16, longest edge at most 3840, long side divided by short side at most 3, and total pixels in range. 1088 times 1360 is 1,479,680 pixels, inside the range. A failed validation on your side costs nothing; a bad request is a 400.
Where the pixels end up
The result is a hosted URL on the response, and the job record keeps the final request. If you used image_size, read the width and height of the returned file before you place it in a layout, since a documented post-step on some rows means the file may not be your exact target. Store the target next to the file so the resize step knows what to do.
For a batch, run the validator once at the start of your script, not per image, and log the first failing field.
What Sume does not do
Sume does not round a GPT size to a legal one for you, and it does not resize a Nano Banana result to the exact pixels. If your template needs 1080 by 1350 exactly, do the final resize in your own pipeline.
Sources
Related posts
More in Developers
- Image-to-image in Python: three references on GPT Image 2.5
A 22-line Python script that sends three reference images to POST /v1/images with GPT Image 2.5 and prints the URL and cost. References limits and pitfalls.
- image_url or reference_image_urls: the Omni field for a photo
On Gemini Omni Flash 1.1, one image in image_url is a start frame; one image in reference_image_urls with no frame is reference-to-video. The price is the same.
- Imagen 4 with a reference image: Sume rejects it, use Nano Banana 2.1
Sume lists Imagen 4 Fast and Ultra as text-to-image only: input_references is 0 to 0. To edit a photo, use Nano Banana 2.1 at $0.10 per 1K image.
- Why input_references fails on Imagen, Recraft, Soul and Qwen Max
Five Sume image rows list zero input_references: imagen-4 fast and ultra, recraft-v4, Soul and qwen-image-max. Check the catalog in Python first.
Written by Sume