Tous les produits
Search
Centre de documentation

Alibaba Cloud Model Studio:Wanxiang – Édition d'image générale 2.5

Dernière mise à jour :Oct 11, 2026

Le modèle wan2.5 d'édition d'image générale de Wanxiang permet de modifier et de fusionner des images à partir d'instructions textuelles uniquement, tout en préservant la cohérence du sujet entre les modifications.

Démarrage rapide : Guide utilisateur

ImportantAlibaba Cloud Model Studio a publié des domaines spécifiques aux espaces de travail pour les régions Chine (Pékin) et Singapour. Ces nouveaux domaines dédiés offrent des performances supérieures et une stabilité accrue pour les requêtes d'inférence. Nous vous recommandons de migrer vers ces nouveaux domaines :

  • Chine (Pékin) : de https://dashscope.aliyuncs.com vers https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com
  • Singapour : de https://dashscope-intl.aliyuncs.com vers https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com

{WorkspaceId} correspond à votre ID d'espace de travail, disponible sur la page Workspace Details dans la console Alibaba Cloud Model Studio. Le domaine existant reste pleinement fonctionnel.

Présentation du modèle

Capacités du modèle

Exemple d'entrée

Image générée

Édition d'une seule image

damotest2023 Portrait photography outdoors fashionable beauty

a26b226d-f044-4e95-a41c-d1c0d301c30b

Remplacez la robe fleurie par une robe en dentelle de style vintage avec des broderies délicates au col et aux poignets.

Fusion multi-images

image

p1028883

Placez le réveil de l'image 1 à côté du vase sur la table à manger de l'image 2.

Nom du modèleDescription du modèleSpécifications de l'image générée

wan2.5-i2i-preview

Aperçu Wanxiang 2.5

Prend en charge l'édition d'une seule image et la fusion multi-images

Format d'image : PNG.

Résolution d'image :

  • Utilisez le paramètre parameters.size pour spécifier la résolution de l'image générée au format width*height (en pixels).

  • En l'absence de résolution spécifiée, la valeur par défaut est de 1280×1280 pixels au total. Règles approximatives de rapport d'aspect :

    • Pour une entrée mono-image : correspond au rapport d'aspect de l'image d'entrée.
    • Pour une entrée multi-images : correspond au rapport d'aspect de la dernière image d'entrée.

RemarqueAvant d'appeler l'API, consultez les modèles pris en charge et tarifs applicables à votre région.

Prérequis

Avant d'effectuer un appel, obtenez une clé API et exportez-la comme variable d'environnement. Pour utiliser le SDK, installez le SDK DashScope.

ImportantLes régions Chine (Pékin) et Singapour disposent de clés API et d'endpoints de requête distincts. Elles ne sont pas interchangeables. Les appels interrégions entraînent des échecs d'authentification ou des erreurs de service.

Appel via l'API HTTP

L'édition d'image prend 1 à 2 minutes ; l'API utilise donc une invocation asynchrone : Création de tâche → Interrogation du résultat.

La durée réelle d'exécution varie selon la longueur de la file d'attente et la charge du service.

Étape 1 : Créer une tâche et obtenir l'ID de tâche

Région Singapour : POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/image2image/image-synthesis

Région Pékin : POST https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/aigc/image2image/image-synthesis

Remplacez {WorkspaceId} par votre véritable ID d'espace de travail.

Remarque

  • Une fois la tâche créée, utilisez le task_id retourné pour interroger le résultat. Ce task_id reste valide pendant 24 heures. Ne créez pas de tâches en double. Utilisez plutôt l'interrogation pour récupérer le résultat.
  • Pour un guide destiné aux débutants, reportez-vous à Appeler des API avec Postman ou cURL.

Paramètres de requête

 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
    }
}'
 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
    }
}'
En-têtes de requête

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.

ImportantIf this request header is missing, the error "current user api does not support synchronous calls" is returned.

Corps de la requête

model string (required)

Nom du modèle. Modèles pris en charge et tarifs.

Valeur d'exemple : wan2.5-i2i-preview.

input object (required)

Champs d'entrée tels que le prompt et les images.

Propriétés

prompt string (required)

Prompt positif décrivant les éléments et caractéristiques visuelles à inclure dans l'image générée.

Prend en charge le chinois et l'anglais. Maximum : 2 000 caractères (chaque caractère compte pour un) ; le surplus est tronqué.

