Skip to main content
Wan

Wan2.1 - general image editing API reference

This topic describes the input and output parameters for the Wan - general image editing model.

This document is for the China (Beijing) region only. To use the model, use an API key from the China(Beijing) region.
This model uses simple instructions to perform various image editing tasks (image expansion, watermark removal, style transfer, image inpainting, and image enhancement). The following features are currently supported:
  • Image stylization: Global and local stylization.
  • Image content editing: Instruction-based editing (add or modify image content using instructions without specifying a region), inpainting (add, delete, or modify content in a specified area), and text watermark removal (Chinese and English).
  • Image size and resolution optimization: Image expansion (expand by ratio) and super resolution (enhance to high definition).
  • Image color processing: Colorization (convert black-and-white or grayscale images to color).
  • Generation based on a reference image: Sketch-to-image generation (extract a sketch from the input image and then generate an image based on the sketch) and cartoon character reference generation.
Related guide: Image editing - Wan2.1

Model overview

Model

Price

Rate limit (shared by root accounts and RAM users)

Task submission RPS

Concurrent tasks

wanx2.1-imageedit

$0.020070/image

2

2

Model effects

Feature

Input image

Input prompt

Output image

Global stylization

image

Convert to French picture book style

image

Local stylization

image

Change the house to a wooden style.

image

Instruction-based editing

image

Change her hair to red.

image

Inpainting

Input image

image

Input mask image (white is the masked area)

image

A ceramic rabbit holding a ceramic flower.

Output image

image

Text watermark removal

image

Remove the text from the image.

image

Image expansion

20250319105917

A green fairy.

image

Super resolution

Blurry image

image

Super resolution.

Clear image

image

Colorization

image

Blue background, yellow leaves.

image

Sketch-to-image generation

Input image

image

A living room in a minimalist Nordic style.

Extract the sketch from the original image and generate a new image

image

Cartoon character reference generation

Input reference image (cartoon character)

image

The cartoon character cautiously peeks out, looking at a sparkling blue gem in the room.

Output image

image

Prerequisites

Call the Wan - general image editing API using HTTP or the DashScope SDK. Before making a call, get an API key and export the API key as an environment variable. To call the API using the SDK, install the DashScope SDK. The SDK is available for Python and Java.

HTTP

Image models take a long time to process. To prevent timeouts, HTTP calls support only asynchronous result retrieval. Two requests are required:
  1. Create a task to get a task ID: Send a request to create a task. The response returns a task ID (task_id).
  2. Query the result using the task ID: Use the task ID from the previous step to query the task status and result. If the task is successful, the response returns an image URL that is valid for 24 hours.
After creation, the task enters a queue for scheduling. Call the query API to retrieve the task status and result.
The general image editing model takes about 5 to 15 seconds to process a request. The actual time depends on the number of tasks in the queue and the network conditions. Please wait patiently for the result.

Step 1: Create a task to get task ID

POST https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/aigc/image2image/image-synthesis Replace {WorkspaceId} with your actual workspace ID.

Request parameters

Request headers
Content-Type string (Required)The content type of the request. Must be application/json.Authorization string (Required)Authenticates the request with a Model Studio API key. Example: Bearer sk-xxxx.X-DashScope-Async string (Required)Enables asynchronous processing. HTTP requests support only asynchronous calls. Must be enable.
If this request header is missing, the error "current user api does not support synchronous calls" is returned.
Request body
model string (Required)The model name, for example, wanx2.1-imageedit.input object (Required)The basic input information (prompt).

Properties

promptstring(Required)The prompt used to describe the desired elements and visual features in the generated image.Supports Chinese and English. Maximum length: 800 characters. Each Chinese character or letter counts as one character. Excess characters are automatically truncated.
Prompts vary for different features. We recommend that you review the corresponding prompting tips for each feature.
functionstring(Required)The image editing feature. The following features are currently supported:base_image_url string (Required)The URL or Base64-encoded data of the input image.Image requirements:
  • File format: JPG, JPEG, PNG, BMP, TIFF, or WEBP
  • Resolution: Width and height must be 512 to 4,096 pixels
  • File size: Maximum 10 MB
  • The URL cannot contain Chinese characters
