All Products
Search
Document Center

Alibaba Cloud Model Studio:Wan - general image editing API reference

Last Updated:Feb 11, 2026

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

Important

This document is for the Chinese mainland (Beijing) region only. To use the model, use an API key from the Chinese mainland (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 - Wan 2.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, obtain an API key and set 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 can take a long time to process. HTTP calls support only asynchronous result retrieval to prevent request timeouts. This requires two requests:

  1. Create a task to obtain a task ID: Sends a request to create a task. Returns a task ID (task_id) in the response.

  2. Query the result by task ID: Uses the task ID from the previous step to query the task status and result. Returns an image URL (valid for 24 hours) if the task succeeds.

Note

After creating a task, it is added to a queue to await scheduling. Call the "Query the result by task ID" 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://dashscope.aliyuncs.com/api/v1/services/aigc/image2image/image-synthesis

Request parameters

Global stylization

curl --location 'https://dashscope.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
  }
}'

Pass a local file (Base64)

The following example shows how to pass a Base64-encoded parameter for global stylization.

Because the Base64-encoded string is long, download image_base64 and copy its entire content to the base_image_url parameter.

For more information about the data format, see Supported formats.

curl --location 'https://dashscope.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": "data:image/jpeg;base64,/9j/4AAQSkZJR......"
  },
  "parameters": {
    "n": 1
  }
}'

Local stylization

curl --location 'https://dashscope.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_local",
    "prompt": "Change the house to a wooden style.",
    "base_image_url": "http://wanx.alicdn.com/material/20250318/stylization_local_1.png"
  },
  "parameters": {
    "n": 1
  }
}'

Instruction-based editing

Feature description: Add or modify image content using only instructions, without specifying a region.

curl --location 'https://dashscope.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": "description_edit",
    "prompt": "Change her hair to red.",
    "base_image_url": "http://wanx.alicdn.com/material/20250318/description_edit_2.png"
  },
  "parameters": {
    "n": 1
  }
}'

Inpainting

Feature description: Add, delete, or modify content in a specified area.

curl --location 'https://dashscope.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": "description_edit_with_mask",
    "prompt": "A ceramic rabbit holding a ceramic flower.",
    "base_image_url": "http://wanx.alicdn.com/material/20250318/description_edit_with_mask_3.jpeg",
    "mask_image_url": "http://wanx.alicdn.com/material/20250318/description_edit_with_mask_3_mask.png"
  },
  "parameters": {
    "n": 1
  }
}'

Text watermark removal

Feature description: Supports removing Chinese and English text watermarks.

curl --location 'https://dashscope.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": "remove_watermark",
    "prompt": "Remove the text from the image",
    "base_image_url": "http://wanx.alicdn.com/material/20250318/remove_watermark_1.png"
  },
  "parameters": {
    "n": 1
  }
}'

Image expansion

Feature description: Supports expanding the image proportionally up, down, left, and right.

curl --location 'https://dashscope.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": "expand",
    "prompt": "A green fairy",
    "base_image_url": "http://wanx.alicdn.com/material/20250318/expand_2.jpg"
  },
  "parameters": {
    "top_scale": 1.5,
    "bottom_scale": 1.5,
    "left_scale": 1.5,
    "right_scale": 1.5,
    "n": 1
  }
}'

Super resolution

Feature description: Supports upscaling a blurry image to high definition.

curl --location 'https://dashscope.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": "super_resolution",
    "prompt": "Super resolution.",
    "base_image_url": "http://wanx.alicdn.com/material/20250318/super_resolution_1.jpeg"  
  },
  "parameters": {
    "upscale_factor": 2,
    "n": 1
  }
}'

Colorization

Feature description: Converts a black and white or grayscale image to a color image.

curl --location 'https://dashscope.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": "colorization",
    "prompt": "Blue background, yellow leaves.",
    "base_image_url": "http://wanx.alicdn.com/material/20250318/colorization_1.jpeg"  
  },
  "parameters": {
    "n": 1
  }
}'

Sketch-to-image generation

Feature description: Extracts a sketch from the input image and then generates an image based on the sketch.

curl --location 'https://dashscope.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": "doodle",
    "prompt": "A living room in a minimalist Nordic style.",
    "base_image_url": "http://wanx.alicdn.com/material/20250318/doodle_1.png"
  },
  "parameters": {
    "n": 1
  }
}'

