Todos os produtos
Search
Central de documentação

Alibaba Cloud Model Studio:Wanxiang – General Image Editing 2.5

Última atualização: Jul 14, 2026

O modelo Wanxiang General Image Editing wan2.5 edita e funde imagens a partir apenas de instruções de texto, mantendo a consistência do assunto em todas as edições.

Início rápido: Guia do usuário

Importante

O Alibaba Cloud Model Studio lançou domínios específicos por workspace para as regiões China (Beijing) e Singapore. Os novos domínios dedicados oferecem desempenho superior e maior estabilidade para solicitações de inferência. Recomendamos migrar para os novos domínios:

  • China (Beijing): de https://dashscope.aliyuncs.com para https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com

  • Singapore: de https://dashscope-intl.aliyuncs.com para https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com

{WorkspaceId} é o ID do seu workspace, que pode ser encontrado na página Workspace Details no console do Alibaba Cloud Model Studio. O domínio existente permanece totalmente funcional.

Visão geral do modelo

Capacidades do modelo

Exemplo de entrada

Imagem de saída

Edição de imagem única

damotest2023 Portrait photography outdoors fashionable beauty

a26b226d-f044-4e95-a41c-d1c0d301c30b

Substitua o vestido floral por um vestido de renda estilo vintage com bordados delicados na gola e nos punhos.

Fusão de múltiplas imagens

image

p1028883

Coloque o despertador da imagem 1 ao lado do vaso sobre a mesa de jantar na imagem 2.

Nome do modelo

Descrição do modelo

Especificações da imagem de saída

wan2.5-i2i-preview

Wanxiang 2.5 preview

Suporta edição de imagem única e fusão de múltiplas imagens

Formato da imagem: PNG.

Resolução da imagem:

  • Use o parâmetro <a baseurl="t3137712_v2_2_0.xdita" data-node="6107277" data-root="85177" data-tag="xref" href="#2e0de6a5b1aw8" id="92c4acfccbmzm">parameters.size</a> para especificar a resolução da imagem de saída no formato width*height (em pixels).

  • Se nenhuma resolução for especificada, o padrão será 1280×1280 pixels totais. Regras aproximadas de proporção:

    • Para entrada de imagem única: corresponde à proporção da imagem de entrada.

    • Para entrada de múltiplas imagens: corresponde à proporção da última imagem de entrada.

Nota

Antes de chamar a API, revise os modelos suportados e preços para sua região.

Pré-requisitos

Antes de fazer uma chamada, obtenha uma chave de API e exporte a chave de API como uma variável de ambiente. Para fazer chamadas usando o SDK, instale o DashScope SDK.

Importante

As regiões China (Beijing) e Singapore possuem chaves de API e endpoints de solicitação separados. Eles não podem ser usados de forma intercambiável. Chamadas entre regiões resultam em falhas de autenticação ou erros de service.

Chamada de API HTTP

A edição de imagens leva de 1 a 2 minutos, portanto a API usa invocação assíncrona: Criar tarefa → Consultar resultado.

O tempo real de execução varia conforme o tamanho da fila e a carga do service.

Etapa 1: Criar uma tarefa e obter o ID da tarefa

Região Singapore: POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/image2image/image-synthesis

Região Beijing: POST https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/aigc/image2image/image-synthesis

Substitua {WorkspaceId} pelo seu ID do workspace real.

Nota
  • Após criar a tarefa, use o task_id retornado para consultar o resultado. O task_id é válido por 24 horas. Não crie tarefas duplicadas. Em vez disso, use polling para recuperar o resultado.

  • Para orientações destinadas a iniciantes, consulte Chamar APIs com Postman ou cURL.

Parâmetros da solicitação

Edição de imagem única

 curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/image2image/image-synthesis' \
    -H 'X-DashScope-Async: enable' \
    -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
    "model": "wan2.5-i2i-preview",
    "input": {
        "prompt": "Replace the floral dress with a vintage-style lace gown featuring delicate embroidery on the collar and cuffs.",
        "images": [
            "https://img.alicdn.com/imgextra/i2/O1CN01vHOj4h28jOxUJPwY8_!!6000000007968-49-tps-1344-896.webp"
        ]
    },
    "parameters": {
        "prompt_extend": true,
        "n": 1
    }
}'

