Kontext [max] is the editing model to pick when the change involves words: a translated label, a new price on a poster, a corrected sign. It works the same way as FLUX.1 Kontext [pro], so you describe the edit in plain language and skip drawing a mask, but Black Forest Labs tuned it for better typography and closer prompt adherence. It came out in May 2025 as the higher FLUX Kontext tier.
It also generates from text alone and returns one image of about 1 MP per request.
What you can make
- Packaging, posters and app screenshots with text in another language
- Edits that bundle three or four exact instructions into one prompt
- Label and logo mockups where a single wrong letter would ruin it
- Color or copy variants of a product shot that keep the framing
Settings that matter
image_urls: up to 4, for example the product photo plus a style sample.aspect_ratio: nine options from 1:1 to 21:9 and 9:21; every output is about 1 MP.seed: keep it fixed while you refine the instruction wording.- Quote the exact text and describe its color, weight and position.
- For multi-step edits, number the instructions in the order you want them applied.
Starter prompt
Replace the label text "Lemon Soda" with "Limonada" in
the same white script lettering, keep the can, the
water drops and the blue background exactly as they areChange the old and new wording; leave the "keep" part so the rest of the image stays intact.
Questions
What does a Kontext [max] edit cost?
$0.176 per image. The estimate comes back before the task starts, and a failed edit costs $0.
Is [max] always better than [pro]?
Only when lettering must be correct or the prompt carries several precise steps. For simple edits [pro] accepts the same inputs.
Can I print the result?
Output is about 1 MP, so upscale it separately before print. The AI text in images guide has more on lettering.
FLUX.1 Kontext [max] 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-max",
"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-max",
"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-max",
"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-max.























