全部产品
Search
文档中心

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

更新时间:Jan 16, 2026

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

Mulai cepat: Panduan pengguna

Ikhtisar model

Fitur

Contoh input

Gambar Keluaran

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 bunga 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:

  • Gunakan parameter <a baseurl="t3137712_v3_0_0.xdita" data-node="6107277" data-root="85177" data-tag="xref" href="#2e0de6a5b1aw8" id="083cf715943un">parameters.size</a> untuk menentukan resolusi citra keluaran 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 sama dengan gambar input.

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

Catatan

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

Prasyarat

Sebelum melakukan panggilan, dapatkan Kunci API dan atur 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. Panggilan lintas-wilayah akan menyebabkan kegagalan autentikasi atau kesalahan layanan.

HTTP

Pengeditan gambar memerlukan waktu untuk diselesaikan. API 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

China (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.

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. Anda harus mengatur parameter ini ke application/json.

Authorization string (Wajib)

Kredensial otentikasi. API ini menggunakan Kunci API Model Studio untuk autentikasi. Contoh: `Bearer sk-xxxx`.

X-DashScope-Async string (Wajib)

Parameter ini digunakan untuk mengonfigurasi pemrosesan asinkron. Karena permintaan HTTP hanya mendukung pemrosesan asinkron, Anda harus mengatur parameter ini ke enable.

Penting

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

Body permintaan

model string (Wajib)

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

Contoh: wan2.5-i2i-preview.

input object (Wajib)

Konfigurasi input, termasuk prompt dan gambar.

Properti

prompt string (Wajib)

Instruksi pengeditan (positive prompt). Menentukan elemen dan perubahan visual untuk gambar yang diedit.

Menerima bahasa Tionghoa 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 yang 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.

  • Batas ukuran: 10 MB per gambar.

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 harus dikecualikan dari gambar yang dihasilkan.

Menerima bahasa Tionghoa 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 sama dengan gambar input.

  • Input multi-gambar: Rasio aspek sama 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: 1–4. Default: 4. Untuk pengujian, gunakan 1 untuk meminimalkan biaya.

watermark boolean (Opsional)

Menambahkan watermark "AI-generated" di pojok kanan bawah gambar output.

  • false (default)

  • true

prompt_extend boolean (Opsional)

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

  • true (default)

  • false

seed integer (Opsional)

Seed angka acak. Rentang valid: 0–2147483647.

Jika diabaikan, seed acak dihasilkan secara otomatis. Jika disediakan, sistem menggunakan seed inkremental untuk beberapa gambar: jika n=4, seed-nya adalah `seed`, `seed+1`, `seed+2`, dan `seed+3`.

Untuk mereproduksi hasil tertentu, gunakan nilai seed tetap.

Catatan: Karena adanya keacakan inheren, seed 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. Untuk informasi lebih lanjut, lihat Pesan kesalahan untuk menyelesaikan 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. Anda dapat menggunakan ID ini untuk menanyakan tugas hingga 24 jam.

task_status string

Status tugas.

Enumerasi

  • PENDING

  • RUNNING

  • SUCCEEDED

  • FAILED

  • CANCELED

  • UNKNOWN: Tugas tidak ada atau statusnya tidak diketahui.

request_id string

ID permintaan unik. Anda dapat menggunakan ID ini untuk melacak dan memecahkan masalah.

code string

Kode kesalahan. Parameter ini hanya dikembalikan saat permintaan gagal. Untuk informasi lebih lanjut, lihat Pesan kesalahan.

message string

Pesan kesalahan terperinci. Parameter ini hanya dikembalikan saat permintaan gagal. Untuk informasi lebih lanjut, lihat Pesan kesalahan.

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

Kueri hasil tugas

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

Kunci API bersifat spesifik wilayah. Dapatkan Kunci API.
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. API ini menggunakan Kunci API Model Studio untuk autentikasi. Contoh: `Bearer sk-xxxx`.

Parameter path URL

task_id string (Wajib)

ID tugas.

Parameter respons

Eksekusi tugas berhasil

URL gambar hanya disimpan selama 24 jam, lalu secara otomatis dihapus. Anda harus segera menyimpan 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

Jika tugas gagal, `task_status` diatur ke FAILED, dan kode serta pesan kesalahan disediakan. Untuk informasi lebih lanjut, lihat Pesan kesalahan untuk menyelesaikan 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 URL gambar yang berhasil dikembalikan. Untuk gambar yang gagal dihasilkan, hasilnya mencakup alasan kegagalan. Untuk menyelesaikan kegagalan ini, lihat Pesan kesalahan. Selain itu, 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
    }
}