Input image formats:
  1. Use a public URL
    • HTTP or HTTPS protocols are supported.
    • Example: http://wanx.alicdn.com/material/20250318/stylization_all_1.jpeg
  2. Pass Base64-encoded image string
    • Data format: data:{MIME_type};base64,{base64_data}
    • Example: data:image/jpeg;base64,GDU7MtCZzEbTbmRZ......
    • The encoded string in the example is incomplete and for demonstration only. For more information, see Supported formats.
mask_image_url string (Optional)This parameter is required only when function is set to description_edit_with_mask (inpainting). Not required for other features.The URL or Base64-encoded data of the mask image.You can pass a publicly accessible URL (HTTP/HTTPS) or a Base64-encoded string. For more information, see Supported formats.Mask image requirements:
  • Resolution: Must match the resolution of the image specified by base_image_url. Width and height must be 512 to 4,096 pixels
  • File format: JPG, JPEG, PNG, BMP, TIFF, or WEBP
  • File size: Maximum 10 MB
  • The URL cannot contain Chinese characters
Mask area color requirements:
  • White area: Indicates the part to be edited. Must be pure white (RGB value [255,255,255]). Otherwise, it may not be correctly identified.
  • Black area: Indicates the part that does not need to be changed. Must be pure black (RGB value [0,0,0]). Otherwise, it may not be correctly identified.
To get a mask image, use Photoshop or another tool.
parameters object (Optional)The image processing parameters.

Properties

  • General
  • Global stylization
  • Instruction-based editing
  • Image expansion
  • Super resolution
  • Sketch-to-image generation
n integer (Optional)The number of images to generate. Value range: 1 to 4. Default: 1.seedinteger(Optional)The random number seed, used to control the randomness of the content generated by the model. Value range: [0, 2147483647].If not provided, the algorithm automatically generates a random number as the seed. To keep generated content relatively stable, use the same seed parameter value.watermark bool (Optional)Specifies whether to add a watermark. The watermark is in the lower-right corner of the image and displays "Generated by AI".
  • false (default)
  • true
  • Global stylization
  • Pass a local file (Base64)
  • Local stylization
  • Instruction-based editing
  • Inpainting
  • Text watermark removal
  • Image expansion
  • Super resolution
  • Colorization
  • Sketch-to-image generation
  • Cartoon character reference generation
curl --location 'https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/aigc/image2image/image-synthesis' \
--header 'X-DashScope-Async: enable' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
  "model": "wanx2.1-imageedit",
  "input": {
    "function": "stylization_all",
    "prompt": "Convert to French picture book style",
    "base_image_url": "http://wanx.alicdn.com/material/20250318/stylization_all_1.jpeg"
  },
  "parameters": {
    "n": 1
  }
}'

Response parameters

output objectThe task output information.

Properties

task_id stringThe task ID. Valid for queries for 24 hours.task_status stringThe status of the task.

Enumeration values

  • PENDING
  • RUNNING
  • SUCCEEDED
  • FAILED
  • CANCELED
  • UNKNOWN: The task does not exist or its status is unknown.
request_id stringUnique request identifier for tracing and troubleshooting.code stringError code. Returned only for failed requests. See Error codes.message stringDetailed error message. Returned only for failed requests. See Error codes.
  • Successful response
  • Error response
Save the task_id to query the task status and result.
{
    "output": {
        "task_status": "PENDING",
        "task_id": "0385dc79-5ff8-4d82-bcb6-xxxxxx"
    },
    "request_id": "4909100c-7b5a-9f92-bfe5-xxxxxx"
}

