GPT Image 2.5: image_size wins over aspect_ratio, plus the pixel rules
Send aspect_ratio 1:1 and image_size 1280x720 to GPT Image 2.5 on Sume and the pixels win. The multiples-of-16, 3:1 and pixel-count rules, with a validator.
On Sume's image API, image_size has priority over aspect_ratio, so a GPT Image 2.5 request that sends aspect_ratio: "1:1" and image_size: {"width":1280,"height":720} returns a 16:9 frame, not a square. The ratio does not break the request; it is simply ignored. The Image API docs list the custom-pixel rules: both edges multiples of 16, longest edge at most 3840, aspect ratio at most 3:1, and 655,360 to 8,294,400 pixels in total.
That makes conflicts easy to write by accident. A config that stores a default ratio and a per-job size will quietly use the size.
What are the exact rules?
The rules are arithmetic, so test them before you pay for a call. Note that size is a different field: it takes a resolution tier only and rejects pixel values.
| Size | Multiple of 16 | Pixels | Result |
|---|---|---|---|
| 1280x720 | Yes | 921,600 | Accepted |
| 1920x1080 | No (1080 is 67.5 x 16) | 2,073,600 | Rejected; use 1920x1088 |
| 1920x1088 | Yes | 2,088,960 | Accepted |
| 3840x1280 | Yes | 4,915,200 | Accepted (3:1, longest edge 3840) |
| 3840x1024 | Yes | 3,932,160 | Rejected (ratio above 3:1) |
How do I check a size in code?
This validator mirrors the documented limits. It is a preflight, not a replacement for the API's own 400, which stays the source of truth.
def gpt_size_ok(w: int, h: int) -> bool:
if w % 16 or h % 16:
return False
if max(w, h) > 3840:
return False
if max(w, h) / min(w, h) > 3:
return False
return 655_360 <= w * h <= 8_294_400
for size in [(1280, 720), (1920, 1080), (1920, 1088), (3840, 1280), (3840, 1024)]:
print(size, gpt_size_ok(*size))What should I do about conflicts?
Pick one source of truth. If you need pixels, send only image_size. If you need a ratio and the model's native size, send only aspect_ratio. The price follows the pixels you ask for: on GPT Image 2.5 at high quality 1280x720 bills about $0.0356, against $0.0659 for 1024x1024. Prices here are list x 1.25 in dollars per image before whole-cent rounding; the catalog's billable formula reads "list x 1.25, ceil usd cents", so confirm the first charge in usage.cost and budget from the invoice, not from the sum.
Sources
Related posts
More in Models
- gpt-image-2 or gpt-image-2.5 to replace gpt-image-1 on Sume?
OpenAI names gpt-image-2.5 as the gpt-image-1 replacement. On Sume, gpt-image-2 and 2.5 differ on references, mask_url, background and quality tiers.
- Ideogram 4.5 headline variants from one ad: 4 edits for about $0.30
Four headline edits of one approved ad on ideogram/ideogram-v4.5 at medium quality cost about $0.30 by Sume's catalog line. Python that runs them in parallel.
- Ideogram 4.5 low, medium or high: a text grid to pick the tier
Run one headline through Ideogram 4.5 at low, medium and high on Sume, read the billed cost of each, and keep the cheapest tier whose text you can read.
- Ideogram 4.5 vs Nano Banana 2 for multi-turn edits: cost per turn
Ideogram 4.5 claims clean multi-turn edits. Compare it with Nano Banana 2 on Sume: price per turn, six-turn totals and a drift test you can run.
Written by Sume