Fusão de múltiplas imagens

 curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/image2image/image-synthesis' \
    -H 'X-DashScope-Async: enable' \
    -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
    "model": "wan2.5-i2i-preview",
    "input": {
        "prompt": "Place the alarm clock from image 1 beside the vase on the dining table in image 2.",
        "images": [
            "https://img.alicdn.com/imgextra/i3/O1CN0157XGE51l6iL9441yX_!!6000000004770-49-tps-1104-1472.webp",
            "https://img.alicdn.com/imgextra/i3/O1CN01SfG4J41UYn9WNt4X1_!!6000000002530-49-tps-1696-960.webp"
        ]
    },
    "parameters": {
        "n": 1
    }
}'

Cabeçalhos da solicitação

Content-Type string (Obrigatório)

O tipo de conteúdo da solicitação. Deve ser application/json.

Authorization string (Obrigatório)

Autentica a solicitação com uma chave de API do Model Studio. Exemplo: Bearer sk-xxxx.

X-DashScope-Async string (Obrigatório)

Ativa o processamento assíncrono. Solicitações HTTP suportam apenas chamadas assíncronas. Deve ser enable.

Importante

Se este cabeçalho de solicitação estiver ausente, o erro "current user api does not support synchronous calls" será retornado.

Corpo da solicitação

model string (obrigatório)

Nome do modelo. Modelos suportados e preços.

Valor de exemplo: wan2.5-i2i-preview.

input object (obrigatório)

Campos de entrada, como o prompt e as imagens.

Propriedades

prompt string (obrigatório)

Um prompt positivo descrevendo elementos e características visuais a serem incluídos na imagem gerada.

Suporta chinês e inglês. Máximo: 2000 caracteres (cada caractere conta como um); o excesso é truncado.

Para dicas de escrita de prompts, consulte o Guia de prompts de texto para imagem.

Valor de exemplo: Um gato laranja alegre sentado, realista e detalhado.

images array of string (obrigatório)

Um array de URLs de imagens.

  • Comprimento máximo do array: 3 (até três imagens).

  • Para entrada de múltiplas imagens, a ordem importa. As imagens seguem a sequência do array.

Requisitos da imagem:

  • Formatos: JPEG, JPG, PNG (sem canal alfa), BMP, WEBP.

  • Resolução: Largura e altura devem estar entre 384 e 5000 pixels.

  • Tamanho do arquivo: Até 10 MB.

Formatos de entrada suportados:

  1. URL publicamente acessível

    • Protocolos: HTTP ou HTTPS.

    • Valor de exemplo: http://wanx.alicdn.com/material/20250318/stylization_all_1.jpeg.

  2. String de imagem codificada em Base64

    • Formato: data:{MIME_type};base64,{base64_data}

    • Exemplo: data:image/jpeg;base64,GDU7MtCZzEbTbmRZ... (apenas exemplo; use a string completa).

    • Detalhes da codificação Base64: Métodos de entrada de imagem.

negative_prompt string (opcional)

Um prompt negativo descrevendo elementos a serem excluídos da imagem.

Suporta chinês e inglês. Máximo: 500 caracteres; o excesso é truncado.

Valor de exemplo: baixa resolução, erros, melhor qualidade, baixa qualidade, incompleto, dedos extras, proporções ruins.

parameters object (opcional)

Controla resolução, reescrita de prompt e marca d'água.

Propriedades

size string (opcional)

Define a resolução da imagem de saída no formato width×height. Padrão: 1280×1280.

  • Faixa de resolução: Pixels totais entre 768×768 e 1280×1280. Faixa de proporção: 1:4 a 4:1.

  • Valor de exemplo: 1280×1280.

Resoluções e proporções recomendadas

  • 1280×1280: 1:1

  • 1024×1024: 1:1

  • 800×1200: 2:3

  • 1200×800: 3:2

  • 960×1280: 3:4

  • 1280×960: 4:3

  • 720×1280: 9:16

  • 1280×720: 16:9

  • 1344×576: 21:9

Se size for omitido, o padrão será 1280×1280 pixels com proporção aproximada:

  • Entrada de imagem única: corresponde à proporção da imagem de entrada.

  • Entrada de múltiplas imagens: corresponde à proporção da última imagem de entrada.

