FLUX 3 Image lets you build a picture out of several others: the lamp from one photo in the room from another, or three products arranged on a poster in a fixed spot. It is the still-image model of Black Forest Labs' FLUX 3 family, next to FLUX 3 Video. Each request makes or edits one image from a prompt and up to ten references.
You can also mark where things go with boxes written into the prompt, which helps with posters and mockups.
What you can make
- Object swaps, for example "the sofa from ref_image_1 in the living room from ref_image_0"
- Posters and mockups where the logo, product and headline sit in set positions
- Cheap 768sq previews before committing to a 2K render
- Group scenes made from products or characters photographed separately
Settings that matter
image_urls: up to 10. The prompt refers to them asref_image_0,ref_image_1and so on, so keep the order fixed.resolution: 768sq, 1k (default), 1.5k, 2k or 4k. 4K costs several times more than 2K; use it for the final.aspect_ratio: 15 formats from 21:9 to 9:21, orauto.- Layout: add a small table with
id,bbox(0-1000 coordinates) anddesc. Boxes guide placement; they are not masks. - When editing, name what must not change, such as the floor, window or camera angle.
Starter prompt
Put the armchair from ref_image_1 next to the window in
ref_image_0. Keep the floor, wall color, window and
camera angle unchanged. Match the room's soft daylight.Swap the object and its position; list everything else that has to stay as it is.
Questions
What does an image cost?
It depends on the resolution tier: from $0.0984 per image. The full table is on this page and in pricing. A failed image is free.
Which settings does it not have?
There is no seed, no pixel dimensions, no steps, no guidance and no negative prompt. You steer it with the prompt, resolution, ratio and references.
When is FLUX.2 [pro] enough?
For simple 1K or 2K graphics, FLUX.2 [pro] costs less. Pick FLUX 3 Image when you need more than 8 references, a 4K tier or layout boxes.
FLUX 3 Image in your code
curl https://kadraris.com/v1/generate?wait=60 \
-H "Authorization: Bearer $KADRARIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "flux-3-image",
"input": {
"prompt": "Packshot of a white linen sneaker on a concrete block, hard midday sun, crisp shadow, 85mm",
"aspect_ratio": "auto",
"resolution": "1k"
}
}'import os, time, requests
API = "https://kadraris.com/v1"
H = {"Authorization": f"Bearer {os.environ['KADRARIS_API_KEY']}"}
task = requests.post(f"{API}/generate", headers=H, json={
"model": "flux-3-image",
"input": {
"prompt": "Packshot of a white linen sneaker on a concrete block, hard midday sun, crisp shadow, 85mm",
"aspect_ratio": "auto",
"resolution": "1k"
}
}).json()
while task["status"] in ("queued", "running"):
time.sleep(3)
task = requests.get(f"{API}/tasks/{task['id']}", headers=H).json()
print(task["status"], task["cost"], [o["url"] for o in task["output"]])const API = "https://kadraris.com/v1";
const headers = { Authorization: `Bearer ${process.env.KADRARIS_API_KEY}`, "Content-Type": "application/json" };
let task = await (await fetch(`${API}/generate`, {
method: "POST",
headers,
body: JSON.stringify({
"model": "flux-3-image",
"input": {
"prompt": "Packshot of a white linen sneaker on a concrete block, hard midday sun, crisp shadow, 85mm",
"aspect_ratio": "auto",
"resolution": "1k"
}
}),
})).json();
while (task.status === "queued" || task.status === "running") {
await new Promise((r) => setTimeout(r, 3000));
task = await (await fetch(`${API}/tasks/${task.id}`, { headers })).json();
}
console.log(task.status, task.cost, task.output.map((o) => o.url));
Input fields
| Parameter | Type | Allowed | Default |
|---|---|---|---|
prompt * | string | ||
aspect_ratio | string | auto 21:9 2:1 16:9 3:2 7:5 4:3 5:4 1:1 4:5 3:4 5:7 2:3 9:16 1:2 9:21 | auto |
resolution | string | 768sq 1k 1.5k 2k 4k | 1k |
image_urls | array | max 10 |
Fetch this list as JSON with GET /v1/models/flux-3-image.























