All Products
Search
Document Center

Alibaba Cloud Model Studio:Wanxiang – Pengeditan Gambar Umum 2.5

Last Updated:Sep 09, 2026

Model Wanxiang General Image Editing wan2.5 mengedit dan menggabungkan gambar berdasarkan instruksi teks semata, menjaga konsistensi subjek sepanjang proses pengeditan.

Mulai cepat: Panduan pengguna

PentingAlibaba Cloud 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 menyarankan Anda bermigrasi 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 pada halaman Workspace Details di Konsol Alibaba Cloud Model Studio. Domain lama tetap berfungsi sepenuhnya.

Ikhtisar model

Kemampuan model

Contoh input

Gambar output

Single-image editing

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.

Multi-image fusion

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

Wanxiang 2.5 preview

Mendukung single-image editing dan multi-image fusion

Format gambar: PNG.

Resolusi gambar:

  • Gunakan parameter parameters.size untuk menentukan resolusi gambar output dalam format width*height (dalam piksel).

  • Jika tidak ada resolusi yang ditentukan, default-nya adalah 1280×1280 piksel total. Aturan rasio aspek perkiraan:

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

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

CatatanSebelum 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 DashScope SDK.

PentingWilayah China (Beijing) dan Singapura memiliki API keys dan request endpoints yang terpisah. Keduanya tidak dapat saling dipertukarkan. Panggilan lintas wilayah menyebabkan kegagalan autentikasi atau kesalahan layanan.

Panggilan HTTP API

Pengeditan gambar memerlukan waktu 1–2 menit, sehingga API menggunakan pemanggilan asinkron: Buat tugas → Poll hasil.

Waktu proses aktual bervariasi tergantung panjang antrian dan beban layanan.

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 mengkueri hasil. task_id berlaku selama 24 jam. Jangan membuat tugas duplikat. Sebagai gantinya, gunakan polling untuk mengambil hasil.
  • Untuk panduan pemula, lihat Panggil API dengan Postman atau cURL.

Parameter permintaan

Header permintaan

Content-Type string (Wajib)

Tipe konten permintaan. Harus 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 enable.

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

Body permintaan

model string (wajib)

Nama model. Model yang didukung dan harga.

Nilai contoh: wan2.5-i2i-preview.

input object (wajib)

Bidang input seperti prompt dan gambar.

Properti

prompt string (wajib)

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

Mendukung bahasa Mandarin dan Inggris. Maksimum: 2000 karakter (setiap karakter dihitung satu); kelebihan akan dipotong.

Untuk tips penulisan prompt, lihat Panduan prompt text-to-image.

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

images array of string (wajib)

Array URL gambar.

  • Panjang maksimum array: 3 (maksimal tiga gambar).
  • Untuk input multi-gambar, urutan penting. Gambar mengikuti urutan array.

Persyaratan gambar:

  • Format: JPEG, JPG, PNG (tanpa alpha channel), BMP, WEBP.
  • Resolusi: Lebar dan tinggi harus antara 384 hingga 5000 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).
    • Detail encoding Base64: Metode input gambar.

negative_prompt string (opsional)

Prompt negatif yang menggambarkan elemen yang harus dikecualikan dari gambar.

Mendukung bahasa Mandarin dan Inggris. Maksimum: 500 karakter; kelebihan akan dipotong.

Nilai contoh: low resolution, errors, worst quality, low quality, incomplete, extra fingers, poor proportions.

parameters object (opsional)

Mengontrol resolusi, penulisan ulang prompt, dan 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 size dihilangkan, default-nya adalah 1280×1280 piksel dengan rasio aspek perkiraan:

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

n integer (opsional)

PentingNilai n secara langsung memengaruhi biaya. Nilai yang lebih tinggi berbiaya lebih mahal. Konfirmasi harga di Harga model sebelum memanggil.

Jumlah gambar yang akan dihasilkan. Rentang: 1–4. Default: 4. Atur ke 1 saat pengujian untuk mengontrol biaya.

watermark boolean (opsional)

Menambahkan watermark “AI Generated” di pojok kanan bawah.

  • false: default. Tidak ada watermark.
  • true: Tambahkan watermark.

prompt_extend boolean (opsional)

