GPT-Image-2.5 Flare

GPT-Image-2.5 Flare is OpenAI's fastest model for high-quality image generation and editing, delivering higher-quality images than GPT Image 2 at 50% lower latency. It improves natural lighting, texture detail, reference-subject preservation, localized editing, and consistency across iterative edits, while handling complex layouts and transparent backgrounds. It is designed for creator content, product experiences, visual search, rapid prototyping, and high-volume generation.

Complete technical specification for integration
Ready-to-use code snippets for common workflows
Step-by-step tutorials for advanced use cases
← All GuidesEditing images
How to edit an image with GPT-Image-2.5 Flare: one source, one written instruction, and the composition, lighting and detail the model holds while it changes what you named.
Introduction
Regenerating an image to change one thing about it gives you a different image. The prompt shifts, the model composes again, and the version somebody already signed off on does not come back.
An edit works on the file you already have. You send one image and one written instruction, and Flare returns that image with the change you named applied. OpenAI's stated improvement over GPT Image 2 is precisely this: editing only what was asked for while the rest of the frame holds, on more complicated subjects and backgrounds than the previous model could keep steady.
Drag the handle across. The legs, the cushion, the shadow under the frame and the fall of light across the seat are the same on both sides, because only the upholstery was named.
This guide covers the request, how to write an instruction the model can scope, changing one element, replacing what surrounds a subject, adding and removing things, and where the model stops being reliable.
The request
An edit is an ordinary generation call with the source passed in inputs.referenceImages.
import { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'openai:gpt-image@2.5-flare',
positivePrompt: 'Change only the oatmeal bouclé upholstery to a deep forest green velvet. Preserve the frame, the pale oak legs, the cushion, the shadow under the sofa and the way the light falls across the seat. Keep the wall, the floor, the framing and the lighting unchanged.',
inputs: {
referenceImages: [
'https://im.runware.ai/image/os/a14d18/ws/2/ii/7e1f9a2b-4c60-4d83-9152-6a8b0c3d5e74.jpg'
]
},
width: 1536,
height: 1024
})import asyncio
import os
from runware import Runware
async def main():
async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
results = await client.run({
"model": "openai:gpt-image@2.5-flare",
"positivePrompt": "Change only the oatmeal bouclé upholstery to a deep forest green velvet. Preserve the frame, the pale oak legs, the cushion, the shadow under the sofa and the way the light falls across the seat. Keep the wall, the floor, the framing and the lighting unchanged.",
"inputs": {
"referenceImages": [
"https://im.runware.ai/image/os/a14d18/ws/2/ii/7e1f9a2b-4c60-4d83-9152-6a8b0c3d5e74.jpg"
]
},
"width": 1536,
"height": 1024
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "imageInference",
"taskUUID": "5a7b3c9d-2e14-4f68-b035-8c1d7e2a9f43",
"model": "openai:gpt-image@2.5-flare",
"positivePrompt": "Change only the oatmeal bouclé upholstery to a deep forest green velvet. Preserve the frame, the pale oak legs, the cushion, the shadow under the sofa and the way the light falls across the seat. Keep the wall, the floor, the framing and the lighting unchanged.",
"inputs": {
"referenceImages": [
"https://im.runware.ai/image/os/a14d18/ws/2/ii/7e1f9a2b-4c60-4d83-9152-6a8b0c3d5e74.jpg"
]
},
"width": 1536,
"height": 1024
}
]'runware run openai:gpt-image@2.5-flare \
positivePrompt="Change only the oatmeal bouclé upholstery to a deep forest green velvet. Preserve the frame, the pale oak legs, the cushion, the shadow under the sofa and the way the light falls across the seat. Keep the wall, the floor, the framing and the lighting unchanged." \
inputs.referenceImages.0=https://im.runware.ai/image/os/a14d18/ws/2/ii/7e1f9a2b-4c60-4d83-9152-6a8b0c3d5e74.jpg \
width=1536 \
height=1024{
"taskType": "imageInference",
"taskUUID": "5a7b3c9d-2e14-4f68-b035-8c1d7e2a9f43",
"model": "openai:gpt-image@2.5-flare",
"positivePrompt": "Change only the oatmeal bouclé upholstery to a deep forest green velvet. Preserve the frame, the pale oak legs, the cushion, the shadow under the sofa and the way the light falls across the seat. Keep the wall, the floor, the framing and the lighting unchanged.",
"inputs": {
"referenceImages": [
"https://im.runware.ai/image/os/a14d18/ws/2/ii/7e1f9a2b-4c60-4d83-9152-6a8b0c3d5e74.jpg"
]
},
"width": 1536,
"height": 1024
}Response
[
{
"taskType": "imageInference",
"taskUUID": "5a7b3c9d-2e14-4f68-b035-8c1d7e2a9f43",
"imageUUID": "c3d5e7f9-0a12-4b34-8c56-9d0e1f2a3b45",
"imageURL": "https://im.runware.ai/image/os/a14d18/ws/2/ii/c3d5e7f9-0a12-4b34-8c56-9d0e1f2a3b45.jpg"
}
]Three things are worth noticing in that payload:
inputs.referenceImagesis an array of strings, each a UUID, URL, data URI or base64 image. One entry is an edit. Several entries build a new image from more than one source, which is subject consistency.positivePromptcarries the instruction, not a description of the finished image. It is the whole interface unless you also send a mask, covered in masked editing.widthandheightare still required, and they decide the shape of what comes back.
Send the source's own dimensions on an edit. width and height are required on every call, and asking for a different shape than the source makes the model reframe the scene while it edits, so the result no longer lines up against the original for a before and after. A 1536 × 1024 source edited at 1024 × 1024 comes back recomposed, not cropped.
Writing the instruction
An instruction has two halves: name the change, then name what survives it. The model decides what to hold constant at the same moment it decides what to alter, and an instruction that stops after the change hands the second half to its judgment.
The same source, edited twice. Once with the whole job left to the model, and once with a target, a change and a list of everything that had to come through untouched.