Pour des conseils sur la rédaction de prompts, consultez le Guide de prompts texte-vers-image.

Valeur d'exemple : Un chat orange joyeux assis, réaliste et détaillé.

images array of string (required)

Tableau d'URL d'images.

  • Longueur maximale du tableau : 3 (jusqu'à trois images).
  • Pour une entrée multi-images, l'ordre est important. Les images suivent la séquence du tableau.

Exigences relatives aux images :

  • Formats : JPEG, JPG, PNG (sans canal alpha), BMP, WEBP.
  • Résolution : la largeur et la hauteur doivent être comprises entre 384 et 5 000 pixels.
  • Taille du fichier : jusqu'à 10 Mo.

Formats d'entrée pris en charge :

  1. URL accessible publiquement

    • Protocoles : HTTP ou HTTPS.
    • Valeur d'exemple : http://wanx.alicdn.com/material/20250318/stylization_all_1.jpeg.
  2. Chaîne d'image encodée en Base64

    • Format : data:{MIME_type};base64,{base64_data}
    • Exemple : data:image/jpeg;base64,GDU7MtCZzEbTbmRZ... (exemple uniquement ; utilisez la chaîne complète).
    • Détails de l'encodage Base64 : Méthodes d'entrée d'image.

negative_prompt string (optional)

Prompt négatif décrivant les éléments à exclure de l'image.

Prend en charge le chinois et l'anglais. Maximum : 500 caractères ; le surplus est tronqué.

Valeur d'exemple : basse résolution, erreurs, meilleure qualité, mauvaise qualité, incomplet, doigts supplémentaires, mauvaises proportions.

parameters object (optional)

Contrôle la résolution, la réécriture du prompt et le filigrane.

Propriétés

size string (optional)

Définit la résolution de l'image générée au format width×height. Valeur par défaut : 1280×1280.

  • Plage de résolution : nombre total de pixels compris entre 768×768 et 1280×1280. Plage de rapport d'aspect : de 1:4 à 4:1.
  • Valeur d'exemple : 1280×1280.

Résolutions et rapports d'aspect recommandés

  • 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

Si size est omis, la valeur par défaut est de 1280×1280 pixels avec un rapport d'aspect approximatif :

  • Entrée mono-image : correspond au rapport d'aspect de l'image d'entrée.
  • Entrée multi-images : correspond au rapport d'aspect de la dernière image d'entrée.

n integer (optional)

ImportantLa valeur de n influe directement sur le coût. Des valeurs plus élevées augmentent le prix. Vérifiez les tarifs dans Tarifs des modèles avant d'effectuer l'appel.

Nombre d'images à générer. Plage : 1–4. Valeur par défaut : 4. Définissez cette valeur à 1 lors des tests afin de maîtriser les coûts.

watermark boolean (optional)

Ajoute un filigrane « AI Generated » dans le coin inférieur droit.

  • false : valeur par défaut. Aucun filigrane.
  • true : ajoute le filigrane.

prompt_extend boolean (optional)

Active la réécriture du prompt basée sur un LLM pour améliorer la qualité de l'image. Augmente la latence.

  • true : valeur par défaut. Active la réécriture.
  • false : désactive la réécriture.

Valeur d'exemple : true.

seed integer (optional)

Graine de nombre aléatoire. Plage valide : [0, 2147483647].

Si ce paramètre est omis, une graine aléatoire est générée. S'il est spécifié, des graines séquentielles sont attribuées à chacune des n images en fonction de n. Par exemple, si n=4, les graines seront : seed, seed+1, seed+2, seed+3.

Pour améliorer la reproductibilité, fixez la valeur de la graine.

Des graines identiques ne garantissent pas des résultats identiques en raison de la nature probabiliste de la génération.

Paramètres de réponse

Réponse réussie

Conservez le task_id pour interroger l'état et le résultat de la tâche.

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

Réponse d'erreur

Échec de la création de la tâche. Consultez Codes d'erreur.

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

output object

Informations de sortie de la tâche.

Propriétés

task_id string

ID de la tâche. Valide pour les requêtes pendant 24 heures.

task_status string

État de la tâche.

Valeurs d'énumération

  • PENDING
  • RUNNING
  • SUCCEEDED
  • FAILED
  • CANCELED
  • UNKNOWN : la tâche n'existe pas ou son état est inconnu.

request_id string

Identifiant unique de requête pour le suivi et le dépannage.

code string

Code d'erreur. Retourné uniquement pour les requêtes ayant échoué. Consultez Codes d'erreur.

message string

Message d'erreur détaillé. Retourné uniquement pour les requêtes ayant échoué. Consultez Codes d'erreur.

Étape 2 : Interroger les résultats à l'aide de l'ID de tâche

China (Beijing)

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

Lors de l'appel, remplacez {WorkspaceId} par votre véritable ID d'espace de travail.

Singapore

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

Lors de l'appel, remplacez {WorkspaceId} par votre véritable ID d'espace de travail.

Singapore

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

Lors de l'appel, remplacez {WorkspaceId} par votre véritable ID d'espace de travail.

China (Beijing)

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

Lors de l'appel, remplacez {WorkspaceId} par votre véritable ID d'espace de travail.

Remarque

  • Recommandation d'interrogation : la génération d'image prend du temps. Mettez en place un mécanisme d'interrogation avec un intervalle raisonnable, par exemple 10 secondes.
  • Transition d'état de la tâche : PENDING → RUNNING → SUCCEEDED ou FAILED.
  • Lien de résultat : après la réussite d'une tâche, une URL d'image valide pendant 24 heures est retournée. Téléchargez et enregistrez l'image dans un stockage permanent, tel que OSS.

Paramètres de requête

Interroger le résultat de la tâche

Remplacez 86ecf553-d340-4e21-xxxxxxxxx par votre véritable task_id.

Les clés API diffèrent selon les régions. Pour plus d'informations, consultez Obtenir une clé API.

Si vous utilisez un modèle dans la région Chine (Pékin), remplacez base_url par https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx, où {WorkspaceId} est votre véritable ID d'espace de travail.

curl -X GET https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx \
    --header "Authorization: Bearer $DASHSCOPE_API_KEY"
En-têtes de requête

Authorization string (Required)

Authenticates the request with a Model Studio API key. Example: Bearer sk-xxxx.

Paramètre de chemin URL

task_id string (Required)

ID de la tâche.

Paramètres de réponse

Tâche réussie

Les URL d'images ne sont valides que pendant 24 heures, puis elles sont automatiquement supprimées. Enregistrez rapidement les images générées.

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

Échec de la tâche

Lorsqu'une tâche échoue, task_status passe à FAILED avec un code et un message d'erreur. Consultez Codes d'erreur.

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

Échec partiel

Le modèle peut générer plusieurs images par tâche. Si au moins une image réussit, l'état de la tâche passe à SUCCEEDED et les URL des images réussies sont retournées. Les images ayant échoué incluent une raison d'échec. Les statistiques d'utilisation ne comptabilisent que les résultats réussis. Consultez Codes d'erreur.

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

Expiration de l'interrogation de tâche

Le task_id est valide pendant 24 heures. Passé ce délai, les requêtes retournent l'erreur suivante.

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

output object

Informations de sortie de la tâche.

Propriétés

task_id string

ID de la tâche. Valide pour les requêtes pendant 24 heures.

task_status string

État de la tâche.

Valeurs d'énumération

  • PENDING
  • RUNNING
  • SUCCEEDED
  • FAILED
  • CANCELED
  • UNKNOWN : la tâche n'existe pas ou son état est inconnu.

submit_time string

Heure de soumission de la tâche. L'heure est en UTC+8 et le format est AAAA-MM-JJ HH:mm:ss.SSS.

scheduled_time string

Heure d'exécution de la tâche. L'heure est en UTC+8 et le format est AAAA-MM-JJ HH:mm:ss.SSS.

end_time string

Heure de fin de la tâche. L'heure est en UTC+8 et le format est AAAA-MM-JJ HH:mm:ss.SSS.

results array of object

Liste des résultats de la tâche, comprenant les URL d'images, les prompts et les détails d'erreur en cas d'échecs partiels.

Propriétés

orig_prompt string

Prompt d'entrée original, correspondant au paramètre de requête prompt.

actual_prompt string

Prompt optimisé utilisé lorsque la réécriture de prompt est activée. Non retourné lorsqu'elle est désactivée.

url string

URL de l'image générée.

code string

Code d'erreur pour les images ayant échoué. Retourné uniquement en cas d'échecs partiels.

message string

Message d'erreur pour les images ayant échoué. Retourné uniquement en cas d'échecs partiels.

task_metrics object

Statistiques du résultat de la tâche.

Propriétés

TOTAL integer

Nombre total de tâches.

SUCCEEDED integer

Nombre de tâches réussies.

FAILED integer

Nombre de tâches ayant échoué.

code string

Code d'erreur. Retourné uniquement pour les requêtes ayant échoué. Consultez Codes d'erreur.

message string

Message d'erreur détaillé. Retourné uniquement pour les requêtes ayant échoué. Consultez Codes d'erreur.

usage object

Statistiques d'utilisation. Ne comptabilise que les résultats réussis.

Propriétés

image_count integer

Nombre d'images générées avec succès. Facturation : Coût = Nombre d'images × Prix unitaire.

request_id string

Identifiant unique de requête pour le suivi et le dépannage.

Appel via le SDK DashScope

Les paramètres du SDK correspondent à ceux de l'appel via l'API HTTP, adaptés à chaque langage.

L'édition d'image prend 30 à 60 secondes. Le SDK encapsule le flux HTTP asynchrone et prend en charge les appels synchrones et asynchrones.

La durée réelle d'exécution varie selon la longueur de la file d'attente et la charge du service.

Appel via le SDK Python

Important

Assurez-vous que votre version du SDK Python DashScope est au moins1.25.2.

Les versions antérieures peuvent déclencher des erreurs telles que « url error, please check url! ». Effectuez une mise à jour en suivant la procédure Installer ou mettre à niveau le SDK.

Appel synchrone

Exemple de requête

Cet exemple prend en charge trois méthodes d'entrée d'image : URL publique, encodage Base64 et chemin de fichier 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))
Exemple de réponse

