AI wall art canvas: gpt-image-2.5 pixels per inch, 8x10 to 24x36

The biggest 2:3 image gpt-image-2.5 can send is 2336x3504, which is 97 pixels per inch at 24x36. Here is the dpi for five canvas sizes and when to upscale.

5 min readSume
All posts

The largest 2:3 image openai/gpt-image-2.5 can be asked for is 2336x3504 pixels, so a 24x36 inch canvas gets only about 97 pixels per inch from one call. For canvas prints, pick the print ratio first, take the biggest legal size for that ratio, compute the pixels per inch, and add an upscale step when the number is too low.

The limit is not the 3840 maximum edge; it is the 8,294,400-pixel total. A 3840-pixel long edge on a 2:3 print would need 9,830,400 pixels.

The rule the sizes come from

Sume's docs state the custom pixel rule for gpt-image-2.5, and OpenAI's image guide states the same one: both edges multiples of 16, a maximum edge of 3840, aspect ratio at most 3:1, and a total between 655,360 and 8,294,400 pixels. OpenAI adds that resolutions above 2560x1440 are experimental, so test a print-size output before you build a product on it.

Pixels per inch for five canvas sizes (read 2026-10-04)

Each row is the largest legal size at the print's exact ratio. Check it yourself with the script below.

Largest legal gpt-image-2.5 size per print ratio (read 2026-10-04)
PrintLargest legal sizePixelsPixels per inch
8x10 in2560x32008,192,000320.0
12x16 in2448x32647,990,272204.0
16x20 in2560x32008,192,000160.0
18x24 in2448x32647,990,272136.0
24x36 in2336x35048,185,34497.3

Check a size before you send it

The function below applies the documented rule and prints the largest legal size at any ratio.

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
    )


def largest(ratio_w, ratio_h):
    best = None
    for w in range(16, 3841, 16):
        h, rem = divmod(w * ratio_h, ratio_w)
        if rem == 0 and legal(w, h):
            best = (w, h)
    return best


for name, (rw, rh), inches in [("8x10", (4, 5), 8), ("24x36", (2, 3), 24)]:
    w, h = largest(rw, rh)
    print(name, w, h, round(w / inches, 1), "px/in")

When the number is too low

Large canvases are viewed from a distance, so a lower pixel density can be acceptable, but that is a judgement for your printer's file guide, not a number from this page. If you need more pixels, treat generation and upscaling as two steps: Sume's hosted tool list names an image_upscale_create tool, and the Image API's request parameters include no upscale factor.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume