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
- Grok Imagine video plus voice and music: a 15-second ad for $0.42
Grok Imagine Video is silent at $0.0125 a second. Add text to speech, a music track and a Timeline join: about $0.42 for a finished 15 s ad on Sume.
- Growth Max Mini Dramas needs 10 video creatives: cut them for $2.20
TikTok's Growth Max Mini Dramas setup page asks for at least 10 video creatives per campaign. Ten 15-second hook cuts with captions cost $2.20 on Sume.
- 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.
- Lip-sync a 12-second micro-drama line: H3 Max $1.21, Fabric $2.26
A speaking close-up in a micro-drama: MiniMax H3 Max lip-sync is $1.21 at 768p, VEED Fabric 1.0 is $2.26 at 720p, with TTS included.
Written by Sume