Image quality defaults differ: OpenAI auto, Sume high, Ideogram medium
Omit quality and the tier differs: OpenAI defaults GPT Image 2.5 to auto, Sume to high, Ideogram 4.5 to medium, Image 1.0 to low. Pin it before you budget.

If you omit quality, you do not get the same tier everywhere. OpenAI's guide says both GPT Image 2.5 models default to auto. Sume's docs say an omitted quality on GPT Image 2.5 defaults to high, Ideogram 4.5 defaults to medium, and the legacy Image 1.0 route defaults to low. Port a request between them without setting quality and the output estimate can move by about nine times between low and high.
The defaults, side by side
The differences matter because the tiers are priced very differently. At 1024x1024, GPT Image 2.5 output is estimated at $0.00588 on low and $0.05268 on high; Ideogram 4.5 lists $0.03, $0.06 and $0.22 for low, medium and high.
| Where | Model | Default when omitted |
|---|---|---|
| OpenAI API | GPT Image 2.5 Flare and Sunburst | auto |
| Sume /v1/images | openai/gpt-image-2.5 and -sunburst | high |
| Sume /v1/images | ideogram/ideogram-v4.5 | medium |
| Sume /v1/image-1.0/generate | Image 1.0 (retiring) | low |
Why auto is not the same as high
On OpenAI's side auto lets the model choose. On Sume, auto is accepted but the Sume docs say an auto quality reserves max in the price estimate, so a request that sets quality: "auto" is estimated at the top tier. The default for an omitted field is high. Two spellings that look similar behave differently, and the docs describe both in the Image API page.
The retiring Image 1.0 route defaults to low and tells you to escalate for finals, dense text or packaging.
Pin it in your wrapper
Put the tier in your own config and send it on every call. A one-line default in a client wrapper avoids three surprises: a draft that silently renders at high, a final that silently renders at low, and a migration from one route to another that changes the bill.
import os
import requests
QUALITY = {"draft": "low", "review": "medium", "final": "high"}
def generate(prompt: str, stage: str = "draft", model: str = "openai/gpt-image-2.5"):
r = requests.post(
"https://api.sume.com/v1/images",
headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"},
json={"model": model, "prompt": prompt, "quality": QUALITY[stage]},
timeout=60,
)
r.raise_for_status()
return r.json()
print(generate("A paper boat on a pond", "draft")["usage"])Check the model's own list
Ideogram 4.5 accepts only low, medium and high, while GPT Image 2.5 also accepts xhigh and max. A request that names a value the model does not list is rejected with 400 unsupported_parameter on Sume. Read the model's supported_parameters before you share one config across families.
Sources
Related posts
More in Developers
- image_size presets (landscape_16_9, square_hd): what Sume sends
Named image_size presets map to ratios on Ideogram, Grok, Imagen and Nano Banana, but pass through on GPT and FLUX. What auto means on each, checked in code.
- "image_size must be a named preset" 400 on Sume: how to fix it
Sending image_size as a bare number or an empty object returns a 400 invalid_request. The three accepted shapes, a tested error table, and a safe builder.
- Index-Echo bilingual SRT from a Chinese video to Sume cues
Index-Echo S2TT turns Chinese speech into timed bilingual subtitles in 60-second windows. Convert its SRT into Sume caption cues and burn the English line.
- Syllable-controlled translation for voiceover that must fit
Translated speech often runs longer than the original. Index-Homura targets length-controlled translation. How to budget words against clip time before TTS.
Written by Sume