ByteDance Doubao — Chinese LLM family tuned for the Volcano Engine cloud and ByteDance ecosystem.
Key strengths
- Chinese performance
- Volcano Engine native
- Good latency
- Multi-size tiers
ByteDance Doubao — Chinese LLM family tuned for the Volcano Engine cloud and ByteDance ecosystem.
ByteDance's bytedance/doubao-seedance-2-0 is a high-fidelity video generation model. It supports text-to-video and image-to-video workflows with configurable duration, aspect ratio, and resolution, plus first-frame and last-frame control for guided scene composition.
Generates cinematic clips with consistent motion, camera control, and optional native audio. Billed per second of generated content.
bytedance/doubao-seedance-2-0 is fully OpenAI-compatible — drop in your existing OpenAI Python or Node SDK and switch `baseURL` to `https://api.tokenlx.ai`. TokenLX transparently routes your requests to the optimal provider endpoint while preserving streaming, function-calling, and structured-output semantics.
Compare different providers across TokenLX · All locations.
Actual cost per million tokens across providers over the past 7 days.
Total usage per day on TokenLX (last 30 days).
TokenLX normalizes requests and responses across providers. Use any OpenAI SDK or our native SDK.
# ─── 文生视频示例 ───
import requests, time
headers = {"Authorization": "Bearer sk-tokenlx-...", "Content-Type": "application/json"}
resp = requests.post(
"https://api.tokenlx.ai/v1/aigc/video/tasks",
headers=headers,
json={
"model": "doubao-seedance-2-0",
"prompt": "一个女孩在雨中撑伞行走,电影感画面",
"duration": 5,
"aspectRatio": "16:9",
"resolution": "1080p",
},
)
task = resp.json()
task_id = task.get("taskId") or task.get("task_id") or task.get("id")
# 轮询结果
while True:
result = requests.get(
f"https://api.tokenlx.ai/v1/aigc/video/tasks/{'{'}task_id{'}'}?model=doubao-seedance-2-0",
headers=headers,
).json()
print("status:", result.get("status"))
if result.get("status") in ("completed", "succeeded", "done"):
print(result)
break
time.sleep(10)
# ─── 图生视频(首帧驱动)───
i2v_resp = requests.post(
"https://api.tokenlx.ai/v1/aigc/video/tasks",
headers=headers,
json={
"model": "doubao-seedance-2-0",
"prompt": "画面中的人物缓缓转头微笑",
"referenceImageUrls": ["https://example.com/first-frame.jpg"],
"videoInputMode": "first_frame",
"duration": 5,
"aspectRatio": "16:9",
"resolution": "720p",
},
)
print("taskId:", i2v_resp.json())
# 轮询方式同上
# ─── 图生视频(首尾帧驱动)───
fl_resp = requests.post(
"https://api.tokenlx.ai/v1/aigc/video/tasks",
headers=headers,
json={
"model": "doubao-seedance-2-0",
"prompt": "平滑过渡",
"referenceImageUrls": [
"https://example.com/start.jpg",
"https://example.com/end.jpg",
],
"videoInputMode": "first_last_frame",
"duration": 5,
"aspectRatio": "16:9",
"resolution": "720p",
},
)
print("taskId:", fl_resp.json())
# ─── 参考视频生成示例 ───
ref_resp = requests.post(
"https://api.tokenlx.ai/v1/aigc/video/tasks",
headers=headers,
json={
"model": "doubao-seedance-2-0",
"prompt": "保持相同的运动风格,换成海边场景",
"videoInputMode": "reference",
"referenceVideoUrls": ["https://example.com/reference.mp4"],
"duration": 5,
"aspectRatio": "16:9",
"resolution": "720p",
},
)
print("taskId:", ref_resp.json())
# ─── 音频驱动视频示例 ───
audio_resp = requests.post(
"https://api.tokenlx.ai/v1/aigc/video/tasks",
headers=headers,
json={
"model": "doubao-seedance-2-0",
"prompt": "人物对口型说话",
"videoInputMode": "first_frame",
"referenceImageUrls": ["https://example.com/face.jpg"],
"referenceAudioUrls": ["https://example.com/speech.mp3"],
"generateAudio": True,
"tools": [{"type": "lip_sync"}],
},
)
print("taskId:", audio_resp.json())Replace sk-aihubrouter-… with your key from the dashboard.
POST /v1/aigc/video/tasksGET /v1/aigc/video/tasks/{taskId}?model=doubao-seedance-2-0Response is raw upstream JSON passthrough — fields vary by channel.
Volcano Seedance passes parameters as prompt suffixes: e.g. --dur 5 --ratio 16:9 --rs 720p. The system auto-appends them to your prompt.
| Parameter | Type | Required | Description |
|---|---|---|---|
| model | string | Yes | Model name |
| prompt | string | Yes | Video description prompt |
| duration | int | No | Duration — appended to prompt as --dur |
| aspectRatio | string | No | Aspect ratio — appended as --ratio |
| resolution | string | No | Resolution — appended as --rs |
| size | string |
modelstringYespromptstringYesdurationintNoaspectRatiostringNoresolutionstringNoVideo size — appended as --size |
| seed | int | No | Random seed — appended as --seed, fixed value produces reproducible results |
| referenceImageUrls | array | Image-to-video | Reference image URLs for image-to-video generation |
| videoInputMode | string | No | Input mode. Auto-inferred if omitted: 1 image → first_frame, 2 → first_last_frame, ≥3 → reference first_framefirst_last_framereference |
| referenceVideoUrls | array | Ref-video | Reference video URLs for video-driven generation |
| referenceAudioUrls | array | Audio-drive | Audio URLs for audio-driven video (lip sync) |
| cameraFixed | bool | No | Fix camera position during audio-driven generation |
| tools | array | No | Tool list, e.g. [{"type": "lip_sync"}] for lip sync |
| generateAudio | bool | No | Output audio in audio-driven mode |
sizestringNoseedintNoreferenceImageUrlsarrayImage-to-videovideoInputModestringNofirst_framefirst_last_framereferencereferenceVideoUrlsarrayRef-videoreferenceAudioUrlsarrayAudio-drivecameraFixedboolNotoolsarrayNogenerateAudioboolNo