All Products
Search
Document Center

Alibaba Cloud Model Studio:Wanxiang – Pengeditan Gambar Umum 2.5

Last Updated:Jun 30, 2026

Model Wanxiang General Image Editing wan2.5 mengedit gambar atau menggabungkan beberapa gambar hanya dengan instruksi teks, sekaligus menjaga konsistensi subjek selama proses pengeditan.

Mulai cepat: Panduan pengguna

Penting

Model Studio telah merilis domain khusus ruang kerja untuk wilayah China (Beijing) dan Singapura. Domain khusus baru ini memberikan performa lebih unggul dan stabilitas lebih tinggi untuk permintaan inferensi. Kami merekomendasikan migrasi ke domain berikut:

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

  • Singapura: dari https://dashscope-intl.aliyuncs.com ke https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com

{WorkspaceId} adalah ID ruang kerja Anda, yang dapat ditemukan di halaman Detail Ruang Kerja pada Konsol Model Studio. Domain lama tetap berfungsi sepenuhnya.

Ikhtisar model

Kemampuan model

Contoh input

Gambar output

Pengeditan gambar tunggal

damotest2023 Portrait photography outdoors fashionable beauty

a26b226d-f044-4e95-a41c-d1c0d301c30b

Ganti gaun bunga dengan gaun renda bergaya vintage yang memiliki sulaman halus pada kerah dan manset.

Fusi multi-gambar

image

p1028883

Letakkan jam alarm dari gambar 1 di samping vas di atas meja makan pada gambar 2.

Nama model

Deskripsi model

Spesifikasi gambar output

wan2.5-i2i-preview

Pratinjau Wanxiang 2.5

Mendukung pengeditan gambar tunggal dan fusi multi-gambar

Format gambar: PNG.

Resolusi gambar:

  • Gunakan parameter <a baseurl="t3137712_v2_2_0.xdita" data-node="6107277" data-root="85177" data-tag="xref" href="#2e0de6a5b1aw8" id="92c4acfccbmzm">parameters.size</a> untuk menentukan resolusi gambar output dalam format width*height (dalam piksel).

  • Jika Anda tidak menentukan resolusi, sistem secara default menghasilkan gambar dengan total 1280×1280 piksel. Rasio aspek mengikuti aturan berikut (perkiraan):

    • Untuk input gambar tunggal: sesuai dengan rasio aspek gambar input.

    • Untuk input multi-gambar: sesuai dengan rasio aspek gambar input terakhir.

Catatan

Sebelum memanggil API, tinjau model yang didukung dan harga untuk wilayah Anda.

Prasyarat

Sebelum melakukan panggilan, dapatkan Kunci API dan ekspor Kunci API sebagai Variabel lingkungan. Untuk melakukan panggilan menggunakan SDK, instal SDK DashScope.

Penting

Wilayah China (Beijing) dan Singapura memiliki Kunci API dan titik akhir permintaan yang terpisah. Keduanya tidak dapat saling dipertukarkan. Panggilan lintas wilayah menyebabkan kegagalan otentikasi atau kesalahan layanan.

Panggilan API HTTP

Tugas pengeditan gambar memerlukan waktu untuk diselesaikan—biasanya 1 hingga 2 menit—sehingga API menggunakan pemanggilan asinkron. Alur kerja lengkap terdiri dari dua langkah inti: Buat tugas → Polling hasil.

Waktu proses aktual tergantung pada panjang antrian dan beban layanan. Tunggu hasil dengan sabar.

Langkah 1: Buat tugas dan dapatkan ID tugas

Wilayah Singapura: POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/image2image/image-synthesis

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

Ganti WorkspaceId dengan ID Ruang Kerja aktual Anda.

Catatan
  • Setelah tugas dibuat, gunakan task_id yang dikembalikan untuk menanyakan hasilnya. task_id berlaku selama 24 jam. Jangan membuat tugas duplikat. Sebagai gantinya, gunakan polling untuk mengambil hasilnya.

  • Untuk panduan pemula, lihat Panggil API dengan Postman atau cURL.

Parameter permintaan

Pengeditan gambar tunggal

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

Fusi multi-gambar

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

Header permintaan

Content-Type string (Wajib)

Tipe konten permintaan. Harus berupa application/json.

Authorization string (Wajib)

Mengotentikasi permintaan dengan Kunci API Model Studio. Contoh: Bearer sk-xxxx.

X-DashScope-Async string (Wajib)

Mengaktifkan pemrosesan asinkron. Permintaan HTTP hanya mendukung panggilan asinkron. Harus diatur ke enable.

Penting

