live
MODEL IDopenai:gpt-image@2.5-flare

GPT-Image-2.5 Flare

OpenAI
by

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.

GPT-Image-2.5 Flare

Editing 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.

A two-seater sofa upholstered in oatmeal bouclé with pale oak legs and a single grey cushion, staged against a warm white wall on a light oak floor
SourceEdited

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.

Try in Playground
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.referenceImages is 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.
  • positivePrompt carries the instruction, not a description of the finished image. It is the whole interface unless you also send a mask, covered in masked editing.
  • width and height are 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.

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
TargetChangeFidelityPreserve

"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 matte black electric kettle on a pale marble kitchen worktop with a wooden chopping board and a folded tea towel behind it
Matte blackBrushed steel

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.

A tan leather crossbody bag resting on a weathered wooden park bench with its strap coiled beside it, dappled green foliage behind
On locationOn a studio backdrop

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.

A pale oak desk against a white wall holding an open laptop, a closed notebook and a small glass of water on a round wooden coaster, with an office chair pulled out on the left
The same desk with the glass of water and its wooden coaster gone and clean empty oak where they stood, the laptop, notebook and chair unchanged

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.

The same desk with a potted plant with trailing leaves standing at the right end of the desk, its stems hanging over the edge, everything else 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

  1. 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.

  2. 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.

  3. Send the source's dimensions. width and height are required, and a different shape means a recomposed image rather than an edited one.

  4. Describe the finished state. Name the result you want to see, not the operation you want performed.

  5. 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.

  6. 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.