Edit gambar menggunakan instruksi teks dengan model Wan. Mendukung input/output multi-gambar, fusi gambar, pelestarian subjek, dan deteksi objek.
Mulai
Hasilkan gambar yang telah diedit dari dua gambar input dan sebuah prompt teks dengan wan2.7-image-pro.
Prompt: Semprotkan grafiti dari gambar 2 ke mobil di gambar 1
Input image 1 | Input image 2 | Output image (wan2.7-image-pro) |
|
|
|
Sebelum melakukan panggilan, dapatkan Kunci API dan ekspor Kunci API sebagai variabel lingkungan. Untuk melakukan panggilan menggunakan SDK, instal SDK DashScope.
Panggilan sinkron
Pastikan versi SDK Python DashScope adalah 1.25.15 atau lebih baru, dan versi SDK Java DashScope adalah 2.22.13 atau lebih baru.
Python
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
# Berikut ini adalah URL dasar untuk wilayah Singapura. URL dasar berbeda-beda tergantung 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 tergantung 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 ini tiga metode input gambar. Anda hanya 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 jalur absolut dan relatif)
# image_1 = "file:///path/to/your/car.png"
# image_2 = "file:///path/to/your/paint.png"
# [Metode 3] Gunakan gambar yang di-encode Base64
# image_1 = encode_file("/path/to/your/car.png")
# image_2 = encode_file("/path/to/your/paint.png")
message = Message(
role="user",
content=[
{"text": "Semprotkan grafiti dari gambar 2 ke mobil di gambar 1"},
{"image": image_1},
{"image": image_2},
],
)
print("----panggilan sinkron, mohon tunggu sebentar----")
rsp = ImageGeneration.call(
model="wan2.7-image-pro",
api_key=api_key,
messages=[message],
watermark=False,
n=1,
size="2K", # wan2.7-image-pro hanya mendukung resolusi 4K untuk skenario generasi teks-ke-gambar. Pengeditan gambar dan generasi multi-gambar mendukung resolusi maksimum 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. Unduh gambar segera.
{
"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
}
}
Java
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;
/**
* Pengeditan Gambar wan2.7-image-pro - Contoh Panggilan Sinkron
*/
public class Main {
static {
// URL berikut adalah untuk wilayah Singapura. URL dasar berbeda-beda tergantung 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 tergantung 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. Jalur absolut dan relatif didukung.
// Format: file:// + jalur file
// String image1 = "file:///path/to/your/car.png";
// String image2 = "file:///path/to/your/paint.png";
// Metode 3: Gunakan gambar yang di-encode Base64.
// 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", "Semprotkan grafiti dari gambar 2 ke mobil di gambar 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 generasi teks-ke-gambar yang mendukung resolusi 4K. Pengeditan gambar dan generasi kolase mendukung resolusi maksimum 2K.
.build();
ImageGeneration imageGeneration = new ImageGeneration();
ImageGenerationResult result = null;
try {
System.out.println("---panggilan sinkron untuk pengeditan gambar, mohon tunggu sebentar----");
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 segera.
{
"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": ""
}
curl
Contoh permintaan
curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--data '{
"model": "wan2.7-image-pro",
"input": {
"messages": [
{
"role": "user",
"content": [
{"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/pjeqdf/car.webp"},
{"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/xsunlm/paint.webp"},
{"text": "Semprotkan grafiti dari gambar 2 ke mobil di gambar 1"}
]
}
]
},
"parameters": {
"size": "2K",
"n": 1,
"watermark": false
}
}'
Contoh respons
{
"output": {
"choices": [
{
"finish_reason": "stop",
"message": {
"content": [
{
"image": "https://dashscope-xxx.oss-xxx.aliyuncs.com/xxx.png?Expires=xxx",
"type": "image"
}
],
"role": "assistant"
}
}
],
"finished": true
},
"usage": {
"image_count": 1,
"input_tokens": 10867,
"output_tokens": 2,
"size": "1488*704",
"total_tokens": 10869
},
"request_id": "71dfc3c6-f796-9972-97e4-bc4efc4faxxx"
}Panggilan asinkron
Pastikan versi SDK Python DashScope adalah 1.25.15 atau lebih baru, dan versi SDK Java DashScope adalah 2.22.13 atau lebih baru.
Python
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
# Berikut ini adalah URL dasar untuk wilayah Singapura. URL dasar berbeda-beda tergantung 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 tergantung 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 jalur absolut dan relatif)
# image_1 = "file:///path/to/your/car.png"
# image_2 = "file:///path/to/your/paint.png"
# [Metode 3] Gunakan gambar yang di-encode Base64
# 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("Membuat tugas asinkron...")
message = Message(
role="user",
content=[
{"text": "Semprotkan grafiti dari gambar 2 ke mobil di gambar 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 hanya mendukung resolusi 4K untuk skenario generasi teks-ke-gambar. Pengeditan gambar dan generasi kolase mendukung resolusi maksimum 2K.
)
if response.status_code == 200:
print("Tugas berhasil dibuat:", response)
return response
else:
raise Exception(f"Gagal membuat tugas: {response.code} - {response.message}")
# Tunggu hingga tugas selesai.
def wait_for_completion(task_response):
print("Menunggu penyelesaian tugas...")
status = ImageGeneration.wait(task=task_response, api_key=api_key)
if status.output.task_status == "SUCCEEDED":
print("Tugas berhasil!")
# 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"Tugas gagal dengan status: {status.output.task_status}")
# Dapatkan informasi tentang tugas asinkron.
def fetch_task_status(task):
print("Mengambil status tugas...")
status = ImageGeneration.fetch(task=task, api_key=api_key)
if status.status_code == HTTPStatus.OK:
print("Status tugas:", status.output.task_status)
print("Detail respons:", status)
else:
print(f"Gagal mengambil status: {status.code} - {status.message}")
# Batalkan tugas asinkron.
def cancel_task(task):
print("Membatalkan tugas...")
response = ImageGeneration.cancel(task=task, api_key=api_key)
if response.status_code == HTTPStatus.OK:
print("Tugas berhasil dibatalkan:", response.output.task_status)
else:
print(f"Gagal membatalkan tugas: {response.code} - {response.message}")
# Alur eksekusi utama.
if __name__ == "__main__":
task = create_async_task()
wait_for_completion(task)
Contoh respons
-
Contoh respons saat 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 saat menanyakan hasil tugas
URL berlaku selama 24 jam. Unduh gambar segera.
{ "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 } }
Java
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;
/**
* Pengeditan Gambar wan2.7-image-pro - Contoh Pemanggilan Asinkron
*/
public class Main {
static {
// URL berikut adalah untuk wilayah Singapura. URL dasar berbeda-beda tergantung 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 tergantung 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 disediakan di bawah ini. 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 jalur absolut dan relatif)
// Format yang diperlukan: file:// + jalur file
// String image1 = "file:///path/to/your/car.png";
// String image2 = "file:///path/to/your/paint.png";
// [Metode 3] Gunakan gambar yang di-encode Base64
// 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", "Semprotkan grafiti dari gambar 2 ke mobil di gambar 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 generasi teks-ke-gambar. Untuk pengeditan gambar dan generasi gambar komposit, resolusi maksimum yang didukung adalah 2K.
.messages(Arrays.asList(message))
.build();
ImageGeneration imageGeneration = new ImageGeneration();
ImageGenerationResult result = null;
try {
System.out.println("---panggilan asinkron untuk pengeditan gambar, membuat tugas----");
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---menunggu penyelesaian tugas----");
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 saat 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 saat menanyakan hasil tugas
URL berlaku selama 24 jam. Simpan segera.
{ "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": "" }
curl
Langkah 1: Buat tugas untuk mendapatkan ID tugas
curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/image-generation/generation' \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "X-DashScope-Async: enable" \
--data '{
"model": "wan2.7-image-pro",
"input": {
"messages": [
{
"role": "user",
"content": [
{"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/pjeqdf/car.webp"},
{"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/xsunlm/paint.webp"},
{"text": "Semprotkan grafiti dari gambar 2 ke mobil di gambar 1"}
]
}
]
},
"parameters": {
"size": "2K",
"n": 1,
"watermark": false
}
}'
Contoh respons
{
"output": {
"task_status": "PENDING",
"task_id": "0385dc79-5ff8-4d82-bcb6-xxxxxx"
},
"request_id": "4909100c-7b5a-9f92-bfe5-xxxxxx"
}Langkah 2: Tanyakan hasil berdasarkan ID tugas
Gunakan task_id yang diperoleh pada langkah sebelumnya untuk mem-poll status tugas melalui API hingga task_status menjadi SUCCEEDED atau FAILED.
Ganti {task_id} dengan nilai task_id yang dikembalikan oleh panggilan API sebelumnya. task_id berlaku untuk kueri selama 24 jam.
curl -X GET https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/{task_id} \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"Contoh respons
URL gambar berlaku selama 24 jam. Unduh gambar segera.
{
"request_id": "810fa5f5-334c-91f3-aaa4-ed89cf0caxxx",
"output": {
"task_id": "a81ee7cb-014c-473d-b842-76e98311cxxx",
"task_status": "SUCCEEDED",
"submit_time": "2026-03-26 17:16:01.663",
"scheduled_time": "2026-03-26 17:16:01.716",
"end_time": "2026-03-26 17:16:22.961",
"finished": true,
"choices": [
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": [
{
"image": "https://dashscope-xxx.oss-xxx.aliyuncs.com/xxx.png?Expires=xxx",
"type": "image"
}
]
}
}
]
},
"usage": {
"size": "2976*1408",
"total_tokens": 11017,
"image_count": 1,
"output_tokens": 2,
"input_tokens": 11015
}
}wan2.5-i2i-preview menggunakan titik akhir dan parameter API yang berbeda.
Pemilihan model
wan2.7-image-pro dan wan2.7-image (direkomendasikan): Terbaik untuk pengeditan presisi atau menghasilkan beberapa gambar koheren.
Pengeditan lokal presisi: Pilih area spesifik untuk memindahkan, mengganti, atau menambah elemen. Ideal untuk retouching e-commerce dan penyesuaian desain.
Generasi multi-panel: Hasilkan beberapa gambar bergaya konsisten dalam satu panggilan. Ideal untuk storyboard komik dan seri produk.
wan2.6-image: Pengeditan bergaya dengan teks/gambar campuran atau beberapa referensi. Menghasilkan teks dalam gambar dan menerima hingga empat gambar referensi.
wan2.5-i2i-preview: Cocok untuk pengeditan gambar sederhana dan fusi multi-gambar.
Untuk spesifikasi input dan output setiap model, lihat Spesifikasi gambar input dan Resolusi gambar output.
Galeri demo
Set gambar-ke-gambar
Input image | Output image |
|
|
|
|
Pengeditan interaktif
Input image | Output image |
|
Edit berdasarkan gambar 1. Ganti raspberry yang dipilih dalam kotak 1 dengan lemon, raspberry di kotak 2 dengan stroberi, dan raspberry di kotak 3 dengan blueberry. Hasil harus terintegrasi secara harmonis dengan gambar asli, tanpa kotak dan angka referensi, dan pertahankan konten lainnya tetap tidak berubah. |
|
Tempatkan pola yang dipilih dari gambar 1 ke area yang dipilih di gambar 2. |
Fusi multi-gambar
Input image | Output image |
|
Ambil potret anak laki-laki dari gambar 1 dan anjing dari gambar 2. Anak laki-laki itu memeluk anjing, dan keduanya sangat bahagia. Pencahayaan studio lembut, latar belakang bertekstur biru. |
|
Ubah warna gaun dari gambar 1 menggunakan warna burung di gambar 2. Jadikan artistik, tetapi pertahankan gaya gaun dan model tetap tidak berubah. |
Pelestarian fitur subjek
Input image | Output image |
|
Harap hasilkan satu set empat foto Polaroid dengan tema "Perubahan Musim". Setiap foto diambil di lokasi yang sama, di bawah pohon di taman, tetapi menunjukkan pemandangan musim semi, musim panas, musim gugur, dan musim dingin masing-masing. Pakaian orang tersebut juga harus sesuai musim: jaket ringan di musim semi, kemeja lengan pendek di musim panas, mantel trench di musim gugur, dan syal serta mantel tebal di musim dingin. Tempatkan set foto ini di atas meja makan. |
Deteksi dan segmentasi
Input image | Output image |
|
Deteksi laptop dan jam alarm dalam gambar, gambar Kotak pembatas, dan beri label "laptop" dan "clock". |
|
Segmentasi gelas kaca dalam gambar. |
Ekstraksi elemen
Input image | Output image |
|
Ekstrak item pakaian dari foto yang diunggah dan susun dalam tampilan flat-lay pada latar belakang putih murni. Pertahankan detail realistis dan tekstur material. Gaya e-commerce fashion, cocok untuk tampilan pakaian. |
Pengeditan teks
Input image | Output image |
|
Hapus semua Watermark dari gambar. |
|
Tulis secara kasual "Time for Holiday?" di pasir dengan tangan. |
|
Ubah 18 menjadi 29 dan JUNE menjadi SEPTEMBER. |
Pengeditan kamera dan perspektif
Input image | Output image |
|
Pertahankan fitur orang tersebut tetap tidak berubah dan hasilkan tampilan depan, samping, dan belakang. |
|
Rekam ulang foto ini dengan lensa fisheye. |
Spesifikasi input
Spesifikasi gambar input
Spesifikasi | wan2.7-image-pro, wan2.7-image | wan2.6-image | wan2.5-i2i-preview |
Jumlah gambar input | 0 hingga 9 (0 bersesuaian dengan mode teks-ke-gambar) | Pengeditan gambar: 1 hingga 4 / Teks dan gambar campuran: 0 hingga 1 | 1 hingga 3 |
Format gambar | JPEG, JPG, PNG (saluran alpha tidak didukung), BMP, WEBP | JPEG, JPG, PNG (saluran alpha tidak didukung), BMP, WEBP | JPEG, JPG, PNG (saluran alpha tidak didukung), BMP, WEBP |
Kisaran lebar dan tinggi gambar | [240, 8000] piksel | [240, 8000] piksel | [384, 5000] piksel |
Ukuran file | ≤ 20 MB | ≤ 10 MB | ≤ 10 MB |
Rasio aspek | [1:8, 8:1] | Tanpa batas | [1:4, 4:1] |
Urutan input gambar
Nomor gambar dalam prompt bersesuaian dengan posisi array: gambar pertama adalah "image 1", gambar kedua adalah "image 2". Anda juga dapat menggunakan penanda seperti "[image 1]" dan "[image 2]".
{
"content": [
{"text": "Instruksi pengeditan, misalnya: Tempatkan jam alarm dari gambar 1 di samping vas bunga di atas meja makan pada gambar 2"},
{"image": "https://example.com/image1.png"},
{"image": "https://example.com/image2.png"}
]
}Input image | Output image | ||
Image 1 |
Image 2 |
Prompt: Pindahkan gambar 1 ke gambar 2 |
Prompt: Pindahkan gambar 2 ke gambar 1 |
Metode input gambar
Kirimkan gambar menggunakan salah satu metode berikut:
Fitur utama
1. Mengikuti instruksi (prompt)
Parameter: messages.content.text atau input.prompt (wajib), negative_prompt (opsional).
teks atau prompt (Prompt positif): Jelaskan konten, subjek, adegan, gaya, pencahayaan, dan komposisi untuk gambar output.
negative_prompt (Prompt negatif): Tentukan konten yang tidak diinginkan, seperti "blurry" atau "extra fingers".
Parameter | wan2.7-image-pro, wan2.7-image | wan2.6-image | wan2.5-i2i-preview |
text | Wajib, hingga 5.000 karakter | Wajib, hingga 2.000 karakter | Tidak didukung |
prompt | Tidak didukung | Tidak didukung | Wajib, hingga 2.000 karakter |
negative_prompt | Tidak didukung | Didukung, hingga 500 karakter | Didukung, hingga 500 karakter |
2. Aktifkan penulisan ulang prompt cerdas
Parameter: parameters.prompt_extend (bool, default true).
Memperluas prompt pendek untuk meningkatkan kualitas gambar dengan biaya peningkatan waktu respons.
Praktik terbaik:
Aktifkan: Ketika prompt ringkas atau luas.
Nonaktifkan: Untuk kontrol detail halus, deskripsi terperinci, atau skenario sensitif latensi. Atur
prompt_extendkefalse.
Parameter | wan2.7-image-pro, wan2.7-image | wan2.6-image | wan2.5-i2i-preview |
prompt_extend | Tidak didukung | Didukung (hanya mode pengeditan gambar) | Didukung |
3. Atur resolusi gambar output
Parameter: parameters.size (string), dalam format "lebar*tinggi".
Parameter | wan2.7-image-pro, wan2.7-image | wan2.6-image | wan2.5-i2i-preview |
size | Metode 1: Tentukan resolusi gambar output (direkomendasikan) Dalam mode pengeditan (dengan setidaknya satu gambar dikirimkan), tingkat resolusi output opsional adalah:
Metode 2: Tentukan nilai piksel lebar dan tinggi gambar yang dihasilkan
Hanya wan2.7-image-pro dalam skenario teks-ke-gambar yang mendukung resolusi 4K. | Metode 1: Referensi rasio gambar input (direkomendasikan) Dalam mode pengeditan (
Metode 2: Tentukan nilai piksel lebar dan tinggi gambar yang dihasilkan
Nilai piksel gambar output aktual akan menjadi kelipatan 16 terdekat dari nilai yang ditentukan. | Hanya mendukung menentukan nilai piksel lebar dan tinggi gambar yang dihasilkan
|
4. Pengeditan presisi interaktif
Gunakan parameters.bbox_list untuk memilih wilayah spesifik untuk diedit. Hanya didukung oleh wan2.7-image-pro dan wan2.7-image.
Panjang daftar: Harus sesuai jumlah gambar input. Gunakan daftar kosong
[]untuk gambar yang tidak memerlukan pengeditan.Format koordinat:
[x1, y1, x2, y2](x kiri atas, y kiri atas, x kanan bawah, y kanan bawah). Koordinat adalah nilai piksel absolut dengan titik asal (0, 0) di kiri atas, sumbu-x ke kanan, sumbu-y ke bawah.Batas kuantitas: Maksimal 2 Kotak pembatas per gambar.
Contoh: 3 gambar input di mana gambar 1 memiliki dua Kotak pembatas dan gambar 2 tidak memiliki
[
[[0, 0, 12, 12], [25, 25, 100, 100]], # Gambar 1 (2 kotak)
[], # Gambar 2 (tanpa kotak)
[[10, 10, 50, 50]] # Gambar 3 (1 kotak)
]Penagihan dan batas laju
Kuota gratis dan harga: Daftar model dan harga.
Untuk batas laju, lihat Wanxiang.
Penagihan:
Biaya dikenakan per gambar yang berhasil dihasilkan. Anda hanya dikenai biaya ketika API mengembalikan
task_statusSUCCEEDED.Panggilan model yang gagal atau error pemrosesan tidak dikenai biaya apa pun atau mengonsumsi kuota gratis.
Referensi API
Setiap model menggunakan titik akhir dan struktur permintaan yang berbeda:
Model | Titik akhir (Contoh untuk wilayah Singapura) |
| API Sinkron: API Asinkron: Ganti |
| API Asinkron: Ganti |
wan2.7/wan2.6: Gunakan formatmessages. Dalam arraymessages[].content, kirimkan gambar dalam parameterimagedan prompt dalam parametertext.wan2.5: Kirimkan gambar dalam arrayinput.imagesdan prompt dalam parameterinput.prompt.
wan2.7-image-pro, wan2.7-image, wan2.6-image | wan2.5-i2i-preview |
| |
Untuk parameter input dan output, lihat Wan2.7 - generasi dan pengeditan gambar, Wan2.6 - generasi dan pengeditan gambar, Wanxiang – Pengeditan Gambar Umum 2.5




