Cartoon character reference generation

Feature description: Supports generating an image based on a reference cartoon character.

curl --location 'https://dashscope.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": "control_cartoon_feature",
    "prompt": "The cartoon character cautiously peeks out, looking at a sparkling blue gem in the room.",
    "base_image_url": "http://wanx.alicdn.com/material/20250318/control_cartoon_feature_1.png"
  },
  "parameters": {
    "n": 1
  }
}'
Request headers

Content-Type string (Required)

The content type of the request. Must be application/json.

Authorization string (Required)

The authentication credentials using a Model Studio API key.

Example: Bearer sk-xxxx

X-DashScope-Async string (Required)

Enables asynchronous processing. Must be enable as HTTP requests support only asynchronous processing.

Important

Returns "current user api does not support synchronous calls" error if not included.

Request body

model string (Required)

The model name, for example, wanx2.1-imageedit.

input object (Required)

The basic input information (prompt).

Properties

prompt string (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.

function string (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

n integer (Optional)

The number of images to generate. Value range: 1 to 4. Default: 1.

seed integer (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

n integer (Optional)

The number of images to generate. The value can be an integer from 1 to 4. The default value is 1.

seed integer (Optional)

The random number seed, used to control the randomness of the content generated by the model. The value of the seed parameter can be an integer from [0, 2147483647].

If you do not provide this parameter, the algorithm automatically generates a random number as the seed. If you want the generated content to be relatively stable, use the same seed parameter value.

watermark bool (Optional)

Specifies whether to add a watermark. The watermark is located in the lower-right corner of the image and displays Generated by AI.

  • false: The default value. No watermark is added.

  • true: A watermark is added.

strength float (Optional)

Specify this parameter when function is set to stylization_all (global stylization).

The degree of image modification. Value range: 0.0 to 1.0. Default: 0.5.

A value closer to 0 means the result is closer to the original image. A value closer to 1 means greater modification to the original image.

Instruction-based editing

n integer (Optional)

The number of images to generate. The value can be an integer from 1 to 4. The default value is 1.

seed integer (Optional)

The random number seed, used to control the randomness of the content generated by the model. The value of the seed parameter can be an integer from [0, 2147483647].

If you do not provide this parameter, the algorithm automatically generates a random number as the seed. If you want the generated content to be relatively stable, use the same seed parameter value.

watermark bool (Optional)

Specifies whether to add a watermark. The watermark is located in the lower-right corner of the image and displays Generated by AI.

  • false: The default value. No watermark is added.

  • true: A watermark is added.

strength float (Optional)

Specify this parameter when function is set to description_edit (instruction-based editing).

The degree of image modification. The value can be a float from 0.0 to 1.0. The default value is 0.5.

A value closer to 0 means the result is closer to the original image. A value closer to 1 means a greater degree of modification to the original image.

Image expansion

n integer (Optional)

The number of images to generate. The value can be an integer from 1 to 4. The default value is 1.

seed integer (Optional)

The random number seed, used to control the randomness of the content generated by the model. The value of the seed parameter can be an integer from [0, 2147483647].

If you do not provide this parameter, the algorithm automatically generates a random number as the seed. If you want the generated content to be relatively stable, use the same seed parameter value.

watermark bool (Optional)

Specifies whether to add a watermark. The watermark is located in the lower-right corner of the image and displays Generated by AI.

  • false: The default value. No watermark is added.

  • true: A watermark is added.

top_scale float (Optional)

Specify this parameter only when function is set to expand (image expansion).

Expand the centered image upward by a specified ratio. Default: 1.0. Value range: 1.0 to 2.0.

bottom_scale float (Optional)

Specify this parameter only when function is set to expand (image expansion).

Expand the centered image downward by a specified ratio. Default: 1.0. Value range: 1.0 to 2.0.

left_scale float (Optional)

Specify this parameter only when function is set to expand (image expansion).

Expand the centered image to the left by a specified ratio. Default: 1.0. Value range: 1.0 to 2.0.

right_scale float (Optional)

Specify this parameter only when function is set to expand (image expansion).

Expand the centered image to the right by a specified ratio. Default: 1.0. Value range: 1.0 to 2.0.

Super resolution

n integer (Optional)

The number of images to generate. The value can be an integer from 1 to 4. The default value is 1.

seed integer (Optional)

The random number seed, used to control the randomness of the content generated by the model. The value of the seed parameter can be an integer from [0, 2147483647].

If you do not provide this parameter, the algorithm automatically generates a random number as the seed. If you want the generated content to be relatively stable, use the same seed parameter value.

watermark bool (Optional)

Specifies whether to add a watermark. The watermark is located in the lower-right corner of the image and displays Generated by AI.

  • false: The default value. No watermark is added.

  • true: A watermark is added.

upscale_factor integer (Optional)

Specify this parameter only when function is set to super_resolution (super resolution).

The upscaling factor for super resolution, which enhances details while enlarging the image and improves resolution for high-definition processing.

Value range: 1 to 4. Default: 1. When upscale_factor is set to 1, the image is processed for high definition without being enlarged.

Sketch-to-image generation

n integer (Optional)

The number of images to generate. The value can be an integer from 1 to 4. The default value is 1.

seed integer (Optional)

The random number seed, used to control the randomness of the content generated by the model. The value of the seed parameter can be an integer from [0, 2147483647].

If you do not provide this parameter, the algorithm automatically generates a random number as the seed. If you want the generated content to be relatively stable, use the same seed parameter value.

watermark bool (Optional)

Specifies whether to add a watermark. The watermark is located in the lower-right corner of the image and displays Generated by AI.

  • false: The default value. No watermark is added.

  • true: A watermark is added.

is_sketch bool (Optional)

Specify this parameter only when function is set to doodle (sketch-to-image generation).

Specifies whether the input image is a sketch image.

  • false (default): The input image is not a sketch. The model first extracts a sketch from the input image and then generates a new image based on the sketch.

  • true: The input image is a sketch. The model generates an image directly based on the input image. Suitable for doodle-to-painting scenarios.

Response parameters

Successful 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"
}

Error response

Task creation failed. See error codes to resolve the issue.

{
    "code": "InvalidApiKey",
    "message": "No API-key provided.",
    "request_id": "7438d53d-6eb8-4596-8835-xxxxxx"
}

output object

The task output information.

Properties

task_id string

The ID of the task. Can be used to query the task for up to 24 hours.

task_status string

The status of the task.

Enumeration

  • PENDING

  • RUNNING

  • SUCCEEDED

  • FAILED

  • CANCELED

  • UNKNOWN: Task does not exist or status is unknown

request_id string

Unique identifier for the request. Use for tracing and troubleshooting issues.

code string

The error code. Returned only when the request fails. See error codes for details.

message string

Detailed error message. Returned only when the request fails. See error codes for details.

Step 2: Query result by task ID

GET https://dashscope.aliyuncs.com/api/v1/tasks/{task_id}

Request parameters

Query task result

Replace 86ecf553-d340-4e21-xxxxxxxxx with the actual task ID.

curl -X GET https://dashscope.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"
Request headers

Authorization string (Required)

The authentication credentials using a Model Studio API key.

Example: Bearer sk-xxxx

Path parameters

task_id string (Required)

The ID of the task to query.

Response parameters

Task successful

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
    }
}

