All Products
Search
Document Center

Alibaba Cloud Model Studio:Wan - referensi API image-to-video frame pertama dan terakhir (2.2)

Last Updated:Sep 02, 2026

Model Wan 2.2 menghasilkan video dengan transisi mulus berdasarkan bingkai pertama, bingkai terakhir , dan prompt teks .

Dokumen terkait: Panduan pengguna

Catatan penggunaan

Untuk memastikan panggilan API berhasil, model, URL endpoint, dan Kunci API Anda harus berada di wilayah yang sama. Panggilan lintas-wilayah akan gagal.

  • Pilih model: Konfirmasi wilayah tempat model tersedia.
  • Pilih URL: Pilih URL endpoint yang sesuai dengan wilayah Anda. Baik URL HTTP maupun URL SDK DashScope didukung.
  • Konfigurasikan Kunci API Anda: Pilih wilayah, dapatkan Kunci API Anda, lalu tetapkan sebagai Variabel lingkungan.
  • Instal SDK: Untuk melakukan panggilan API menggunakan SDK, instal SDK DashScope.

CatatanContoh kode dalam topik ini berlaku untuk Singapore.

PentingAlibaba Cloud Model Studio telah merilis domain khusus ruang kerja untuk wilayah China (Beijing) dan Singapore. Domain khusus baru ini memberikan performa lebih unggul dan stabilitas lebih tinggi untuk permintaan inferensi. Kami menyarankan migrasi ke domain baru:

  • China (Beijing): dari https://dashscope.aliyuncs.com ke https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com
  • Singapore: dari https://dashscope-intl.aliyuncs.com ke https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com

{WorkspaceId} adalah ID ruang kerja Anda, yang dapat ditemukan pada halaman Workspace Details di Konsol Alibaba Cloud Model Studio. Domain yang ada tetap berfungsi sepenuhnya.

Panggilan HTTP

Karena tugas image-to-video merupakan operasi berdurasi panjang yang biasanya memakan waktu 1 hingga 5 menit, API menggunakan panggilan asinkron. Prosesnya melibatkan dua langkah utama: membuat tugas, lalu polling hasilnya.

Langkah 1: Buat tugas

Singapore

POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis

Ganti {WorkspaceId} dengan ID ruang kerja aktual Anda.

China (Beijing)

POST https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis

Ganti {WorkspaceId} dengan ID ruang kerja aktual Anda.

Catatan

  • Setelah tugas dibuat, gunakan task_id yang dikembalikan untuk mengkueri hasilnya. task_id berlaku selama 24 jam. Jangan membuat tugas duplikat. Sebagai gantinya, gunakan polling untuk mengambil hasilnya.
  • Untuk panduan pemula, lihat Panggil API dengan Postman atau cURL.

Parameter permintaan

Header permintaan

Content-Type string (Wajib)

Tipe konten permintaan. Harus application/json.

Authorization string (Wajib)

Mengotentikasi permintaan dengan Kunci API Model Studio. Contoh: Bearer sk-xxxx.

X-DashScope-Async string (Wajib)

Mengaktifkan pemrosesan asinkron. Permintaan HTTP hanya mendukung panggilan asinkron. Harus enable.

PentingJika header permintaan ini tidak ada, kesalahan "current user api does not support synchronous calls" dikembalikan.

Body permintaan

model string (Wajib)

Nama model. Contoh: wan2.2-kf2v-flash.

Untuk detailnya, lihat Konsol Model Studio.

input object (Wajib)

Berisi input utama untuk tugas, seperti prompt.

Properti

prompt string (Opsional)

Prompt teks. Mendukung bahasa Mandarin dan Inggris. Panjang maksimum adalah 800 karakter. Baik karakter Mandarin maupun huruf dihitung sebagai satu karakter. Teks yang melebihi batas ini akan dipotong.

Jika terdapat perubahan signifikan pada subjek atau adegan antara frame pertama dan terakhir, kami merekomendasikan mendeskripsikan proses transisinya, seperti pergerakan kamera (misalnya, "camera moves to the left") atau pergerakan subjek (misalnya, "a person runs forward").

Contoh: "Seekor kucing hitam kecil menatap langit dengan rasa ingin tahu. Kamera secara bertahap naik dari ketinggian mata dan akhirnya menangkap tatapan penasarannya dari sudut pandang atas."