Les URL d'images expirent après 24 heures. Téléchargez les images sans tarder.

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

Appel asynchrone

Cet exemple utilise des URL publiques pour l'entrée d'images.

Exemple de requête
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()
Exemple de réponse
  1. Réponse lors de la création d'une tâche
{
	"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
}
  1. Réponse lors de l'interrogation des résultats de la tâche

Les URL d'images expirent après 24 heures. Téléchargez les images sans tarder.

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

Appel via le SDK Java

Important

Assurez-vous que votre version du SDK Java DashScope est au moins2.22.2.

Les versions antérieures peuvent déclencher des erreurs telles que « url error, please check url! ». Effectuez une mise à jour en suivant la procédure Installer ou mettre à niveau le SDK.

Appel synchrone

Exemple de requête

Cet exemple prend en charge trois méthodes d'entrée d'image : URL publique, encodage Base64 et chemin de fichier 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();
    }
}
Exemple de réponse

Les URL d'images expirent après 24 heures. Téléchargez les images sans tarder.

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

Appel asynchrone

Cet exemple utilise des URL publiques pour l'entrée d'images.

Exemple de requête
// 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();
    }
}
Exemple de réponse
  1. Réponse lors de la création d'une tâche
{
	"request_id": "5dbf9dc5-4f4c-9605-85ea-542f97709ba8",
	"output": {
		"task_id": "7277e20e-aa01-4709-xxxxxxxx",
		"task_status": "PENDING"
	}
}
  1. Réponse lors de l'interrogation des résultats de la tâche

Les URL d'images expirent après 24 heures. Téléchargez les images sans tarder.

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

  • Rétention des données : les ID de tâche et les URL d'images expirent tous deux après 24 heures. Vous ne pouvez plus les interroger ni les télécharger après expiration.
  • Modération de contenu : tous les prompts, images d'entrée et images générées font l'objet d'une modération de contenu. Les requêtes contenant du contenu interdit retournent des erreurs telles que « IPInfringementSuspect » ou « DataInspectionFailed ». Consultez Informations sur les erreurs pour plus de détails.

Codes d'erreur

Si l'appel du modèle échoue et retourne un message d'erreur, consultez Codes d'erreur pour résoudre le problème.

FAQ

Q : J'utilisais auparavant l'édition d'image générale 2.1. Dois-je modifier mes appels SDK pour utiliser wan2.5 ?

R : Oui, la conception des paramètres diffère entre les versions :

Q : Comment consulter les métriques d'utilisation du modèle ?

R : Une heure après la fin d'un appel de modèle, accédez à la page Model telemetry (Singapore)Model telemetry (Beijing) pour consulter des métriques telles que le nombre d'appels et le taux de réussite. Pour un guide étape par étape, consultez Comment consulter l'historique des appels de modèle ?.