n integer (opcional)

Importante

O valor de n afeta diretamente o custo. Valores mais altos custam mais. Confirme os preços em Preços do modelo antes de chamar.

Número de imagens a gerar. Faixa: 1–4. Padrão: 4. Defina como 1 durante testes para controlar custos.

watermark boolean (opcional)

Adiciona uma marca d'água "AI Generated" no canto inferior direito.

  • false: padrão. Sem marca d'água.

  • true: Adicionar marca d'água.

prompt_extend boolean (opcional)

Ativa a reescrita de prompt baseada em LLM para melhorar a qualidade da imagem. Adiciona latência.

  • true: padrão. Ativar reescrita.

  • false: Desativar reescrita.

Valor de exemplo: true.

seed integer (opcional)

Semente de número aleatório. Faixa válida: [0, 2147483647].

Se omitida, uma semente aleatória é gerada. Se especificada, sementes sequenciais são atribuídas a cada uma das n imagens com base em n. Por exemplo, se n=4, as sementes serão: seed, seed+1, seed+2, seed+3.

Para melhorar a reprodutibilidade, fixe o valor da semente.

Sementes idênticas não garantem saídas idênticas devido à geração probabilística.

Parâmetros da resposta

Resposta bem-sucedida

Salve o task_id para consultar o status e o resultado da tarefa.

{
        "output": {
            "task_status": "PENDING",
            "task_id": "0385dc79-5ff8-4d82-bcb6-xxxxxx"
        },
        "request_id": "4909100c-7b5a-9f92-bfe5-xxxxxx"
    }

Resposta de erro

Falha na criação da tarefa. Consulte Códigos de erro.

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

output object

Informações de saída da tarefa.

Propriedades

task_id string

O ID da tarefa. Válido para consultas por 24 horas.

task_status string

O status da tarefa.

Valores de enumeração

  • PENDING

  • RUNNING

  • SUCCEEDED

  • FAILED

  • CANCELED

  • UNKNOWN: A tarefa não existe ou seu status é desconhecido.

request_id string

Identificador único da solicitação para rastreamento e solução de problemas.

code string

Código de erro. Retornado apenas para solicitações com falha. Consulte Códigos de erro.

message string

Mensagem de erro detalhada. Retornada apenas para solicitações com falha. Consulte Códigos de erro.

Etapa 2: Consultar resultados usando o ID da tarefa

China (Beijing)

GET https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/tasks/{task_id}

Ao chamar, substitua {WorkspaceId} pelo seu ID do workspace real.

Singapore

GET https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/{task_id}

Ao chamar, substitua {WorkspaceId} pelo seu ID do workspace real.

Singapore

GET https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/{task_id}

Ao chamar, substitua {WorkspaceId} pelo seu ID do workspace real.

China (Beijing)

GET https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/tasks/{task_id}

Ao chamar, substitua {WorkspaceId} pelo seu ID do workspace real.

Nota
  • Recomendação de polling: A geração de imagens demanda tempo. Use um mecanismo de polling com um intervalo razoável, como 10 segundos.

  • Transição de estado da tarefa: PENDING → RUNNING → SUCCEEDED ou FAILED.

  • Link do resultado: Após o sucesso da tarefa, uma URL de imagem válida por 24 horas é retornada. Baixe e salve a imagem em armazenamento permanente, como o OSS.

Parâmetros da solicitação

Consultar resultado da tarefa

Substitua 86ecf553-d340-4e21-xxxxxxxxx pelo seu task_id real.

As chaves de API são diferentes para cada região. Para mais informações, consulte Obter uma chave de API.
Se você usar um modelo na região China (Beijing), substitua base_url por https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx, onde {WorkspaceId} é o ID real do seu workspace.
curl -X GET https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx \
    --header "Authorization: Bearer $DASHSCOPE_API_KEY"
Cabeçalhos da solicitação

Authorization string (Obrigatório)

Autentica a solicitação com uma chave de API do Model Studio. Exemplo: Bearer sk-xxxx.

Parâmetro de caminho da URL

task_id string (Obrigatório)

O ID da tarefa.

Parâmetros da resposta

Tarefa bem-sucedida