Task failed

When a task fails, task_status is set to FAILED with an error code and message. See error codes to resolve the issue.

{
    "request_id": "e5d70b02-ebd3-98ce-9fe8-759d7d7b107d",
    "output": {
        "task_id": "86ecf553-d340-4e21-af6e-xxxxxx",
        "task_status": "FAILED",
        "code": "InvalidParameter",
        "message": "xxxxxx",
        "task_metrics": {
            "TOTAL": 4,
            "SUCCEEDED": 0,
            "FAILED": 4
        }
    }
}

Task partially failed

The model can generate multiple images in a single task. If at least one image generates successfully, the task status is marked as SUCCEEDED and returns the URLs of successful images. For any images that fail to generate, the result includes a failure reason. To resolve these failures, see error codes. Only successfully generated images count toward usage statistics.

{
    "request_id": "85eaba38-0185-99d7-8d16-xxxxxx",
    "output": {
        "task_id": "86ecf553-d340-4e21-af6e-xxxxxx",
        "task_status": "SUCCEEDED",
        "results": [
            {
                "url": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/123/a1.png"
            },
            {
                "code": "InternalError.Timeout",
                "message": "An internal timeout error has occured during execution, please try again later or contact service support."
            }
        ],
        "task_metrics": {
            "TOTAL": 2,
            "SUCCEEDED": 1,
            "FAILED": 1
        }
    },
    "usage": {
        "image_count": 1
    }
}

