GPT Image 2.5 Sunburst: a five-turn product photo edit loop
OpenAI positions Sunburst for tighter control over repeated edits. A five-turn loop on Sume: one source photo, one change per call, a preserve list each time.

OpenAI's launch report describes Sunburst as built for workflows where editing precision matters most, such as production campaigns and polished product imagery. On Sume you call it as openai/gpt-image-2.5-sunburst. The loop that works is simple: one change per call, feed each output back in as the only reference, and repeat the preserve list every turn.
Why a loop and not one giant prompt
A product photo often needs several adjustments: background, shadow, a colour variant, a label fix, a crop. Asking for all of them at once gives the model room to change things you did not mention. One change per call keeps each step checkable, and you can stop at the last good frame.
The five turns
Each turn sends the previous output URL as input_references. Sume mirrors results to its own storage, so data[0].url is a public HTTPS URL you can pass straight into the next request.
| Turn | Single change | Preserve list |
|---|---|---|
| 1 | Replace the background with a soft grey sweep | Product shape, label, colour, camera angle |
| 2 | Add a soft contact shadow | Background, product, label |
| 3 | Recolour the cap to matte black | Shadow, background, label text |
| 4 | Fix the label wording to the exact string you supply | Everything else |
| 5 | Extend the canvas to 4:5 for a feed post | Product position and lighting |
A runnable loop in Python
This script runs the first three turns of the plan; turns 4 and 5 use the same pattern, and for turn 5 set aspect_ratio to 4:5 instead of auto. It handles the documented 200 image response and raises on a 202, where you would instead poll the job. Set SUME_API_KEY and a public source URL first.
import os
import requests
URL = "https://api.sume.com/v1/images"
HEAD = {"Authorization": "Bearer " + os.environ["SUME_API_KEY"]}
KEEP = "Keep the product shape, label text and lighting unchanged. "
STEPS = [
"Replace the background with a soft grey sweep.",
"Add a soft contact shadow under the product.",
"Recolour only the cap to matte black.",
]
ref = os.environ["SOURCE_URL"]
for step in STEPS:
body = {
"model": "openai/gpt-image-2.5-sunburst",
"prompt": KEEP + step,
"quality": "high",
"aspect_ratio": "auto",
"input_references": [{"type": "image_url", "image_url": {"url": ref}}],
}
r = requests.post(URL, headers=HEAD, json=body, timeout=60)
if r.status_code != 200:
raise SystemExit("status %s: %s" % (r.status_code, r.text[:200]))
ref = r.json()["data"][0]["url"]
print(step, ref)What to check
Compare each output against the previous one before moving on; the model description is a vendor claim, and drift can still happen. If a turn returns 202, follow the job envelope and read the images from the job result. Flare and Sunburst share the same price and limits on Sume per the docs, so Sunburst is a quality choice, not a cost one.
Stop conditions
Stop the loop when any of these happens:
- The label text changes in any way.
- The product outline moves relative to the previous frame.
- Two turns in a row change something you did not ask for.
Sources
Related posts
More in Use cases
- Gym promo for Reels: three beats in 8 seconds with Gemini Omni
Write a 9:16 fitness promo for Gemini Omni with timecoded beats, a sound line and a $1.00 720p price on Sume. Includes a prompt you can paste.
- How do I make a Halloween party invitation video with RSVP?
Make the poster with Ideogram 4.5 ($0.075), animate it for 6 seconds ($0.75) and burn the date and RSVP as captions ($0.20): $1.025 on Sume.
- How do I make a 9-minute Halloween haunt sound loop from one track?
Generate one 3-minute ambience track ($0.125) and join it three times with Timeline audio concat ($0.01): a 9-minute file for $0.135 on Sume.
- Hand-held unboxing ad in 9:16: 8 seconds of Omni plus captions, $1.20
An 8-second UGC-style unboxing clip costs $1.00 at 720p on Gemini Omni Flash 1.1 via Sume. Captions add $0.20, so $1.20 per ad and $12 for ten variants.
Written by Sume