Jika header permintaan ini tidak disertakan, akan dikembalikan kesalahan "current user api does not support synchronous calls".

Body permintaan

model string (wajib)

Nama model. Untuk detailnya, lihat Model yang didukung dan harga.

Nilai contoh: wan2.5-i2i-preview.

input object (wajib)

Informasi input dasar, seperti prompt.

Properti

prompt string (wajib)

Prompt positif yang menggambarkan elemen dan fitur visual yang harus disertakan dalam gambar yang dihasilkan.

Mendukung bahasa Mandarin dan Inggris. Panjang maksimum: 2.000 karakter. Setiap karakter dihitung satu. Karakter berlebih akan dipotong.

Untuk tips penulisan prompt, lihat Panduan prompt teks-ke-gambar.

Nilai contoh: Seekor kucing oranye ceria sedang duduk, realistis dan detail.

images array of string (wajib)

Array URL gambar.

  • Panjang array maksimum: 3 (maksimal tiga gambar).

  • Untuk input multi-gambar, urutan sangat penting. Gambar mengikuti urutan array.

Persyaratan gambar:

  • Format: JPEG, JPG, PNG (tanpa saluran alfa), BMP, WEBP.

  • Resolusi: Lebar dan tinggi harus antara 384 hingga 5.000 piksel.

  • Ukuran file: Maksimal 10 MB.

Format input yang didukung:

  1. URL yang dapat diakses publik

    • Protokol: HTTP atau HTTPS.

    • Nilai contoh: http://wanx.alicdn.com/material/20250318/stylization_all_1.jpeg.

  2. String gambar yang diencode Base64

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

    • Contoh: data:image/jpeg;base64,GDU7MtCZzEbTbmRZ... (contoh saja; gunakan string lengkap).

    • Untuk aturan pengkodean Base64, lihat Metode input gambar.

negative_prompt string (opsional)

Prompt negatif yang menggambarkan elemen yang harus dikecualikan dari gambar.

Mendukung bahasa Mandarin dan Inggris. Panjang maksimum: 500 karakter. Karakter berlebih akan dipotong.

Nilai contoh: resolusi rendah, kesalahan, kualitas terburuk, kualitas rendah, tidak lengkap, jari ekstra, proporsi buruk.

parameters object (opsional)

Parameter pemrosesan gambar. Contohnya termasuk pengaturan resolusi, mengaktifkan penulisan ulang prompt, dan menambahkan watermark.

Properti

size string (opsional)

Atur resolusi gambar output dalam format width×height. Default: 1280×1280.

  • Rentang resolusi: Total piksel antara 768×768 hingga 1280×1280. Rentang rasio aspek: 1:4 hingga 4:1.

  • Nilai contoh: 1280×1280.

Resolusi dan rasio aspek yang direkomendasikan

  • 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

Jika Anda menghilangkan size, sistem secara default menggunakan 1280×1280 piksel dan mengatur rasio aspek sebagai berikut (perkiraan):

  • Input gambar tunggal: sesuai dengan rasio aspek gambar input.

  • Input multi-gambar: sesuai dengan rasio aspek gambar input terakhir.

n integer (opsional)

Penting

Nilai n secara langsung memengaruhi biaya. Nilai yang lebih tinggi berarti biaya lebih besar. Konfirmasi harga di Harga model sebelum melakukan panggilan.

Jumlah gambar yang akan dihasilkan. Rentang: 1–4. Default: 4. Untuk mengontrol biaya selama pengujian, atur nilai ini secara eksplisit menjadi 1.

watermark boolean (opsional)

Tambahkan watermark di pojok kanan bawah. Teks berbunyi “AI Generated”.

  • false: default. Tanpa watermark.

  • true: Tambahkan watermark.

prompt_extend boolean (opsional)

Aktifkan penulisan ulang prompt. Saat diaktifkan, model bahasa besar akan menulis ulang prompt Anda untuk meningkatkan hasil. Ini menambah latensi.

  • true: default. Aktifkan penulisan ulang.

  • false: Nonaktifkan penulisan ulang.

Nilai contoh: true.

seed integer (opsional)

Bilangan acak seed. Rentang valid: [0, 2147483647].

Jika Anda tidak menentukan nilai, algoritma secara otomatis menghasilkan bilangan acak sebagai seed. Jika Anda menentukan nilai, algoritma menghasilkan nilai seed terpisah untuk masing-masing dari n gambar, berdasarkan nilai n. Misalnya, jika n=4, algoritma menghasilkan gambar menggunakan seed, seed+1, seed+2, dan seed+3 sebagai parameter seed.