As URLs das imagens são válidas apenas por 24 horas e depois são removidas automaticamente. Salve as imagens geradas prontamente.

{
    "request_id": "d1f2a1be-9c58-48af-b43f-xxxxxx",
    "output": {
        "task_id": "7f4836cd-1c47-41b3-b3a4-xxxxxx",
        "task_status": "SUCCEEDED",
        "submit_time": "2025-09-23 22:14:10.800",
        "scheduled_time": "2025-09-23 22:14:10.825",
        "end_time": "2025-09-23 22:15:23.456",
        "results": [
            {
                "orig_prompt": "Replace the floral dress with a vintage-style lace gown featuring delicate embroidery on the collar and cuffs.",
                "actual_prompt": "Replace the pink pleated dress with a vintage-style lace gown featuring delicate embroidery on the collar and cuffs. Keep the person’s hairstyle, makeup, and pose unchanged. Match the original image’s soft tones and classical atmosphere.",
                "url": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.png?Expires=xxx"
            }
        ],
        "task_metrics": {
            "TOTAL": 1,
            "FAILED": 0,
            "SUCCEEDED": 1
        }
    },
    "usage": {
        "image_count": 1
    }
}

Tarefa falhou

Quando uma tarefa falha, task_status é FAILED com um código de erro e mensagem. Consulte Códigos de erro.

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

Falha parcial

O modelo pode gerar múltiplas imagens por tarefa. Se pelo menos uma for bem-sucedida, o status da tarefa é SUCCEEDED e as URLs das imagens bem-sucedidas são retornadas. Imagens com falha incluem um motivo da falha. As estatísticas de uso contam apenas resultados bem-sucedidos. Consulte Códigos de erro.

{
    "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 occurred during execution, please try again later or contact service support."
            }
        ],
        "task_metrics": {
            "TOTAL": 2,
            "SUCCEEDED": 1,
            "FAILED": 1
        }
    },
    "usage": {
        "image_count": 1
    }
}

Consulta de tarefa expirada

O task_id é válido por 24 horas. Após esse período, as consultas retornam o seguinte erro.

{
        "request_id": "a4de7c32-7057-9f82-8581-xxxxxx",
        "output": {
            "task_id": "502a00b1-19d9-4839-a82f-xxxxxx",
            "task_status": "UNKNOWN"
        }
    }

output object

Informações de saída da tarefa.

Propriedades

task_id string

O ID da tarefa. Válido para consultas por 24 horas.

task_status string

O status da tarefa.

Valores de enumeração

  • PENDING

  • RUNNING

  • SUCCEEDED

  • FAILED

  • CANCELED

  • UNKNOWN: A tarefa não existe ou seu status é desconhecido.

submit_time string

O horário em que a tarefa foi enviada. O horário está em UTC+8 e o formato é YYYY-MM-DD HH:mm:ss.SSS.

scheduled_time string

O horário em que a tarefa foi executada. O horário está em UTC+8 e o formato é YYYY-MM-DD HH:mm:ss.SSS.

end_time string

O horário em que a tarefa foi concluída. O horário está em UTC+8 e o formato é YYYY-MM-DD HH:mm:ss.SSS.

results array of object

Lista de resultados da tarefa, incluindo URLs de imagens, prompts e detalhes de erros para falhas parciais.

Propriedades

orig_prompt string

O prompt de entrada original, correspondente ao parâmetro de solicitação prompt.

actual_prompt string

O prompt otimizado usado quando a reescrita de prompt está ativada. Não retornado quando desativado.

url string

URL da imagem gerada.

code string

Código de erro para imagens com falha. Retornado apenas para falhas parciais.

message string

Mensagem de erro para imagens com falha. Retornada apenas para falhas parciais.

task_metrics object

Estatísticas do resultado da tarefa.

Propriedades

TOTAL integer

O número total de tarefas.

SUCCEEDED integer

O número de tarefas bem-sucedidas.

FAILED integer

O número de tarefas com falha.

code string

Código de erro. Retornado apenas para solicitações com falha. Consulte Códigos de erro.

message string

Mensagem de erro detalhada. Retornada apenas para solicitações com falha. Consulte Códigos de erro.

usage object

Estatísticas de uso. Conta apenas resultados bem-sucedidos.

Propriedades

image_count integer

