Wan 2.7 Image is Alibaba's image model from April 2026; this page is about the standard tier. A single request type does both generation and editing, and it gives you the tools to keep a series consistent: a fixed seed, a negative prompt and several takes per call. That makes it a practical workhorse for product catalogs and client rounds.
What you can make
- A product series that keeps one style because you reuse the seed.
- A new background, product or lighting setup, driven by reference photos.
- Four cover options in one call for a client to choose from.
- Catalog composites built from several references.
Settings that matter
- Resolution: 1K or 2K, 2K by default. For 4K, use Wan 2.7 Image Pro.
- Images per request:
num_imagesfrom 1 to 4. - References: up to 9. In edit mode the output shape follows the last image you send, so put the one with the right frame at the end.
- Negative prompt: list what keeps showing up uninvited, such as watermarks or random lettering.
- Seed: fix it, then change only the wording to see the effect of each edit.
- Aspect ratio: 7 shapes; prompts up to 5,000 characters.
Starter prompt
Glass jar of honey on a marble kitchen counter, morning sun from a side window, a wooden dipper resting on the lid, soft shadows, clean commercial photoLock the seed after the first good result, then swap the product while keeping the counter and light the same for the rest of the catalog.
Questions
What does Wan 2.7 Image cost?
$0.0611 per image on the standard tier. The estimate appears before you submit, and you pay nothing for failed generations.
Can I pass brand colors or mark a box to edit?
Not yet. Alibaba's API has a color palette, box-targeted edits, a thinking mode and 12-image group series, but Kadraris accepts prompt, negative prompt, ratio, resolution, num_images, image_urls and seed. Write the colors and the area into the prompt instead.
What is the largest output?
2K. The Pro tier goes to 4K for text-to-image.
Wan 2.7 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": "wan-2.7-image",
"input": {
"prompt": "Packshot of a white linen sneaker on a concrete block, hard midday sun, crisp shadow, 85mm",
"aspect_ratio": "1:1",
"resolution": "2k"
}
}'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": "wan-2.7-image",
"input": {
"prompt": "Packshot of a white linen sneaker on a concrete block, hard midday sun, crisp shadow, 85mm",
"aspect_ratio": "1:1",
"resolution": "2k"
}
}).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": "wan-2.7-image",
"input": {
"prompt": "Packshot of a white linen sneaker on a concrete block, hard midday sun, crisp shadow, 85mm",
"aspect_ratio": "1:1",
"resolution": "2k"
}
}),
})).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 | ≤ 5000 chars | |
negative_prompt | string | ||
aspect_ratio | string | 1:1 16:9 9:16 4:3 3:4 3:2 2:3 | 1:1 |
resolution | string | 1k 2k | 2k |
num_images | integer | 1-4 | 1 |
image_urls | array | max 9 | |
seed | integer |
Fetch this list as JSON with GET /v1/models/wan-2.7-image.
