Untuk meningkatkan reproduktibilitas, tetapkan nilai seed.

Catatan: Karena generasi bersifat probabilistik, seed identik tidak menjamin output identik.

Parameter respons

Respons berhasil

Simpan task_id untuk menanyakan status tugas dan hasilnya.

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

Respons kesalahan

Pembuatan tugas gagal. Lihat 错误码.

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

output object

Informasi output tugas.

Properti

task_id string

ID tugas. Berlaku untuk kueri selama 24 jam.

task_status string

Status tugas.

Nilai enumerasi

  • PENDING

  • RUNNING

  • SUCCEEDED

  • FAILED

  • CANCELED

  • UNKNOWN: Tugas tidak ada atau statusnya tidak diketahui.

request_id string

Identifikasi permintaan unik untuk pelacakan dan troubleshooting.

code string

Kode kesalahan. Hanya dikembalikan untuk permintaan yang gagal. Lihat 错误码.

message string

Pesan kesalahan detail. Hanya dikembalikan untuk permintaan yang gagal. Lihat 错误码.

Langkah 2: Tanyakan hasil menggunakan ID tugas

Singapura

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

Saat memanggil, ganti WorkspaceId dengan ID ruang kerja aktual Anda.

China (Beijing)

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

Saat memanggil, ganti WorkspaceId dengan ID ruang kerja aktual Anda.

Catatan
  • Rekomendasi polling: Generasi gambar memakan waktu. Gunakan mekanisme polling dengan interval yang wajar, misalnya 10 detik.

  • Transisi status tugas: PENDING → RUNNING → SUCCEEDED atau FAILED.

  • Tautan hasil: Setelah tugas berhasil, URL gambar yang berlaku selama 24 jam dikembalikan. Unduh dan simpan gambar ke penyimpanan permanen, seperti OSS.

Parameter permintaan

Hasil tugas kueri

Ganti 86ecf553-d340-4e21-xxxxxxxxx dengan task_id aktual Anda.

Kunci API berbeda untuk setiap wilayah. Untuk informasi lebih lanjut, lihat Dapatkan Kunci API.
Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx, dengan WorkspaceId sebagai ID ruang kerja aktual Anda.
curl -X GET https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"
Header permintaan

Authorization string (Wajib)

Mengotentikasi permintaan dengan Kunci API Model Studio. Contoh: Bearer sk-xxxx.

Parameter jalur URL

task_id string (Wajib)

ID tugas tersebut.

Parameter respons

Tugas berhasil

URL gambar hanya berlaku selama 24 jam, lalu secara otomatis dihapus. Segera simpan gambar yang dihasilkan.

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

Tugas gagal

Saat tugas gagal, task_status bernilai FAILED dengan kode kesalahan dan pesan. Lihat 错误码.

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

Kegagalan parsial

Model dapat menghasilkan beberapa gambar per tugas. Jika setidaknya satu berhasil, status tugas bernilai SUCCEEDED dan URL gambar yang berhasil dikembalikan. Gambar yang gagal mencantumkan alasan kegagalannya. Statistik penggunaan hanya menghitung hasil yang berhasil. Lihat 错误码.

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

Kueri tugas kedaluwarsa

task_id berlaku selama 24 jam. Setelah periode ini, kueri mengembalikan kesalahan berikut.

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

output object

Informasi output tugas.

Properti

task_id string

ID tugas. Berlaku untuk kueri selama 24 jam.

task_status string

Status tugas.

Nilai enumerasi

  • PENDING

  • RUNNING

  • SUCCEEDED

  • FAILED

  • CANCELED

  • UNKNOWN: Tugas tidak ada atau statusnya tidak diketahui.

submit_time string

Waktu saat tugas diajukan. Waktu dalam UTC+8 dan formatnya YYYY-MM-DD HH:mm:ss.SSS.

scheduled_time string

Waktu saat tugas dieksekusi. Waktu dalam UTC+8 dan formatnya YYYY-MM-DD HH:mm:ss.SSS.

end_time string

Waktu saat tugas selesai. Waktu dalam UTC+8 dan formatnya YYYY-MM-DD HH:mm:ss.SSS.

results array of object

Daftar hasil tugas, termasuk URL gambar, prompt, dan detail kesalahan untuk kegagalan parsial.

Properti

orig_prompt string

Prompt input asli, sesuai dengan parameter permintaan prompt.

actual_prompt string

Prompt yang dioptimalkan yang digunakan saat penulisan ulang prompt diaktifkan. Tidak dikembalikan saat dinonaktifkan.

url string

URL gambar yang dihasilkan.

code string