Número de imagens geradas com sucesso. Faturamento: Custo = Número de imagens × Preço unitário.

request_id string

Identificador único da solicitação para rastreamento e solução de problemas.

Chamada via DashScope SDK

Os parâmetros do SDK correspondem à Chamada de API HTTP, encapsulados para adequar-se a cada linguagem.

A edição de imagens leva de 30 a 60 segundos. O SDK encapsula o fluxo HTTP assíncrono, suportando chamadas síncronas e assíncronas.

O tempo real de execução varia conforme o tamanho da fila e a carga do service.

Chamada via Python SDK

Importante

Certifique-se de que sua versão do DashScope Python SDK seja pelo menos 1.25.2.

Versões mais antigas podem gerar erros como “url error, please check url!”. Atualize usando Instalar ou atualizar SDK.

Chamada síncrona

Exemplo de solicitação

Este exemplo suporta três métodos de entrada de imagem: URL pública, codificação Base64 e caminho de arquivo local.

import base64
import mimetypes
from http import HTTPStatus
from urllib.parse import urlparse, unquote
from pathlib import PurePosixPath

import dashscope
import requests
from dashscope import ImageSynthesis
import os

# The following URL is for the Singapore region. Replace {WorkspaceId} with your actual workspace ID. URLs differ by region.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

# If you have not configured an environment variable, replace the next line with: api_key="sk-xxx"
# API keys differ between Singapore and Beijing. Get an API key: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY")

# --- Input image: Base64 encoding ---
# Base64 format: 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:

