FLUX 3 Image

FLUX 3 Image is Black Forest Labs' image generation and editing model built on the multimodal FLUX 3 backbone shared with FLUX 3 Video. It combines text-to-image synthesis, precise local editing, multi-reference composition, bounding-box placement, and native 4K output. The model preserves identities and fine details across references, supports targeted changes and in-place text editing, and renders accurate typography in text-heavy layouts across a broad range of visual styles.

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 FLUX 3 Image from a single reference: scoping the instruction, swapping materials and light, removing objects, reframing, and chaining edits.
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.
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
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 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.

Make the outfit cooler.

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
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
})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 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
}
]'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{
"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
}Response
{
"data": [
{
"taskType": "imageInference",
"taskUUID": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"imageUUID": "d4e5f6a7-b8c9-0123-def1-234567890123",
"imageURL": "https://im.runware.ai/image/os/a14d18/ws/2/ii/d4e5f6a7-b8c9-0123-def1-234567890123.jpg"
}
]
}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
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.
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
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.
"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
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 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.

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.

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

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

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.

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.

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.

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.
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
-
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.
-
List the survivors. The sentence that starts "keep" is not filler. It is the only thing standing between a colorway and a re-render.
-
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.
-
Describe the surface under a removal. Without it the model has to guess what was hidden, and a guess reads as a patch.
-
Give an addition a position and a shadow. Where it sits relative to something already in the frame, and how it meets the surface.
-
Pin the geometry on a replacement. Same angle, same part of the frame. Otherwise the shot recomposes around the new object.
-
One change per pass. Chain the passes instead of stacking clauses, and name the previous pass's result among the survivors every time.
-
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.