Make her outfit warmer.

Change only the sage green quilted jacket to a rust orange one. Preserve its quilting, its fit and the way it hangs. Keep the woman, her t-shirt, her jeans, her trainers, the concrete wall, the framing and the lighting unchanged.
"Warmer" is a judgment call, and the model made a different one than you did. It read warmth as clothing rather than colour: the t-shirt came back as a wool turtleneck, the jeans as corduroy, the trainers as suede, and the jacket picked up a stand collar without ever turning warm in tone. Nothing in that frame is wrong, and none of it is what you asked for. The breakdown above lands on one garment because it names the target, the new value and the things that keep what they already had.
The word carrying the most weight is "only". It marks the sentence as a scoped edit rather than a description of an image you would like, and without it the model reads the whole instruction as a fresh brief.
Describe the finished state rather than the operation. "Change only the jacket to rust orange" gives the model a frame to render. "Apply a hue shift to the jacket" gives it an image-processing verb to interpret, and it is not an image processor.
Changing one element
The narrowest edit changes one property of one object already in the frame. Colour, finish and material all behave the same way, because the object and its position are already fixed and only its surface has to be worked out again.
A finish change asks more of the model than a colour change, because the surface has to answer the light that is already in the shot. Naming the optical behaviour is what sells it, so the instruction asks for the worktop reflections to survive rather than just asking for steel. One product shoot turns into a full colourway or finish run this way, which is the volume case for catalogue and listing work.
Replacing what surrounds the subject
The widest edit runs the other way and keeps the subject while replacing everything around it. A lifestyle shot becomes a packshot without a second shoot, and the product keeps the angle and the light it was photographed with.
Two clauses do the work: what to replace and what the subject keeps. Listing the subject's properties one by one (size, position, angle, the coil of the strap, the light) reads as over-explaining and is the difference between the bag surviving the move and the model quietly rebuilding it a little larger and a little straighter.
The catch is the light. A product photographed in dappled shade carries that shade on its surfaces, and a bone-white studio backdrop behind it will not look like a studio shot until the light on the product matches. Where the two have to agree, ask for the relight in the same instruction.
Adding and removing
Both work, and they are not equally reliable. Removing something is the safer half, because the model only has to work out what was behind it. The same desk, edited twice.


Remove the glass of water from the desk and leave the surface it stood on clean and empty. Keep the desk, the laptop, the notebook, the chair, the wall, the framing and the lighting unchanged.

Add a small potted plant with trailing leaves to the right of the laptop on the desk. Keep the desk, the laptop, the notebook, the glass, the chair, the wall, the framing and the lighting unchanged.
Flip between the three and watch the right-hand end of the desk. The removal took the coaster under it with it: the instruction asked for the surface to be left clean and empty and never named the coaster as something to keep, so the model read the whole setting as going. An addition has a harder job, because it has to invent an object, place it, scale it to the scene and light it from the direction the rest of the frame is lit. Anchor a new object to something already in the picture ("to the right of the laptop", "on the shelf below the vases") and it lands far more often than it does from a bare instruction to add one.
Where it drifts
Edits get less dependable as the instruction moves away from what the source already contains.
Three requests are worth knowing about before you spend a call on them. A new camera angle is not an edit: the model has to invent a view that was never photographed, so what returns is a different room rather than yours from elsewhere. Rewriting text inside an image is the least reliable operation of all, and replacement wording tends to come back misspelled, mirrored on a curved surface, or simply untouched. An object with an unusual silhouette, or one that has to be placed into somebody's hand, is where additions fail most often.
Read the limits the other way and they describe what the model is for. Anything already in the frame can be recoloured, refinished, removed or moved onto a different background, because its shape and its lighting are already settled. Anything that has to be invented from nothing is the part to check before you ship it.
Tips
-
Say "only". One word turns a description into a scoped edit, and it is the difference between recolouring a jacket and restyling a whole outfit.
-
Close with what stays. Name the subject, the setting, the framing and the light at the end of every instruction. The model chooses what to preserve whether or not you tell it.
-
Send the source's dimensions.
widthandheightare required, and a different shape means a recomposed image rather than an edited one. -
Describe the finished state. Name the result you want to see, not the operation you want performed.
-
Anchor anything you add. A new object placed relative to an object already in the frame survives far more often than one dropped in without a reference point.
-
List the subject's properties when you replace a background. Size, position, angle and the light on it are the four that drift when you leave them unsaid.