Untuk tips menulis prompt yang efektif, lihat Panduan prompt untuk text-to-video dan image-to-video.

negative_prompt string (Opsional)

Prompt negatif yang mendeskripsikan konten yang harus dikecualikan dari video, yang membantu membatasi output.

Mendukung bahasa Mandarin dan Inggris. Panjang maksimum adalah 500 karakter. Teks yang melebihi batas ini akan dipotong.

Contoh: "low resolution, error, worst quality, low quality, deformed, extra fingers, bad proportions".

first_frame_url string (Wajib)

URL gambar frame pertama. Rasio aspek video output akan mengikuti rasio aspek gambar tersebut.

URL harus berupa alamat publik yang dapat diakses serta mendukung protokol HTTP atau HTTPS.

Persyaratan gambar:

  • Format: JPEG, JPG, PNG (saluran alfa tidak didukung), BMP, WEBP.
  • Resolusi: Lebar dan tinggi masing-masing harus antara 240 hingga 8.000 piksel.
  • Ukuran file: Maksimal 10 MB.

last_frame_url string (Wajib)

URL gambar frame terakhir.

URL harus berupa alamat publik yang dapat diakses serta mendukung protokol HTTP atau HTTPS.

Persyaratan gambar:

  • Format: JPEG, JPG, PNG (saluran alfa tidak didukung), BMP, WEBP.
  • Resolusi: Lebar dan tinggi masing-masing harus berada dalam rentang 240 hingga 8.000 piksel. Resolusi frame terakhir boleh berbeda dari frame pertama, dan tidak perlu memiliki resolusi atau rasio aspek yang sama.
  • Ukuran file: Maksimal 10 MB.

parameters object (Opsional)

Parameter pemrosesan video.

Properti

resolution string (Opsional)

PentingParameter resolution secara langsung memengaruhi biaya. Untuk model yang sama, hierarki biaya adalah 1080P > 720P > 480P. Konfirmasi harga di Konsol Model Studio sebelum melakukan panggilan.

Resolusi video yang dihasilkan. Parameter ini menyesuaikan definisi (total piksel) tanpa mengubah rasio aspeknya.

Nilai default dan nilai yang tersedia untuk parameter ini bergantung pada parameter model, seperti dijelaskan di bawah ini:

  • wan2.2-kf2v-flash: Nilai yang mungkin adalah 480P, 720P, dan 1080P. Nilai default adalah 720P.
  • wan2.1-kf2v-plus: Satu-satunya nilai yang mungkin adalah 720P. Nilai default adalah 720P.

Contoh: 720P

duration integer (Opsional)

PentingParameter duration secara langsung memengaruhi biaya, yang ditagih per detik. Konfirmasi harga di Konsol Model Studio sebelum melakukan panggilan.

Nilai ini tetap pada 5.

prompt_extendbool (Opsional)

Menentukan apakah akan mengaktifkan penulisan ulang prompt. Saat diaktifkan, model bahasa besar (LLM) secara cerdas menulis ulang prompt input. Ini dapat secara signifikan meningkatkan hasil untuk prompt pendek tetapi meningkatkan latensi.

  • true: Nilai default. Mengaktifkan penulisan ulang prompt.
  • false: Menonaktifkan penulisan ulang prompt.

Contoh: true

watermark bool (Opsional)

Menentukan apakah akan menambahkan watermark dengan teks "AI-generated" di pojok kanan bawah video.

  • false: Nilai default. Tidak menambahkan watermark.
  • true: Menambahkan watermark.

Contoh: false

seed integer (Opsional)

Bilangan acak seed harus berupa integer dalam rentang [0, 2147483647].

Jika tidak ditentukan, seed acak akan dihasilkan. Seed tetap meningkatkan reproduktibilitas.

Karena generasi model bersifat probabilistik, seed yang sama tidak menjamin hasil identik.

Frame pertama dan terakhir

Menghasilkan video berdasarkan frame pertama, frame terakhir, dan prompt.

# URL berikut ini untuk wilayah Singapore. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL berbeda-beda per wilayah.
curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis' \
    -H 'X-DashScope-Async: enable' \
    -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
    "model": "wan2.2-kf2v-flash",
    "input": {
        "first_frame_url": "https://wanx.alicdn.com/material/20250318/first_frame.png",
        "last_frame_url": "https://wanx.alicdn.com/material/20250318/last_frame.png",
        "prompt": "Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view."
    },
    "parameters": {
        "resolution": "480P",
        "prompt_extend": true
    }
}'