output object

The task output information.

Properties

task_id string

The ID of the task. Can be used to query the task for up to 24 hours.

task_status string

The status of the task.

Enumeration

  • PENDING

  • RUNNING

  • SUCCEEDED

  • FAILED

  • CANCELED

  • UNKNOWN: Task does not exist or status is unknown

submit_time string

The time when the task was submitted. Time is in UTC+8. Format: YYYY-MM-DD HH:mm:ss.SSS.

scheduled_time string

The time when the task started running. Time is in UTC+8. Format: YYYY-MM-DD HH:mm:ss.SSS.

end_time string

The time when the task was completed. Time is in UTC+8. Format: YYYY-MM-DD HH:mm:ss.SSS.

results array object

A list of task results, including image URLs and error messages for partially failed tasks.

Data structure

{
    "results": [
        {
            "url": ""
        },
        {
            "code": "",
            "message": ""
        }
    ]
}

task_metrics object

Statistics about the task results.

Properties

TOTAL integer

Total number of tasks.

SUCCEEDED integer

Number of successful tasks.

FAILED integer

Number of failed tasks.

code string

The error code. Returned only when the request fails. See error codes for details.

message string

Detailed error message. Returned only when the request fails. See error codes for details.

usage object

The output information statistics. Only successful results are counted.

Properties

image_count integer

Number of images successfully generated by the model. Billing formula: Fee = (Number of images) × (Unit price).

request_id string

Unique identifier for the request. Use for tracing and troubleshooting issues.

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.

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. Select the method that best fits your scenario.

  1. Public URL: A publicly accessible image URL using HTTP or HTTPS protocol.

  2. Base64 encoding: The Base64-encoded file string in the format data:{MIME_type};base64,{base64_data}.

  3. Local file path: Supports both absolute and relative paths. See the following table for valid file path formats.

System

File path to be provided

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 operating system

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

file://./images/test.png

Sample code

Note

Before calling the code, ensure you have installed the DashScope Python SDK. We recommend upgrading to the latest version by running pip install -U dashscope. See SDK installation.

Synchronous 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 mimetypes

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

# 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
    }
}

Asynchronous call

This example shows only the asynchronous call method.

Request example
import os
from http import HTTPStatus
from dashscope import ImageSynthesis

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

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

# 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"


def sample_async_call_imageedit():
    # Asynchronous call, returns a task_id
    rsp = ImageSynthesis.async_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)
    print(rsp)
    if rsp.status_code == HTTPStatus.OK:
        print("task_id: %s" % rsp.output.task_id)
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))

    # Get asynchronous task information
    status = ImageSynthesis.fetch(task=rsp, api_key=api_key)
    if status.status_code == HTTPStatus.OK:
        print(status.output.task_status)  # check the task status
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (status.status_code, status.code, status.message))

    # Wait for the asynchronous task to finish
    rsp = ImageSynthesis.wait(rsp)
    print(rsp)
    if rsp.status_code == HTTPStatus.OK:
        print(rsp.output)
        for result in rsp.output.results:
            print("---------------------------")
            print(result.url)
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))


if __name__ == '__main__':
    sample_async_call_imageedit()
Response example

1. Response example for creating a task

{
	"status_code": 200,
	"request_id": "6dc3bf6c-be18-9268-9c27-xxxxxx",
	"code": "",
	"message": "",
	"output": {
		"task_id": "686391d9-7ecf-4290-a8e9-xxxxxx",
		"task_status": "PENDING",
		"video_url": ""
	},
	"usage": null
}

2. Response example for querying a task result

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?Expires=17xxxxxx"
            }
        ],
        "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. Select the method that best fits your scenario.

  1. Public URL: A publicly accessible image URL using HTTP or HTTPS protocol.

  2. Base64 encoding: The Base64-encoded file string in the format data:{MIME_type};base64,{base64_data}.

  3. Local file path: Only absolute paths are supported. See the following table for correct file path formats.

System

File path to be provided

Example

Linux or macOS

file://{absolute path of the file}

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

Windows operating system

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

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

Sample code

Note

