Qwen Image 2.1 is Alibaba's September 2026 update to the Qwen image line. It combines up to 10 reference images and returns one image per request at 1K or 2K, where 2K has four times the pixels. Prompts run from 1 to 5,000 characters in any language, and a seed lets you repeat results. Alibaba also offers native transparent output and masked inpainting for this model, but Jantaris does not expose those options yet.
Best for
- Packshots that place a product into a new scene
- Prompts written in languages other than English
- Repeatable variants with a fixed
seed - Composites that merge several references
Prompting tips
- With several references, give each one a role: "image 1 is the product, image 2 is the room".
autoratio needsimage_urls; for text-to-image the default is 1:1.- References can be JPEG, PNG or WebP, each up to 30 MB and 25 MP.
FAQ
How much does the Qwen Image 2.1 API cost?
Qwen Image 2.1 is billed at from $0.05 per image. Failed generations are not charged, and the estimate is shown before submission.
Does Qwen Image 2.1 output real transparency?
The model supports it, but Jantaris does not expose the transparent background option yet, so images come back with a regular background.
What languages can I prompt Qwen Image 2.1 in?
Any language, from 1 to 5,000 characters per prompt.
How to call Qwen Image 2.1 via API
curl https://jantaris.com/v1/generate?wait=60 \
-H "Authorization: Bearer $JANTARIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-image-2.1",
"input": {
"prompt": "Product photo of a matte black ceramic coffee cup on a travertine table, soft window light, 50mm",
"aspect_ratio": "1:1",
"resolution": "1K"
}
}'import os, time, requests
API = "https://jantaris.com/v1"
H = {"Authorization": f"Bearer {os.environ['JANTARIS_API_KEY']}"}
task = requests.post(f"{API}/generate", headers=H, json={
"model": "qwen-image-2.1",
"input": {
"prompt": "Product photo of a matte black ceramic coffee cup on a travertine table, soft window light, 50mm",
"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://jantaris.com/v1";
const headers = { Authorization: `Bearer ${process.env.JANTARIS_API_KEY}`, "Content-Type": "application/json" };
let task = await (await fetch(`${API}/generate`, {
method: "POST",
headers,
body: JSON.stringify({
"model": "qwen-image-2.1",
"input": {
"prompt": "Product photo of a matte black ceramic coffee cup on a travertine table, soft window light, 50mm",
"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));
Parameters
| Parameter | Type | Allowed | Default |
|---|---|---|---|
prompt * | string | ≤ 5000 chars | |
aspect_ratio | string | auto 1:1 4:3 3:4 3:2 2:3 16:9 9:16 21:9 9:21 | 1:1 |
resolution | string | 1K 2K | 1K |
image_urls | array | max 10 | |
seed | integer |
The same schema is available from GET /v1/models/qwen-image-2.1.