Prompt negatif

Gunakan parameter negative_prompt untuk mengecualikan elemen tertentu, seperti orang, dari video yang dihasilkan.

# URL berikut ini untuk wilayah Singapore. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL berbeda-beda per wilayah.
curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis' \
    -H 'X-DashScope-Async: enable' \
    -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
    "model": "wan2.1-kf2v-plus",
    "input": {
        "first_frame_url": "https://wanx.alicdn.com/material/20250318/first_frame.png",
        "last_frame_url": "https://wanx.alicdn.com/material/20250318/last_frame.png",
        "prompt": "Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view.",
        "negative_prompt": "people"
    },
    "parameters": {
        "resolution": "720P",
        "prompt_extend": true
    }
}'

Parameter respons

output object

Informasi output untuk tugas.

Properti

task_id string

ID tugas. Berlaku untuk kueri selama 24 jam.

task_status string

Status tugas.

Nilai enumerasi

  • PENDING
  • RUNNING
  • SUCCEEDED
  • FAILED
  • CANCELED
  • UNKNOWN: Tugas tidak ada atau statusnya tidak diketahui.

request_id string

Pengidentifikasi permintaan unik untuk pelacakan dan troubleshooting.

code string

Kode kesalahan. Dikembalikan hanya untuk permintaan yang gagal. Lihat Kode kesalahan.

message string

Pesan kesalahan detail. Dikembalikan hanya untuk permintaan yang gagal. Lihat Kode kesalahan.

Respons sukses

Simpan task_id untuk mengkueri status dan hasil tugas.

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

Respons kesalahan

Pembuatan tugas gagal. Lihat Kode kesalahan.

{
    "code": "InvalidApiKey",
    "message": "No API-key provided.",
    "request_id": "7438d53d-6eb8-4596-8835-xxxxxx"
}

Langkah 2: Kueri hasil

Singapore

GET https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/{task_id}

Ganti {WorkspaceId} dengan ID ruang kerja aktual Anda.

China (Beijing)

GET https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/tasks/{task_id}

Ganti {WorkspaceId} dengan ID ruang kerja aktual Anda.

Catatan

  • Rekomendasi polling: Pembuatan video memakan waktu beberapa menit. Gunakan mekanisme polling dengan interval yang wajar, seperti 15 detik.
  • Transisi status tugas: PENDING → RUNNING → SUCCEEDED atau FAILED.
  • Tautan hasil: Setelah tugas berhasil, URL video yang berlaku selama 24 jam dikembalikan. Unduh dan simpan video ke penyimpanan permanen, seperti OSS.
  • task_idmasa berlaku: 24 jam. Setelah periode ini, kueri mengembalikan status tugas sebagai UNKNOWN.

Parameter permintaan

Header permintaan

Authorization string (Wajib)

Mengotentikasi permintaan dengan Kunci API Model Studio. Contoh: Bearer sk-xxxx.

Parameter path

task_id string (Wajib)

ID tugas.

Kueri hasil tugas

Ganti 86ecf553-d340-4e21-xxxxxxxxx dengan task_id aktual Anda.

Kunci API berbeda untuk setiap wilayah. Untuk informasi lebih lanjut, lihat Dapatkan Kunci API.

Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx, dengan {WorkspaceId} sebagai ID ruang kerja aktual Anda.

curl -X GET https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"

Parameter respons

outputobject

Informasi output untuk tugas.

Properti

task_id string

ID tugas. Berlaku untuk kueri selama 24 jam.

task_status string

Status tugas.

Nilai enumerasi

  • PENDING
  • RUNNING
  • SUCCEEDED
  • FAILED
  • CANCELED
  • UNKNOWN: Tugas tidak ada atau statusnya tidak diketahui.
Transisi status selama polling:
  • PENDING → RUNNING → SUCCEEDED atau FAILED.
  • Status kueri awal biasanya PENDING atau RUNNING.
  • Saat status berubah menjadi SUCCEEDED, respons berisi URL video yang dihasilkan.
  • Jika statusnya FAILED, periksa pesan kesalahan dan coba ulang tugas tersebut.

