FLUX.2 [flex] gives you posters, illustrations and social graphics in a consistent look, either from a text prompt or from up to eight reference images. Black Forest Labs released it in November 2025 as the adjustable tier of FLUX.2, built around manual control of sampling steps and guidance. Kadraris does not offer those two controls yet, so here it works like the other FLUX.2 tiers, one image per request.
What you can make
- A series of illustrations or posters that share one art style
- A new image that mixes elements from up to 8 reference pictures
- Side-by-side tests of the same prompt against other FLUX.2 tiers
- Square, 4:3 or vertical 9:16 graphics for social posts
Settings that matter
aspect_ratio: 1:1 (default), 4:3, 3:4, 16:9, 9:16, 3:2 or 2:3.autoworks only when you attach references.resolution:1Kfor drafts,2Kfor the version you publish.image_urls: up to 8 references. Put the most important one first and describe them in the prompt in the same order.- Open the prompt with medium and style, for example "linocut print" or "flat vector", and add the subject after.
Starter prompt
Risograph print poster, two-color teal and coral,
a cyclist crossing a bridge at dawn, bold grain,
large empty sky at the top for a title, 3:4Swap the subject and the two colors, and keep the free area for text if you plan to add a headline.
Questions
What does one FLUX.2 [flex] image cost?
from $0.193 per image. Studio shows the price on the Generate button before you send, and a failed image costs $0.
Can I change steps and guidance?
Not on Kadraris for now. The fields are prompt, aspect ratio, resolution and references; GET /v1/models/flux-2-flex lists the current schema. If you need larger output, up to 4 MP, look at FLUX.2 [max].
Which FLUX.2 tier also takes 8 references?
FLUX.2 [pro] accepts up to 8 as well, so you can run the same reference set on both and pick the look you prefer.
FLUX.2 [flex] 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-2-flex",
"input": {
"prompt": "Packshot of a white linen sneaker on a concrete block, hard midday sun, crisp shadow, 85mm",
"aspect_ratio": "1:1",
"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-2-flex",
"input": {
"prompt": "Packshot of a white linen sneaker on a concrete block, hard midday sun, crisp shadow, 85mm",
"aspect_ratio": "1:1",
"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-2-flex",
"input": {
"prompt": "Packshot of a white linen sneaker on a concrete block, hard midday sun, crisp shadow, 85mm",
"aspect_ratio": "1:1",
"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 | 1:1 4:3 3:4 16:9 9:16 3:2 2:3 auto | 1:1 |
resolution | string | 1K 2K | 1K |
image_urls | array | max 8 |
Fetch this list as JSON with GET /v1/models/flux-2-flex.























