Image model and quality as config: gpt-image-2.5 low is 1 cent

Set image model and quality from config on Sume. gpt-image-2.5 bills about 1 cent at low, 2 at medium and 6 to 7 at high, so 1,000 images cost $10 to $70.

5 min readSume
All posts

On Sume, openai/gpt-image-2.5 takes a quality value of auto, low, medium, high, xhigh or max, and the billed price moves a lot with it: about 1 cent per image at low, 2 cents at medium, and 6 to 7 cents at high for 1024-class sizes. Keep both the model id and the quality in config, and 1,000 images cost about $10, $20, or $60 to $70 depending on one word.

Quality is the price lever

The Image API docs say that if you omit quality, the default is high. That default is the expensive one, so a script that never sets quality pays the high price. auto reserves max for the estimate, so it is not a cheap middle setting either.

gpt-image-2.5 billable cost per image at 1024-class sizes, as of 2026-10-08
QualityPer image1,000 images
low1 cent$10
medium2 cents$20
high6 to 7 cents$60 to $70

Also set the size deliberately

image_size accepts named presets, auto or custom pixels. For custom pixels both edges must be multiples of 16 with a 3,840 maximum edge, an aspect ratio of at most 3:1, and 655,360 to 8,294,400 pixels. The price figures above are for 1024-class sizes. For larger sizes, read the figure from the catalog or the job usage.cost rather than extending the table.

Config-driven submit

The script reads two variables and sends them. Both have safe defaults: the cheap quality, so a missing variable does not escalate cost. It prints usage.cost from the job when present, which is the billed USD amount.

import os
import httpx

key = os.environ.get("SUME_API_KEY", "")
if not key:
    raise SystemExit("set SUME_API_KEY")
model = os.environ.get("SUME_IMAGE_MODEL", "openai/gpt-image-2.5")
quality = os.environ.get("SUME_IMAGE_QUALITY", "low")
if quality not in {"auto", "low", "medium", "high", "xhigh", "max"}:
    raise SystemExit(f"bad quality {quality}")

r = httpx.post(
    "https://api.sume.com/v1/images",
    headers={"Authorization": f"Bearer {key}",
             "Idempotency-Key": f"img-{model}-{quality}-001"},
    json={"model": model, "quality": quality, "mode": "async",
          "prompt": "A matte black bottle on marble, soft light"},
    timeout=60,
)
r.raise_for_status()
print(r.status_code, r.json().get("id"))

When to raise it

Use low for thumbnails, drafts and layout tests. Move to medium or high for finals, and only on the prompts that survived the cheap pass. A second model change is also one line: the catalog lists other families with their own per-image list prices, and Sume bills list times 1.25 rounded up to the cent.

Pick the quality by job, not by project

Put quality in the per-request config, not in a global constant. A thumbnail grid, a logo exploration and a final hero image do not need the same setting. A cheap first pass at low lets you throw away most ideas for a cent each, and you can regenerate the keepers at high. At 6 to 7 cents against 1 cent, regenerating 10 keepers from 100 drafts costs 100 x $0.01 + 10 x $0.07 = $1.70, against $7.00 for 100 images at high.

Higher tiers exist. xhigh and max raise the output estimate to $0.09366 and $0.21072 at 1024x1024 before input tokens and Sume pricing, according to the Image API docs, and auto reserves max, so avoid auto when budget matters.

The per-image billable figures for low, medium and high are computed from the Sume catalog, which lists provider cost and applies the 1.25 multiplier rounded up to the cent. Treat them as planning figures for 1024-class sizes and confirm on a real job with the usage.cost field.

Sources

Related posts

More in Pricing

All Pricing posts

Written by Sume