submit_time string

Waktu saat tugas diajukan. Waktu dalam UTC+8 dan formatnya YYYY-MM-DD HH:mm:ss.SSS.

scheduled_time string

Waktu saat tugas dieksekusi. Waktu dalam UTC+8 dan formatnya YYYY-MM-DD HH:mm:ss.SSS.

end_time string

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

video_url string

URL video yang dihasilkan. Dikembalikan hanya saat task_status bernilai SUCCEEDED.

Berlaku selama 24 jam. Video dalam format MP4 dengan encoding H.264.

orig_prompt string

Prompt input asli, sesuai dengan parameter permintaan prompt.

actual_prompt string

Prompt yang dioptimalkan yang digunakan saat penulisan ulang prompt diaktifkan. Tidak dikembalikan saat dinonaktifkan.

code string

Kode kesalahan. Dikembalikan hanya untuk permintaan yang gagal. Lihat Kode kesalahan.

message string

Pesan kesalahan detail. Dikembalikan hanya untuk permintaan yang gagal. Lihat Kode kesalahan.

usage object

Statistik penggunaan tugas. Hanya tugas yang berhasil yang ditagih.

Properti

video_duration integer

Durasi video yang dihasilkan dalam detik, yang selalu 5. Rumus penagihan: Biaya = Detik video × Harga satuan.

video_count integer

Jumlah video yang dihasilkan. Nilai ini tetap pada 1.

video_ratio string

Nilai ini saat ini hanya dikembalikan oleh model 2.1. Rasio aspek video yang dihasilkan, yang tetap pada standard.

SR integer

Nilai ini saat ini hanya dikembalikan oleh model 2.2. Tingkat resolusi video yang dihasilkan. Nilai yang mungkin adalah 480, 720, dan 1080.

request_id string

Pengidentifikasi permintaan unik untuk pelacakan dan troubleshooting.

Tugas berhasil

URL video hanya berlaku selama 24 jam, lalu secara otomatis dipurge. Simpan video yang dihasilkan segera.

{
    "request_id": "ec016349-6b14-9ad6-8009-xxxxxx",
    "output": {
        "task_id": "3f21a745-9f4b-4588-b643-xxxxxx",
        "task_status": "SUCCEEDED",
        "submit_time": "2025-04-18 10:36:58.394",
        "scheduled_time": "2025-04-18 10:37:13.802",
        "end_time": "2025-04-18 10:45:23.004",
        "video_url": "https://dashscope-result-wlcb.oss-cn-wulanchabu.aliyuncs.com/xxx.mp4?xxxxx",
        "orig_prompt": "Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view.",
        "actual_prompt": "Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view. The cat's yellow eyes are bright and expressive, its fur is smooth, and its whiskers are clearly visible. The background is a simple light-colored wall, highlighting the cat's black silhouette. A close-up shot emphasizes the changes in the cat's expression and the details of its eyes."
    },
    "usage": {
        "video_duration": 5,
        "video_count": 1,
        "SR": 480
    }
}

Tugas gagal

Saat tugas gagal, task_status bernilai FAILED dengan kode kesalahan dan pesan. Lihat Kode kesalahan.

{
    "request_id": "e5d70b02-ebd3-98ce-9fe8-759d7d7b107d",
    "output": {
        "task_id": "86ecf553-d340-4e21-af6e-a0c6a421c010",
        "task_status": "FAILED",
        "code": "InvalidParameter",
        "message": "The size is not match xxxxxx"
    }
}

Kueri tugas kedaluwarsa

task_id berlaku selama 24 jam. Setelah periode ini, kueri mengembalikan kesalahan berikut.

{
    "request_id": "a4de7c32-7057-9f82-8581-xxxxxx",
    "output": {
        "task_id": "502a00b1-19d9-4839-a82f-xxxxxx",
        "task_status": "UNKNOWN"
    }
}

Panggilan SDK DashScope

Nama parameter SDK sebagian besar konsisten dengan API HTTP, dan struktur parameternya mengikuti konvensi masing-masing bahasa pemrograman.

Karena tugas image-to-video berdurasi panjang (biasanya 1–5 menit), SDK menangani panggilan HTTP asinkron secara internal, mendukung metode panggilan sinkron dan asinkron.

