Grok Imagine Image 2.0 does what you write and nothing else. xAI released it in August 2026, and it does not rewrite your prompt before generating, so changing one phrase shows up directly in the picture. That makes it a good tool for tuning a prompt and for producing batches of variants for creative tests.
It is text-to-image only on Kadraris, with no reference images.
What you can make
- Sets of variants from one prompt for A/B tests of ad creatives
- Prompt experiments where every word should count
- Portrait 9:16 and landscape 16:9 social images
- Early looks at characters and scenes before final art
Settings that matter
num_images: 1 to 4 per call. Ask for four in one request instead of sending four.aspect_ratio: 1:1 (default), 2:3, 3:2, 3:4, 4:3, 9:16 or 16:9. Others such as 4:5 orautoreturn an error.- Prompt length: up to 10,000 characters. Since nothing gets expanded for you, include style, light, framing and colors yourself.
- Change one phrase per test so you can see its effect.
Starter prompt
Portrait of an elderly fisherman mending a net on a
pier, overcast morning, muted blue and grey palette,
35mm film look, eye-level framing, gulls in backgroundKeep the frame and palette fixed and change one detail per run to see what each word does.
Questions
What does a batch of four cost?
The rate is $0.045 per image. estimated_cost shows the total for your num_images before the job starts, and failed generations cost $0.
Will my prompt be expanded or edited?
No. The model receives exactly the text you send.
How is it different from Grok Imagine?
Grok Imagine is xAI's earlier family with standard and high quality, 13 ratios plus auto and single-image editing. Version 2.0 skips editing and focuses on following long prompts to the letter.
Grok Imagine Image 2.0 in your code
curl https://kadraris.com/v1/generate?wait=60 \
-H "Authorization: Bearer $KADRARIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-image-2.0",
"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": "grok-imagine-image-2.0",
"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": "grok-imagine-image-2.0",
"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 | ≤ 10000 chars | |
aspect_ratio | string | 1:1 2:3 3:2 3:4 4:3 9:16 16:9 | 1:1 |
num_images | integer | 1-4 | 1 |
Fetch this list as JSON with GET /v1/models/grok-imagine-image-2.0.



























