Kontext [pro] edits a photo when you tell it what to change, and you never draw a mask. The person in the picture stays recognizable across repeated edits, which makes it handy for outfit swaps, new backgrounds and step-by-step retouching. Black Forest Labs released it in May 2025. It can also create images from text alone.
Each request returns one image of about 1 MP.
What you can make
- The same person in a new outfit, pose or location
- A chat-style editing flow where each message applies one change
- Signs, labels and posters with replaced wording
- A photo restyled as an illustration or a film still
Settings that matter
image_urls: up to 4 references per request.aspect_ratio: nine choices from 1:1 to 21:9 and 9:21.seed: reuse it to get the same result again.- One change per request works best. Chain several requests for big edits so the image does not drift.
- When replacing text, quote both the current wording and the new one.
Starter prompt
Change her denim jacket to a red leather jacket. Keep
her face, hair, pose, the street behind her and the
evening light unchanged.Edit the first sentence for your change and keep the second as a list of things that must stay.
Questions
How much is one Kontext [pro] edit?
$0.088 per image, with no subscription. A failed edit costs $0.
How does it know which area to edit?
From the prompt alone. The model works out the region to change, so be specific about the object and what stays.
When should I switch to Kontext [max]?
When text in the image has to be exact or one prompt holds several detailed instructions. FLUX.1 Kontext [max] has stronger typography and takes the same inputs. Output is about 1 MP on both, so upscale before print.
FLUX.1 Kontext [pro] 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-kontext-pro",
"input": {
"prompt": "Packshot of a white linen sneaker on a concrete block, hard midday sun, crisp shadow, 85mm",
"aspect_ratio": "1:1"
}
}'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-kontext-pro",
"input": {
"prompt": "Packshot of a white linen sneaker on a concrete block, hard midday sun, crisp shadow, 85mm",
"aspect_ratio": "1:1"
}
}).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-kontext-pro",
"input": {
"prompt": "Packshot of a white linen sneaker on a concrete block, hard midday sun, crisp shadow, 85mm",
"aspect_ratio": "1:1"
}
}),
})).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 | 1:1 4:3 3:4 16:9 9:16 3:2 2:3 21:9 9:21 | 1:1 |
num_images | integer | 1-1 | 1 |
image_urls | array | max 4 | |
seed | integer |
Fetch this list as JSON with GET /v1/models/flux-kontext-pro.


























