Akses model generasi video ByteDance Seedance 2.0 melalui API terpadu TokenHub. Mendukung text-to-video, image-to-video, pengeditan video, generasi berbasis audio, dan lainnya. Panduan ini memandu Anda melalui proses integrasi lengkap.
th-xxxxxxxxxxxx...)https://tokenhub.store/api/v1Semua request memerlukan API Key di header:
Authorization: Bearer th-your-api-keyPOST/videos/generationsBuat tugas pembuatan video, mengembalikan task ID
GET/videos/generations/{task_id}Periksa status task, mengembalikan URL video saat berhasil
| ID Model | Input | Harga | Deskripsi |
|---|---|---|---|
| doubao-seedance-2.0 | Tanpa input video | $6.970/1M (1080p $7.727) | Flagship model, highest quality |
| Dengan input video | $4.242/1M (1080p $4.697) | Model unggulan dengan input video, hemat biaya. | |
| doubao-seedance-2.0-fast | Tanpa input video | $5.606/1M | Fast model, quicker generation |
| Dengan input video | $3.333/1M | Opsi paling terjangkau |
Detail Billing:
Contoh: doubao-seedance-2.0 tanpa input video (≤720p), menghasilkan video 5 detik dengan ~1M token → biaya ≈ $6.970
| Parameter | Tipe | Wajib | Deskripsi |
|---|---|---|---|
| model | string | Wajib | Model ID, mis. "doubao-seedance-2.0" |
| prompt | string | Wajib | Teks deskripsi video. Prompt bahasa Inggris umumnya menghasilkan hasil yang lebih baik |
| duration | number | Opsional | Durasi video (detik), rentang 4–15, default 5 |
| resolution | string | Opsional | "480p", "720p", atau "1080p" (default 720p; 1080p hanya untuk doubao-seedance-2.0) |
| aspect_ratio | string | Opsional | Rasio aspek: "adaptive" (default), "16:9", "9:16", "1:1", dll. |
| image_url | string | Opsional | URL gambar referensi (image-to-video) |
| image_urls | string[] | Opsional | Array berisi beberapa URL gambar referensi |
| video_url | string | Opsional | URL video referensi (video editing / video-to-video) |
| video_urls | string[] | Opsional | Array berisi beberapa URL video referensi (maks 3) |
| video_durations | number[] | Opsional | Array durasi per video dalam detik, mis. [3, 5] |
| input_video_duration | number | Opsional | Total durasi video input dalam detik (alternatif untuk video_durations) |
| audio_url | string | Opsional | URL audio referensi (musik latar / SFX) |
| audio_urls | string[] | Opsional | Array berisi beberapa URL audio referensi (maks 3) |
| generate_audio | boolean | Opsional | Apakah akan menghasilkan audio, default true |
| watermark | boolean | Opsional | Apakah akan menambahkan watermark, default false |
| content | array | Opsional | Array aset media. Setiap item: { type: "image_url", image_url: { url }, role }. Role yang didukung: first_frame (maks 1), last_frame (maks 1), reference_image, reference_video, reference_audio |
Anda dapat menggabungkan teks, gambar, video, dan audio sebagai input. Perhatikan batas berikut:
Penggunaan paling dasar — jelaskan sebuah adegan dalam teks untuk menghasilkan video.
curl -X POST https://tokenhub.store/api/v1/videos/generations \
-H "Authorization: Bearer th-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao-seedance-2.0",
"prompt": "A golden retriever running on a sunny beach, waves crashing in the background, cinematic slow motion, 4K quality",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"watermark": false
}'Respons:
{
"id": "xxxxxx-task-id",
"object": "video.generation.task",
"model": "doubao-seedance-2.0",
"status": "queued",
"created": 1719900000
}Pembuatan video bersifat asinkron — lakukan polling status hingga selesai.
# Poll task status using the task_id from creation response
curl https://tokenhub.store/api/v1/videos/generations/YOUR_TASK_ID \
-H "Authorization: Bearer th-your-api-key"Task sedang berlangsung:
{
"id": "YOUR_TASK_ID",
"object": "video.generation.task",
"model": "doubao-seedance-2.0",
"status": "running",
"created": 1719900000
}Task selesai (URL video diterima):
{
"id": "YOUR_TASK_ID",
"object": "video.generation.task",
"model": "doubao-seedance-2.0",
"status": "succeeded",
"created": 1719900000,
"data": [
{
"video_url": "https://tokenhub-data.tos-cn-hongkong.volces.com/user_sd_file/YOUR_TASK_ID.mp4",
"cover_image_url": "https://tokenhub-data.tos-cn-hongkong.volces.com/user_sd_file/YOUR_TASK_ID_cover.jpg"
}
],
"usage": {
"video_duration": 5
}
}import requests
import time
API_BASE = "https://tokenhub.store/api/v1"
API_KEY = "th-your-api-key"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
# Step 1: Create video generation task
payload = {
"model": "doubao-seedance-2.0",
"prompt": "A majestic eagle soaring over snow-capped mountains, golden hour lighting, cinematic aerial shot",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"watermark": False
}
resp = requests.post(f"{API_BASE}/videos/generations", json=payload, headers=headers)
task = resp.json()
task_id = task["id"]
print(f"Task created: {task_id}, status: {task['status']}")
# Step 2: Poll for result
while True:
resp = requests.get(f"{API_BASE}/videos/generations/{task_id}", headers=headers)
result = resp.json()
status = result["status"]
print(f"Status: {status}")
if status == "succeeded":
video_url = result["data"][0]["video_url"]
duration = result["usage"]["video_duration"]
print(f"Video ready! Duration: {duration}s")
print(f"URL: {video_url}")
break
elif status == "failed":
print(f"Failed: {result.get('error', {}).get('message', 'Unknown error')}")
break
time.sleep(5)const API_BASE = "https://tokenhub.store/api/v1";
const API_KEY = "th-your-api-key";
const headers = {
"Authorization": `Bearer ${API_KEY}`,
"Content-Type": "application/json"
};
// Step 1: Create task
const createResp = await fetch(`${API_BASE}/videos/generations`, {
method: "POST",
headers,
body: JSON.stringify({
model: "doubao-seedance-2.0",
prompt: "A majestic eagle soaring over snow-capped mountains, cinematic aerial shot",
duration: 5,
resolution: "720p",
aspect_ratio: "16:9",
watermark: false,
}),
});
const task = await createResp.json();
console.log("Task created:", task.id);
// Step 2: Poll for result
const poll = async () => {
while (true) {
const resp = await fetch(`${API_BASE}/videos/generations/${task.id}`, { headers });
const result = await resp.json();
console.log("Status:", result.status);
if (result.status === "succeeded") {
console.log("Video URL:", result.data[0].video_url);
console.log("Duration:", result.usage.video_duration, "seconds");
return result;
}
if (result.status === "failed") {
console.error("Failed:", result.error?.message);
return result;
}
await new Promise(r => setTimeout(r, 5000));
}
};
await poll();import requests, time
API_BASE = "https://tokenhub.store/api/v1"
headers = {
"Authorization": "Bearer th-your-api-key",
"Content-Type": "application/json"
}
# Image-to-Video with a single reference image
payload = {
"model": "doubao-seedance-2.0",
"prompt": "The woman in the photo turns to face the camera and smiles warmly, her hair gently blowing in the wind",
"duration": 5,
"resolution": "720p",
"image_url": "https://your-bucket.com/portrait.jpg",
"watermark": False
}
resp = requests.post(f"{API_BASE}/videos/generations", json=payload, headers=headers)
task_id = resp.json()["id"]
print(f"Task: {task_id}")
# Poll for result
while True:
r = requests.get(f"{API_BASE}/videos/generations/{task_id}", headers=headers).json()
if r["status"] == "succeeded":
print(f"Done: {r['data'][0]['video_url']}")
break
elif r["status"] == "failed":
print(f"Error: {r.get('error', {}).get('message')}")
break
time.sleep(5)Saat gambar input Anda berisi orang nyata, TokenHub secara otomatis mengarahkan request ke upstream yang mendukung pembuatan orang nyata. Tidak perlu perubahan pada client.
Dipicu otomatis saat filter konten upstream mendeteksi orang nyata pada gambar input.
Struktur request identik dengan image-to-video biasa — body POST /v1/videos/generations yang sama.
Polling GET sama — panggil /v1/videos/generations/{id} dengan id apa pun yang dikembalikan POST, hingga status menjadi succeeded atau failed. Penulisan ulang id ditangani di sisi server; Anda selalu melihat id yang sama selama request berlangsung.
Dikembalikan dengan status 400 saat tidak ada provider yang mendukung orang nyata yang dikonfigurasi untuk akun Anda. Hubungi administrator Anda untuk mengaktifkan provider yang didukung.
Dikembalikan melalui GET dengan status: failed saat persiapan aset upstream melebihi 5 menit. Aman untuk mencoba ulang request.
pat-id bersifat opak bagi client Anda — terus polling sampai status berubah.
# POST
curl -X POST https://tokenhub.store/api/v1/videos/generations \
-H "Authorization: Bearer $TH_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao-seedance-2.0",
"prompt": "let her dance and spin",
"duration": 8,
"resolution": "480p",
"content": [
{ "type": "image_url", "image_url": { "url": "https://example.com/portrait.png" }, "role": "first_frame" }
]
}'
# → {"id":"pat-abc123","status":"queued"}
# GET (asset still uploading)
curl https://tokenhub.store/api/v1/videos/generations/pat-abc123 -H "Authorization: Bearer $TH_KEY"
# → {"id":"pat-abc123","status":"queued"}
# GET (upstream task running)
# → {"id":"pat-abc123","status":"running"}
# GET (complete — id stays pat-, video_url in data)
# → {"id":"pat-abc123","status":"succeeded","data":[{"video_url":"..."}]}Format yang direkomendasikan: [Subject] + [Action] + [Environment/Background] + [Camera/Style]
"A young woman walking through a cherry blossom garden, petals falling in slow motion, soft natural lighting, cinematic 35mm film look""Close-up of hands pouring latte art into a ceramic cup, steam rising, warm cafe ambiance, shallow depth of field""Aerial drone shot of a winding river through autumn forest, golden and red leaves, morning mist, 4K cinematic"Daftar ke TokenHub dan mulai gunakan Seedance 2.0 Video Generation API sekarang
© 2026 TokenHub · Powered by ByteDance Seedance 2.0 · support@tokenhub.store