Kode kesalahan untuk gambar yang gagal. Hanya dikembalikan untuk kegagalan parsial.

message string

Pesan kesalahan untuk gambar yang gagal. Hanya dikembalikan untuk kegagalan parsial.

task_metrics object

Statistik hasil tugas.

Properti

TOTAL integer

Jumlah total tugas.

SUCCEEDED integer

Jumlah tugas yang berhasil.

FAILED integer

Jumlah tugas yang gagal.

code string

Kode kesalahan. Hanya dikembalikan untuk permintaan yang gagal. Lihat 错误码.

message string

Pesan kesalahan detail. Hanya dikembalikan untuk permintaan yang gagal. Lihat 错误码.

usage object

Statistik penggunaan. Hanya menghitung hasil yang berhasil.

Properti

image_count integer

Jumlah gambar yang berhasil dihasilkan. Penagihan: Biaya = Jumlah gambar × Harga satuan.

request_id string

Identifikasi permintaan unik untuk pelacakan dan troubleshooting.

Panggilan SDK DashScope

Nama parameter SDK sesuai dengan yang ada di panggilan API HTTP. Struktur parameter dibungkus agar sesuai dengan masing-masing bahasa pemrograman.

Karena tugas pengeditan gambar memerlukan waktu 30 hingga 60 detik, SDK membungkus alur asinkron HTTP. SDK mendukung panggilan sinkron maupun asinkron.

Waktu proses aktual tergantung pada panjang antrian dan beban layanan. Tunggu hasil dengan sabar.

Panggilan SDK Python

Penting

Pastikan versi SDK Python DashScope Anda minimal 1.25.2.

Versi lama dapat memicu kesalahan seperti “url error, please check url!”. Perbarui menggunakan Instal atau tingkatkan SDK.

Panggilan sinkron

Contoh permintaan

Contoh ini mendukung tiga metode input gambar: URL publik, pengkodean Base64, dan jalur file lokal.

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

# URL berikut untuk wilayah Singapura. Ganti WorkspaceId dengan ID ruang kerja aktual Anda. URL berbeda tiap wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

# Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan: api_key="sk-xxx"
# Kunci API berbeda antara Singapura dan Beijing. Dapatkan Kunci API: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY")

# --- Input gambar: Pengkodean Base64 ---
# Format Base64: 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}"

"""
Metode input gambar:
Pilih salah satu dari berikut:

1. URL publik — terbaik untuk gambar yang dapat diakses publik
2. File lokal — terbaik untuk pengembangan dan pengujian lokal
3. Pengkodean Base64 — terbaik untuk gambar pribadi atau transmisi aman
"""

# [Metode 1] URL gambar publik
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"

# [Metode 2] File lokal (mendukung jalur absolut dan relatif)
# Format: file:// + jalur file
# Contoh (jalur absolut):
# image_url_1 = "file://" + "/path/to/your/image_1.png"     # Linux/macOS
# image_url_2 = "file://" + "C:/path/to/your/image_2.png"  # Windows
# Contoh (jalur relatif):
# image_url_1 = "file://" + "./image_1.png"                 # Sesuaikan dengan jalur Anda
# image_url_2 = "file://" + "./image_2.png"                # Sesuaikan dengan jalur Anda

# [Metode 3] Gambar yang diencode Base64
# image_url_1 = encode_file("./image_1.png")               # Sesuaikan dengan jalur Anda
# image_url_2 = encode_file("./image_2.png")              # Sesuaikan dengan jalur Anda

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:
    # Simpan gambar ke direktori saat ini
    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))
Contoh respons
URL gambar kedaluwarsa setelah 24 jam. Segera unduh gambar.
{
    "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
    }
}

Panggilan asinkron

Contoh ini menggunakan URL publik untuk input gambar.

Contoh permintaan
import os
from http import HTTPStatus
from urllib.parse import urlparse, unquote
from pathlib import PurePosixPath
import dashscope
import requests
from dashscope import ImageSynthesis

# URL berikut untuk wilayah Singapura. Ganti WorkspaceId dengan ID ruang kerja aktual Anda. URL berbeda tiap wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

# Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan: api_key="sk-xxx"
# Kunci API berbeda antara Singapura dan Beijing. Dapatkan Kunci API: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY")

# URL gambar publik
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)


# Buat tugas asinkron
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


# Tunggu hingga tugas asinkron selesai
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)
        # Simpan file ke direktori saat ini
        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))


# Ambil status tugas asinkron
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))


# Batalkan tugas asinkron. Hanya tugas dengan status PENDING yang dapat dibatalkan.
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()
Contoh respons