Kueri tugas kedaluwarsa

`task_id` berlaku selama 24 jam. Setelah periode ini, kueri 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. Anda dapat menggunakan ID ini untuk menanyakan tugas hingga 24 jam.

task_status string

Status tugas.

Enumerasi

  • PENDING

  • RUNNING

  • SUCCEEDED

  • FAILED

  • CANCELED

  • UNKNOWN: Tugas tidak ada atau statusnya tidak diketahui.

submit_time string

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

scheduled_time string

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

end_time string

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

results array of object

Array hasil pembuatan. Setiap entri berisi URL gambar dan info prompt, atau detail kesalahan jika pembuatan gagal.

Properti

orig_prompt string

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

actual_prompt string

Jika penulisan ulang prompt diaktifkan, parameter ini mengembalikan prompt yang dioptimalkan yang sebenarnya digunakan. Jika fitur ini dinonaktifkan, parameter ini tidak dikembalikan.

url string

URL gambar output.

code string

Kode kesalahan yang dikembalikan saat pembuatan gambar gagal.

message string

Pesan kesalahan yang dikembalikan saat pembuatan gambar gagal.

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. Parameter ini hanya dikembalikan saat permintaan gagal. Untuk informasi lebih lanjut, lihat Pesan kesalahan.

message string

Pesan kesalahan terperinci. Parameter ini hanya dikembalikan saat permintaan gagal. Untuk informasi lebih lanjut, lihat Pesan kesalahan.

usage object

Statistik penggunaan. Hanya gambar yang berhasil dihasilkan yang dihitung untuk penagihan.

Properti

image_count integer

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

request_id string

ID permintaan unik. Anda dapat menggunakan ID ini untuk melacak dan memecahkan 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.

Python SDK

Penting

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

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

Panggilan 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 China (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 China (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
    }
}

Panggilan 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 China (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 China (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 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 kueri 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 yang lebih lama dapat menyebabkan kesalahan seperti 'url error, please check url!'. Untuk informasi lebih lanjut, lihat Instal atau upgrade SDK.

Panggilan 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 China (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 China (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
    }
}

Panggilan 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 China (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 China (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 kueri 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 setelahnya.

  • Moderasi konten: Semua input (prompt dan gambar) serta output dimoderasi secara otomatis. Konten yang tidak sesuai memicu kesalahan `IPInfringementSuspect` atau `DataInspectionFailed`. Untuk informasi lebih lanjut, lihat Kode kesalahan.

  • Akses jaringan: Tautan gambar disimpan di Object Storage Service (OSS). Jika lingkungan Anda memblokir tautan OSS, tambahkan domain berikut ke daftar izin Anda:

    # Daftar nama domain OSS
    dashscope-result-bj.oss-cn-beijing.aliyuncs.com
    dashscope-result-hz.oss-cn-hangzhou.aliyuncs.com
    dashscope-result-sh.oss-cn-shanghai.aliyuncs.com
    dashscope-result-wlcb.oss-cn-wulanchabu.aliyuncs.com
    dashscope-result-zjk.oss-cn-zhangjiakou.aliyuncs.com
    dashscope-result-sz.oss-cn-shenzhen.aliyuncs.com
    dashscope-result-hy.oss-cn-heyuan.aliyuncs.com
    dashscope-result-cd.oss-cn-chengdu.aliyuncs.com
    dashscope-result-gz.oss-cn-guangzhou.aliyuncs.com
    dashscope-result-wlcb-acdr-1.oss-cn-wulanchabu-acdr-1.aliyuncs.com

Kode kesalahan

Jika panggilan gagal, lihat Pesan kesalahan untuk troubleshooting.

FAQ

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

J: Perbedaan utama:

T: Bagaimana cara melihat jumlah panggilan model?

J: Metrik penggunaan (jumlah panggilan, tingkat keberhasilan, dll.) muncul di halaman Observasi Model (Singapura), Observasi Model (Beijing) dalam waktu satu jam setelah panggilan API. Untuk petunjuk, lihat Kueri tagihan dan manajemen biaya.