GPT Image 2.5 is a quick way to get ad creatives and product scenes where the lettering is legible and the layout stays where you put it. OpenAI released it in September 2026; this page is about the Flare tier, the faster default of the two API models. One request either creates an image from text or edits from up to 16 reference images.
For long chains of consistent edits, the slower GPT Image 2.5 Sunburst uses the same inputs.
What you can make
- Ad visuals with a headline and a fixed composition
- A product placed into a new scene built from several photos
- Logo and icon sketches on a clean background
- Wide 1536x1024 covers and tall 1024x1536 posters
Settings that matter
aspect_ratio:1024x1024,1536x1024,1024x1536orauto. Choose the exact frame instead ofautowhen the layout matters.quality:low,medium,high,xhighormax. Check composition at low or medium, then re-run the winner high.image_urls: attaching them turns the call into an edit. Say which picture provides what, for example "the jar from image 1 on the shelf from image 2".- Write it like a creative brief: subject, place, light, angle, then any exact words in quotes.
- Masks, custom sizes up to 3840 px and transparent output exist at OpenAI but are not on Kadraris yet.
Starter prompt
Square ad for a spicy honey brand: jar on a wooden
board, chili flakes scattered, hard side light, bold
headline "HOT HONEY" at the top, plain cream backgroundSwap the product, props and headline; keep the background plain if you plan to add more text later.
Questions
How much is one GPT Image 2.5 image?
$0.05 per image, with no subscription. The API returns estimated_cost before the job runs, and a failed image costs $0.
Can I get a transparent PNG?
Not on Kadraris for now, so images come with a normal background. For bigger files, GPT Image 2 has 2k and 4k tiers.
How does it compare with Nano Banana?
See Nano Banana 2 vs GPT Image 2.5 and Nano Banana Pro vs GPT Image 2.5.
GPT Image 2.5 in your code
curl https://kadraris.com/v1/generate?wait=60 \
-H "Authorization: Bearer $KADRARIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2.5",
"input": {
"prompt": "Packshot of a white linen sneaker on a concrete block, hard midday sun, crisp shadow, 85mm",
"aspect_ratio": "auto"
}
}'import os, time, requests
API = "https://kadraris.com/v1"
H = {"Authorization": f"Bearer {os.environ['KADRARIS_API_KEY']}"}
task = requests.post(f"{API}/generate", headers=H, json={
"model": "gpt-image-2.5",
"input": {
"prompt": "Packshot of a white linen sneaker on a concrete block, hard midday sun, crisp shadow, 85mm",
"aspect_ratio": "auto"
}
}).json()
while task["status"] in ("queued", "running"):
time.sleep(3)
task = requests.get(f"{API}/tasks/{task['id']}", headers=H).json()
print(task["status"], task["cost"], [o["url"] for o in task["output"]])const API = "https://kadraris.com/v1";
const headers = { Authorization: `Bearer ${process.env.KADRARIS_API_KEY}`, "Content-Type": "application/json" };
let task = await (await fetch(`${API}/generate`, {
method: "POST",
headers,
body: JSON.stringify({
"model": "gpt-image-2.5",
"input": {
"prompt": "Packshot of a white linen sneaker on a concrete block, hard midday sun, crisp shadow, 85mm",
"aspect_ratio": "auto"
}
}),
})).json();
while (task.status === "queued" || task.status === "running") {
await new Promise((r) => setTimeout(r, 3000));
task = await (await fetch(`${API}/tasks/${task.id}`, { headers })).json();
}
console.log(task.status, task.cost, task.output.map((o) => o.url));
Input fields
| Parameter | Type | Allowed | Default |
|---|---|---|---|
prompt * | string | ≤ 32000 chars | |
aspect_ratio | string | auto 1024x1024 1536x1024 1024x1536 | auto |
quality | string | auto low medium high xhigh max | auto |
image_urls | array | max 16 |
Fetch this list as JSON with GET /v1/models/gpt-image-2.5.


