1. Respons saat membuat tugas

{
	"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. Respons saat menanyakan hasil tugas

URL gambar kedaluwarsa setelah 24 jam. Segera unduh gambar.
{
    "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
    }
}

Panggilan SDK Java

Penting

Pastikan versi SDK Java DashScope Anda minimal 2.22.2.

Versi lama dapat memicu kesalahan seperti “url error, please check url!”. Perbarui menggunakan Instal atau tingkatkan SDK.

Panggilan sinkron

Contoh permintaan

Contoh ini mendukung tiga metode input gambar: URL publik, pengkodean Base64, dan jalur file lokal.

// 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 {
        // URL berikut untuk wilayah Singapura. Ganti WorkspaceId dengan ID ruang kerja aktual Anda. URL berbeda tiap wilayah.
        Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }

    // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan: apiKey="sk-xxx"
    // Kunci API berbeda antara Singapura dan Beijing. Dapatkan Kunci API: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    /**
     * Metode input gambar: pilih salah satu
     *
     * 1. URL publik — terbaik untuk gambar yang dapat diakses publik
     * 2. File lokal — terbaik untuk pengembangan dan pengujian lokal
     * 3. Pengkodean Base64 — terbaik untuk gambar pribadi atau transmisi aman
     */

    // [Metode 1] URL publik
    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";

    // [Metode 2] Jalur file lokal (file://+jalur absolut atau file:///+jalur absolut)
    // 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

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

    // Daftar gambar untuk diedit
    static List<String> imageUrls = new ArrayList<>();
    static {
        imageUrls.add(imageUrl_1);
        imageUrls.add(imageUrl_2);
    }

    public static void syncCall() {
        // Atur parameter
        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 file sebagai string Base64
     * @param filePath Jalur file
     * @return String Base64 dalam 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);
        }
        // Deteksi tipe MIME
        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");
        }
        // Baca file dan 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();
    }
}
Contoh respons
URL gambar kedaluwarsa setelah 24 jam. Segera unduh gambar.
{
    "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
    }
}

Panggilan asinkron

Contoh ini menggunakan URL publik untuk input gambar.

Contoh permintaan
// 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 {
        // URL berikut untuk wilayah Singapura. Ganti WorkspaceId dengan ID ruang kerja aktual Anda. URL berbeda tiap wilayah.
        Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }

    // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan: apiKey="sk-xxx"
    // Kunci API berbeda antara Singapura dan Beijing. Dapatkan Kunci API: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    // URL publik
    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";

    // Daftar gambar untuk diedit
    static List<String> imageUrls = new ArrayList<>();
    static {
        imageUrls.add(imageUrl_1);
        imageUrls.add(imageUrl_2);
    }

    public static void asyncCall() {
        // Atur parameter
        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();
        // Jika DASHSCOPE_API_KEY diatur sebagai variabel lingkungan, apiKey bisa kosong.
        ImageSynthesisResult result = is.fetch(taskId, apiKey);
        System.out.println(result.getOutput());
        System.out.println(result.getUsage());
    }


    public static void main(String[] args) {
        asyncCall();
    }
}
Contoh respons

1. Respons saat membuat tugas

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

2. Respons saat menanyakan hasil tugas

URL gambar kedaluwarsa setelah 24 jam. Segera unduh gambar.
{
    "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
    }
}

Batasan

  • Retensi data: Baik ID tugas maupun URL gambar kedaluwarsa setelah 24 jam. Anda tidak dapat menanyakan atau mengunduhnya setelah kedaluwarsa.

  • Moderasi konten: Semua prompt, gambar input, dan gambar output menjalani moderasi konten. Permintaan yang berisi konten terlarang mengembalikan kesalahan seperti “IPInfringementSuspect” atau “DataInspectionFailed”. Lihat Informasi kesalahan untuk detailnya.

Kode kesalahan

Jika panggilan model gagal dan mengembalikan pesan kesalahan, lihat 错误码 untuk penyelesaiannya.

FAQ

T: Saya sebelumnya menggunakan General Image Editing 2.1. Apakah saya perlu mengubah panggilan SDK saya untuk menggunakan wan2.5?

J: Anda perlu melakukan penyesuaian karena desain parameter berbeda antara kedua versi tersebut:

T: Bagaimana cara melihat metrik penggunaan model?

J: Satu jam setelah panggilan model selesai, buka halaman Telemetri model (Singapura)Telemetri model (Beijing) untuk melihat metrik seperti jumlah panggilan dan tingkat keberhasilan. Untuk panduan langkah demi langkah, lihat Bagaimana cara melihat riwayat panggilan model?.