Using Qwen-Image-Edit-2511 on Chutes
Qwen-Image-Edit-2511 is the Qwen team's December 2025 instruction-based image editing model: send one to three reference images plus a natural-language edit instruction, get back the edited image. On Chutes it runs on a dedicated host with a flat-JSON POST /generate endpoint tuned for fast 4-step edits.
Overview
Qwen-Image-Edit-2511 upgrades Qwen-Image-Edit-2509. Per the model card, the release focuses on: mitigating image drift, improved character consistency (edits preserve the identity of people in the input), stronger multi-person consistency (fusing separate portraits into one coherent group photo), popular community LoRA effects integrated into the base model (lighting enhancement and novel-view generation work without extra adapters), and better industrial design and geometric reasoning, including material replacement on components and drawing auxiliary construction lines.
Architecturally it is a diffusion transformer (QwenImageTransformer2DModel: 60 layers, 24 attention heads, head dimension 128) driven by a Qwen vision-language text encoder that reads both the instruction and the reference images. In diffusers it runs as QwenImageEditPlusPipeline with a list of input images, which is what enables multi-image composition. Instructions work in English and Chinese.
Model specifications
| Property | Value |
|---|---|
| Upstream repo | Qwen/Qwen-Image-Edit-2511 |
| Task | Instruction-based image editing (image-to-image) |
| Transformer | QwenImageTransformer2DModel, 60 layers, 24 heads, head dim 128 |
| Pipeline | diffusers QwenImageEditPlusPipeline (multi-image input) |
| Instruction languages | English, Chinese |
| Modalities | text + 1-3 images in, image out (JPEG on this chute) |
| License | Apache-2.0 |
| Release | December 2025 |
Quick start
The chute is served on https://vonkaiser-qwen-image-edit-2511.chutes.ai. Base64-encode your input image(s) into the image_b64s array and describe the exact edit in prompt. The response body is image/jpeg bytes.
# Replace the placeholder with real base64 image data first.
curl -X POST "https://vonkaiser-qwen-image-edit-2511.chutes.ai/generate" \
-H "Authorization: Bearer $CHUTES_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "make the background a tropical beach scene",
"image_b64s": ["<base64-encoded image>"],
"width": 1024,
"height": 1024,
"true_cfg_scale": 1,
"num_inference_steps": 4,
"seed": 42
}' \
--output output.jpgimport base64
import os
import requests
with open("input.jpg", "rb") as f:
image_b64 = base64.b64encode(f.read()).decode()
resp = requests.post(
"https://vonkaiser-qwen-image-edit-2511.chutes.ai/generate",
headers={"Authorization": f"Bearer {os.environ['CHUTES_API_KEY']}"},
json={
"prompt": "make the background a tropical beach scene",
"image_b64s": [image_b64],
"true_cfg_scale": 1,
"num_inference_steps": 4,
"seed": 42,
},
timeout=180,
)
resp.raise_for_status()
with open("output.jpg", "wb") as f:
f.write(resp.content)import { readFile, writeFile } from "node:fs/promises";
const imageB64 = (await readFile("input.jpg")).toString("base64");
const resp = await fetch("https://vonkaiser-qwen-image-edit-2511.chutes.ai/generate", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.CHUTES_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
prompt: "make the background a tropical beach scene",
image_b64s: [imageB64],
true_cfg_scale: 1,
num_inference_steps: 4,
}),
});
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
await writeFile("output.jpg", Buffer.from(await resp.arrayBuffer()));Parameters and tuning
| Field | Type | Chute default | Notes |
|---|---|---|---|
prompt | string | "make the background a tropical beach scene" | Describe the exact edit, not the whole final image. |
image_b64s | string | required in practice | 1-3 raw base64 images. Multi-image enables subject composition. |
num_inference_steps | integer | 4 | Fast profile. The model card's example uses 40; raise for fidelity. |
true_cfg_scale | number | 1 | Model-card example uses 4.0. Higher values follow the instruction more strongly. |
negative_prompt | string | "" | Short exclusions only. |
width / height | integer | 1024 / 1024 | Keep at 1024 while testing; larger costs more and is slower. |
seed | integer | null | Set for reproducible edits. |
The chute's 4-step / cfg 1 defaults are a latency-optimized serving profile. The upstream model card demonstrates 40 steps with true_cfg_scale 4.0; both are per-request fields here, so you can move toward the card's settings when edit fidelity matters more than speed.
What it's best at
The model card's showcase maps directly to practical work: background swaps and precise color edits for e-commerce imagery; identity-preserving edits of people, including merging separate portraits into a group shot; relighting and novel viewpoints via the integrated LoRA effects; and industrial design tasks like batch product variations, material replacement on components, and geometric annotation. Instructions can be written in English or Chinese.
It is not a text-to-image generator: at least one reference image is expected (use Qwen-Image-2512 or Z-Image Turbo for generation from scratch). And while 2511 specifically reduces drift, diffusion editing regenerates the entire frame, so regions you did not mention are visually preserved rather than byte-identical — don't use it where untouched pixels must be exact.
How Chutes serves this model
The chute (owner vonkaiser) serves the model on its own host with a single POST /generate endpoint. Requests are flat JSON with base64 image inputs, authenticated with Authorization: Bearer $CHUTES_API_KEY; responses are raw image/jpeg bytes. Defaults are the fast 4-step profile described above. In the web playground, large reference images are uploaded through temporary Blob storage automatically; over the API you always send raw base64.
- Model page: /app/chute/vonkaiser-qwen-image-edit-2511
- Agent integration file: llms.txt
- Callable OpenAPI 3.1 spec: openapi.json
FAQ
How many input images can I send?
One to three reference images per request, as raw base64 strings in the image_b64s array. Multi-image input is how you compose subjects from separate photos, such as merging two portraits into one group shot.
Why does the chute default to 4 steps when the model card uses 40?
The chute is configured as a low-latency serving profile: 4 inference steps with true_cfg_scale 1. The model card's example uses 40 steps with true_cfg_scale 4.0. Both fields are request parameters, so you can raise them for higher-fidelity edits at the cost of latency and compute.
Does it keep the parts of the image I didn't ask to change?
That is the design goal, and the 2511 release specifically targets reduced image drift and improved consistency versus 2509. It is still a generative model, though: the whole frame is regenerated, so untouched regions are visually preserved rather than byte-identical.
What license is Qwen-Image-Edit-2511 under?
Apache-2.0, per the model card's license section and the Hugging Face repo metadata. Commercial use, modification, and redistribution are permitted under standard Apache terms.
Can I write edit instructions in Chinese?
Yes. The model is trained for English and Chinese instructions, and the model card demonstrates bilingual editing.
How do I call it from code?
POST flat JSON to https://vonkaiser-qwen-image-edit-2511.chutes.ai/generate with an Authorization: Bearer header. Base64-encode your input image(s) into image_b64s, set prompt to the edit instruction, and save the response body as a JPEG.
Is this a text-to-image model?
No, it is an editing model: it expects at least one reference image and an instruction describing the change. For generation from scratch use a text-to-image chute such as Qwen-Image-2512 or Z-Image Turbo.