All Products
Search
Document Center

Alibaba Cloud Model Studio:Wan2.5 - pengeditan gambar umum

Last Updated:Mar 02, 2026

Model pengeditan gambar umum Wan2.5 mengedit gambar berdasarkan prompt teks, mempertahankan konsistensi subjek selama pengeditan, serta mendukung fusi multi-gambar dengan hingga tiga gambar referensi.

Mulai cepat: Pengeditan Gambar – Wan 2.5

Ikhtisar model

Fitur

Contoh input

Gambar output

Pengeditan gambar tunggal

damotest2023_Portrait_photography_outdoors_fashionable_beauty_409ae3c1-19e8-4515-8e50-b3c9072e1282_2-转换自-png

a26b226d-f044-4e95-a41c-d1c0d301c30b-转换自-png

Ubah gaun bermotif bunga menjadi gaun panjang renda bergaya vintage dengan detail bordir indah 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.

Model

Deskripsi

Spesifikasi gambar output

wan2.5-i2i-preview

Pratinjau Wan 2.5

Mendukung pengeditan gambar tunggal dan fusi multi-gambar.

Format gambar: PNG.

Resolusi gambar:

  • Tentukan resolusi gambar output menggunakan parameter <a baseurl="t3137712_v3_2_1.xdita" data-node="6107277" data-root="85177" data-tag="xref" href="#2e0de6a5b1aw8" id="2f711039eal8h">parameters.size</a>, dalam format width*height (dalam piksel).

  • Jika Anda tidak menentukan resolusi, sistem menghasilkan gambar dengan total piksel 1280*1280 secara default. Sistem mempertahankan rasio aspek yang mirip dengan gambar input:

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

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

Catatan

Sebelum memanggil API ini, tinjau daftar model dan harga untuk setiap wilayah.

Prasyarat

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

Penting

Wilayah Beijing dan Singapura memiliki Kunci API dan titik akhir permintaan yang terpisah. Jangan menggunakannya secara bergantian karena panggilan lintas-wilayah akan menyebabkan kegagalan otentikasi atau kesalahan layanan.

HTTP

Pengeditan gambar memerlukan waktu untuk diselesaikan. API ini menggunakan panggilan asinkron: kirim tugas untuk mendapatkan ID tugas, lalu lakukan polling hingga hasil siap.

Tips: Lakukan polling setiap 5 detik hingga status tugas berubah menjadi SUCCEEDED atau FAILED.

Langkah 1: Kirim tugas dan ambil ID tugas

Singapura: POST https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/image2image/image-synthesis

Beijing: POST https://dashscope.aliyuncs.com/api/v1/services/aigc/image2image/image-synthesis

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 tutorial pemula, lihat Postman.

Parameter permintaan

Pengeditan gambar tunggal

 curl --location 'https://dashscope-intl.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": "Change the floral dress to a vintage-style lace long dress with exquisite embroidery details 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://dashscope-intl.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 next to 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

Content-Type string (Wajib)

Tipe konten permintaan. Harus berupa application/json.

Authorization string (Wajib)

Kredensial otentikasi menggunakan Kunci API Model Studio.

Contoh: Bearer sk-xxxx

X-DashScope-Async string (Wajib)

Mengaktifkan pemrosesan asinkron. Harus diatur ke enable karena permintaan HTTP hanya mendukung pemrosesan asinkron.

Penting

Mengembalikan kesalahan "current user api does not support synchronous calls" jika tidak disertakan.

Body permintaan

model string (Wajib)

Nama model. Untuk informasi lebih lanjut, lihat daftar model dan harga.

Contoh: wan2.5-i2i-preview.

input object (Wajib)

Menentukan informasi input dasar, seperti prompt.

Properti

prompt string (Wajib)

Prompt positif menggambarkan elemen dan karakteristik visual yang ingin Anda sertakan dalam gambar yang dihasilkan.

Menerima bahasa Tiongkok dan Inggris. Maksimum: 2.000 karakter; konten yang lebih panjang akan dipotong.

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

Contoh: Seekor kucing oranye duduk, ceria, lincah, imut, realistis, dan akurat.

images array of string (Wajib)

Array URL yang menunjuk ke gambar input.

  • Maksimum: 3 gambar per permintaan.

  • Untuk beberapa gambar, urutan array menentukan urutan (Gambar 1, Gambar 2, dst.).

Batasan gambar:

  • Format yang didukung: JPEG, JPG, PNG, BMP, dan WEBP. Saluran alfa PNG diabaikan.

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

  • Ukuran file maksimum adalah 10 MB.