Before calling the code, ensure you have installed the DashScope Java SDK. We recommend upgrading to the latest version. See SDK installation.

Synchronous 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.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 {

    // 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
    }
}

Asynchronous call

This example shows only the asynchronous call method.

Request example
// Copyright (c) Alibaba, Inc. and its affiliates.

import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesis;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesisListResult;
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.task.AsyncTaskListParam;
import com.alibaba.dashscope.utils.JsonUtils;

import java.util.HashMap;
import java.util.Map;

/**
 * Environment requirements
 *      dashscope java SDK >= 2.20.1
 * Update Maven dependency:
 *      https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java
 */
 
public class ImageEditAsync {

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

    //[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";

    public static void asyncCall() {
        // 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("---async call, please wait a moment----");
            result = imageSynthesis.asyncCall(param);
        } catch (ApiException | NoApiKeyException e){
            throw new RuntimeException(e.getMessage());
        }

        System.out.println(JsonUtils.toJson(result));

        String taskId = result.getOutput().getTaskId();

        System.out.println("taskId=" + taskId);


        try {
            result = imageSynthesis.wait(taskId, apiKey);
        } catch (ApiException | NoApiKeyException e){
            throw new RuntimeException(e.getMessage());
        }
        System.out.println(JsonUtils.toJson(result));
        System.out.println(JsonUtils.toJson(result.getOutput()));
    }

    public static void listTask() throws ApiException, NoApiKeyException {
        ImageSynthesis is = new ImageSynthesis();
        AsyncTaskListParam param = AsyncTaskListParam.builder().build();
        param.setApiKey(apiKey);
        ImageSynthesisListResult result = is.list(param);
        System.out.println(result);
    }

    public void fetchTask(String taskId) throws ApiException, NoApiKeyException {
        ImageSynthesis is = new ImageSynthesis();
        // If DASHSCOPE_API_KEY is set as an environment variable, apiKey can be empty.
        ImageSynthesisResult result = is.fetch(taskId, apiKey);
        System.out.println(result.getOutput());
        System.out.println(result.getUsage());
    }


    public static void main(String[] args) {
        asyncCall();
    }
}
Response example

1. Response example for creating a task

{
	"request_id": "5dbf9dc5-4f4c-9605-85ea-xxxxxxxx",
	"output": {
		"task_id": "7277e20e-aa01-4709-xxxxxxxx",
		"task_status": "PENDING"
	}
}

2. Response example for querying a task result

The URL is valid for 24 hours. Download the image promptly.
{
	"request_id": "3d740fc4-a968-9c36-b0e7-xxxxxxxx",
	"output": {
		"task_id": "34dcf4b0-ed84-441e-91cb-xxxxxxxx",
		"task_status": "SUCCEEDED",
		"results": [
			{
				"url": "https://dashscope-result-hz.oss-cn-hangzhou.aliyuncs.com/xxx.png"
			}
		],
		"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",
		"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 messages 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.

Image access configuration

Configure domain name whitelist: Ensure your business system can access image links

Generated images are stored in Alibaba Cloud OSS. Each image is assigned an OSS link, such as https://dashscope-result-xx.oss-cn-xxxx.aliyuncs.com/xxx.png. OSS links allow public access, and you can use them to view or download the image. The link is valid for only 24 hours.

If your business has high security requirements and cannot access Alibaba Cloud OSS links, you must configure a whitelist for public access. Add the following domain names to your whitelist to access the image links.

# OSS domain name list
dashscope-result-bj.oss-cn-beijing.aliyuncs.com
dashscope-result-hz.oss-cn-hangzhou.aliyuncs.com
dashscope-result-sh.oss-cn-shanghai.aliyuncs.com
dashscope-result-wlcb.oss-cn-wulanchabu.aliyuncs.com
dashscope-result-zjk.oss-cn-zhangjiakou.aliyuncs.com
dashscope-result-sz.oss-cn-shenzhen.aliyuncs.com
dashscope-result-hy.oss-cn-heyuan.aliyuncs.com
dashscope-result-cd.oss-cn-chengdu.aliyuncs.com
dashscope-result-gz.oss-cn-guangzhou.aliyuncs.com
dashscope-result-wlcb-acdr-1.oss-cn-wulanchabu-acdr-1.aliyuncs.com

FAQ

For common questions about image models (model billing, rate limiting rules, and frequent API errors), see FAQ.