Waktu pemrosesan aktual bergantung pada jumlah tugas dalam antrian dan performa layanan. Mohon bersabar.

Panggilan SDK Python

PentingSebelum menjalankan kode berikut, pastikan versi SDK Python DashScope Anda minimal1.23.8.

Versi lama dapat memicu kesalahan seperti "url error, please check url!". Lihat Instal SDK untuk memperbarui.

Tetapkan base_http_api_url berdasarkan wilayah model:

Singapore

dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

Ganti {WorkspaceId} dengan ID ruang kerja aktual Anda.

Beijing

dashscope.base_http_api_url = 'https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1'

Ganti {WorkspaceId} dengan ID ruang kerja aktual Anda.

Kode contoh

Panggilan sinkron

Contoh ini menunjukkan panggilan sinkron dengan dua metode input gambar: URL publik dan jalur file lokal.

Contoh permintaan
import os
from http import HTTPStatus
# SDK DashScope >= 1.23.4
from dashscope import VideoSynthesis
import dashscope

dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

# Dapatkan Kunci API DashScope (yang merupakan Kunci API Model Studio Anda) dari variabel lingkungan.
api_key = os.getenv("DASHSCOPE_API_KEY")

# ========== Metode input gambar (pilih salah satu) ==========
# [Metode 1] Gunakan URL gambar publik
first_frame_url = "https://wanx.alicdn.com/material/20250318/first_frame.png"
last_frame_url = "https://wanx.alicdn.com/material/20250318/last_frame.png"

# [Metode 2] Gunakan jalur file lokal (file:// + jalur file)
# Gunakan jalur absolut:
# first_frame_url = "file://" + "/path/to/your/first_frame.png"  # Linux/macOS
# last_frame_url = "file://" + "C:/path/to/your/last_frame.png"  # Windows
# Atau gunakan jalur relatif:
# first_frame_url = "file://" + "./first_frame.png"              # Gunakan jalur aktual Anda.
# last_frame_url = "file://" + "./last_frame.png"                # Gunakan jalur aktual Anda.

def sample_sync_call_kf2v():
    print('please wait...')
    rsp = VideoSynthesis.call(api_key=api_key,
                              model="wan2.2-kf2v-flash",
                              prompt="Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view.",
                              first_frame_url=first_frame_url,
                              last_frame_url=last_frame_url,
                              resolution="720P",
                              prompt_extend=True)
    print(rsp)
    if rsp.status_code == HTTPStatus.OK:
        print(rsp.output.video_url)
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))

if __name__ == '__main__':
    sample_sync_call_kf2v()
Contoh respons

video_url berlaku selama 24 jam. Harap unduh video dalam periode ini.

{
    "status_code": 200,
    "request_id": "a37fafc3-907c-96f3-95a6-5b2a8268a3fd",
    "code": null,
    "message": "",
    "output": {
        "task_id": "4dba0092-da13-42b2-afb1-0f7b8a0f4643",
        "task_status": "SUCCEEDED",
        "video_url": "https://dashscope-result-wlcb-acdr-1.oss-cn-wulanchabu-acdr-1.aliyuncs.com/xxx.mp4?xxxxx",
        "submit_time": "2025-05-23 15:50:12.404",
        "scheduled_time": "2025-05-23 15:50:12.443",
        "end_time": "2025-05-23 15:54:56.502",
        "orig_prompt": "Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view.",
        "actual_prompt": "Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view. The cat's yellow eyes are bright and expressive, its ears are pricked, and its whiskers are clearly visible. The background is a simple, light-colored wall that highlights the cat's black fur and focused expression. A close-up shot emphasizes the change in the cat's gaze and posture."
    },
    "usage": {
        "video_count": 1,
        "video_duration": 5,
        "video_ratio": "standard"
    }
}

Panggilan asinkron

Contoh ini menunjukkan panggilan asinkron, yang segera mengembalikan ID tugas. Anda harus melakukan polling status tugas atau menunggu tugas selesai.

Contoh permintaan
import os
from http import HTTPStatus
# SDK DashScope >= 1.23.4
from dashscope import VideoSynthesis
import dashscope

dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

# Dapatkan Kunci API DashScope (yang merupakan Kunci API Model Studio Anda) dari variabel lingkungan.
api_key = os.getenv("DASHSCOPE_API_KEY")