Format input yang didukung:

  1. URL publik

    • HTTP dan HTTPS didukung.

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

  2. String yang diencode Base64

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

    • Contoh: data:image/jpeg;base64,GDU7MtCZzEbTbmRZ... (disingkat untuk tampilan; gunakan string lengkap di produksi)

    • Untuk spesifikasi encoding Base64, lihat Metode input gambar.

negative_prompt string (Opsional)

Prompt negatif. Elemen yang ingin dikecualikan dari gambar yang dihasilkan.

Menerima bahasa Tiongkok dan Inggris. Maksimum: 500 karakter; konten yang lebih panjang akan dipotong.

Contoh: resolusi rendah, error, kualitas terburuk, kualitas rendah, cacat bentuk, jari ekstra, proporsi buruk.

parameters object (Opsional)

Mengontrol resolusi output, penulisan ulang prompt, watermark, dan opsi pemrosesan lainnya.

Properti

size string (Opsional)

Mengatur resolusi output dalam format width*height. Default: 1280*1280.

  • Total piksel harus antara 589.824 (768*768) hingga 1.638.400 (1280*1280). Rasio aspek harus antara 1:4 hingga 4:1.

  • 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 tidak ditentukan, sistem menghasilkan gambar dengan total piksel 1280*1280 secara default dan mempertahankan rasio aspek yang mirip dengan input:

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

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

n integer (Opsional)

Penting

Parameter n berdampak langsung pada penagihan—nilai yang lebih tinggi berarti biaya lebih besar. Sebelum memanggil API ini, tinjau harga model.

Jumlah gambar yang akan dihasilkan. Nilai valid antara 1 hingga 4. Default ke 4. Untuk mengontrol biaya, disarankan untuk secara eksplisit mengaturnya ke 1 saat pengujian.

watermark boolean (Opsional)

Apakah akan menambahkan watermark di pojok kanan bawah gambar yang menampilkan teks tetap “AI-generated”.

  • false (default)

  • true

prompt_extend boolean (Opsional)

Mengaktifkan penulisan ulang prompt cerdas. Saat diaktifkan, Large Language Model meningkatkan prompt Anda untuk hasil yang lebih baik, dengan biaya waktu pemrosesan yang lebih lama.

  • true (default)

  • false

Contoh: true.

seed integer (Opsional)

Seed bilangan acak. Rentang nilai adalah [0, 2147483647].

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

Untuk mereproduksi hasil tertentu, gunakan nilai seed tetap.

Catatan: Karena adanya keacakan inheren, seed yang identik mungkin tidak menghasilkan hasil yang persis sama.

Parameter respons

Respons sukses

Simpan task_id untuk menanyakan status dan hasil tugas.

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

Respons kesalahan

Pembuatan tugas gagal. Lihat kode kesalahan untuk mengatasi masalah.

{
    "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. Dapat digunakan untuk menanyakan tugas hingga 24 jam.

task_status string

Status tugas.

Enumerasi

  • PENDING

  • RUNNING

  • SUCCEEDED

  • FAILED

  • CANCELED

  • UNKNOWN: Tugas tidak ada atau status tidak diketahui

request_id string

Pengidentifikasi unik untuk permintaan. Gunakan untuk pelacakan dan troubleshooting masalah.

code string

Kode kesalahan. Hanya dikembalikan ketika permintaan gagal. Lihat kode kesalahan untuk detailnya.

message string

Pesan kesalahan detail. Hanya dikembalikan ketika permintaan gagal. Lihat kode kesalahan untuk detailnya.

Langkah 2: Lakukan polling untuk hasil menggunakan ID tugas

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

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

Catatan
  • Saran polling: Pembuatan gambar dapat memakan waktu beberapa menit. Kami menyarankan Anda menggunakan mekanisme polling dengan interval permintaan yang wajar, misalnya 10 detik, untuk mengambil hasilnya.

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

  • URL hasil: Setelah tugas berhasil, URL gambar dikembalikan. URL tersebut berlaku selama 24 jam. Setelah Anda mengambil URL tersebut, segera unduh dan simpan gambarnya ke layanan penyimpanan permanen, seperti Object Storage Service (OSS).

Parameter permintaan

Hasil Kueri Tugas

Ganti 86ecf553-d340-4e21-xxxxxxxxx dengan ID tugas aktual.

Kunci API bersifat spesifik wilayah. Lihat dokumentasi Kunci API untuk detailnya.
Untuk model di wilayah Beijing, ganti base_url dengan https://dashscope.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx
curl -X GET https://dashscope-intl.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"
Header

Authorization string (Wajib)

Kredensial otentikasi menggunakan Kunci API Model Studio.

Contoh: Bearer sk-xxxx

Parameter path URL

task_id string (Wajib)

ID tugas yang akan ditanyakan.

Parameter respons

Eksekusi tugas berhasil

URL gambar hanya disimpan 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": "Change the floral dress to a vintage-style lace long dress with exquisite embroidery details on the collar and cuffs.",
                "actual_prompt": "Replace the pink pleated dress with a vintage-style lace long dress with exquisite embroidery details on the collar and cuffs. Keep the person's hairstyle, makeup, and posture unchanged. The overall style should be consistent with the soft tones and classic atmosphere of the original image.",
                "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
    }
}