Mengaktifkan penulisan ulang prompt berbasis LLM untuk meningkatkan kualitas gambar. Menambahkan latensi.

  • true: default. Aktifkan penulisan ulang.
  • false: Nonaktifkan penulisan ulang.

Nilai contoh: true.

seed integer (opsional)

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

Jika dihilangkan, seed acak akan dihasilkan. Jika ditentukan, seed berurutan akan diberikan ke masing-masing dari n gambar berdasarkan n. Misalnya, jika n=4, seed-nya adalah: seed, seed+1, seed+2, seed+3.

Untuk meningkatkan reproduktibilitas, tetapkan nilai seed.

Seed identik tidak menjamin output identik karena generasi probabilistik.

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

Parameter respons

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

Identifier permintaan unik untuk pelacakan dan troubleshooting.

code string

Kode kesalahan. Dikembalikan hanya untuk permintaan yang gagal. Lihat Kode kesalahan.

message string

Pesan kesalahan detail. Dikembalikan hanya untuk permintaan yang gagal. Lihat Kode kesalahan.

Respons sukses

Simpan task_id untuk mengkueri status tugas dan hasilnya.

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

Respons error

Pembuatan tugas gagal. Lihat Kode kesalahan.

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

Langkah 2: Kueri 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

Header permintaan

Authorization string (Wajib)

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

Parameter path URL

task_id string (Wajib)

ID tugas.

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"

Parameter respons

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. Dikembalikan hanya untuk kegagalan parsial.

message string

Pesan kesalahan untuk gambar yang gagal. Dikembalikan hanya 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. Dikembalikan hanya untuk permintaan yang gagal. Lihat Kode kesalahan.

message string

Pesan kesalahan detail. Dikembalikan hanya untuk permintaan yang gagal. Lihat Kode kesalahan.

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

Identifier permintaan unik untuk pelacakan dan troubleshooting.

Tugas berhasil

URL gambar hanya berlaku selama 24 jam dan kemudian 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 Kode kesalahan.

{
    "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 adalah SUCCEEDED dan URL gambar yang berhasil dikembalikan. Gambar yang gagal mencantumkan alasan kegagalannya. Statistik penggunaan hanya menghitung hasil yang berhasil. Lihat Kode kesalahan.

{
    "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 error berikut.

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

Panggilan DashScope SDK

Parameter SDK sesuai dengan panggilan HTTP API, dibungkus agar sesuai dengan setiap bahasa pemrograman.

Pengeditan gambar memerlukan waktu 30–60 detik. SDK membungkus alur HTTP asinkron, mendukung panggilan sinkron maupun asinkron.

Waktu proses aktual bervariasi tergantung panjang antrian dan beban layanan.

Panggilan SDK Python

PentingPastikan versi DashScope Python SDK Anda minimal1.25.2.

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

Panggilan sinkron

Contoh permintaan

Contoh ini mendukung tiga metode input gambar: URL publik, encoding 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: encoding 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:

1. URL publik — terbaik untuk gambar yang dapat diakses publik
2. File lokal — terbaik untuk pengembangan dan pengujian lokal
3. Encoding 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 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
}
  1. Respons saat mengkueri 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

PentingPastikan versi DashScope Java SDK Anda minimal2.22.2.

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

Panggilan sinkron

Contoh permintaan

Contoh ini mendukung tiga metode input gambar: URL publik, encoding 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. Encoding 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] Encoding 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() {
        // Setel 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
// Hak Cipta (c) Alibaba, Inc. dan afiliasinya.

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

    // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikutnya 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 yang akan 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 dapat dikosongkan.
        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"
	}
}
  1. Respons saat mengkueri 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 mengkueri atau mengunduhnya setelah kedaluwarsa.
  • Moderasi konten: Semua prompt, gambar input, dan gambar output menjalani moderasi konten. Permintaan yang berisi konten terlarang mengembalikan error seperti “IPInfringementSuspect” atau “DataInspectionFailed”. Lihat Informasi error untuk detailnya.

Kode kesalahan

Jika panggilan model gagal dan mengembalikan pesan error, lihat Kode kesalahan untuk penyelesaiannya.

FAQ

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

J: Ya—desain parameternya berbeda antarversi:

T: Bagaimana cara melihat metrik penggunaan model?

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