AI blog featured image at 16:9: 1536x864 passes, 1920x1080 does not

For a 16:9 blog featured image, gpt-image-2.5 accepts 1536x864 and 2048x1152 but not 1920x1080, because 1080 is not a multiple of 16. Checked in a table.

5 min readSume
All posts

For a 16:9 blog featured image, ask openai/gpt-image-2.5 for 1536x864 or 2048x1152: both edges are multiples of 16 and the total is inside the allowed range. 1920x1080 is rejected because 1080 is not a multiple of 16.

If you do not need exact pixels, send aspect_ratio: "16:9" and resize in your build step. Custom pixels go on image_size, not on size, which is a shorthand for a resolution tier.

Sizes checked against the rule (read 2026-10-04)

The rule comes from Sume's Image API docs and matches OpenAI's image guide: edges in multiples of 16, maximum edge 3840, aspect ratio 1:3 to 3:1, and 655,360 to 8,294,400 pixels. Sizes above 2560x1440 are described by OpenAI as experimental.

16:9 candidates for a blog header (read 2026-10-04)
SizePixelsLegal for gpt-image-2.5
1280x720921,600yes
1536x8641,327,104yes
1792x10081,806,336yes
1920x10802,073,600no: height is not a multiple of 16
2048x11522,359,296yes
2560x14403,686,400yes

Two ways to ask

The first request lets Sume pick the pixels for the ratio. The second names the pixels; the Image 1.0 page documents image_size as { width, height } or WIDTHxHEIGHT on models that accept custom pixels, so read the model's descriptor before pinning one.

{
  "model": "openai/gpt-image-2.5",
  "prompt": "Flat illustration of a desk with a laptop and a coffee cup, plenty of empty space on the left for a headline",
  "aspect_ratio": "16:9"
}

{
  "model": "openai/gpt-image-2.5",
  "prompt": "Flat illustration of a desk with a laptop and a coffee cup, plenty of empty space on the left for a headline",
  "image_size": {"width": 1536, "height": 864}
}

Check any size yourself

This prints the same verdicts as the table.

def legal(w, h):
    return (
        w % 16 == 0 and h % 16 == 0
        and max(w, h) <= 3840
        and max(w, h) / min(w, h) <= 3
        and 655_360 <= w * h <= 8_294_400
    )


for w, h in [(1280, 720), (1536, 864), (1920, 1080), (2048, 1152)]:
    print(w, h, legal(w, h))

Headline in the page, not the image

Leave the left third empty and set the post title as HTML text. It stays crisp at every screen size, it is searchable, and you never regenerate an image to fix a typo.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume