Wan2.7-Image mendukung text-to-image, text-to-image-set, image-to-image-set, pengeditan gambar, dan pembuatan referensi multi-gambar.
Ikhtisar model
Model | Description | Spesifikasi gambar output |
|---|---|---|
wan2.7-image-pro | Wan 2.7 image Pro. Mendukung output 4K untuk pembuatan text-to-image (tidak berlaku untuk image set). | Format gambar: PNG. Untuk resolusi dan dimensi gambar, lihat parameter size. |
wan2.7-image | Wan 2.7 image. Pembuatan lebih cepat. |
CatatanSebelum memanggil model, periksa Daftar model dan harga untuk ketersediaan model di wilayah tertentu.
Prasyarat
Dapatkan Kunci API dan ekspor Kunci API sebagai Variabel lingkungan.
PentingWilayah China (Beijing) dan Singapura memiliki Kunci API dan Titik akhir permintaan yang terpisah. Keduanya tidak dapat saling menggantikan. Pemanggilan lintas-wilayah menyebabkan kegagalan otentikasi atau error layanan.
HTTP sinkron
Mengembalikan hasil dalam satu permintaan. Direkomendasikan untuk sebagian besar kasus penggunaan.
Singapura
POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
Ganti {WorkspaceId} dengan ID ruang kerja Anda yang sebenarnya.
Beijing
POST https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
Ganti {WorkspaceId} dengan ID ruang kerja Anda yang sebenarnya.
Parameter permintaan | Text-to-image
Image editingInteractive editingImage set generation |
Header | |
Content-Type Tipe konten permintaan. Harus | |
Authorization Mengotentikasi permintaan dengan Kunci API Model Studio. Contoh: Bearer sk-xxxx. | |
Body permintaan | |
model Nama model. Nilai yang valid: | |
input Objek input. | |
parameters Pengaturan parameter model. |
Parameter respons | Eksekusi tugas berhasilData tugas (status tugas dan URL gambar) hanya disimpan selama 24 jam, lalu secara otomatis dihapus. Segera simpan gambar yang dihasilkan. Eksekusi tugas abnormalJika tugas gagal, bidang |
output Informasi output tugas. | |
usage Statistik penggunaan untuk permintaan. Hanya hasil yang berhasil yang dihitung. | |
request_id Identifier permintaan unik untuk pelacakan dan troubleshooting. | |
code Kode error. Hanya dikembalikan untuk permintaan yang gagal. Lihat Kode error. | |
message Pesan error detail. Hanya dikembalikan untuk permintaan yang gagal. Lihat Kode error. |
HTTP asinkron
Paling cocok untuk tugas berdurasi panjang. Kirim tugas, lalu polling status dan hasilnya.
Langkah 1: Buat tugas untuk mendapatkan ID tugas
Singapura
POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/image-generation/generation
Ganti {WorkspaceId} dengan ID ruang kerja Anda yang sebenarnya.
Beijing
POST https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/aigc/image-generation/generation
Ganti {WorkspaceId} dengan ID ruang kerja Anda yang sebenarnya.
Parameter permintaan | Text-to-image
Image editingInteractive editingImage set generation
|
Header | |
Content-Type Tipe konten permintaan. Harus | |
Authorization Mengotentikasi permintaan dengan Kunci API Model Studio. Contoh: Bearer sk-xxxx. | |
X-DashScope-Async Mengaktifkan pemrosesan asinkron. Permintaan HTTP hanya mendukung panggilan asinkron. Harus PentingJika header permintaan ini tidak ada, error "current user api does not support synchronous calls" dikembalikan. | |
Body permintaan | |
model Nama model. Nilai yang valid: | |
input Objek input. | |
parameters Pengaturan parameter model. |
Parameter respons | Respons berhasilSimpan Respons errorPembuatan tugas gagal. Lihat Kode error. |
output Informasi output tugas. | |
request_id Identifier permintaan unik untuk pelacakan dan troubleshooting. | |
code Kode error. Hanya dikembalikan untuk permintaan yang gagal. Lihat Kode error. | |
message Pesan error detail. Hanya dikembalikan untuk permintaan yang gagal. Lihat Kode error. |
Langkah 2: Tanyakan hasil berdasarkan ID tugas
Singapura
GET https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/{task_id}
Beijing
GET https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/tasks/{task_id}
Parameter permintaan | Tanyakan hasil tugasGanti |
Header | |
Authorization Mengotentikasi permintaan dengan Kunci API Model Studio. Contoh: Bearer sk-xxxx. | |
Parameter path | |
task_id ID tugas. |
Parameter respons | Eksekusi tugas berhasilData tugas (status tugas dan URL gambar) hanya disimpan selama 24 jam, lalu secara otomatis dihapus. Segera simpan gambar yang dihasilkan. Eksekusi tugas abnormalJika tugas gagal, bidang |
output Informasi output tugas. | |
usage Statistik penggunaan untuk permintaan. Hanya hasil yang berhasil yang dihitung. | |
request_id Identifier permintaan unik untuk pelacakan dan troubleshooting. | |
code Kode error. Hanya dikembalikan untuk permintaan yang gagal. Lihat Kode error. | |
message Pesan error detail. Hanya dikembalikan untuk permintaan yang gagal. Lihat Kode error. |
Python SDK
Nama parameter SDK sebagian besar konsisten dengan HTTP API.
Tugas pembuatan gambar bisa memakan waktu, sehingga SDK membungkus alur kerja asinkron HTTP. Panggilan sinkron dan asinkron didukung.
Durasi tugas bergantung pada panjang antrian dan status layanan.
PentingPastikan versi DashScope Python SDK Anda adalah 1.25.15 atau lebih baru. Untuk memperbarui, lihat Instal SDK.
Baik base_url maupun Kunci API bersifat spesifik wilayah. Contoh berikut menggunakan wilayah Singapura:
Singapura
https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1
Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja Anda yang sebenarnya.
China (Beijing)
https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1
Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja Anda yang sebenarnya.
Image editing
Panggilan sinkron
Contoh permintaan
import os
import base64
import mimetypes
import urllib.request
import dashscope
from dashscope.aigc.image_generation import ImageGeneration
from dashscope.api_entities.dashscope_response import Message
# base_url berikut untuk wilayah Singapura. Ganti {WorkspaceId} dengan ID ruang kerja Bailian Anda. base_url berbeda-beda per 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 Kunci API Model Studio Anda: api_key="sk-xxx"
# Kunci API berbeda-beda per wilayah. Untuk mendapatkan Kunci API, kunjungi: https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY")
# --- Fungsi 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("Format gambar tidak didukung atau tidak dikenali")
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:
Berikut tiga metode input gambar. Anda perlu memilih salah satu.
1. Gunakan URL publik: Metode ini cocok untuk gambar yang dapat diakses publik.
2. Gunakan file lokal: Metode ini cocok untuk pengembangan dan pengujian lokal.
3. Gunakan encoding Base64: Metode ini cocok untuk gambar privat atau skenario yang memerlukan transmisi terenkripsi.
"""
# [Metode 1] Gunakan URL gambar publik
image_1 = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/pjeqdf/car.webp"
image_2 = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/xsunlm/paint.webp"
# [Metode 2] Gunakan file lokal (mendukung path absolut dan relatif)
# image_1 = "file:///path/to/your/car.png"
# image_2 = "file:///path/to/your/paint.png"
# [Metode 3] Gunakan gambar Base64-encoded
# image_1 = encode_file("/path/to/your/car.png")
# image_2 = encode_file("/path/to/your/paint.png")
message = Message(
role="user",
content=[
{"text": "Spray the graffiti from image 2 onto the car in image 1"},
{"image": image_1},
{"image": image_2},
],
)
print("----sync call, please wait a moment----")
rsp = ImageGeneration.call(
model="wan2.7-image-pro",
api_key=api_key,
messages=[message],
watermark=False,
n=1,
size="2K", # wan2.7-image-pro mendukung resolusi 4K hanya untuk pembuatan text-to-image. Pengeditan gambar dan pembuatan gambar multi mendukung resolusi maksimal 2K.
)
# Ekstrak URL gambar hasil dan simpan gambar ke file lokal.
if rsp.status_code == 200:
for i, choice in enumerate(rsp.output.choices):
for j, content in enumerate(choice["message"]["content"]):
if content.get("type") == "image":
image_url = content["image"]
file_name = f"output_{i}_{j}.png"
# URL hasil berlaku selama 24 jam. Harap unduh tepat waktu.
urllib.request.urlretrieve(image_url, file_name)
print(f"Gambar disimpan ke {file_name}")
else:
print(f"Gagal: status_code={rsp.status_code}, message={rsp.message}")
Contoh respons
URL berlaku selama 24 jam. Segera unduh gambar.
{
"status_code": 200,
"request_id": "81d868c6-6ce1-92d8-a90d-d2ee71xxxxxx",
"code": "",
"message": "",
"output": {
"text": null,
"finish_reason": null,
"choices": [
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": [
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
}
]
}
}
],
"audio": null,
"finished": true
},
"usage": {
"input_tokens": 18790,
"output_tokens": 2,
"characters": 0,
"image_count": 1,
"size": "2985*1405",
"total_tokens": 18792
}
}
Panggilan asinkron
Contoh permintaan
import os
import base64
import mimetypes
import urllib.request
import dashscope
from dashscope.aigc.image_generation import ImageGeneration
from dashscope.api_entities.dashscope_response import Message
from http import HTTPStatus
# base_url berikut untuk wilayah Singapura. Ganti {WorkspaceId} dengan ID ruang kerja Bailian Anda. base_url berbeda-beda per 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 Kunci API Model Studio Anda: api_key="sk-xxx"
# Kunci API berbeda-beda per wilayah. Untuk mendapatkan Kunci API, kunjungi https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY")
# --- Fungsi 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("Format gambar tidak didukung atau tidak dikenali.")
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:
Tiga metode input gambar disediakan di bawah ini. Pilih salah satu.
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 privat atau skenario yang memerlukan transmisi terenkripsi.
"""
# [Metode 1] Gunakan URL gambar publik
image_1 = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/pjeqdf/car.webp"
image_2 = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/xsunlm/paint.webp"
# [Metode 2] Gunakan file lokal (mendukung path absolut dan relatif)
# image_1 = "file:///path/to/your/car.png"
# image_2 = "file:///path/to/your/paint.png"
# [Metode 3] Gunakan gambar Base64-encoded
# image_1 = encode_file("/path/to/your/car.png")
# image_2 = encode_file("/path/to/your/paint.png")
# Buat tugas asinkron.
def create_async_task():
print("Creating async task...")
message = Message(
role="user",
content=[
{"text": "Spray the graffiti from image 2 onto the car in image 1."},
{"image": image_1},
{"image": image_2},
],
)
response = ImageGeneration.async_call(
model="wan2.7-image-pro",
api_key=api_key,
messages=[message],
watermark=False,
n=1,
size="2K", # wan2.7-image-pro mendukung resolusi 4K hanya untuk skenario pembuatan text-to-image. Pengeditan gambar dan pembuatan kolase mendukung resolusi maksimal 2K.
)
if response.status_code == 200:
print("Task created successfully:", response)
return response
else:
raise Exception(f"Failed to create task: {response.code} - {response.message}")
# Tunggu hingga tugas selesai.
def wait_for_completion(task_response):
print("Waiting for task completion...")
status = ImageGeneration.wait(task=task_response, api_key=api_key)
if status.output.task_status == "SUCCEEDED":
print("Task succeeded!")
# Ekstrak URL gambar hasil dan simpan gambar ke file lokal.
for i, choice in enumerate(status.output.choices):
for j, content in enumerate(choice["message"]["content"]):
if content.get("type") == "image":
image_url = content["image"]
file_name = f"output_{i}_{j}.png"
# URL hasil berlaku selama 24 jam. Unduh gambar tepat waktu.
urllib.request.urlretrieve(image_url, file_name)
print(f"Gambar disimpan ke {file_name}")
else:
raise Exception(f"Task failed with status: {status.output.task_status}")
# Dapatkan informasi tentang tugas asinkron.
def fetch_task_status(task):
print("Fetching task status...")
status = ImageGeneration.fetch(task=task, api_key=api_key)
if status.status_code == HTTPStatus.OK:
print("Task status:", status.output.task_status)
print("Response details:", status)
else:
print(f"Failed to fetch status: {status.code} - {status.message}")
# Batalkan tugas asinkron.
def cancel_task(task):
print("Canceling task...")
response = ImageGeneration.cancel(task=task, api_key=api_key)
if response.status_code == HTTPStatus.OK:
print("Task canceled successfully:", response.output.task_status)
else:
print(f"Failed to cancel task: {response.code} - {response.message}")
# Alur eksekusi utama.
if __name__ == "__main__":
task = create_async_task()
wait_for_completion(task)
Contoh respons
- Contoh respons untuk membuat tugas
{
"status_code": 200,
"request_id": "4fb3050f-de57-4a24-84ff-e37ee5xxxxxx",
"code": "",
"message": "",
"output": {
"text": null,
"finish_reason": null,
"choices": null,
"audio": null,
"task_id": "127ec645-118f-4884-955d-0eba8dxxxxxx",
"task_status": "PENDING"
},
"usage": {
"input_tokens": 0,
"output_tokens": 0,
"characters": 0
}
}
-
Contoh respons untuk menanyakan hasil tugas
URL berlaku selama 24 jam. Segera unduh gambar.
{
"status_code": 200,
"request_id": "3b99aae5-d26f-9059-8dd0-ee9ca4804xxx",
"code": null,
"message": "",
"output": {
"text": null,
"finish_reason": null,
"choices": [
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": [
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
}
]
}
}
],
"audio": null,
"task_id": "127ec645-118f-4884-955d-0eba8dxxxxxx",
"task_status": "SUCCEEDED",
"submit_time": "2026-03-31 22:58:47.646",
"scheduled_time": "2026-03-31 22:58:47.683",
"end_time": "2026-03-31 22:58:59.642",
"finished": true
},
"usage": {
"input_tokens": 18711,
"output_tokens": 2,
"characters": 0,
"size": "2985*1405",
"total_tokens": 18713,
"image_count": 1
}
}
Image set generation
Panggilan sinkron
Contoh permintaan
import os
import base64
import mimetypes
import urllib.request
import dashscope
from dashscope.aigc.image_generation import ImageGeneration
from dashscope.api_entities.dashscope_response import Message
# base_url berikut untuk wilayah Singapura. Ganti {WorkspaceId} dengan ID ruang kerja Bailian Anda. base_url berbeda-beda per 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 Kunci API Model Studio Anda: api_key="sk-xxx"
# Kunci API berbeda-beda per wilayah. Untuk mendapatkan Kunci API, kunjungi: https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY")
# --- Fungsi 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("Format gambar tidak didukung atau tidak dikenali")
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}"
"""
Deskripsi metode input gambar (untuk pembuatan sequence gambar image-to-image):
Pilih salah satu dari tiga metode input gambar 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 privat atau skenario yang memerlukan transmisi terenkripsi.
"""
# [Metode 1] Gunakan URL gambar publik
# image_1 = "https://img.alicdn.com/imgextra/i4/O1CN01IM44WN23dq5uY1yla_!!6000000007279-49-tps-1024-1024.webp"
# [Metode 2] Gunakan file lokal (mendukung path absolut dan relatif)
# image_1 = "file:///path/to/your/image.png"
# [Metode 3] Gunakan gambar Base64-encoded
# image_1 = encode_file("/path/to/your/image.png")
message = Message(
role="user",
content=[
{
"text": "A cinematic image sequence featuring the same stray orange cat, whose features must be consistent across all images. First image: In spring, the orange cat weaves through blooming cherry blossom trees. Second image: In summer, the orange cat cools off in the shade of a tree on an old street. Third image: In autumn, the orange cat walks on a carpet of golden fallen leaves. Fourth image: In winter, the orange cat leaves footprints as it walks on the snow."
}
# Untuk pembuatan sequence gambar image-to-image: Hapus komentar baris berikut dan beri komentar pada teks biasa di atas.
# {"text": "Generate a four-seasons image sequence based on the style of the reference image"},
# {"image": image_1}
],
)
print("----sync call, please wait a moment----")
rsp = ImageGeneration.call(
model="wan2.7-image-pro",
api_key=api_key,
messages=[message],
enable_sequential=True,
n=4,
size="2K", # wan2.7-image-pro mendukung resolusi 4K hanya dalam skenario text-to-image. Pengeditan gambar dan pembuatan sequence gambar mendukung resolusi maksimal 2K.
)
# Ekstrak URL gambar hasil dan simpan gambar secara lokal.
if rsp.status_code == 200:
for i, choice in enumerate(rsp.output.choices):
for j, content in enumerate(choice["message"]["content"]):
if content.get("type") == "image":
image_url = content["image"]
file_name = f"output_{i}_{j}.png"
# URL hasil berlaku selama 24 jam. Unduh gambar tepat waktu.
urllib.request.urlretrieve(image_url, file_name)
print(f"Gambar disimpan ke {file_name}")
else:
print(f"Gagal: status_code={rsp.status_code}, message={rsp.message}")
Contoh respons
URL berlaku selama 24 jam. Segera unduh gambar.
{
"status_code": 200,
"request_id": "56e318fd-ed60-99e8-8ca1-cdef25ca4xxx",
"code": "",
"message": "",
"output": {
"text": null,
"finish_reason": null,
"choices": [
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": [
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
},
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
},
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
},
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
}
]
}
}
],
"audio": null,
"finished": true
},
"usage": {
"input_tokens": 720,
"output_tokens": 11,
"characters": 0,
"image_count": 4,
"size": "2048*2048",
"total_tokens": 731
}
}
Panggilan asinkron
Contoh permintaan
import os
import base64
import mimetypes
import urllib.request
import dashscope
from dashscope.aigc.image_generation import ImageGeneration
from dashscope.api_entities.dashscope_response import Message
# base_url berikut untuk wilayah Singapura. Ganti {WorkspaceId} dengan ID ruang kerja Bailian Anda. base_url berbeda-beda per wilayah.
dashscope.base_http_api_url = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1"
# Jika Anda belum mengonfigurasi variabel lingkungan DASHSCOPE_API_KEY, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
# Kunci API berbeda-beda per wilayah. Untuk mendapatkan Kunci API, kunjungi: https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY")
# --- Fungsi encoding Base64 ---
# Skema URI data 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("Format gambar tidak didukung atau tidak dikenali")
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}"
"""
Deskripsi metode input gambar (untuk pembuatan sequence gambar image-to-image):
Tiga metode input gambar berikut disediakan. Pilih salah satunya.
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 privat atau skenario yang memerlukan transmisi terenkripsi.
"""
# [Metode 1] Gunakan URL gambar publik
# image_1 = "https://img.alicdn.com/imgextra/i4/O1CN01IM44WN23dq5uY1yla_!!6000000007279-49-tps-1024-1024.webp"
# [Metode 2] Gunakan file lokal (path absolut dan relatif didukung)
# image_1 = "file:///path/to/your/image.png"
# [Metode 3] Gunakan gambar Base64-encoded
# image_1 = encode_file("/path/to/your/image.png")
def main():
message = Message(
role="user",
content=[
{
"text": "A cinematic sequence of images documenting the same stray orange cat, whose features must remain consistent across all images. Image 1: In spring, the cat weaves through blooming cherry blossom trees. Image 2: In summer, the cat cools off in the shade of trees on an old street. Image 3: In autumn, the cat steps on a carpet of golden fallen leaves. Image 4: In winter, the cat walks on the snow, leaving footprints."
}
# Skenario pembuatan sequence gambar image-to-image: Hapus komentar baris berikut dan beri komentar pada teks biasa di atas.
# {"text": "Generate a sequence of four seasonal images based on the style of the reference image."},
# {"image": image_1}
],
)
# Kirim tugas asinkron
print("Submitting an asynchronous task...")
response = ImageGeneration.async_call(
model="wan2.7-image-pro",
api_key=api_key,
messages=[message],
enable_sequential=True,
n=4,
size="2K", # wan2.7-image-pro mendukung resolusi 4K hanya dalam skenario text-to-image. Pengeditan gambar dan pembuatan sequence gambar mendukung resolusi maksimal 2K.
)
if response.status_code == 200:
print(f"Task submitted successfully. Task ID: {response.output.task_id}")
# Tunggu hingga tugas selesai
status = ImageGeneration.wait(task=response, api_key=api_key)
if status.output.task_status == "SUCCEEDED":
print("Task completed!")
# Ekstrak URL gambar hasil dan simpan ke perangkat lokal.
for i, choice in enumerate(status.output.choices):
for j, content in enumerate(choice["message"]["content"]):
if content.get("type") == "image":
image_url = content["image"]
file_name = f"output_{i}_{j}.png"
# URL hasil berlaku selama 24 jam. Unduh gambar tepat waktu.
urllib.request.urlretrieve(image_url, file_name)
print(f"Gambar disimpan ke {file_name}")
else:
print(f"Task failed. Status: {status.output.task_status}")
else:
print(f"Failed to create the task: {response.code} - {response.message}")
if __name__ == "__main__":
try:
main()
except Exception as e:
print(f"Error: {e}")
Contoh respons
- Contoh respons untuk membuat tugas
{
"status_code": 200,
"request_id": "4fb3050f-de57-4a24-84ff-e37ee5xxxxxx",
"code": "",
"message": "",
"output": {
"text": null,
"finish_reason": null,
"choices": null,
"audio": null,
"task_id": "77093787-a217-4c29-9cd4-ca7b5ac86xxx",
"task_status": "PENDING"
},
"usage": {
"input_tokens": 0,
"output_tokens": 0,
"characters": 0
}
}
-
Contoh respons untuk menanyakan hasil tugas
URL berlaku selama 24 jam. Segera unduh gambar.
{
"status_code": 200,
"request_id": "56e318fd-ed60-99e8-8ca1-cdef25ca4xxx",
"code": "",
"message": "",
"output": {
"text": null,
"finish_reason": null,
"choices": [
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": [
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
},
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
},
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
},
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
}
]
}
}
],
"audio": null,
"task_id": "77093787-a217-4c29-9cd4-ca7b5ac86xxx",
"task_status": "SUCCEEDED",
"submit_time": "2026-03-31 23:04:46.166",
"scheduled_time": "2026-03-31 23:04:46.208",
"end_time": "2026-03-31 23:05:11.664",
"finished": true
},
"usage": {
"input_tokens": 720,
"output_tokens": 11,
"characters": 0,
"size": "2048*2048",
"total_tokens": 731,
"image_count": 4
}
}
Java SDK
Nama parameter SDK sebagian besar konsisten dengan HTTP API.
Tugas pembuatan gambar bisa memakan waktu, sehingga SDK membungkus alur kerja asinkron HTTP. Panggilan sinkron dan asinkron didukung.
PentingPastikan versi DashScope Java SDK Anda adalah 2.22.13 atau lebih baru.
Singapura
https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1
Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja Anda yang sebenarnya.
China (Beijing)
https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1
Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja Anda yang sebenarnya.
Image editing
Panggilan sinkron
Contoh permintaan
import com.alibaba.dashscope.aigc.imagegeneration.*;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.utils.JsonUtils;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.Arrays;
import java.util.Base64;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/**
* Contoh Panggilan Sinkron Pengeditan Gambar wan2.7-image-pro
*/
public class Main {
static {
// URL berikut untuk wilayah Singapura. Ganti {WorkspaceId} dengan ID ruang kerja Bailian Anda. base_url berbeda-beda per wilayah.
Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
// Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey="sk-xxx"
// Kunci API berbeda-beda per wilayah. Untuk mendapatkan Kunci API, kunjungi https://www.alibabacloud.com/help/en/model-studio/get-api-key
static String apiKey = System.getenv("DASHSCOPE_API_KEY");
// --- Fungsi encoding Base64 ---
// Format encoding Base64: data:{MIME_type};base64,{base64_data}
public static String encodeFile(String filePath) throws IOException {
byte[] fileContent = Files.readAllBytes(Paths.get(filePath));
String base64String = Base64.getEncoder().encodeToString(fileContent);
String mimeType = Files.probeContentType(Paths.get(filePath));
return "data:" + mimeType + ";base64," + base64String;
}
public static void basicCall() throws ApiException, NoApiKeyException, UploadFileException, IOException {
/*
* Deskripsi metode input gambar:
* Tiga metode input gambar disediakan di bawah ini. Pilih salah satu.
* 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 privat atau skenario yang memerlukan transmisi terenkripsi.
*/
// Metode 1: Gunakan URL gambar publik.
String image1 = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/pjeqdf/car.webp";
String image2 = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/xsunlm/paint.webp";
// Metode 2: Gunakan file lokal. Path absolut dan relatif didukung.
// Format: file:// + path file
// String image1 = "file:///path/to/your/car.png";
// String image2 = "file:///path/to/your/paint.png";
// Metode 3: Gunakan gambar Base64-encoded.
// String image1 = encodeFile("/path/to/your/car.png");
// String image2 = encodeFile("/path/to/your/paint.png");
// Bangun pesan input multi-gambar.
ImageGenerationMessage message = ImageGenerationMessage.builder()
.role("user")
.content(Arrays.asList(
// Input multi-gambar didukung. Anda dapat memberikan beberapa gambar referensi.
Collections.singletonMap("text", "Spray the graffiti from image 2 onto the car in image 1"),
Collections.singletonMap("image", image1),
Collections.singletonMap("image", image2)
)).build();
ImageGenerationParam param = ImageGenerationParam.builder()
.apiKey(apiKey)
.model("wan2.7-image-pro")
.messages(Collections.singletonList(message))
.n(1)
.size("2K") // Untuk wan2.7-image-pro, hanya skenario pembuatan text-to-image yang mendukung resolusi 4K. Pengeditan gambar dan pembuatan kolase mendukung resolusi maksimal 2K.
.build();
ImageGeneration imageGeneration = new ImageGeneration();
ImageGenerationResult result = null;
try {
System.out.println("---sync call for image editing, please wait a moment----");
result = imageGeneration.call(param);
} catch (ApiException | NoApiKeyException | UploadFileException e) {
throw new RuntimeException(e.getMessage());
}
// Ekstrak URL gambar hasil dan simpan ke file lokal.
for (int i = 0; i < result.getOutput().getChoices().size(); i++) {
List<Map<String, Object>> contents = result.getOutput().getChoices().get(i)
.getMessage().getContent();
for (int j = 0; j < contents.size(); j++) {
if ("image".equals(contents.get(j).get("type"))) {
String imageUrl = (String) contents.get(j).get("image");
String fileName = "output_" + i + "_" + j + ".png";
// URL hasil berlaku selama 24 jam. Unduh gambar tepat waktu.
try (InputStream in = new URL(imageUrl).openStream()) {
Files.copy(in, Paths.get(fileName), StandardCopyOption.REPLACE_EXISTING);
}
System.out.println("Gambar disimpan ke " + fileName);
}
}
}
}
public static void main(String[] args) throws ApiException, NoApiKeyException, UploadFileException, IOException {
basicCall();
}
}
Contoh respons
URL berlaku selama 24 jam. Simpan tepat waktu.
{
"requestId": "1bf6173a-e8de-9f75-94d3-5e618f875xxx",
"usage": {
"input_tokens": 18790,
"output_tokens": 2,
"total_tokens": 18792,
"image_count": 1,
"size": "2985*1405"
},
"output": {
"choices": [
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": [
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
}
]
}
}
],
"finished": true
},
"status_code": 200,
"code": "",
"message": ""
}
Panggilan asinkron
Contoh permintaan
import com.alibaba.dashscope.aigc.imagegeneration.*;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.utils.JsonUtils;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.Arrays;
import java.util.Base64;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/**
* Contoh Pemanggilan Asinkron Pengeditan Gambar wan2.7-image-pro
*/
public class Main {
static {
// URL berikut untuk wilayah Singapura. Ganti {WorkspaceId} dengan ID ruang kerja Bailian Anda. base_url berbeda-beda per wilayah.
Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
// Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey="sk-xxx"
// Kunci API berbeda-beda per wilayah. Untuk mendapatkan Kunci API, kunjungi: https://www.alibabacloud.com/help/en/model-studio/get-api-key
static String apiKey = System.getenv("DASHSCOPE_API_KEY");
// --- Fungsi encoding Base64 ---
// Format encoding Base64 adalah data:{MIME_type};base64,{base64_data}
public static String encodeFile(String filePath) throws IOException {
byte[] fileContent = Files.readAllBytes(Paths.get(filePath));
String base64String = Base64.getEncoder().encodeToString(fileContent);
String mimeType = Files.probeContentType(Paths.get(filePath));
return "data:" + mimeType + ";base64," + base64String;
}
public static void asyncCall() throws ApiException, NoApiKeyException, UploadFileException, IOException {
/*
* Deskripsi metode input gambar:
* Tiga metode input gambar berikut disediakan. Anda dapat memilih salah satunya.
* 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 skenario yang melibatkan gambar privat atau memerlukan transmisi terenkripsi.
*/
// [Metode 1] Gunakan URL gambar publik
String image1 = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/pjeqdf/car.webp";
String image2 = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/xsunlm/paint.webp";
// [Metode 2] Gunakan file lokal (mendukung path absolut dan relatif)
// Format yang diperlukan: file:// + path file
// String image1 = "file:///path/to/your/car.png";
// String image2 = "file:///path/to/your/paint.png";
// [Metode 3] Gunakan gambar Base64-encoded
// String image1 = encodeFile("/path/to/your/car.png");
// String image2 = encodeFile("/path/to/your/paint.png");
// Bangun pesan input multi-gambar
ImageGenerationMessage message = ImageGenerationMessage.builder()
.role("user")
.content(Arrays.asList(
// Mendukung input multi-gambar. Anda dapat memberikan beberapa gambar referensi.
Collections.singletonMap("text", "Spray-paint the graffiti from image 2 onto the car in image 1"),
Collections.singletonMap("image", image1),
Collections.singletonMap("image", image2)
)).build();
ImageGenerationParam param = ImageGenerationParam.builder()
.apiKey(apiKey)
.model("wan2.7-image-pro")
.n(1)
.size("2K") // Model wan2.7-image-pro hanya mendukung resolusi 4K untuk pembuatan text-to-image. Untuk pengeditan gambar dan pembuatan gambar komposit, resolusi maksimal yang didukung adalah 2K.
.messages(Arrays.asList(message))
.build();
ImageGeneration imageGeneration = new ImageGeneration();
ImageGenerationResult result = null;
try {
System.out.println("---async call for image editing, creating task----");
result = imageGeneration.asyncCall(param);
} catch (ApiException | NoApiKeyException | UploadFileException e) {
throw new RuntimeException(e.getMessage());
}
System.out.println("Hasil pembuatan tugas:");
System.out.println(JsonUtils.toJson(result));
String taskId = result.getOutput().getTaskId();
// Tunggu hingga tugas selesai
waitTask(taskId);
}
public static void waitTask(String taskId) throws ApiException, NoApiKeyException, IOException {
ImageGeneration imageGeneration = new ImageGeneration();
System.out.println("\n---waiting for task completion----");
ImageGenerationResult result = imageGeneration.wait(taskId, apiKey);
// Ambil URL gambar hasil dan simpan ke file lokal
for (int i = 0; i < result.getOutput().getChoices().size(); i++) {
List<Map<String, Object>> contents = result.getOutput().getChoices().get(i)
.getMessage().getContent();
for (int j = 0; j < contents.size(); j++) {
if ("image".equals(contents.get(j).get("type"))) {
String imageUrl = (String) contents.get(j).get("image");
String fileName = "output_" + i + "_" + j + ".png";
// URL hasil berlaku selama 24 jam. Unduh gambar tepat waktu.
try (InputStream in = new URL(imageUrl).openStream()) {
Files.copy(in, Paths.get(fileName), StandardCopyOption.REPLACE_EXISTING);
}
System.out.println("Gambar disimpan ke " + fileName);
}
}
}
}
public static void main(String[] args) throws ApiException, NoApiKeyException, UploadFileException, IOException {
asyncCall();
}
}
Contoh respons
- Contoh respons untuk membuat tugas
{
"requestId": "ccf4b2f4-bf30-9e13-9461-3a28c6a7bxxx",
"output": {
"task_id": "8811b4a4-00ac-4aa2-a2fd-017d3b90cxxx",
"task_status": "PENDING"
},
"status_code": 200,
"code": "",
"message": ""
}
-
Contoh respons untuk menanyakan hasil tugas
URL berlaku selama 24 jam. Simpan tepat waktu.
{
"requestId": "60a08540-f1c1-9e76-8cd3-d5949db8cxxx",
"usage": {
"input_tokens": 18711,
"output_tokens": 2,
"total_tokens": 18713,
"image_count": 1,
"size": "2985*1405"
},
"output": {
"choices": [
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": [
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
}
]
}
}
],
"task_id": "8811b4a4-00ac-4aa2-a2fd-017d3b90cxxx",
"task_status": "SUCCEEDED",
"finished": true,
"submit_time": "2026-03-31 19:57:58.840",
"scheduled_time": "2026-03-31 19:57:58.877",
"end_time": "2026-03-31 19:58:11.563"
},
"status_code": 200,
"code": "",
"message": ""
}
Image set generation
Panggilan sinkron
Contoh permintaan
import com.alibaba.dashscope.aigc.imagegeneration.*;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.utils.JsonUtils;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.Arrays;
import java.util.Base64;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/**
* Contoh penggunaan wan2.7-image-pro untuk pembuatan seri gambar melalui panggilan sinkron di wilayah Singapura.
*/
public class Main {
static {
// URL berikut untuk wilayah Singapura. Ganti {WorkspaceId} dengan ID ruang kerja Bailian Anda. base_url berbeda-beda per wilayah.
Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
// Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey="sk-xxx"
// Kunci API berbeda-beda per wilayah. Untuk mendapatkan Kunci API, kunjungi: https://www.alibabacloud.com/help/en/model-studio/get-api-key
static String apiKey = System.getenv("DASHSCOPE_API_KEY");
// --- Fungsi encoding Base64 ---
// Format untuk encoding Base64 adalah data:{MIME_type};base64,{base64_data}
public static String encodeFile(String filePath) throws IOException {
byte[] fileContent = Files.readAllBytes(Paths.get(filePath));
String base64String = Base64.getEncoder().encodeToString(fileContent);
String mimeType = Files.probeContentType(Paths.get(filePath));
return "data:" + mimeType + ";base64," + base64String;
}
public static void basicCall() throws ApiException, NoApiKeyException, UploadFileException, IOException {
/*
* Metode input gambar (untuk pembuatan seri gambar image-to-image):
* Tiga metode input gambar disediakan di bawah ini. Pilih salah satu.
* 1. URL publik: Cocok untuk gambar yang sudah dapat diakses publik.
* 2. File lokal: Cocok untuk pengembangan dan pengujian lokal.
* 3. Encoding Base64: Cocok untuk gambar privat atau skenario yang memerlukan transmisi terenkripsi.
*/
// Metode 1: Gunakan URL gambar publik
// String image1 = "https://img.alicdn.com/imgextra/i4/O1CN01IM44WN23dq5uY1yla_!!6000000007279-49-tps-1024-1024.webp";
// Metode 2: Gunakan file lokal (mendukung path absolut dan relatif)
// Format: file:// + path file
// String image1 = "file:///path/to/your/image.png";
// Metode 3: Gunakan gambar Base64-encoded
// String image1 = encodeFile("/path/to/your/image.png");
// Bangun pesan input teks. Ini mendukung pembuatan seri text-to-image dan image-to-image. Contoh ini menunjukkan pembuatan seri text-to-image.
ImageGenerationMessage message = ImageGenerationMessage.builder()
.role("user")
.content(Collections.singletonList(
Collections.singletonMap("text", "A cinematic image series documenting the same stray orange cat, whose features must remain consistent. First image: In spring, the cat weaves through blooming cherry blossom trees. Second image: In summer, the cat cools off in the shade on an old street. Third image: In autumn, the cat walks on a carpet of golden fallen leaves. Fourth image: In winter, the cat leaves footprints in the snow.")
)).build();
// Untuk pembuatan seri image-to-image, hapus komentar kode berikut dan beri komentar pada pembangun pesan teks biasa di atas.
// ImageGenerationMessage message = ImageGenerationMessage.builder()
// .role("user")
// .content(Arrays.asList(
// Collections.singletonMap("text", "Generate a four-season image series based on the style of the reference image."),
// Collections.singletonMap("image", image1)
// )).build();
ImageGenerationParam param = ImageGenerationParam.builder()
.apiKey(apiKey)
.model("wan2.7-image-pro")
.messages(Collections.singletonList(message))
.enableSequential(true)
.n(4)
.size("2K") // Model wan2.7-image-pro hanya mendukung resolusi 4K untuk pembuatan text-to-image. Pengeditan gambar dan pembuatan seri gambar mendukung resolusi maksimal 2K.
.build();
ImageGeneration imageGeneration = new ImageGeneration();
ImageGenerationResult result = null;
try {
System.out.println("----sync call, please wait a moment----");
result = imageGeneration.call(param);
} catch (ApiException | NoApiKeyException | UploadFileException e) {
throw new RuntimeException(e.getMessage());
}
// Ekstrak URL gambar hasil dan simpan ke direktori lokal.
for (int i = 0; i < result.getOutput().getChoices().size(); i++) {
List<Map<String, Object>> contents = result.getOutput().getChoices().get(i)
.getMessage().getContent();
for (int j = 0; j < contents.size(); j++) {
if ("image".equals(contents.get(j).get("type"))) {
String imageUrl = (String) contents.get(j).get("image");
String fileName = "output_" + i + "_" + j + ".png";
// URL hasil berlaku selama 24 jam. Pastikan untuk mengunduhnya tepat waktu.
try (InputStream in = new URL(imageUrl).openStream()) {
Files.copy(in, Paths.get(fileName), StandardCopyOption.REPLACE_EXISTING);
}
System.out.println("Gambar disimpan ke " + fileName);
}
}
}
}
public static void main(String[] args) throws ApiException, NoApiKeyException, UploadFileException, IOException {
basicCall();
}
}
Contoh respons
URL berlaku selama 24 jam. Simpan tepat waktu.
{
"requestId": "4678c314-b37a-91c9-a2ae-2d3cd54bbxxx",
"usage": {
"input_tokens": 720,
"output_tokens": 11,
"total_tokens": 731,
"image_count": 4,
"size": "2048*2048"
},
"output": {
"choices": [
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": [
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
},
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
},
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
},
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
}
]
}
}
],
"finished": true
},
"status_code": 200,
"code": "",
"message": ""
}
Panggilan asinkron
Contoh permintaan
import com.alibaba.dashscope.aigc.imagegeneration.*;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.utils.JsonUtils;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.Arrays;
import java.util.Base64;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/**
* Contoh Pemanggilan Asinkron Pembuatan Set Gambar wan2.7-image-pro (Wilayah Singapura)
*/
public class Main {
static {
// URL berikut untuk wilayah Singapura. Ganti {WorkspaceId} dengan ID ruang kerja Bailian Anda. base_url berbeda-beda per wilayah.
Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
// Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey="sk-xxx"
// Kunci API berbeda-beda per wilayah. Untuk mendapatkan Kunci API, kunjungi https://www.alibabacloud.com/help/en/model-studio/get-api-key
static String apiKey = System.getenv("DASHSCOPE_API_KEY");
// --- Fungsi encoding Base64 ---
// Format encoding Base64 adalah data:{MIME_type};base64,{base64_data}
public static String encodeFile(String filePath) throws IOException {
byte[] fileContent = Files.readAllBytes(Paths.get(filePath));
String base64String = Base64.getEncoder().encodeToString(fileContent);
String mimeType = Files.probeContentType(Paths.get(filePath));
return "data:" + mimeType + ";base64," + base64String;
}
public static ImageGenerationResult waitTask(String taskId)
throws ApiException, NoApiKeyException {
ImageGeneration imageGeneration = new ImageGeneration();
return imageGeneration.wait(taskId, apiKey);
}
public static void asyncCall() throws ApiException, NoApiKeyException, UploadFileException, IOException {
/*
* Deskripsi metode input gambar (untuk skenario pembuatan set gambar image-to-image):
* Tiga metode input gambar berikut disediakan. Anda dapat memilih salah satunya.
* 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 privat atau skenario yang memerlukan transmisi terenkripsi.
*/
// [Metode 1] Gunakan URL gambar publik
// String image1 = "https://img.alicdn.com/imgextra/i4/O1CN01IM44WN23dq5uY1yla_!!6000000007279-49-tps-1024-1024.webp";
// [Metode 2] Gunakan file lokal (mendukung path absolut dan relatif)
// Format: file:// + path file
// String image1 = "file:///path/to/your/image.png";
// [Metode 3] Gunakan gambar Base64-encoded
// String image1 = encodeFile("/path/to/your/image.png");
// Bangun pesan input teks (mendukung pembuatan set text-to-image dan image-to-image. Contoh ini menggunakan pembuatan set text-to-image.)
ImageGenerationMessage message = ImageGenerationMessage.builder()
.role("user")
.content(Collections.singletonList(
Collections.singletonMap("text", "A cinematic image set documenting the same stray orange cat. Its features must be consistent across all images. Image 1: In spring, the orange cat weaves through blooming cherry blossom trees. Image 2: In summer, the orange cat cools off in the shade of a tree on an old street. Image 3: In autumn, the orange cat steps on a carpet of golden fallen leaves. Image 4: In winter, the orange cat leaves footprints as it walks on the snow.")
)).build();
// Untuk skenario pembuatan set image-to-image: hapus komentar kode berikut dan beri komentar pada konstruksi teks biasa di atas.
// ImageGenerationMessage message = ImageGenerationMessage.builder()
// .role("user")
// .content(Arrays.asList(
// Collections.singletonMap("text", "Generate an image set of the four seasons based on the style of the reference image."),
// Collections.singletonMap("image", image1)
// )).build();
ImageGenerationParam param = ImageGenerationParam.builder()
.apiKey(apiKey)
.model("wan2.7-image-pro")
.messages(Collections.singletonList(message))
.enableSequential(true)
.n(4)
.size("2K") // Model wan2.7-image-pro hanya mendukung resolusi 4K untuk pembuatan text-to-image. Pengeditan gambar dan pembuatan set gambar mendukung resolusi maksimal 2K.
.build();
ImageGeneration imageGeneration = new ImageGeneration();
ImageGenerationResult taskResult = null;
try {
System.out.println("----async call, creating task----");
taskResult = imageGeneration.asyncCall(param);
} catch (ApiException | NoApiKeyException | UploadFileException e) {
throw new RuntimeException(e.getMessage());
}
System.out.println("Tugas dibuat: " + JsonUtils.toJson(taskResult));
// Tunggu hingga tugas selesai.
String taskId = taskResult.getOutput().getTaskId();
ImageGenerationResult result = waitTask(taskId);
// Ambil URL gambar hasil dan simpan ke direktori lokal.
for (int i = 0; i < result.getOutput().getChoices().size(); i++) {
List<Map<String, Object>> contents = result.getOutput().getChoices().get(i)
.getMessage().getContent();
for (int j = 0; j < contents.size(); j++) {
if ("image".equals(contents.get(j).get("type"))) {
String imageUrl = (String) contents.get(j).get("image");
String fileName = "output_" + i + "_" + j + ".png";
// URL hasil berlaku selama 24 jam. Unduh gambar tepat waktu.
try (InputStream in = new URL(imageUrl).openStream()) {
Files.copy(in, Paths.get(fileName), StandardCopyOption.REPLACE_EXISTING);
}
System.out.println("Gambar disimpan ke " + fileName);
}
}
}
}
public static void main(String[] args) throws ApiException, NoApiKeyException, UploadFileException, IOException {
asyncCall();
}
}
Contoh respons
- Contoh respons untuk membuat tugas
{
"requestId": "7d026dc1-e8c9-9caa-84ac-e82e2da97xxx",
"output": {
"task_id": "2de18c56-c151-4b80-8105-1d164733exxx",
"task_status": "PENDING"
},
"status_code": 200,
"code": "",
"message": ""
}
-
Contoh respons untuk menanyakan hasil tugas
URL berlaku selama 24 jam. Simpan tepat waktu.
{
"requestId": "daea7295-4ce0-928a-9a11-4d2bea058xxx",
"usage": {
"input_tokens": 720,
"output_tokens": 11,
"total_tokens": 731,
"image_count": 4,
"size": "2048*2048"
},
"output": {
"choices": [
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": [
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
},
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
},
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
},
{
"image": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/xxxxxx.png?Expires=xxxxxx",
"type": "image"
}
]
}
}
],
"task_id": "2de18c56-c151-4b80-8105-1d164733exxx",
"task_status": "SUCCEEDED",
"finished": true,
"submit_time": "2026-03-31 19:49:53.124",
"scheduled_time": "2026-03-31 19:49:53.175",
"end_time": "2026-03-31 19:50:53.160"
},
"status_code": 200,
"code": "",
"message": ""
}
Penagihan dan pembatasan laju
- Untuk kuota gratis dan harga satuan model, lihat Harga model.
- Untuk pembatasan laju model, lihat Wanxiang.
- Detail penagihan: Anda ditagih berdasarkan jumlah gambar yang berhasil dihasilkan. Panggilan gagal dan error pemrosesan tidak dikenai biaya atau mengurangi kuota gratis untuk pengguna baru Anda.
Kode error
Jika pemanggilan model gagal dan mengembalikan pesan error, lihat Kode error untuk penyelesaian.