1. Public URL — best for publicly accessible images
2. Local file — best for local development and testing
3. Base64 encoding — best for private images or secure transmission
"""

# [Method 1] Public image URL
image_url_1 = "https://img.alicdn.com/imgextra/i3/O1CN0157XGE51l6iL9441yX_!!6000000004770-49-tps-1104-1472.webp"
image_url_2 = "https://img.alicdn.com/imgextra/i3/O1CN01SfG4J41UYn9WNt4X1_!!6000000002530-49-tps-1696-960.webp"

# [Method 2] Local file (supports absolute and relative paths)
# Format: file:// + file path
# Example (absolute path):
# image_url_1 = "file://" + "/path/to/your/image_1.png"     # Linux/macOS
# image_url_2 = "file://" + "C:/path/to/your/image_2.png"  # Windows
# Example (relative path):
# image_url_1 = "file://" + "./image_1.png"                 # Adjust to your path
# image_url_2 = "file://" + "./image_2.png"                # Adjust to your path

# [Method 3] Base64-encoded image
# image_url_1 = encode_file("./image_1.png")               # Adjust to your path
# image_url_2 = encode_file("./image_2.png")              # Adjust to your path

print('----sync call, please wait a moment----')
rsp = ImageSynthesis.call(api_key=api_key,
                          model="wan2.5-i2i-preview",
                          prompt="Place the alarm clock from image 1 beside the vase on the dining table in image 2.",
                          images=[image_url_1, image_url_2],
                          negative_prompt="",
                          n=1,
                          # size="1280*1280",
                          prompt_extend=True,
                          watermark=False,
                          seed=12345)
print('response: %s' % rsp)
if rsp.status_code == HTTPStatus.OK:
    # Save images to current directory
    for result in rsp.output.results:
        file_name = PurePosixPath(unquote(urlparse(result.url).path)).parts[-1]
        with open('./%s' % file_name, 'wb+') as f:
            f.write(requests.get(result.url).content)
else:
    print('sync_call Failed, status_code: %s, code: %s, message: %s' %
          (rsp.status_code, rsp.code, rsp.message))
Exemplo de resposta
As URLs das imagens expiram após 24 horas. Baixe as imagens prontamente.
{
    "status_code": 200,
    "request_id": "8ad45834-4321-44ed-adf5-xxxxxx",
    "code": null,
    "message": "",
    "output": {
        "task_id": "3aff9ebd-35fc-4339-98a3-xxxxxx",
        "task_status": "SUCCEEDED",
        "results": [
            {
                "url": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.png?Expires=xxx",
                "orig_prompt": "Place the alarm clock from image 1 beside the vase on the dining table in image 2.",
                "actual_prompt": "Place the blue alarm clock from image 1 to the right of the vase on the dining table in image 2, near the edge of the tablecloth. Keep the clock facing the camera and parallel to the tabletop, with natural shadow projection."
            }
        ],
        "submit_time": "2025-10-23 16:18:16.009",
        "scheduled_time": "2025-10-23 16:18:16.040",
        "end_time": "2025-10-23 16:19:09.591",
        "task_metrics": {
            "TOTAL": 1,
            "FAILED": 0,
            "SUCCEEDED": 1
        }
    },
    "usage": {
        "image_count": 1
    }
}

Chamada assíncrona

Este exemplo usa URLs públicas para entrada de imagem.

Exemplo de solicitação
import os
from http import HTTPStatus
from urllib.parse import urlparse, unquote
from pathlib import PurePosixPath
import dashscope
import requests
from dashscope import ImageSynthesis

# The following URL is for the Singapore region. Replace {WorkspaceId} with your actual workspace ID. URLs differ by region.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

# If you have not configured an environment variable, replace the next line with: api_key="sk-xxx"
# API keys differ between Singapore and Beijing. Get an API key: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY")

# Public image URLs
image_url_1 = "https://img.alicdn.com/imgextra/i3/O1CN0157XGE51l6iL9441yX_!!6000000004770-49-tps-1104-1472.webp"
image_url_2 = "https://img.alicdn.com/imgextra/i3/O1CN01SfG4J41UYn9WNt4X1_!!6000000002530-49-tps-1696-960.webp"

def async_call():
    print('----create task----')
    task_info = create_async_task()
    print('----wait task----')
    wait_async_task(task_info)

# Create an asynchronous task
def create_async_task():
    rsp = ImageSynthesis.async_call(api_key=api_key,
                                    model="wan2.5-i2i-preview",
                                    prompt="Place the alarm clock from image 1 beside the vase on the dining table in image 2.",
                                    images=[image_url_1, image_url_2],
                                    negative_prompt="",
                                    n=1,
                                    # size="1280*1280",
                                    prompt_extend=True,
                                    watermark=False,
                                    seed=12345)
    print(rsp)
    if rsp.status_code == HTTPStatus.OK:
        print(rsp.output)
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))
    return rsp

# Wait for the asynchronous task to finish
def wait_async_task(task):
    rsp = ImageSynthesis.wait(task=task, api_key=api_key)
    print(rsp)
    if rsp.status_code == HTTPStatus.OK:
        print(rsp.output)
        # Save file to current directory
        for result in rsp.output.results:
            file_name = PurePosixPath(unquote(urlparse(result.url).path)).parts[-1]
            with open('./%s' % file_name, 'wb+') as f:
                f.write(requests.get(result.url).content)
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))

# Fetch asynchronous task status
def fetch_task_status(task):
    status = ImageSynthesis.fetch(task=task, api_key=api_key)
    print(status)
    if status.status_code == HTTPStatus.OK:
        print(status.output.task_status)
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (status.status_code, status.code, status.message))

# Cancel an asynchronous task. Only PENDING tasks can be canceled.
def cancel_task(task):
    rsp = ImageSynthesis.cancel(task=task, api_key=api_key)
    print(rsp)
    if rsp.status_code == HTTPStatus.OK:
        print(rsp.output.task_status)
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))

if __name__ == '__main__':
    async_call()
Exemplo de resposta
  1. Resposta ao criar uma tarefa

    {
    	"status_code": 200,
    	"request_id": "31b04171-011c-96bd-ac00-f0383b669cc7",
    	"code": "",
    	"message": "",
    	"output": {
    		"task_id": "4f90cf14-a34e-4eae-xxxxxxxx",
    		"task_status": "PENDING",
    		"results": []
    	},
    	"usage": null
    }
  2. Resposta ao consultar resultados da tarefa

    As URLs das imagens expiram após 24 horas. Baixe as imagens prontamente.
    {
        "status_code": 200,
        "request_id": "8ad45834-4321-44ed-adf5-xxxxxx",
        "code": null,
        "message": "",
        "output": {
            "task_id": "3aff9ebd-35fc-4339-98a3-xxxxxx",
            "task_status": "SUCCEEDED",
            "results": [
                {
                    "url": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.png?Expires=xxx",
                    "orig_prompt": "Place the alarm clock from image 1 beside the vase on the dining table in image 2.",
                    "actual_prompt": "Place the blue alarm clock from image 1 to the right of the vase on the dining table in image 2, near the edge of the tablecloth. Keep the clock facing the camera and parallel to the tabletop, with natural shadow projection."
                }
            ],
            "submit_time": "2025-10-23 16:18:16.009",
            "scheduled_time": "2025-10-23 16:18:16.040",
            "end_time": "2025-10-23 16:19:09.591",
            "task_metrics": {
                "TOTAL": 1,
                "FAILED": 0,
                "SUCCEEDED": 1
            }
        },
        "usage": {
            "image_count": 1
        }
    }
    

Chamada via Java SDK

Importante

Certifique-se de que sua versão do DashScope Java SDK seja pelo menos 2.22.2.

Versões mais antigas podem gerar erros como “url error, please check url!”. Atualize usando Instalar ou atualizar SDK.

Chamada síncrona

Exemplo de solicitação

Este exemplo suporta três métodos de entrada de imagem: URL pública, codificação Base64 e caminho de arquivo local.

// 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.*;

public class Image2Image {

    static {
        // The following URL is for the Singapore region. Replace {WorkspaceId} with your actual workspace ID. URLs differ by region.
        Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }

    // If you have not configured an environment variable, replace the next line with: apiKey="sk-xxx"
    // API keys differ between Singapore and Beijing. Get an API key: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    /**
     * Image input methods: choose one
     *
     * 1. Public URL — best for publicly accessible images
     * 2. Local file — best for local development and testing
     * 3. Base64 encoding — best for private images or secure transmission
     */

    // [Method 1] Public URL
    static String imageUrl_1 = "https://img.alicdn.com/imgextra/i3/O1CN0157XGE51l6iL9441yX_!!6000000004770-49-tps-1104-1472.webp";
    static String imageUrl_2 = "https://img.alicdn.com/imgextra/i3/O1CN01SfG4J41UYn9WNt4X1_!!6000000002530-49-tps-1696-960.webp";

    // [Method 2] Local file path (file://+absolute path or file:///+absolute path)
    // static String imageUrl_1 = "file://" + "/your/path/to/image_1.png";    // Linux/macOS
    // static String imageUrl_2 = "file:///" + "C:/your/path/to/image_2.png";  // Windows

    // [Method 3] Base64 encoding
    // static String imageUrl_1 = encodeFile("/your/path/to/image_1.png");
    // static String imageUrl_2 = encodeFile("/your/path/to/image_2.png");

    // List of images to edit
    static List<String> imageUrls = new ArrayList<>();
    static {
        imageUrls.add(imageUrl_1);
        imageUrls.add(imageUrl_2);
    }

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

        ImageSynthesisParam param =
                ImageSynthesisParam.builder()
                        .apiKey(apiKey)
                        .model("wan2.5-i2i-preview")
                        .prompt("Place the alarm clock from image 1 beside the vase on the dining table in image 2.")
                        .images(imageUrls)
                        .n(1)
                         //.size("1280*1280")
                        .negativePrompt("")
                        .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));
    }

    /**
     * Encode a file as a Base64 string
     * @param filePath File path
     * @return Base64 string in 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 not found: " + filePath);
        }
        // Detect 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 file and encode
        byte[] fileBytes = null;
        try{
            fileBytes = Files.readAllBytes(path);
        } catch (IOException e) {
            throw new IllegalArgumentException("Cannot read file: " + filePath);
        }

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

    public static void main(String[] args) {
        syncCall();
    }
}
Exemplo de resposta
As URLs das imagens expiram após 24 horas. Baixe as imagens prontamente.
{
    "request_id": "d362685b-757f-4eac-bab5-xxxxxx",
    "output": {
        "task_id": "bfa7fc39-3d87-4fa7-b1e6-xxxxxx",
        "task_status": "SUCCEEDED",
        "results": [
            {
                "orig_prompt": "Place the alarm clock from image 1 beside the vase on the dining table in image 2.",
                "actual_prompt": "Place the blue alarm clock from image 1 to the right of the vase on the dining table in image 2, near the edge of the tablecloth. Keep the clock facing the camera and parallel to the vase.",
                "url": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.png?Expires=xxx"
            }
        ],
        "task_metrics": {
            "TOTAL": 1,
            "SUCCEEDED": 1,
            "FAILED": 0
        }
    },
    "usage": {
        "image_count": 1
    }
}

Chamada assíncrona

Este exemplo usa URLs públicas para entrada de imagem.

Exemplo de solicitação
// 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.Constants;
import com.alibaba.dashscope.utils.JsonUtils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Image2Image {

    static {
        // The following URL is for the Singapore region. Replace {WorkspaceId} with your actual workspace ID. URLs differ by region.
        Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }

    // If you have not configured an environment variable, replace the next line with: apiKey="sk-xxx"
    // API keys differ between Singapore and Beijing. Get an API key: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    // Public URLs
    static String imageUrl_1 = "https://img.alicdn.com/imgextra/i3/O1CN0157XGE51l6iL9441yX_!!6000000004770-49-tps-1104-1472.webp";
    static String imageUrl_2 = "https://img.alicdn.com/imgextra/i3/O1CN01SfG4J41UYn9WNt4X1_!!6000000002530-49-tps-1696-960.webp";

    // List of images to edit
    static List<String> imageUrls = new ArrayList<>();
    static {
        imageUrls.add(imageUrl_1);
        imageUrls.add(imageUrl_2);
    }

    public static void asyncCall() {
        // Set parameters
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("prompt_extend", true);
        parameters.put("watermark", false);
        parameters.put("seed", 12345);

        ImageSynthesisParam param =
                ImageSynthesisParam.builder()
                        .apiKey(apiKey)
                        .model("wan2.5-i2i-preview")
                        .prompt("Place the alarm clock from image 1 beside the vase on the dining table in image 2.")
                        .images(imageUrls)
                        .n(1)
                        //.size("1280*1280")
                        .negativePrompt("")
                        .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();
    }
}
Exemplo de resposta
  1. Resposta ao criar uma tarefa

    {
    	"request_id": "5dbf9dc5-4f4c-9605-85ea-542f97709ba8",
    	"output": {
    		"task_id": "7277e20e-aa01-4709-xxxxxxxx",
    		"task_status": "PENDING"
    	}
    }
  2. Resposta ao consultar resultados da tarefa

    As URLs das imagens expiram após 24 horas. Baixe as imagens prontamente.
    {
        "request_id": "d362685b-757f-4eac-bab5-xxxxxx",
        "output": {
            "task_id": "bfa7fc39-3d87-4fa7-b1e6-xxxxxx",
            "task_status": "SUCCEEDED",
            "results": [
                {
                    "orig_prompt": "Place the alarm clock from image 1 beside the vase on the dining table in image 2.",
                    "actual_prompt": "Place the blue alarm clock from image 1 to the right of the vase on the dining table in image 2, near the edge of the tablecloth. Keep the clock facing the camera and parallel to the vase.",
                    "url": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.png?Expires=xxx"
                }
            ],
            "task_metrics": {
                "TOTAL": 1,
                "SUCCEEDED": 1,
                "FAILED": 0
            }
        },
        "usage": {
            "image_count": 1
        }
    }

Limites

  • Retenção de dados: Tanto os IDs de tarefa quanto as URLs de imagens expiram após 24 horas. Você não pode consultá-los ou baixá-los após a expiração.

  • Moderação de conteúdo: Todos os prompts, imagens de entrada e imagens de saída passam por moderação de conteúdo. Solicitações contendo conteúdo proibido retornam erros como “IPInfringementSuspect” ou “DataInspectionFailed”. Consulte Informações de erro para detalhes.

Códigos de erro

Se a chamada do modelo falhar e retornar uma mensagem de erro, consulte Códigos de erro para resolução.

FAQ

P: Eu usei o General Image Editing 2.1 anteriormente. Preciso alterar minhas chamadas de SDK para usar o wan2.5?

R: Sim — o design dos parâmetros difere entre as versões:

P: Como visualizo as métricas de uso do modelo?

R: Uma hora após a conclusão de uma chamada de modelo, acesse a página Model telemetry (Singapore)Model telemetry (Beijing) para visualizar métricas como contagem de chamadas e taxa de sucesso. Para orientações passo a passo, consulte Como visualizar o histórico de chamadas do modelo?.