由 0G Foundation 提供
ByteDance Seedance 2.0 text-to-video and image-to-video, with first/last-frame control and multimodal references (images, video, audio). 4–15 second clips at 480p, 720p, 1080p or 4K, with optional generated audio. Billed on the tokens the vendor reports for each clip; jobs with a reference video use a lower rate.
起 $4
供應商回報的每 1M 影片詞元
480p · 720p · 1080p · 4k
計費分級 — 不是您傳送的大小
使用參考影片時: 480p $4.3 · 720p $4.3 · 1080p $4.7 · 4k $2.4 每 100 萬詞元
非同步 API — 影片生成使用非同步流程:提交任務、輪詢直到完成,再從單獨的端點下載檔案。生成需要數分鐘,因此請每 3-5 秒輪詢一次。以下範例展示三個步驟。
# 1. Submit the job. model, prompt and seconds are required. Each account may hold only a small number of
# unfinished jobs at once — 5 by default, set per deployment — and one over that returns 429
# video_jobs_in_flight_limit.
#
# The model's own options go under "metadata"; every field and the values it accepts are listed below.
# Media references go in metadata.content as {type, <type>: {url}, role}. Images and reference audio take a URL
# or a base64 data: URI (the whole request is capped at 24 MB); reference videos must be URLs. First/last frame
# and reference media cannot be mixed in one request.
curl "https://router-api.0g.ai/v1/videos" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-d '{
"model": "bytedance/seedance-2.0",
"prompt": "A cat surfing a wave at sunset",
"seconds": 5,
"metadata": {
"resolution": "720p",
"ratio": "adaptive",
"generate_audio": true,
"return_last_frame": true,
"watermark": false
}
}'
# Response: {"id": "v0_426354818031858", "status": "queued", "provider_address": "0x..."}
# 2. Poll until status is "completed". Generation takes minutes — 3-5s is a sane interval. The poll answers
# 200 and reports the job's own status, so a failure arrives as 200 + {"status":"failed"}, NOT as an error
# code. The SUBMIT response echoes what you sent; the POLL response reports what was actually rendered — so
# reconcile against the poll. Which fields carry that answer depends on the upstream:
# usage.output_video_duration when the provider reported a duration, size/seconds on some providers and not
# others. Read what is present rather than assuming a particular field.
curl "https://router-api.0g.ai/v1/videos/<VIDEO_ID>" \
-H "Authorization: Bearer <YOUR_API_KEY>"
# 3. Download the finished file. This is where 409 / 424 / 429 live: 409 = not ready yet, 429 = too many
# concurrent downloads (both retryable), 424 = the job failed and has no output (terminal).
curl "https://router-api.0g.ai/v1/videos/<VIDEO_ID>/content" \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-o video.mp4
| 輸入 | 角色 | 類型 | 上限 | 情境 |
|---|---|---|---|---|
| 首幀 | first_frame | 圖片 | 1 | 首/末幀 |
| 末幀需要 首幀 | last_frame | 圖片 | 1 | 首/末幀 |
| 參考圖片 | reference_image | 圖片 | 9 | 多模態參考 |
| 參考影片 | reference_video | 影片 | 3 | 多模態參考 |
| 參考音訊 | reference_audio | 音訊 | 3 | 多模態參考 |
Media references go in metadata.content as {type, <type>: {url}, role}. Images and reference audio take a URL or a base64 data: URI (the whole request is capped at 24 MB); reference videos must be URLs. First/last frame and reference media cannot be mixed in one request.
| 欄位 | 值 | 預設 |
|---|---|---|
| metadata.resolution | 480p · 720p · 1080p · 4k | 720p |
| metadata.ratio | adaptive · 16:9 · 4:3 · 1:1 · 3:4 · 9:16 · 21:9 | adaptive |
| seconds | 4–15s | 5 |
| metadata.generate_audio | true · false | true |
| metadata.return_last_frame | true · false | true |
| metadata.watermark | true · false | false |
| metadata.seed | 任意整數 | — |
Billed by the tokens the vendor reports; jobs with a reference video use the lower video-input rate.
供應商路由
使用 X-0G-Provider-* 請求標頭,控制哪個供應商處理您的請求。
X-0G-Provider-Address 固定供應商;X-0G-Provider-Identity 固定要透過該供應商的哪個上游進行路由。這兩個值都來自 GET /v1/providers 回應中的 address 與 provider_identity 欄位。兩者搭配即可指定某個供應商的特定上游。若兩者都不傳送,路由會依價格與健康狀況挑選,和先前完全相同。
curl "https://router-api.0g.ai/v1/videos" \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-H "X-0G-Provider-Address: <PROVIDER_ADDRESS>" \
-H "X-0G-Provider-Identity: <UPSTREAM>" \
-H "X-0G-Provider-Sort: latency" \
-H "X-0G-Provider-Allow-Fallbacks: true" \
-d '{
"model": "bytedance/seedance-2.0",
"prompt": "A cat surfing a wave at sunset",
"seconds": 6
}'