Eksekusi tugas gagal

Ketika tugas gagal, task_status diatur ke FAILED dengan kode kesalahan dan pesan. Lihat kode kesalahan untuk mengatasi masalah.

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

Model dapat menghasilkan beberapa gambar dalam satu tugas. Jika setidaknya satu gambar berhasil dihasilkan, status tugas ditandai sebagai SUCCEEDED dan mengembalikan URL gambar yang berhasil. Untuk gambar yang gagal dihasilkan, hasilnya mencakup alasan kegagalan. Untuk mengatasi kegagalan ini, lihat kode kesalahan. Hanya gambar yang berhasil dihasilkan yang dihitung dalam statistik penggunaan.

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

Permintaan tugas kedaluwarsa

task_id berlaku selama 24 jam. Setelah periode ini, permintaan gagal dan mengembalikan pesan 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. Dapat digunakan untuk menanyakan tugas hingga 24 jam.

task_status string

Status tugas.

Enumerasi

  • PENDING

  • RUNNING

  • SUCCEEDED

  • FAILED

  • CANCELED

  • UNKNOWN: Tugas tidak ada atau status tidak diketahui

submit_time string

Waktu saat tugas dikirim. Waktu dalam UTC+8. Format: YYYY-MM-DD HH:mm:ss.SSS.

scheduled_time string

Waktu saat tugas mulai berjalan. Waktu dalam UTC+8. Format: YYYY-MM-DD HH:mm:ss.SSS.

end_time string

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

results array of object

Array hasil generasi. Setiap entri berisi URL gambar, prompt, atau detail kesalahan untuk generasi yang gagal.

Properti

orig_prompt string

Prompt input asli. Ini adalah nilai dari parameter permintaan prompt.

actual_prompt string

Mengembalikan prompt yang dioptimalkan sebenarnya yang digunakan saat penulisan ulang prompt diaktifkan. Tidak dikembalikan saat fitur ini dinonaktifkan.

url string

URL gambar yang dihasilkan.

code string

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

message string

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

task_metrics object

Statistik tentang 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 ketika permintaan gagal. Lihat kode kesalahan untuk detailnya.

message string

Pesan kesalahan detail. Hanya dikembalikan ketika permintaan gagal. Lihat kode kesalahan untuk detailnya.

usage object

Statistik output yang dihasilkan. Hanya hasil yang berhasil yang dihitung.

Properti

image_count integer

Jumlah gambar yang berhasil dihasilkan oleh model. Rumus penagihan: Biaya = (Jumlah gambar) × (Harga satuan).

request_id string

Pengidentifikasi unik untuk permintaan. Gunakan untuk pelacakan dan troubleshooting masalah.

DashScope SDK

Parameter SDK mencerminkan API HTTP, dengan struktur yang disesuaikan dengan konvensi masing-masing bahasa.

Pengeditan gambar memerlukan waktu. SDK menangani polling secara internal dan menawarkan mode panggilan sinkron maupun asinkron.

Waktu pemrosesan tergantung pada kedalaman antrian dan beban layanan. SDK menunggu hasil secara otomatis.

Python SDK

Penting

Pastikan versi SDK Python DashScope Anda adalah 1.25.2 atau lebih baru.

Versi sebelumnya dapat menyebabkan kesalahan seperti 'url error, please check url!'. Untuk informasi lebih lanjut, lihat Instal atau upgrade SDK.

Sinkron

Contoh permintaan

Contoh ini menunjukkan tiga cara untuk memberikan gambar input: 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

# Berikut adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti URL dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

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

# --- Input gambar: Gunakan encoding Base64 ---
# Format encoding Base64 adalah 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 tiga metode berikut.

