Qwen Image Edit
Playground
Try it on WavespeedAI!Qwen-Image-Edit is a 20B MMDiT image-to-image model offering precise bilingual (Chinese & English) text edits while preserving style. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Features
Qwen-Image-Edit
A next-gen image editing model built on Qwen-Image 20B MMDiT. Qwen-Image-Edit delivers precise bilingual text editing (Chinese & English), supports both semantic and appearance-level edits, and preserves the original style — making it one of the most capable image editing models available.
Why It Looks Great
- Dual-mode editing: Supports both appearance-level edits (add/remove/modify elements while keeping other regions pixel-accurate) and semantic-level edits (IP creation, rotation, style transfer with global coherence).
- Precise text editing (CN/EN): Edit on-image text directly — add, delete, or replace while retaining the original font, size, kerning, and style.
- Style preservation: Maintains palette, lighting, brushwork, and overall look even under substantial edits.
- 20B parameter power: Built on the robust Qwen-Image foundation for superior understanding and generation.
- State-of-the-art performance: Achieves SOTA results across multiple public image editing benchmarks.
- Prompt Enhancer: Built-in tool to refine your editing instructions automatically.
Parameters
| Parameter | Required | Description |
|---|---|---|
| prompt | Yes | Text instruction describing the edit you want to make. |
| image | Yes | Source image to edit (upload or public URL). |
| size | No | Custom output dimensions with width and height controls. |
| width | No | Output width in pixels (e.g., 256). |
| height | No | Output height in pixels (e.g., 256). |
| seed | No | Random seed for reproducibility. Use -1 for random. |
| output_format | No | Output file format: jpeg or png. Default: jpeg. |
| enable_base64_output | No | API only: Returns base64 string instead of URL. |
| enable_sync_mode | No | API only: Waits for result and returns it directly in response. |
How to Use
- Write your edit instruction — describe what you want to change in the image.
- Use Prompt Enhancer (optional) — click to refine your editing instruction.
- Upload your image — drag and drop or paste a public URL.
- Set dimensions (optional) — adjust width and height for the output size.
- Set seed (optional) — use -1 for random, or a specific number to reproduce results.
- Choose output format — select jpeg or png.
- Run — click the button to apply the edit.
- Download — preview and save your edited image.
Pricing
Flat rate per edit.
| Output | Cost |
|---|---|
| Per image | $0.02 |
Best Use Cases
- Text Replacement — Change text on signs, labels, clothing, or any surface in images (supports Chinese & English).
- Element Modification — Add, remove, or swap objects while preserving untouched areas pixel-perfectly.
- Style Transfer — Apply new artistic styles while maintaining semantic content.
- IP Creation — Generate character variations and creative adaptations.
- Object Manipulation — Rotate, reposition, or transform objects within scenes.
- Product Customization — Create variations of product images with different details or branding.
Example Prompts
- “Change the background to daytime”
- “Replace the text on the sign to say ‘Welcome’”
- “Remove the person on the left side of the image”
- “Change the dress color from red to blue”
- “Add sunglasses to the person”
Editing Modes Explained
| Mode | Description | Use When |
|---|---|---|
| Appearance Editing | Modifies specific elements while keeping all other regions pixel-accurate and unchanged | Adding/removing objects, color changes, localized edits |
| Semantic Editing | Allows global pixel updates while maintaining semantic intent and consistency | Style transfer, pose changes, IP creation, rotation |
Pro Tips for Best Results
- Be specific about what to change and what the result should be.
- For text editing, the model preserves original typography — just specify the new text content.
- Reference elements clearly: “the text on the shirt”, “the background”, “the person’s hair”.
- For appearance edits, unchanged areas remain pixel-perfect — focus only on what needs editing.
- Use Chinese prompts for editing Chinese text in images for best accuracy.
- The model understands context — describe the intent, not just the mechanical change.
Notes
- If using a URL for the image, ensure it is publicly accessible. A preview thumbnail confirms successful loading.
- The enable_base64_output and enable_sync_mode options are only available through the API.
- Complex edits may require more specific prompts for accurate results.
- For multiple edits to the same image, consider processing sequentially for better control.
Authentication
For authentication details, please refer to the Authentication Guide.
API Endpoints
Submit Task & Query Result
# Submit the task
curl --location --request POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/qwen-image/edit" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ${WAVESPEED_API_KEY}" \
--data-raw '{
"seed": -1,
"output_format": "jpeg",
"enable_base64_output": false,
"enable_sync_mode": false
}'
# Get the result
curl --location --request GET "https://api.wavespeed.ai/api/v3/predictions/${requestId}/result" \
--header "Authorization: Bearer ${WAVESPEED_API_KEY}"
Parameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| prompt | string | Yes | - | The positive prompt for the generation. | |
| image | string | Yes | - | The image to generate an image from. | |
| size | string | No | - | 256 ~ 1536 per dimension | The size of the generated media in pixels (width*height). |
| seed | integer | No | -1 | -1 ~ 2147483647 | The random seed to use for the generation. -1 means a random seed will be used. |
| output_format | string | No | jpeg | jpeg, png, webp | The format of the output image. |
| enable_base64_output | boolean | No | false | - | If enabled, the output will be encoded into a BASE64 string instead of a URL. This property is only available through the API. |
| enable_sync_mode | boolean | No | false | - | If set to true, the function will wait for the result to be generated and uploaded before returning the response. It allows you to get the result directly in the response. This property is only available through the API. |
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data.id | string | Unique identifier for the prediction, Task Id |
| data.model | string | Model ID used for the prediction |
| data.outputs | array | Array of URLs to the generated content (empty when status is not completed) |
| data.urls | object | Object containing related API endpoints |
| data.urls.get | string | URL to retrieve the prediction result |
| data.has_nsfw_contents | array | Array of boolean values indicating NSFW detection for each output |
| data.status | string | Status of the task: created, processing, completed, or failed |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |
Result Request Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string | Yes | - | Task ID |
Result Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data | object | The prediction data object containing all details |
| data.id | string | Unique identifier for the prediction, the ID of the prediction to get |
| data.model | string | Model ID used for the prediction |
| data.outputs | string | Array of URLs to the generated content (empty when status is not completed). |
| data.urls | object | Object containing related API endpoints |
| data.urls.get | string | URL to retrieve the prediction result |
| data.status | string | Status of the task: created, processing, completed, or failed |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |