Model pengeditan gambar Wan menjalankan berbagai tugas pengeditan berdasarkan prompt teks, termasuk outpainting, penghapusan watermark, style transfer, pengeditan berbasis instruksi, inpainting lokal, dan restorasi gambar.
Dokumen ini hanya berlaku untuk wilayah Tiongkok (Beijing). Anda harus menggunakan API key dari wilayah Tiongkok (Beijing) untuk menggunakan model ini.
Ikhtisar model
Tampilan performa
Gambar asli |
Ubah rambutnya menjadi merah |
Tambahkan sepasang kacamata hitam pada gadis tersebut |
Konversi ke gaya buku bergambar Prancis |
Lihat Fitur utama.
Harga
Wilayah Beijing
Wilayah Beijing tidak menyediakan kuota gratis. Semua panggilan dikenai biaya. Konfirmasi sebelum melanjutkan.
Model | Harga satuan | Batas laju (dibagi bersama oleh Akun Alibaba Cloud dan Pengguna RAM) | |
Batas RPS untuk pengiriman task | Jumlah Tugas Konkuren | ||
wanx2.1-imageedit | $0,020070/gambar | 2 | 2 |
Mulai
Prasyarat
Dapatkan API key dan tetapkan sebagai variabel lingkungan. Jika Anda menggunakan SDK DashScope untuk melakukan panggilan, Anda juga perlu menginstal SDK.
Kode contoh
Panggil API pengeditan gambar untuk melakukan inpainting lokal.
SDK mengenkapsulasi pemrosesan async, sehingga antarmuka berperilaku secara sinkron — satu permintaan menunggu hasilnya. Contoh curl menunjukkan dua operasi async terpisah: kirim task dan kueri hasil.
Python
Mendukung tiga metode input: URL publik, encoding Base64, atau jalur file lokal.
Contoh permintaan
import base64
import os
from http import HTTPStatus
from dashscope import ImageSynthesis
import mimetypes
"""
Persyaratan lingkungan:
dashscope python SDK >= 1.23.8
Instal/Perbarui SDK:
pip install -U dashscope
"""
# Jika variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan: api_key="sk-xxx"
api_key = os.getenv("DASHSCOPE_API_KEY")
# --- Fungsi bantu: untuk encoding Base64 ---
# Formatnya 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:
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 privat atau skenario yang memerlukan transmisi terenkripsi.
"""
# [Metode 1] Gunakan URL gambar publik
mask_image_url = "http://wanx.alicdn.com/material/20250318/description_edit_with_mask_3_mask.png"
base_image_url = "http://wanx.alicdn.com/material/20250318/description_edit_with_mask_3.jpeg"
# [Metode 2] Gunakan file lokal (mendukung jalur absolut dan relatif)
# Persyaratan format: file:// + jalur file
# Contoh (jalur absolut):
# mask_image_url = "file://" + "/path/to/your/mask_image.png" # Linux/macOS
# base_image_url = "file://" + "C:/path/to/your/base_image.jpeg" # Windows
# Contoh (jalur relatif):
# mask_image_url = "file://" + "./mask_image.png" # Sesuaikan dengan jalur aktual
# base_image_url = "file://" + "./base_image.jpeg" # Sesuaikan dengan jalur aktual
# [Metode 3] Gunakan gambar yang di-encode Base64
# mask_image_url = encode_file("./mask_image.png") # Sesuaikan dengan jalur aktual
# base_image_url = encode_file("./base_image.jpeg") # Sesuaikan dengan jalur aktual
def sample_sync_call_imageedit():
print('mohon tunggu...')
rsp = ImageSynthesis.call(api_key=api_key,
model="wanx2.1-imageedit",
function="description_edit_with_mask",
prompt="A ceramic rabbit holding a ceramic flower",
mask_image_url=mask_image_url,
base_image_url=base_image_url,
n=1)
assert rsp.status_code == HTTPStatus.OK
print('response: %s' % rsp)
if rsp.status_code == HTTPStatus.OK:
for result in rsp.output.results:
print("---------------------------")
print(result.url)
else:
print('sync_call Gagal, status_code: %s, code: %s, message: %s' %
(rsp.status_code, rsp.code, rsp.message))
if __name__ == '__main__':
sample_sync_call_imageedit()Contoh respons
URL berlaku selama 24 jam. Unduh gambarnya segera.
{
"status_code": 200,
"request_id": "dc41682c-4e4a-9010-bc6f-xxxxxx",
"code": null,
"message": "",
"output": {
"task_id": "6e319d88-a07a-420c-9493-xxxxxx",
"task_status": "SUCCEEDED",
"results": [
{
"url": "https://dashscope-result-wlcb-acdr-1.oss-cn-wulanchabu-acdr-1.aliyuncs.com/xxx.png?xxxxxx"
}
],
"submit_time": "2025-05-26 14:58:27.320",
"scheduled_time": "2025-05-26 14:58:27.339",
"end_time": "2025-05-26 14:58:39.170",
"task_metrics": {
"TOTAL": 1,
"SUCCEEDED": 1,
"FAILED": 0
}
},
"usage": {
"image_count": 1
}
}Java
Mendukung tiga metode input: URL publik, encoding Base64, atau jalur file lokal.
Contoh permintaan
// 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.JsonUtils;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
/**
* Persyaratan lingkungan
* dashscope java SDK >=2.20.9
* Perbarui dependensi Maven:
* https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java
*/
public class ImageEditSync {
// Jika variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan: apiKey="sk-xxx"
static String apiKey = System.getenv("DASHSCOPE_API_KEY");
/**
* Metode input gambar: Pilih salah satu dari tiga 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] URL publik
static String maskImageUrl = "http://wanx.alicdn.com/material/20250318/description_edit_with_mask_3_mask.png";
static String baseImageUrl = "http://wanx.alicdn.com/material/20250318/description_edit_with_mask_3.jpeg";
//[Metode 2] Jalur file lokal (file://+jalur absolut atau file:///+jalur absolut)
// static String maskImageUrl = "file://" + "/your/path/to/mask_image.png"; // Linux/macOS
// static String baseImageUrl = "file:///" + "C:/your/path/to/base_image.png"; // Windows
//[Metode 3] Encoding Base64
// static String maskImageUrl = encodeFile("/your/path/to/mask_image.png");
// static String baseImageUrl = encodeFile("/your/path/to/base_image.png");
public static void syncCall() {
// Setel parameter parameters
Map<String, Object> parameters = new HashMap<>();
parameters.put("prompt_extend", true);
ImageSynthesisParam param =
ImageSynthesisParam.builder()
.apiKey(apiKey)
.model("wanx2.1-imageedit")
.function(ImageSynthesis.ImageEditFunction.DESCRIPTION_EDIT_WITH_MASK)
.prompt("A ceramic rabbit holding a ceramic flower")
.maskImageUrl(maskImageUrl)
.baseImageUrl(baseImageUrl)
.n(1)
.size("1024*1024")
.parameters(parameters)
.build();
ImageSynthesis imageSynthesis = new ImageSynthesis();
ImageSynthesisResult result = null;
try {
System.out.println("---panggilan sinkron, mohon tunggu sebentar----");
result = imageSynthesis.call(param);
} catch (ApiException | NoApiKeyException e){
throw new RuntimeException(e.getMessage());
}
System.out.println(JsonUtils.toJson(result));
}
/**
* Meng-encode 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 tidak ada: " + filePath);
}
// Deteksi tipe MIME
String mimeType = null;
try {
mimeType = Files.probeContentType(path);
} catch (IOException e) {
throw new IllegalArgumentException("Tidak dapat mendeteksi tipe file: " + filePath);
}
if (mimeType == null || !mimeType.startsWith("image/")) {
throw new IllegalArgumentException("Format gambar tidak didukung atau tidak dikenali");
}
// Baca konten file dan encode
byte[] fileBytes = null;
try{
fileBytes = Files.readAllBytes(path);
} catch (IOException e) {
throw new IllegalArgumentException("Tidak dapat membaca konten file: " + filePath);
}
String encodedString = Base64.getEncoder().encodeToString(fileBytes);
return "data:" + mimeType + ";base64," + encodedString;
}
public static void main(String[] args) {
syncCall();
}
}
Contoh respons
URL berlaku selama 24 jam. Unduh gambarnya segera.
{
"request_id": "bf6c6361-f0fc-949c-9d60-xxxxxx",
"output": {
"task_id": "958db858-153b-4c81-b243-xxxxxx",
"task_status": "SUCCEEDED",
"results": [
{
"url": "https://dashscope-result-wlcb-acdr-1.oss-cn-wulanchabu-acdr-1.aliyuncs.com/xxx.png?xxxxxx"
}
],
"task_metrics": {
"TOTAL": 1,
"SUCCEEDED": 1,
"FAILED": 0
}
},
"usage": {
"image_count": 1
}
}curl
Mencakup alur kerja lengkap: buat task, polling status, ambil dan simpan hasil.
Atur header
X-DashScope-Asynckeenableuntuk panggilan async.ID task kedaluwarsa setelah 24 jam dan status berubah menjadi
UNKNOWN.
Langkah 1: Buat task
Mengembalikan task_id.
Contoh permintaan
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/image2image/image-synthesis' \
--header 'X-DashScope-Async: enable' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "wanx2.1-imageedit",
"input": {
"function": "description_edit_with_mask",
"prompt": "A ceramic rabbit holding a ceramic flower.",
"base_image_url": "http://wanx.alicdn.com/material/20250318/description_edit_with_mask_3.jpeg",
"mask_image_url": "http://wanx.alicdn.com/material/20250318/description_edit_with_mask_3_mask.png"
},
"parameters": {
"n": 1
}
}'Contoh respons
{
"output": {
"task_status": "PENDING",
"task_id": "0385dc79-5ff8-4d82-bcb6-xxxxxx"
},
"request_id": "4909100c-7b5a-9f92-bfe5-xxxxxx"
}Langkah 2: Kueri hasil berdasarkan ID task
Lakukan polling status task dengan task_id hingga task_status bernilai SUCCEEDED atau FAILED.
Contoh permintaan
Ganti 86ecf553-d340-4e21-xxxxxxxxx dengan task_id Anda yang sebenarnya.
curl -X GET https://dashscope.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"Contoh respons
URL gambar kedaluwarsa setelah 24 jam — unduh segera.
{
"request_id": "eeef0935-02e9-9742-bb55-xxxxxx",
"output": {
"task_id": "a425c46f-dc0a-400f-879e-xxxxxx",
"task_status": "SUCCEEDED",
"submit_time": "2025-02-21 17:56:31.786",
"scheduled_time": "2025-02-21 17:56:31.821",
"end_time": "2025-02-21 17:56:42.530",
"results": [
{
"url": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/aaa.png"
}
],
"task_metrics": {
"TOTAL": 1,
"SUCCEEDED": 1,
"FAILED": 0
}
},
"usage": {
"image_count": 1
}
}Fitur utama
Gunakan parameter function untuk menentukan fitur pengeditan. Semua fitur mengikuti metode pemanggilan yang sama seperti pada bagian Mulai.
Bagian berikut menampilkan contoh curl dengan JSON input dan parameters spesifik fitur.
Catatan: Permintaan curl lengkap harus mencakup bidang tingkat atas seperti model, input, dan parameters. Untuk detail struktur, lihat Referensi API pengeditan gambar umum.
Stilisasi global
Memindahkan gaya artistik ke seluruh gambar. Kasus penggunaan: pembuatan buku bergambar, latar media sosial, atau gambar konsep yang sesuai gaya tertentu.
Atur
functionkestylization_all.Gaya yang didukung:
Gaya buku bergambar Prancis
Gaya seni foil emas
parameters.strength(0,0–1,0, default: 0,5) mengontrol intensitas modifikasi. Nilai lebih rendah mempertahankan lebih banyak elemen asli.Format prompt: "Convert to [style]" (misalnya, "Convert to French picture book style").
Gambar input | Gambar output | |
Prompt: Convert to French picture book style | Prompt: Convert to gold foil art style | |
|
|
|
|
|
|
Kontrol tingkat modifikasi gambar dengan strength
Parameter parameters.strength (0,0–1,0, default: 0,5) mengontrol intensitas modifikasi: nilai mendekati 0 mempertahankan gambar asli, nilai mendekati 1 melakukan modifikasi lebih besar.
Prompt input: Convert to French picture book style.
Gambar input | Gambar output | ||
strength=0.0 (nilai minimum) | strength=0.5 (nilai default) | strength=1.0 (nilai maksimum) | |
|
|
|
|
Stilisasi lokal
Menerapkan style transfer hanya pada area lokal. Kasus penggunaan: kustomisasi personal (pakaian karakter) atau desain iklan (penyorotan produk).
Atur
functionkestylization_local.Gaya yang didukung: Gaya yang didukung dan nilai yang sesuai adalah:
Patung es: es
Cloud: cloud
Lentera perayaan Tiongkok: chinese festive lantern
Papan: kayu
Porselen biru-putih: blue and white porcelain
Fluffy: fluffy
Benang rajut: weaving
Balon: balloon
Format prompt: "Change [object] to [style]" (misalnya, "Change the house to wooden style").
Gambar input | Gambar output | |||
|
Ice Sculpture |
Cloud |
Chinese festive lantern |
Wooden |
Blue and white porcelain |
Fluffy |
|
Balloon | |
Pengeditan berbasis instruksi
Menambah atau memodifikasi konten melalui instruksi teks tanpa menentukan area. Kasus penggunaan: pengeditan sederhana tanpa penempatan presisi (menambah aksesori, mengubah warna rambut).
Atur
functionkedescription_edit.parameters.strength(0,0–1,0, default: 0,5) mengontrol intensitas modifikasi. Nilai lebih rendah mempertahankan lebih banyak elemen asli.Prompt: Sertakan kata kerja aksi seperti "add" atau "modify". Untuk penghapusan, gunakan Inpainting lokal sebagai gantinya.
Capabilities | Input image | Output image |
Add an element |
|
Tambahkan sepasang kacamata hitam ke anak kucing tersebut. |
Modify an element |
|
Ubah warna rambutnya menjadi merah. |
Kontrol tingkat modifikasi gambar dengan strength
Parameter parameters.strength (0,0–1,0, default: 0,5) mengontrol intensitas modifikasi: nilai mendekati 0 mempertahankan gambar asli, nilai mendekati 1 melakukan modifikasi lebih besar.
Input prompt: Ubah pakaiannya menjadi kemeja pantai bermotif warna-warni.
Gambar input | Gambar output | ||
strength=0.0 (nilai minimum) | strength=0.5 (nilai default) | strength=1.0 (nilai maksimum) | |
|
|
|
|
Inpainting lokal
Menambah, memodifikasi, atau menghapus konten di area yang ditandai mask. Kasus penggunaan: pengeditan yang memerlukan kontrol presisi (mengganti pakaian, mengganti objek, menghapus elemen yang tidak diinginkan).
Atur
functionkedescription_edit_with_mask.Persyaratan mask: Sediakan
mask_image_urldengan area putih = area diedit, area hitam = area dipertahankan.Prompt: Sertakan aksi ("add", "modify") dan jelaskan konten setelah penghapusan untuk kasus penghapusan.
Tambah/Modifikasi: Jelaskan aksi atau hasil akhir.
Hapus: Biarkan
promptkosong untuk objek kecil. Untuk objek besar, jelaskan latar belakang yang diinginkan setelah penghapusan — bukan aksi penghapusannya sendiri.
Kemampuan | Gambar input | Input Mask Image (Putih adalah area yang akan diedit) | Gambar output |
Tambah elemen |
|
|
Add a hat to the puppy. Anda juga dapat menulis prompt sebagai "A puppy wearing a hat" untuk menggambarkan konten gambar yang diharapkan. |
Ubah elemen |
|
|
A ceramic rabbit holding a ceramic flower. Anda juga dapat menulis prompt sebagai "Replace the carrot held by the ceramic rabbit with a ceramic flower" untuk menggambarkan aksi. |
Hapus elemen |
|
|
A transparent glass vase on the table. Prompt harus menggambarkan konten setelah penghapusan. Jangan menulisnya sebagai "Delete the brown bear". |
Penghapusan teks dan watermark
Peringatan risiko hukum
Menggunakan fitur ini untuk memproses gambar berhak cipta (seperti menghapus watermark merek lain) dapat merupakan pelanggaran hak cipta. Pastikan Anda memiliki hak hukum untuk menggunakan gambar yang diproses dan bertanggung jawab atas semua konsekuensi hukum terkait.
Menghapus teks Tiongkok/Inggris atau watermark. Kasus penggunaan: pemrosesan materi atau pembersihan iklan.
Atur
functionkeremove_watermark.Prompt: Gunakan instruksi umum ("Remove the text") atau tentukan jenisnya ("Remove English text").
Gambar input | Gambar hasil (Hapus teks pada gambar) |
|
|
|
|
Outpainting
Memperluas gambar secara proporsional ke semua arah dan mengisi konten secara cerdas. Kasus penggunaan: menyesuaikan komposisi atau mengubah rasio aspek untuk media berbeda.
Atur
functionkeexpand.Parameter terkait:
top_scale,bottom_scale,left_scale, danright_scalemengontrol rasio perluasan per arah (misalnya, 1,5 = ukuran 1,5×).Saran prompt: Gambarkan adegan lengkap yang Anda harapkan setelah perluasan.
Gambar input | Gambar output |
|
|
Super-resolusi gambar
Meningkatkan kejernihan gambar dan mendukung upscaling untuk gambar beresolusi rendah atau buram. Kasus penggunaan: memulihkan foto lama atau meningkatkan resolusi untuk pencetakan/tampilan HD.
Atur
functionkesuper_resolution.parameters.upscale_factor(1–4, default: 1) mengontrol upscaling. Nilai 1 hanya meningkatkan kejernihan, tanpa memperbesar.Saran prompt: Gunakan "Image super resolution" atau gambarkan konten gambar.
Gambar input (gambar buram) | Gambar output (gambar jernih) |
|
|
Pewarnaan gambar
Mengonversi gambar hitam-putih atau grayscale menjadi berwarna. Kasus penggunaan: mewarnai foto sejarah atau ilustrasi garis.
Atur
functionkecolorization.Prompt: Biarkan kosong untuk pewarnaan otomatis, atau tentukan warna elemen kunci (misalnya, "blue background, yellow leaves").
Gambar input | Gambar output |
|
|
Garis ilustrasi ke gambar (mendukung gambar berbasis coretan)
Menghasilkan gambar dari garis ilustrasi dan prompt teks. Kasus penggunaan: konsep arsitektur, ilustrasi, atau gambar berbasis coretan.
Atur
functionkedoodle.Parameter terkait:
parameters.is_sketch, yang mengontrol hasil pembuatan gambar.false(default): Model mengekstraksi garis ilustrasi dari input RGB, lalu menghasilkan gambar (RGB → garis ilustrasi → gambar).true: Model menghasilkan langsung dari input RGB seperti coretan (RGB → gambar).
Prompt: Gambarkan konten yang diharapkan — semakin detail, hasilnya semakin baik.
Kemampuan | Gambar input | Gambar output |
Garis ilustrasi ke gambar (is_sketch=false) |
|
A living room in a minimalist Nordic style. |
Gambar berbasis coretan (is_sketch=true) |
|
A tree, in a two-dimensional anime style. |
Buat gambar berdasarkan karakter kartun referensi
Peringatan risiko hukum
Menggunakan fitur ini untuk memproses karakter kartun berhak cipta dapat merupakan pelanggaran hak cipta. Anda harus memiliki hak hukum untuk menggunakan karakter referensi tersebut atau menggunakan karakter orisinal Anda sendiri. Anda juga harus bertanggung jawab atas semua konsekuensi hukum terkait.
Atur
functionkecontrol_cartoon_feature.Format prompt: "The cartoon character [detail aksi/lingkungan]..."
Gambar input | Gambar output |
|
|
Produksi
Praktik terbaik
Polling asinkron: Gunakan interval polling bertahap (misalnya, setiap 3 detik selama 30 detik, lalu tingkatkan) untuk menghindari batas laju.
Penyetelan parameter: Uji parameter kunci seperti
strengthdalam uji coba skala kecil sebelum produksi untuk menemukan nilai optimal.Penyimpanan gambar: URL yang dikembalikan API kedaluwarsa setelah 24 jam. Unduh gambar dan pindahkan ke penyimpanan persisten (misalnya, OSS) segera.
Pencegahan risiko
Penanganan error: Periksa
task_statusdalam hasil kueri. JikaFAILED, catatcodedanmessageuntuk troubleshooting. Error sementara (misalnya, timeout) mungkin berhasil saat dicoba ulang.Moderasi konten: API meninjau semua input/output untuk kepatuhan. Konten yang tidak sesuai mengembalikan
DataInspectionFailed.
Referensi API
Untuk informasi lebih lanjut tentang parameter input dan respons, lihat Referensi API pengeditan gambar umum.
Penagihan dan pembatasan laju
Untuk informasi mengenai kuota gratis dan harga model, lihat Pengeditan gambar Wan 2.1.
Untuk pembatasan laju model, lihat Wan.
Detail penagihan:
Penagihan dilakukan per jumlah gambar yang berhasil dihasilkan. Biaya hanya dikenakan jika
task_statusbernilaiSUCCEEDED.Panggilan gagal tidak dikenai biaya atau mengurangi Kuota gratis untuk pengguna baru.
Kode error
Jika pemanggilan model gagal dan mengembalikan pesan error, lihat Pesan error untuk solusi.
FAQ
T: Mengapa tugas saya gagal (FAILED)?
J: Alasan umum kegagalan task meliputi hal berikut:
Kegagalan moderasi konten: Input atau output memicu kebijakan keamanan.
Error parameter: Parameter permintaan tidak valid (misalnya, nama
functionsalah atau URL tidak dapat diakses).Error internal model: Masalah pemrosesan tak terduga. Periksa bidang
codedanerrordalam respons kueri untuk detail troubleshooting.




















Weaving






