1. Gunakan URL publik - Cocok untuk gambar yang dapat diakses publik.
2. Gunakan file lokal - Cocok untuk pengembangan dan pengujian lokal.
3. Gunakan encoding Base64 - Cocok untuk gambar pribadi atau skenario yang memerlukan transmisi terenkripsi.
"""

# [Metode 1] Gunakan 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] Gunakan file lokal (mendukung jalur absolut dan relatif)
# Persyaratan 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"                 # Gunakan jalur aktual Anda
# image_url_2 = "file://" + "./image_2.png"                # Gunakan jalur aktual Anda

# [Metode 3] Gunakan gambar yang diencode Base64
# image_url_1 = encode_file("./image_1.png")               # Gunakan jalur aktual Anda
# image_url_2 = encode_file("./image_2.png")              # Gunakan jalur aktual 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 next to 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 di 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 kedaluwarsa setelah 24 jam. Unduh gambar segera.
{
    "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 next to 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 alarm clock facing the camera, parallel to the table, with its shadow naturally cast on the table."
            }
        ],
        "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
    }
}

Asinkron

Contoh ini menggunakan URL publik untuk mengirim 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

# Berikut adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti URL dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

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

# Gunakan 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 next to 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))


# Dapatkan informasi 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 dalam 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. Contoh respons untuk permintaan pembuatan 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. Contoh respons untuk permintaan penanyakan tugas

URL kedaluwarsa setelah 24 jam. Unduh gambar segera.
{
    "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 next to 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 alarm clock facing the camera, parallel to the table, with its shadow naturally cast on the table."
            }
        ],
        "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
    }
}

Java SDK

Penting

Pastikan versi SDK Java DashScope Anda adalah 2.22.2 atau lebih baru.

Versi sebelumnya dapat menyebabkan kesalahan seperti 'url error, please check url!'. Untuk informasi lebih lanjut, lihat Instal atau upgrade SDK.

Sinkron

Contoh permintaan

Contoh ini menunjukkan tiga cara untuk memberikan gambar input: 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 {
        // Berikut adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti URL dengan: https://dashscope.aliyuncs.com/api/v1
        Constants.baseHttpApiUrl = "https://dashscope-intl.aliyuncs.com/api/v1";
    }

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

    /**
     * Metode input gambar:
     * Pilih salah satu dari tiga metode berikut.
     *
     * 1. Gunakan URL publik - Cocok untuk gambar yang dapat diakses publik.
     * 2. Gunakan file lokal - Cocok untuk pengembangan dan pengujian lokal.
     * 3. Gunakan encoding Base64 - Cocok untuk gambar pribadi atau skenario yang memerlukan transmisi terenkripsi.
     */

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

    // Atur daftar gambar yang akan 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 next to 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));
    }

    /**
     * Mengencode file menjadi 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 does not exist: " + 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 konten file dan encode
        byte[] fileBytes = null;
        try{
            fileBytes = Files.readAllBytes(path);
        } catch (IOException e) {
            throw new IllegalArgumentException("Cannot read file content: " + filePath);
        }

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

    public static void main(String[] args) {
        syncCall();
    }
}
Contoh respons
URL kedaluwarsa setelah 24 jam. Unduh gambar segera.
{
    "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 next to 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 front of the alarm clock facing the camera, 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
    }
}

Asinkron

Contoh ini menggunakan URL publik untuk mengirim 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 {
        // Berikut adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti URL dengan: https://dashscope.aliyuncs.com/api/v1
        Constants.baseHttpApiUrl = "https://dashscope-intl.aliyuncs.com/api/v1";
    }

    // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey="sk-xxx"
    // Kunci API untuk wilayah Singapura dan Tiongkok (Beijing) berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/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";

    // Atur 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 next to 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 Anda telah mengatur DASHSCOPE_API_KEY sebagai variabel lingkungan, Anda dapat mengosongkan apiKey.
        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. Contoh respons untuk permintaan pembuatan tugas

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

2. Contoh respons untuk permintaan penanyakan tugas

URL kedaluwarsa setelah 24 jam. Unduh gambar segera.
{
    "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 next to 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 front of the alarm clock facing the camera, 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: ID tugas dan URL gambar kedaluwarsa setelah 24 jam dan tidak dapat diakses setelah itu.

  • Moderasi konten: Semua input (prompt dan gambar) serta output dimoderasi secara otomatis. Konten yang tidak memenuhi ketentuan memicu kesalahan `IPInfringementSuspect` atau `DataInspectionFailed`. Lihat Pesan kesalahan.

Kode kesalahan

Jika pemanggilan model gagal dan mengembalikan pesan kesalahan, lihat Pesan kesalahan untuk solusinya.

FAQ

T: Saya sedang migrasi dari Wan2.1. Perubahan API apa saja yang perlu saya ketahui?

J: Penyesuaian diperlukan karena desain parameter berbeda antara kedua versi tersebut.

T: Bagaimana cara melihat jumlah pemanggilan model?

J: Metrik penggunaan, seperti jumlah panggilan dan tingkat keberhasilan, muncul di halaman Monitoring (Singapura) atau Monitoring (Beijing) dalam waktu satu jam setelah pemanggilan API. Untuk petunjuknya, lihat Cara melihat catatan pemanggilan model?.