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.

5 min readSume
All posts

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.

Candidate 4:5 sizes against the GPT Image 2.5 rules (read 2026-10-04)
SizeMultiples of 16RatioVerdict
1080x1350No (1080 = 67.5 x 16)4:5Rejected as a custom size
1088x1360Yes (68 x 16, 85 x 16)4:5Valid; crop to 1080x1350
1024x1280Yes (64 x 16, 80 x 16)4:5Valid; upscale afterwards
1280x1600Yes (80 x 16, 100 x 16)4:5Valid; 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

All Developers posts

Written by Sume