Step 2: Query result by task ID

GET https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/tasks/{task_id} Replace {WorkspaceId} with your actual workspace ID.

Request parameters

Request headers
Authorization string (Required)Authenticates the request with a Model Studio API key. Example: Bearer sk-xxxx.
Path parameters
task_id string (Required)The ID of the task.
  • Query task result
Replace 86ecf553-d340-4e21-xxxxxxxxx with your actual task_id.
curl -X GET https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"

Response parameters

outputobjectThe task output information.

Properties

task_id stringThe task ID. Valid for queries for 24 hours.task_status stringThe status of the task.

Enumeration values

  • PENDING
  • RUNNING
  • SUCCEEDED
  • FAILED
  • CANCELED
  • UNKNOWN: The task does not exist or its status is unknown.
submit_time stringThe time when the task was submitted. The time is in UTC+8 and the format is YYYY-MM-DD HH:mm:ss.SSS.scheduled_time stringThe time when the task was executed. The time is in UTC+8 and the format is YYYY-MM-DD HH:mm:ss.SSS.end_time stringThe time when the task was completed. The time is in UTC+8 and the format is YYYY-MM-DD HH:mm:ss.SSS.results array objectA list of task results, including image URLs and error messages for partially failed tasks.
{
    "results": [
        {
            "url": ""
        },
        {
            "code": "",
            "message": ""
        }
    ]
}
task_metrics objectStatistics for the task result.

Properties

TOTAL integerThe total number of tasks.SUCCEEDED integerThe number of successful tasks.FAILED integerThe number of failed tasks.
code stringError code. Returned only for failed requests. See Error codes.message stringDetailed error message. Returned only for failed requests. See Error codes.
usage objectThe output information statistics. Only successful results are counted.

Properties

image_count integerNumber of images successfully generated. Billing: Cost = Number of images × Unit price.
request_id stringUnique request identifier for tracing and troubleshooting.
  • Task successful
  • Task failed
  • Task partially failed
Task data (task status and image URLs) is retained for only 24 hours and then automatically purged. Save generated images promptly.
{
    "request_id": "eeef0935-02e9-9742-bb55-xxxxxx",
    "output": {
        "task_id": "a425c46f-dc0a-400f-879e-xxxxxx",
        "task_status": "SUCCEEDED",
        "submit_time": "2025-02-21 17:56:31.786",
        "scheduled_time": "2025-02-21 17:56:31.821",
        "end_time": "2025-02-21 17:56:42.530",
        "results": [
            {
                "url": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/aaa.png"
            }
        ],
        "task_metrics": {
            "TOTAL": 1,
            "SUCCEEDED": 1,
            "FAILED": 0
        }
    },
    "usage": {
        "image_count": 1
    }
}

DashScope SDK

First, ensure you have installed the latest version of the DashScope SDK. Otherwise, a runtime error may occur. The DashScope SDK currently supports Python and Java. The parameter names in the SDK are mostly consistent with those in the HTTP API. The parameter structure depends on the SDK encapsulation for different languages. For parameter descriptions, see HTTP call. Video model processing takes a long time, so the service uses an asynchronous approach. The SDK provides a wrapper supporting both synchronous and asynchronous calls.
The general image editing model takes about 5 to 15 seconds to process a request. The actual time depends on the number of tasks in the queue and the network conditions. Please wait patiently for the result.

Python SDK

When using the Python SDK to process image files, input an image using one of the following three methods. Choose the method that best fits your scenario.
  1. Public URL: A publicly accessible image URL that uses the HTTP or HTTPS protocol.
  2. Base64-encoded: Pass the Base64-encoded file string in the data:{MIME_type};base64,{base64_data} format.
  3. Local file path: Supports both absolute and relative paths. See the following table for valid file path formats.

System

File path to pass

Example (absolute path)

Example (relative path)

Linux or macOS

file://{absolute or relative path of the file}