# ========== Metode input gambar (pilih salah satu) ==========
# [Metode 1] Gunakan URL gambar publik
first_frame_url = "https://wanx.alicdn.com/material/20250318/first_frame.png"
last_frame_url = "https://wanx.alicdn.com/material/20250318/last_frame.png"

# [Metode 2] Gunakan jalur file lokal (file:// + jalur file)
# Gunakan jalur absolut:
# first_frame_url = "file://" + "/path/to/your/first_frame.png"  # Linux/macOS
# last_frame_url = "file://" + "C:/path/to/your/last_frame.png"  # Windows
# Atau gunakan jalur relatif:
# first_frame_url = "file://" + "./first_frame.png"              # Gunakan jalur aktual Anda.
# last_frame_url = "file://" + "./last_frame.png"                # Gunakan jalur aktual Anda.

def sample_async_call_kf2v():
    print('please wait...')
    rsp = VideoSynthesis.async_call(api_key=api_key,
                                    model="wan2.2-kf2v-flash",
                                    prompt="Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view.",
                                    first_frame_url=first_frame_url,
                                    last_frame_url=last_frame_url,
                                    resolution="720P",
                                    prompt_extend=True)
    print(rsp)
    if rsp.status_code == HTTPStatus.OK:
        print("task_id: %s" % rsp.output.task_id)
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))

    # Dapatkan informasi tugas, termasuk status tugas.
    status = VideoSynthesis.fetch(task=rsp, api_key=api_key)
    if status.status_code == HTTPStatus.OK:
        print(status.output.task_status)  # periksa status tugas
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (status.status_code, status.code, status.message))

    # Tunggu hingga tugas selesai. Metode ini melakukan polling endpoint fetch secara berkala hingga tugas selesai.
    rsp = VideoSynthesis.wait(task=rsp, api_key=api_key)
    print(rsp)
    if rsp.status_code == HTTPStatus.OK:
        print(rsp.output.video_url)
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))

if __name__ == '__main__':
    sample_async_call_kf2v()
Contoh respons
  1. Respons saat pembuatan tugas
{
    "status_code": 200,
    "request_id": "c86ff7ba-8377-917a-90ed-xxxxxx",
    "code": "",
    "message": "",
    "output": {
        "task_id": "721164c6-8619-4a35-a6d9-xxxxxx",
        "task_status": "PENDING",
        "video_url": ""
    },
    "usage": null
}
  1. Contoh respons untuk tugas yang selesai

video_url berlaku selama 24 jam. Harap unduh video dalam periode ini.

{
    "status_code": 200,
    "request_id": "efa545b3-f95c-9e3a-a3b6-xxxxxx",
    "code": null,
    "message": "",
    "output": {
        "task_id": "721164c6-8619-4a35-a6d9-xxxxxx",
        "task_status": "SUCCEEDED",
        "video_url": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.mp4?xxxxx",
        "submit_time": "2025-02-12 11:03:30.701",
        "scheduled_time": "2025-02-12 11:06:05.378",
        "end_time": "2025-02-12 11:12:18.853",
        "orig_prompt": "Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view.",
        "actual_prompt": "Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view. The cat's fur is jet-black and glossy, its eyes are large and bright with golden pupils. It looks up with its ears pricked, appearing exceptionally focused. After the camera moves up, the cat turns to face the camera, its eyes filled with curiosity and alertness. The background is simple, highlighting the cat's detailed features. A close-up shot with soft, natural light."
    },
    "usage": {
        "video_count": 1,
        "video_duration": 5,
        "video_ratio": "standard"
    }
}

Panggilan SDK Java

PentingSebelum menjalankan kode berikut, pastikan versi DashScope Java SDK Anda minimal2.20.9.

Versi yang lebih lama dapat memicu error seperti "url error, please check url!". Lihat Install SDK untuk memperbarui.

Kode contoh

Panggilan sinkron

Contoh ini menunjukkan panggilan sinkron dengan dua metode input gambar: URL publik dan jalur file lokal.

Contoh permintaan
// Copyright (c) Alibaba, Inc. and its affiliates.

// DashScope SDK >= 2.20.1
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesis;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisParam;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.utils.JsonUtils;

import java.util.HashMap;
import java.util.Map;

public class Kf2vSyncIntl {

    static {
        Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }

    // Mendapatkan kunci API DashScope (yang merupakan Kunci API Model Studio Anda) dari variabel lingkungan.
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    /**
     * Metode input gambar (pilih salah satu):
     *
     * [Metode 1] URL publik
     */
    static String firstFrameUrl = "https://wanx.alicdn.com/material/20250318/first_frame.png";
    static String lastFrameUrl = "https://wanx.alicdn.com/material/20250318/last_frame.png";

     /**
     * [Metode 2] Jalur file lokal (file://+jalur mutlak atau file:///+jalur mutlak)
     */
    // static String firstFrameUrl = "file://" + "/your/path/to/first_frame.png";  // Linux/macOS
    // static String lastFrameUrl = "file:///" + "C:/path/to/your/img.png";        // Windows

    public static void syncCall() {

        Map<String, Object> parameters = new HashMap<>();
        parameters.put("prompt_extend", true);
        parameters.put("resolution", "720P");

        VideoSynthesis videoSynthesis = new VideoSynthesis();
        VideoSynthesisParam param =
                VideoSynthesisParam.builder()
                        .apiKey(apiKey)
                        .model("wan2.2-kf2v-flash")
                        .prompt("Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view.")
                        .firstFrameUrl(firstFrameUrl)
                        .lastFrameUrl(lastFrameUrl)
                        .parameters(parameters)
                        .build();
        VideoSynthesisResult result = null;
        try {
            // Melakukan panggilan sinkron. Ini mungkin memerlukan waktu.
            result = videoSynthesis.call(param);
        } catch (ApiException | NoApiKeyException e){
            throw new RuntimeException(e.getMessage());
        } catch (InputRequiredException e) {
            throw new RuntimeException(e);
        }
        System.out.println(JsonUtils.toJson(result));
    }

    public static void main(String[] args) {
        syncCall();
    }
}
Contoh respons

video_url berlaku selama 24 jam. Harap unduh video tersebut dalam periode ini.

{
    "request_id": "e6bb4517-c073-9c10-b748-dedb8c11bb41",
    "output": {
        "task_id": "984784fe-83c1-4fc4-88c7-52c2c1fa92a2",
        "task_status": "SUCCEEDED",
        "video_url": "https://dashscope-result-wlcb-acdr-1.oss-cn-wulanchabu-acdr-1.aliyuncs.com/xxx.mp4?xxxxx"
    },
    "usage": {
        "video_count": 1,
        "video_duration": 5,
        "video_ratio": "standard"
    }
}

Panggilan asinkron

Contoh ini menunjukkan panggilan asinkron, yang langsung mengembalikan ID task. Anda kemudian harus melakukan polling status task atau menunggu hingga task selesai.

Contoh permintaan
// Copyright (c) Alibaba, Inc. and its affiliates.

// DashScope SDK >= 2.20.1
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesis;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisParam;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.utils.JsonUtils;
import java.util.HashMap;
import java.util.Map;

public class Kf2vAsync {

    static {
        Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }

    // Mendapatkan kunci API DashScope (yang merupakan Kunci API Model Studio Anda) dari variabel lingkungan.
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    /**
     * Metode input gambar (pilih salah satu):
     *
     * [Metode 1] URL publik
     */
    static String firstFrameUrl = "https://wanx.alicdn.com/material/20250318/first_frame.png";
    static String lastFrameUrl = "https://wanx.alicdn.com/material/20250318/last_frame.png";

    /**
     * [Metode 2] Jalur file lokal (file://+jalur mutlak atau file:///+jalur mutlak)
     */
    // static String firstFrameUrl = "file://" + "/your/path/to/first_frame.png";   // Linux/macOS
    // static String lastFrameUrl = "file:///" + "C:/path/to/your/img.png";        // Windows

