Instagram 4:5 on GPT Image 2.5: ask for 1088x1360, not 1080x1350
GPT Image 2.5 needs both edges as multiples of 16. 1080x1350 fails that rule; 1088x1360 keeps 4:5 and passes. How to ask on Sume and trim to 1080x1350.

For an Instagram 4:5 portrait on GPT Image 2.5, ask for aspect_ratio: "4:5", or for custom pixels use 1088x1360, then crop 8 pixels of width and 10 of height to reach 1080x1350. The reason is arithmetic: 1080 is not a multiple of 16 (67.5 x 16), and the model requires both edges to be. 1088 is 68 x 16 and 1360 is 85 x 16, with the same 4:5 ratio.
The rule
OpenAI's image generation guide lists the custom size rules for GPT Image 2.5: both width and height must be multiples of 16, the maximum edge is 3840, the aspect ratio must stay between 1:3 and 3:1, and the total pixels must fall between 655,360 and 8,294,400. Sume's Image API docs repeat the same limits for image_size.
1080x1350 has a fine ratio and 1,458,000 pixels, but fails the multiples-of-16 test on the width. Sume's own pricing estimator treats a 1080x1350 request as 1024x1280, so the docs already assume you land on a nearby valid size.
| Size | Multiples of 16 | Ratio | Verdict |
|---|---|---|---|
| 1080x1350 | No (1080 = 67.5 x 16) | 4:5 | Rejected as a custom size |
| 1088x1360 | Yes (68 x 16, 85 x 16) | 4:5 | Valid; crop to 1080x1350 |
| 1024x1280 | Yes (64 x 16, 80 x 16) | 4:5 | Valid; upscale afterwards |
| 1280x1600 | Yes (80 x 16, 100 x 16) | 4:5 | Valid; downscale to 1080x1350 |
Two ways to ask
The simplest request uses the ratio and lets the model pick the pixels:
curl -X POST "https://api.sume.com/v1/images" \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-image-2.5",
"prompt": "A matte ceramic mug on a linen cloth, soft window light",
"aspect_ratio": "4:5",
"quality": "medium"
}'Trim to exactly 1080x1350
If the platform wants exact pixels, ask for 1088x1360 with image_size (check the live catalog descriptor first) and crop it to 1080x1350, or ask for 1280x1600 and downscale. Cropping 8 pixels off the width and 10 off the height of 1088x1360 gives 1080x1350 exactly and keeps the framing. A short Pillow step does it:
from PIL import Image
img = Image.open("portrait.png")
w, h = img.size # 1088, 1360
left, top = (w - 1080) // 2, (h - 1350) // 2
img.crop((left, top, left + 1080, top + 1350)).save("feed.jpg", quality=92)Leave room for the crop
The crop removes under 1% of the frame, but put no text or face within about 12 pixels of the edge. For an edit from a reference, set aspect_ratio: "auto" instead so the output keeps the reference's shape, as the Image API docs recommend. Sume does not serve explicit pixel size on size; use image_size or aspect_ratio as the docs say, and read the model's descriptors before pinning a value.
Sources
Related posts
More in Developers
- Instagram Reels API: a 100-posts-per-24-hours publish budget
The Instagram content publishing API limits an account to 100 API-published posts per moving 24 hours. A tested Python queue that spreads batch output under it.
- IPv6-only webhook endpoint: test Sume delivery before launch
OpenAI's API now accepts IPv6 connections. If your webhook host is IPv6-only, prove Sume can reach it with POST /v1/webhooks/test-deliveries first.
- Is GPT Image 2.5 really 50% faster? Time your own calls on Sume
OpenAI calls Flare 50% faster than Sunburst. That compares two models; it is not a promise for your prompt. A small Python timer for your own calls.
- Is Kling O3 or LTX-2.5 on Sume? Read the catalog before you plan
New video models appear weekly in vendor feeds. Sume's catalog is one authenticated GET: this checks for Kling O3, LTX-2.5 and Wan 3.0 and reads capabilities.
Written by Sume