file:///home/images/test.png

file://./images/test.png

Windows

file://D:/images/test.png

file://./images/test.png

Sample code

Before calling the code, install or upgrade the DashScope Python SDK to the latest version: pip install -U dashscope. See Install the SDK.
  • Synchronous call
  • Asynchronous call
This example shows a synchronous call and supports three image input methods: public URL, Base64 encoding, and local file path.
Request example
import base64
import os
from http import HTTPStatus
from dashscope import ImageSynthesis
import dashscope
import mimetypes

"""
Environment requirements:
    dashscope python SDK >= 1.23.8
Install/Upgrade SDK:
    pip install -U dashscope
"""

dashscope.base_http_api_url = "https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1"

# If the environment variable is not configured, replace the following line with: api_key="sk-xxx"
api_key = os.getenv("DASHSCOPE_API_KEY")

# --- Helper function: for Base64 encoding ---
# Format is data:{MIME_type};base64,{base64_data}
def encode_file(file_path):
    mime_type, _ = mimetypes.guess_type(file_path)
    if not mime_type or not mime_type.startswith("image/"):
        raise ValueError("Unsupported or unrecognized image format")
    with open(file_path, "rb") as image_file:
        encoded_string = base64.b64encode(image_file.read()).decode('utf-8')
    return f"data:{mime_type};base64,{encoded_string}"

"""
Image input methods:
Choose one of the following three methods.

1. Use a public URL - suitable for publicly accessible images.
2. Use a local file - suitable for local development and testing.
3. Use Base64 encoding - suitable for private images or scenarios requiring encrypted transmission.
"""

# [Method 1] Use a public image URL
mask_image_url = "http://wanx.alicdn.com/material/20250318/description_edit_with_mask_3_mask.png"
base_image_url = "http://wanx.alicdn.com/material/20250318/description_edit_with_mask_3.jpeg"

# [Method 2] Use a local file (supports absolute and relative paths)
# Format requirement: file:// + file path
# Example (absolute path):
# mask_image_url = "file://" + "/path/to/your/mask_image.png"     # Linux/macOS
# base_image_url = "file://" + "C:/path/to/your/base_image.jpeg"  # Windows
# Example (relative path):
# mask_image_url = "file://" + "./mask_image.png"                 # Based on the actual path
# base_image_url = "file://" + "./base_image.jpeg"                # Based on the actual path

# [Method 3] Use a Base64-encoded image
# mask_image_url = encode_file("./mask_image.png")               # Based on the actual path
# base_image_url = encode_file("./base_image.jpeg")              # Based on the actual path

