---
title: Editing images — FLUX 3 Image | Runware Docs
url: https://runware.ai/docs/models/bfl-flux-3-image/guides/editing-images
description: "How to edit an image with FLUX 3 Image from a single reference: scoping the instruction, swapping materials and light, removing objects, reframing, and chaining edits."
---
### [Introduction](https://runware.ai/docs/models/bfl-flux-3-image/guides/editing-images#introduction)

An edit is the same request as a generation with one image attached. You put the picture in `inputs.referenceImages` and write the change in `positivePrompt`, and the model **rebuilds the frame with that change applied** while holding the rest of the scene where it was.

There is no mask and no brush. The region you are editing is identified by what you name in the sentence, which means the wording of the instruction is the only targeting mechanism you have.

**Source**:

![A lounge chair upholstered in oatmeal boucle with a black steel frame on a pale concrete floor](https://runware.ai/docs/assets/source-chair.Bj6xFaJp_Ava69.jpg)

> **Prompt**: A product photograph of a lounge chair upholstered in oatmeal boucle with a tubular black steel frame, standing on a pale concrete floor against a plain warm white wall. Even soft daylight from the front left, a soft shadow under the frame. Straight-on shot at seat height, 50mm lens, the chair centered with clear floor either side. Photoreal furniture e-commerce photography, warm neutral palette.

**Edited**:

![The same chair now upholstered in deep rust corduroy, with the black steel frame and shadow unchanged](https://runware.ai/docs/assets/hero-after.eZybdhnF_Z1vVRpu.jpg)

> **Prompt**: Change only the oatmeal boucle upholstery to a deep rust corduroy. Preserve the black steel frame, the seat and back shape, the shadow under the chair and the way the light falls across the seat. Keep the wall, the floor, the framing and the lighting unchanged.

The frame, the floor shadow and the falloff across the seat survive the swap. The upholstery is the only thing that moved, because it was the only thing named.

This guide covers how to scope an instruction, the kinds of change a single reference handles, how to recompose a shot into another shape, and how to stack several edits without the picture drifting.

### [Scoping the instruction](https://runware.ai/docs/models/bfl-flux-3-image/guides/editing-images#scoping-the-instruction)

A broad instruction gives the model permission to reinterpret the whole frame. A scoped one names the target, then names what has to survive. **The second half of that sentence is what keeps the rest of the image still.**

![A man in a mustard yellow corduroy overshirt and black trousers standing against a plaster wall](https://runware.ai/docs/assets/source-jacket.Dvqhbu3g_2gcb1Y.jpg)

*Source*

> **Prompt**: A lookbook photograph of a man in his thirties standing against a plain plaster wall, wearing a mustard yellow corduroy overshirt over a white t-shirt, black straight-leg trousers and brown suede boots, hands in his pockets, looking straight to camera. Flat overcast daylight, no hard shadows. Full-length shot at chest height, 50mm lens, the subject centered. Photoreal editorial fashion photography, muted palette.

![The same man with a restyled outfit, a different pose and a changed wall tone](https://runware.ai/docs/assets/scope-broad.CcpFQcsG_ZJyqP9.jpg)

*Four words*

> **Prompt**: Make the outfit cooler.

![The same man in a slate blue corduroy overshirt, everything else matching the source](https://runware.ai/docs/assets/scope-precise.DkyhE-RO_Z2aUbl7.jpg)

*Named target, named survivors*

> **Prompt**: Change only the mustard yellow corduroy overshirt to a slate blue one in the same corduroy. Preserve its cut, its buttons and the way it hangs open. Keep the man, his face, his t-shirt, his trousers, his boots, the plaster wall, the framing and the lighting unchanged.

"Make the outfit cooler" leaves the model to decide what counts as the outfit and what counts as cooler, so the pose and the wall tone move with it. The precise version changes one garment and leaves the face, the trousers and the boots where they were, which is **the difference between a mood board and a colorway**.

The instruction has three working parts:

- **The target**, named with the detail that identifies it: "the mustard yellow corduroy overshirt", not "the top"
- **The change**, stated as the finished state: "to a slate blue one in the same corduroy"
- **The survivors**, listed explicitly: the face, the other garments, the wall, the framing, the lighting

**TypeScript**:

```typescript
import { createClient } from '@runware/sdk'

const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()

const [result] = await client.run({
  model: 'bfl:flux@3-image',
  positivePrompt: 'Change only the mustard yellow corduroy overshirt to a slate blue one in the same corduroy. Preserve its cut, its buttons and the way it hangs open. Keep the man, his face, his t-shirt, his trousers, his boots, the plaster wall, the framing and the lighting unchanged.',
  inputs: {
    referenceImages: [
      'https://im.runware.ai/image/os/a14d18/ws/2/ii/c3d4e5f6-a7b8-9012-cdef-123456789012.jpg'
    ]
  },
  width: 1248,
  height: 832
})
```

**Python**:

```python
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": "bfl:flux@3-image",
            "positivePrompt": "Change only the mustard yellow corduroy overshirt to a slate blue one in the same corduroy. Preserve its cut, its buttons and the way it hangs open. Keep the man, his face, his t-shirt, his trousers, his boots, the plaster wall, the framing and the lighting unchanged.",
            "inputs": {
                "referenceImages": [
                    "https://im.runware.ai/image/os/a14d18/ws/2/ii/c3d4e5f6-a7b8-9012-cdef-123456789012.jpg"
                ]
            },
            "width": 1248,
            "height": 832
        })

asyncio.run(main())
```

**cURL**:

```bash
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "imageInference",
      "taskUUID": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
      "model": "bfl:flux@3-image",
      "positivePrompt": "Change only the mustard yellow corduroy overshirt to a slate blue one in the same corduroy. Preserve its cut, its buttons and the way it hangs open. Keep the man, his face, his t-shirt, his trousers, his boots, the plaster wall, the framing and the lighting unchanged.",
      "inputs": {
        "referenceImages": [
          "https://im.runware.ai/image/os/a14d18/ws/2/ii/c3d4e5f6-a7b8-9012-cdef-123456789012.jpg"
        ]
      },
      "width": 1248,
      "height": 832
    }
  ]'
```

**CLI**:

```bash
runware run bfl:flux@3-image \
  positivePrompt="Change only the mustard yellow corduroy overshirt to a slate blue one in the same corduroy. Preserve its cut, its buttons and the way it hangs open. Keep the man, his face, his t-shirt, his trousers, his boots, the plaster wall, the framing and the lighting unchanged." \
  inputs.referenceImages.0=https://im.runware.ai/image/os/a14d18/ws/2/ii/c3d4e5f6-a7b8-9012-cdef-123456789012.jpg \
  width=1248 \
  height=832
```

**JSON**:

```json
{
  "taskType": "imageInference",
  "taskUUID": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
  "model": "bfl:flux@3-image",
  "positivePrompt": "Change only the mustard yellow corduroy overshirt to a slate blue one in the same corduroy. Preserve its cut, its buttons and the way it hangs open. Keep the man, his face, his t-shirt, his trousers, his boots, the plaster wall, the framing and the lighting unchanged.",
  "inputs": {
    "referenceImages": [
      "https://im.runware.ai/image/os/a14d18/ws/2/ii/c3d4e5f6-a7b8-9012-cdef-123456789012.jpg"
    ]
  },
  "width": 1248,
  "height": 832
}
```

> [!NOTE]
> The edit comes back at the size the request asked for, not the shape of the reference. Send the same `width` and `height` as the source when you want the pair to line up, or send `resolution` instead and the aspect ratio is taken from the reference.

### [Relighting a scene](https://runware.ai/docs/models/bfl-flux-3-image/guides/editing-images#relighting-a-scene)

Light and time of day are a single instruction, and they are worth treating as one because the model has to **rebuild every shadow in the frame** to honor them. Name the new light source and where it sits, not just the hour.

**Midday**:

![A rooftop terrace with a teak table, woven chairs and olive trees under bright midday sun](https://runware.ai/docs/assets/source-terrace.Dd69TFdE_1vYVw9.jpg)

> **Prompt**: A rooftop terrace of a city apartment with a teak dining table, four woven chairs and a row of planted olive trees along the parapet, the skyline visible behind. Bright midday sun from overhead, short hard shadows on the decking. Wide shot at standing height, 24mm lens, the table running from the lower left. Photoreal real estate photography, warm palette.

**Dusk**:

![The same terrace at dusk with a deep blue sky, lit city windows and warm string lights above the table](https://runware.ai/docs/assets/edit-evening.B7dSIfPh_RHoVH.jpg)

> **Prompt**: Change the time of day to dusk. The sky turns deep blue behind the skyline, the city windows light up, and warm string lights above the table become the main light source, throwing soft pools onto the decking. Keep the table, the chairs, the olive trees, the parapet, the framing and the camera position unchanged.

The furniture and the planting hold their positions while every shadow on the decking is redrawn from a new source. For a listing set, that turns **one shoot into a day version and an evening version** without moving the camera.

### [Replacing a subject in place](https://runware.ai/docs/models/bfl-flux-3-image/guides/editing-images#replacing-a-subject-in-place)

A replacement keeps the composition and swaps what occupies it. The instruction has to pin the geometry, because "replace the bicycle with a scooter" alone will also reframe the shot around the new object.

**Bicycle**:

![A sage green city bicycle with a wire basket leaning against a red brick wall](https://runware.ai/docs/assets/source-bike.Dnf-yFYA_Z1dTkpr.jpg)

> **Prompt**: A sage green city bicycle with a front wire basket and a tan leather saddle, leaning against a red brick wall on a stone pavement, a drainpipe running down the wall behind it. Warm late afternoon light from the right, a long shadow across the pavement. Side-on shot at saddle height, 50mm lens, the bicycle filling the width of the frame. Photoreal lifestyle photography, warm palette.

**Scooter**:

![A charcoal gray electric scooter standing in front of the same brick wall and drainpipe, in the same part of the frame](https://runware.ai/docs/assets/edit-replace.CR7ZFTx4_1AyX87.jpg)

> **Prompt**: Replace the city bicycle with a charcoal gray electric scooter with a slim upright stem and a small headlight, leaning at the same angle against the same wall and occupying the same part of the frame. Keep the brick wall, the drainpipe, the pavement, the shadow direction, the framing and the lighting unchanged.

"Occupying the same part of the frame" is the clause doing the work. It tells the model that the **composition is fixed and only the object inside it is open**, which is what makes a swap usable as a variant of the original shot rather than a new one. The scooter stands on its own kickstand rather than leaning, because a replacement keeps the geometry you pin and settles the rest the way the new object would really sit.

### [Removing and adding objects](https://runware.ai/docs/models/bfl-flux-3-image/guides/editing-images#removing-and-adding-objects)

Both operations run off the same source. A removal needs **the surface underneath described**, or the model tends to leave a smudge where the object was. An addition needs **a position and a contact shadow**, or the new object floats.

![A marble kitchen counter with a matte black espresso machine, a folded linen cloth and a glass of water](https://runware.ai/docs/assets/source-counter.Du2bQ_pl_Z2hLA3U.jpg)

*Source*

> **Prompt**: A pale marble kitchen counter holding a matte black espresso machine, a folded linen cloth and a single glass tumbler of water, a white tiled splashback out of focus behind. Warm daylight from a window on the right. Three-quarter view at counter height, 50mm lens. Photoreal kitchen appliance photography, warm neutral palette.

![The same counter with the glass of water gone and clean marble where it stood](https://runware.ai/docs/assets/edit-remove.DRI_Qwir_20GDNe.jpg)

*Removed*

> **Prompt**: Remove the glass tumbler of water from the counter and leave the marble it stood on clean and empty. Keep the espresso machine, the linen cloth, the splashback, the framing and the lighting unchanged.

![The same counter with a ceramic bowl of coffee beans added to the left of the machine](https://runware.ai/docs/assets/edit-add.BuNW2kz6_qn1Fq.jpg)

*Added*

> **Prompt**: Add a small ceramic bowl of roasted coffee beans to the left of the espresso machine on the counter, sitting flat on the marble with a soft shadow beneath it. Keep the espresso machine, the linen cloth, the glass tumbler, the splashback, the framing and the lighting unchanged.

"Leave the marble it stood on clean and empty" is the removal doing **its own inpainting brief**. "Sitting flat on the marble with a soft shadow beneath it" is the addition being told how to touch the surface. Both are cheap sentences that decide whether the result reads as a photograph.

### [Changing the frame](https://runware.ai/docs/models/bfl-flux-3-image/guides/editing-images#changing-the-frame)

A reframe is an edit whose output size differs from the reference, and it works because **the requested size wins over the shape of the reference**. The model rebuilds the scene to fill the new aspect instead of cropping it or padding it, which means it is drawing area the source never had.

![A woman working at a laptop on a long walnut table in a co-working space, shot wide with a glazed brick wall behind her](https://runware.ai/docs/assets/source-workspace.DjepnEnq_11VWT0.jpg)

*Source at 1248 × 832*

> **Prompt**: A woman in her thirties working at an open laptop on a long shared walnut table in a co-working space, one hand on the trackpad, looking at the screen. A ceramic planter and a closed notebook to her right, a glazed brick wall and a row of pendant lamps behind her. Soft daylight from a window out of frame on the left. Wide shot at seated eye height, 35mm lens, the woman on the left third and the table running to the right edge. Photoreal workspace photography, warm neutral palette.

![The same woman and workspace recomposed as a vertical frame with the brick wall and pendant lamps extending above her](https://runware.ai/docs/assets/edit-reframe.B_C2ER1m_ZitMJL.jpg)

*Recomposed at 912 × 1152*

> **Prompt**: Recompose this scene as a vertical frame. Keep the same woman at the same laptop on the same walnut table, her pose, her wardrobe, the ceramic planter and the notebook, the glazed brick wall and the pendant lamps, and the soft daylight from the left. Move her to the lower half of the frame and extend the wall and the lamps upward to fill the space above her. Seated eye height, 35mm lens. Photoreal workspace photography, warm neutral palette.

Two clauses carry a reframe. The first is the usual list of survivors, the woman, the table, the wall and the light. The second is the one this edit adds: **say where the subject sits in the new frame and what fills the space that opens up**. "Move her to the lower half and extend the wall and the lamps upward" leaves nothing for the model to invent, and a vertical cut of a landscape shot is exactly where an unbriefed model starts inventing.

Camera distance is the same instruction at the same aspect. Asking to pull back and show more of the table, or to come in to a chest-up crop, reads as **a composition change rather than a resize**, so the survivors clause still does the work.

> [!WARNING]
> A reframe is a re-render, not a crop. Type, faces and fine texture are drawn again and will not match the source pixel for pixel, so treat the pair as two shots of one setup rather than as one asset in two sizes. When a layout needs exactly the same pixels at another shape, crop it downstream.

### [Chaining edits](https://runware.ai/docs/models/bfl-flux-3-image/guides/editing-images#chaining-edits)

There is no seed, so a prompt you rerun comes back as a different picture. The way to build up a change is to **edit the output, then edit that output again**, each pass carrying the last one forward.

![Four plain white candle tins in a row on a pale oak shelf against a gray wall](https://runware.ai/docs/assets/source-shelf.dI_qsPWn_Z1T35lW.jpg)

*Source*

> **Prompt**: A retail shelf display of four identical cylindrical candle tins in plain white metal with no labels, arranged in a row on a pale oak shelf against a soft gray wall. Even diffused light from the front, faint shadows under the tins. Straight-on shot at shelf height, 50mm lens, the row centered with clear space above. Photoreal retail merchandising photography, neutral palette.

![The same four tins now finished in deep forest green on the same oak shelf](https://runware.ai/docs/assets/chain-1.Bguct7P__Z2l2JBv.jpg)

*Pass 1: finish*

> **Prompt**: Change only the white metal of the four candle tins to a deep forest green. Preserve their shape, their lids and the shadows under them. Keep the oak shelf, the gray wall, the framing and the lighting unchanged.

![The green tins with a brushed brass band added around the base of each one](https://runware.ai/docs/assets/chain-2.7VVU7pR__Z2iB6mP.jpg)

*Pass 2: hardware*

> **Prompt**: Add a narrow brushed brass band around the base of each of the four tins, the same height on every one. Keep the green finish, the tin shapes, the lids, the oak shelf, the gray wall, the framing and the lighting unchanged.

![The same green and brass tins now on a dark walnut shelf against a warm cream wall](https://runware.ai/docs/assets/chain-3.CeEbRQl2_Z1cVmUT.jpg)

*Pass 3: set dressing*

> **Prompt**: Change the pale oak shelf to a dark walnut one and the soft gray wall behind it to a warm cream. Keep the four tins exactly as they are including the green finish, the brass bands, their spacing and the shadows under them, and keep the framing and the lighting unchanged.

Each pass names the previous pass's result among the survivors, which is what stops the green from drifting when the brass goes on and stops the brass from drifting when the shelf changes. **One change per pass** is the rule that makes this hold. Two changes in a sentence means two chances for the model to reinterpret the frame, and you lose the ability to tell which half went wrong.

> [!WARNING]
> Every pass is a fresh generation, not a patch applied to the last one, so what survives a pass survives because the instruction named it. When a chain runs long, go back to the source and fold the settled changes into a single instruction rather than trusting a longer list of survivors.

### [Tips for best results](https://runware.ai/docs/models/bfl-flux-3-image/guides/editing-images#tips-for-best-results)

1. **Name the target by a distinguishing feature.** "The mustard yellow corduroy overshirt" lands where "the jacket" wanders, especially when the frame holds more than one candidate.
    
2. **List the survivors.** The sentence that starts "keep" is not filler. It is the only thing standing between a colorway and a re-render.
    
3. **State the change as a finished state.** "To a slate blue one in the same corduroy" describes the result. "Make it bluer" describes a direction, and the model picks the distance.
    
4. **Describe the surface under a removal.** Without it the model has to guess what was hidden, and a guess reads as a patch.
    
5. **Give an addition a position and a shadow.** Where it sits relative to something already in the frame, and how it meets the surface.
    
6. **Pin the geometry on a replacement.** Same angle, same part of the frame. Otherwise the shot recomposes around the new object.
    
7. **One change per pass.** Chain the passes instead of stacking clauses, and name the previous pass's result among the survivors every time.
    
8. **Place the subject when you reframe.** A new aspect opens space the source never had, so say where the subject lands and what fills the rest.