    public static void asyncCall(){

        // Mengatur parameter.
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("prompt_extend", true);
        parameters.put("resolution", "720P");

        VideoSynthesis videoSynthesis = new VideoSynthesis();
        VideoSynthesisParam param =
                VideoSynthesisParam.builder()
                        .apiKey(apiKey)
                        .model("wan2.2-kf2v-flash")
                        .prompt("Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view.")
                        .firstFrameUrl(firstFrameUrl)
                        .lastFrameUrl(lastFrameUrl)
                        .parameters(parameters)
                        .build();
        VideoSynthesisResult result = null;
        try {
            // Melakukan panggilan asinkron.
            result = videoSynthesis.asyncCall(param);
        } catch (ApiException | NoApiKeyException e){
            throw new RuntimeException(e.getMessage());
        } catch (InputRequiredException e) {
            throw new RuntimeException(e);
        }
        System.out.println(JsonUtils.toJson(result));

        String taskId = result.getOutput().getTaskId();

        System.out.println("taskId=" + taskId);

        try {
            result = videoSynthesis.wait(taskId, apiKey);
        } catch (ApiException | NoApiKeyException e){
            throw new RuntimeException(e.getMessage());
        }
        System.out.println(JsonUtils.toJson(result));
        System.out.println(JsonUtils.toJson(result.getOutput()));
    }

    public static void main(String[] args){
        asyncCall();
    }
}
Contoh respons
  1. Respons saat pembuatan task
{
    "request_id": "5dbf9dc5-4f4c-9605-85ea-xxxxxxxx",
    "output": {
        "task_id": "7277e20e-aa01-4709-xxxxxxxx",
        "task_status": "PENDING"
    }
}
  1. Contoh respons untuk task yang telah selesai

video_url berlaku selama 24 jam. Harap unduh video tersebut dalam periode ini.

{
    "request_id": "1625235c-c13e-93ec-aff7-xxxxxxxx",
    "output": {
        "task_id": "464a5e46-79a6-46fd-9823-xxxxxxxx",
        "task_status": "SUCCEEDED",
        "video_url": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.mp4?xxxxxx"
    },
    "usage": {
        "video_count": 1,
        "video_duration": 5,
        "video_ratio": "standard"
    }
}

Batasan

  • Retensi data: task_id dan video_url disimpan selama 24 jam, setelah itu tidak dapat diquery atau diunduh.
  • Dukungan audio: Layanan ini hanya menghasilkan video tanpa suara. Untuk menghasilkan audio, gunakan speech synthesis.
  • Content Moderation: Content Moderation memeriksa semua prompt input, gambar, dan video output. Jika ada konten yang melanggar kebijakan penggunaan, layanan akan mengembalikan error "IPInfringementSuspect" atau "DataInspectionFailed". Untuk detailnya, lihat Error codes.

Error codes

Jika pemanggilan model gagal, lihat Error codes untuk troubleshooting.

FAQ

T: Bagaimana cara menghasilkan rasio aspek tertentu?

J: Rasio aspek video output bergantung pada gambar frame pertama (first_frame_url). Namun, rasio yang tepat (misalnya 3:4 secara ketat) tidak dapat dijamin, dan mungkin sedikit menyimpang.

  • Mengapa rasio aspek menyimpang?

    Model menggunakan rasio aspek gambar input sebagai garis dasar dan menghitung resolusi valid terdekat berdasarkan total piksel dari pengaturan resolution yang dipilih. Karena lebar dan tinggi video harus merupakan kelipatan 16, model melakukan penyesuaian kecil pada resolusi akhir.

    • Sebagai contoh, jika Anda memberikan gambar input berukuran 750×1000 (rasio aspek 3:4 atau 0,75) dan menetapkan resolution ke "720P" (menargetkan sekitar 920.000 piksel), output aktual mungkin berupa 816×1104 (rasio aspek sekitar 0,739, dengan sekitar 900.000 piksel).
  • Saran:
    • Gambar Input: Untuk hasil terbaik, gunakan gambar frame pertama yang sesuai dengan rasio aspek target Anda.
    • Pasca-pemrosesan: Jika diperlukan rasio aspek yang ketat, gunakan tool pengeditan video untuk memotong video yang dihasilkan atau menambahkan batang hitam (black bars).

T: Bagaimana cara mendapatkan daftar putih nama domain untuk penyimpanan video?

J: Video yang dihasilkan oleh model disimpan di OSS. API mengembalikan URL publik temporary. Untuk mengonfigurasi daftar putih firewall untuk URL unduh ini, perhatikan hal berikut: Penyimpanan dasar dapat berubah secara dinamis. Topik ini tidak menyediakan daftar putih nama domain OSS tetap untuk mencegah masalah akses akibat informasi yang kedaluwarsa. Jika Anda memiliki kebutuhan kontrol keamanan, hubungi account manager Anda untuk mendapatkan daftar nama domain OSS terbaru.