def sample_sync_call_imageedit():
    print('please wait...')
    rsp = ImageSynthesis.call(api_key=api_key,
                              model="wanx2.1-imageedit",
                              function="description_edit_with_mask",
                              prompt="A ceramic rabbit holding a ceramic flower",
                              mask_image_url=mask_image_url,
                              base_image_url=base_image_url,
                              n=1)
    assert rsp.status_code == HTTPStatus.OK

    print('response: %s' % rsp)
    if rsp.status_code == HTTPStatus.OK:
        for result in rsp.output.results:
            print("---------------------------")
            print(result.url)
    else:
        print('sync_call Failed, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))

if __name__ == '__main__':
    sample_sync_call_imageedit()
Response example
The URL is valid for 24 hours. Download the image promptly.
{
    "status_code": 200,
    "request_id": "dc41682c-4e4a-9010-bc6f-xxxxxx",
    "code": null,
    "message": "",
    "output": {
        "task_id": "6e319d88-a07a-420c-9493-xxxxxx",
        "task_status": "SUCCEEDED",
        "results": [
            {
                "url": "https://dashscope-result-wlcb-acdr-1.oss-cn-wulanchabu-acdr-1.aliyuncs.com/xxx.png?xxxxxx"
            }
        ],
        "submit_time": "2025-05-26 14:58:27.320",
        "scheduled_time": "2025-05-26 14:58:27.339",
        "end_time": "2025-05-26 14:58:39.170",
        "task_metrics": {
            "TOTAL": 1,
            "SUCCEEDED": 1,
            "FAILED": 0
        }
    },
    "usage": {
        "image_count": 1
    }
}

Java SDK

When using the Java SDK to process image files, input an image using one of the following three methods. Choose the method that best fits your scenario.
  1. Public URL: A publicly accessible image URL that uses the HTTP or HTTPS protocol.
  2. Base64-encoded: Pass the Base64-encoded file string in the data:{MIME_type};base64,{base64_data} format.
  3. Local file path: Only absolute paths are supported. See the following table for valid file path formats.

System

File path to pass

Example

Linux or macOS

file://{absolute path of the file}

file:///home/images/test.png

Windows

file:///{absolute path of the file}

file:///D:/images/test.png

Sample code

Before calling the code, install or upgrade the DashScope Java SDK to the latest version. See Install the SDK.
  • Synchronous call
  • Asynchronous call
This example shows a synchronous call and supports three image input methods: public URL, Base64 encoding, and local file path.
Request example
// Copyright (c) Alibaba, Inc. and its affiliates.

import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesis;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesisParam;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesisResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.utils.JsonUtils;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;

/**
 * Environment requirements
 *      dashscope java SDK >=2.20.9
 * Update Maven dependency:
 *      https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java
 */

public class ImageEditSync {
    static {Constants.baseHttpApiUrl="https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1";}

    // If the environment variable is not configured, replace the following line with: apiKey="sk-xxx"
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    /**
     * Image input methods: Choose one of the following three.
     *
     * 1. Use a public URL - suitable for publicly accessible images.
     * 2. Use a local file - suitable for local development and testing.
     * 3. Use Base64 encoding - suitable for private images or scenarios requiring encrypted transmission.
     */

    //[Method 1] Public URL
    static String maskImageUrl = "http://wanx.alicdn.com/material/20250318/description_edit_with_mask_3_mask.png";
    static String baseImageUrl = "http://wanx.alicdn.com/material/20250318/description_edit_with_mask_3.jpeg";

    //[Method 2] Local file path (file://+absolute path or file:///+absolute path)
    // static String maskImageUrl = "file://" + "/your/path/to/mask_image.png";    // Linux/macOS
    // static String baseImageUrl = "file:///" + "C:/your/path/to/base_image.png";  // Windows

    //[Method 3] Base64 encoding
    // static String maskImageUrl = encodeFile("/your/path/to/mask_image.png");
    // static String baseImageUrl = encodeFile("/your/path/to/base_image.png");

    public static void syncCall() {
        // Set the parameters parameter
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("prompt_extend", true);

        ImageSynthesisParam param =
                ImageSynthesisParam.builder()
                        .apiKey(apiKey)
                        .model("wanx2.1-imageedit")
                        .function(ImageSynthesis.ImageEditFunction.DESCRIPTION_EDIT_WITH_MASK)
                        .prompt("A ceramic rabbit holding a ceramic flower")
                        .maskImageUrl(maskImageUrl)
                        .baseImageUrl(baseImageUrl)
                        .n(1)
                        .size("1024*1024")
                        .parameters(parameters)
                        .build();

        ImageSynthesis imageSynthesis = new ImageSynthesis();
        ImageSynthesisResult result = null;
        try {
            System.out.println("---sync call, please wait a moment----");
            result = imageSynthesis.call(param);
        } catch (ApiException | NoApiKeyException e){
            throw new RuntimeException(e.getMessage());
        }
        System.out.println(JsonUtils.toJson(result));
    }

    /**
     * Encodes a file into a Base64 string
     * @param filePath The file path
     * @return A Base64 string in the format data:{MIME_type};base64,{base64_data}
     */
    public static String encodeFile(String filePath) {
        Path path = Paths.get(filePath);
        if (!Files.exists(path)) {
            throw new IllegalArgumentException("File does not exist: " + filePath);
        }
        // Detect the MIME type
        String mimeType = null;
        try {
            mimeType = Files.probeContentType(path);
        } catch (IOException e) {
            throw new IllegalArgumentException("Cannot detect file type: " + filePath);
        }
        if (mimeType == null || !mimeType.startsWith("image/")) {
            throw new IllegalArgumentException("Unsupported or unrecognized image format");
        }
        // Read the file content and encode it
        byte[] fileBytes = null;
        try{
            fileBytes = Files.readAllBytes(path);
        } catch (IOException e) {
            throw new IllegalArgumentException("Cannot read file content: " + filePath);
        }

        String encodedString = Base64.getEncoder().encodeToString(fileBytes);
        return "data:" + mimeType + ";base64," + encodedString;
    }

    public static void main(String[] args) {
        syncCall();
    }
}
Response example
The URL is valid for 24 hours. Download the image promptly.
{
    "request_id": "bf6c6361-f0fc-949c-9d60-xxxxxx",
    "output": {
        "task_id": "958db858-153b-4c81-b243-xxxxxx",
        "task_status": "SUCCEEDED",
        "results": [
            {
                "url": "https://dashscope-result-wlcb-acdr-1.oss-cn-wulanchabu-acdr-1.aliyuncs.com/xxx.png?xxxxxx"
            }
        ],
        "task_metrics": {
            "TOTAL": 1,
            "SUCCEEDED": 1,
            "FAILED": 0
        }
    },
    "usage": {
        "image_count": 1
    }
}

Error codes

If the model call fails and returns an error message, see Error codes for resolution. This API also has specific status codes, as shown in the following table.

HTTP status code

API error code (code)

API error message (message)

Description

400

InvalidParameter

InvalidParameter

The request parameters are invalid.

400

IPInfringementSuspect

Input data is suspected of being involved in IP infringement.

The input data (such as the prompt or image) is suspected of intellectual property infringement. Check the input to ensure it does not contain content that poses an infringement risk.

400

DataInspectionFailed

Input data may contain inappropriate content.

The input data (such as the prompt or image) may contain inappropriate content. Modify the input and try again.

500

InternalError

InternalError

The service is abnormal. Try again to rule out an occasional issue.

Input image formats

Supported formats

Input images support multiple string formats, as shown in the following table.

Invocation method

HTTP

Python SDK

Java SDK

Supported input image methods

  • Public URL

  • Base64 encoding

  • Public URL

  • Base64 encoding

  • Local file path

  • Public URL

  • Base64 encoding

  • Local file path

Method 1: Use public URL
  • Provide a publicly accessible image address. HTTP or HTTPS protocols are supported.
  • Example: https://xxxx/img.png
Method 2: Use Base64 encoding Convert a local image file to a Base64 string and concatenate it into the format data:{MIME_type};base64,{base64_data}.
  • For the conversion code, see Sample code
  • {MIME_type}: The media type of the image, which must match the file format
  • {base64_data}: The Base64-encoded string of the image file
  • MIME type reference:

    Image format

    MIME Type

    JPEG

    image/jpeg

    JPG

    image/jpeg

    PNG

    image/png

    BMP

    image/bmp

    TIFF

    image/tiff

    WEBP

    image/webp

  • Example: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABDg...... Note: The Base64 string above is truncated for demonstration. In actual use, pass the complete encoded string.
Method 3: Use local file path
  • HTTP does not support local file paths. Only the Python SDK and Java SDK support this method.
  • For local file path rules, see Python SDK and Java SDK.

FAQ

For common questions about image models (model billing, rate limiting rules, and frequent API errors), see Image API FAQ.
Text Generation
Video Generation
Audio
Realtime API
Text Embedding
Model Production