Seedance 2.0
透過官方 ModelArk 任務 API 使用 Seedance 2.0 生成影片:文字轉影片、首尾影格,以及圖片、影片和音訊參考,480p 到 4K。
Seedance 2.0 是 ByteDance 的影片生成模型(Dreamina Seedance 2.0)。傳送官方 ModelArk 任務請求主體,保留回傳的任務 ID,再從該任務讀取生成完成的影片。圖片、影片和音訊以 URL 形式放在 content 中。
模型 ID
| 模型 ID | 解析度 | 說明 |
|---|---|---|
dreamina-seedance-2-0 | 480p、720p、1080p、4K | 完整模型 |
dreamina-seedance-2-0-fast | 480p、720p | 每秒價格更低 |
dreamina-seedance-2-0-mini | 480p、720p | 每秒價格最低 |
三個 ID 接受相同的參數。目前價格見模型頁。
快速範例
curl https://api.seedrouter.ai/v1/contents/generations/tasks \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "dreamina-seedance-2-0",
"content": [{"type": "text", "text": "A red paper boat drifts across a calm pond at sunrise, slow dolly-in"}],
"resolution": "720p",
"ratio": "16:9",
"duration": 5,
"generate_audio": true
}'端點
POST https://api.seedrouter.ai/v1/contents/generations/tasks| 標頭 | 值 |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/json |
請求主體就是官方 ModelArk 的「建立影片生成任務」請求。如果你已經在呼叫 ModelArk,只需把 base URL 改成 https://api.seedrouter.ai/v1 並更換 API 金鑰。回應是 {"id": "task_..."},而不是生成完成的影片。請把 API 金鑰保存在伺服器端程式碼中。
參數
| 名稱 | 型別 | 必填 | 預設值 | 說明 |
|---|---|---|---|---|
model | string | 是 | — | 上面三個模型 ID 之一。 |
content | object[] | 是 | — | 提示詞和媒體;見下文。 |
resolution | enum | 否 | 720p | 480p、720p、1080p、4k;Fast 和 Mini ID 只接受 480p 和 720p。 |
ratio | enum | 否 | adaptive | 16:9、4:3、1:1、3:4、9:16、21:9、adaptive。 |
duration | integer | 否 | 5 | 4–15 秒,或傳 -1 由模型決定。 |
generate_audio | boolean | 否 | true | 隨影片一起生成聲音。 |
watermark | boolean | 否 | false | 加上浮水印。 |
return_last_frame | boolean | 否 | false | 同時以圖片 URL 形式回傳最後一個影格。 |
execution_expires_after | integer | 否 | 172800 | 3600–259200 秒。超過這個時間仍未完成的任務會變為 expired,且不計費。 |
priority | integer | 否 | 0 | 0–9。 |
safety_identifier | string | 否 | — | 識別你的終端使用者,1–64 個字元。使用雜湊值即可。 |
service_tier | enum | 否 | default | 只能是 default。 |
content_filter | boolean | 否 | true | SeedRouter 擴充欄位。設為 false 會關閉這次請求的內容過濾。 |
content 項目
| 項目 | 結構 | 角色 | 限制 |
|---|---|---|---|
| 文字 | {"type": "text", "text": "..."} | — | 一則。 |
| 圖片 | {"type": "image_url", "image_url": {"url": "https://..."}, "role": "..."} | first_frame、last_frame、reference_image | 最多 9 張參考圖片。 |
| 影片 | {"type": "video_url", "video_url": {"url": "https://..."}, "role": "reference_video"} | reference_video | 最多 3 段。 |
| 音訊 | {"type": "audio_url", "audio_url": {"url": "https://..."}, "role": "reference_audio"} | reference_audio | 最多 3 段。需要同時提供參考圖片或參考影片。 |
未知欄位會被拒絕。不支援:seed、callback_url(請改為輪詢任務)、draft 和 draft_task、tools、僅適用於 1.x 的 frames 和 camera_fixed,以及 output_format 和 omni_reference_task_type(僅限 Seedance 2.5)。任務無法取消或刪除。
模式
模式由 content 項目決定;沒有模式參數。
| 模式 | content |
|---|---|
| 文字轉影片 | 一則文字項目 |
| 首影格 | 文字(選用)+ 一張角色為 first_frame 的圖片,或一張未指定角色的圖片 |
| 首尾影格 | 文字(選用)+ 一張 first_frame 圖片 + 一張 last_frame 圖片 |
| 多模態參考 | 文字 + reference_image、reference_video 和 reference_audio 項目的任意組合 |
首影格類模式不能與參考項目混用。有多張圖片或包含其他任何媒體時,每張圖片都必須指定 role。
參考範例
curl https://api.seedrouter.ai/v1/contents/generations/tasks \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "dreamina-seedance-2-0",
"content": [
{"type": "text", "text": "The character from the image walks through the market in the video, same camera move"},
{"type": "image_url", "image_url": {"url": "https://example.com/character.png"}, "role": "reference_image"},
{"type": "video_url", "video_url": {"url": "https://example.com/market.mp4"}, "role": "reference_video"}
],
"ratio": "adaptive",
"duration": 8
}'請把範例 URL 換成你自己、可存取的檔案。
媒體輸入
本 API 只接受 URL 參考。不接受 Base64、data: URL、asset:// ID 和 multipart 上傳。Playground 會先把所選檔案上傳到儲存空間,再提交其 URL。
媒體必須是可公開存取的 HTTP(S) URL,並符合模型的官方限制:
| 媒體 | 格式 | 限制 |
|---|---|---|
| 圖片 | JPEG、PNG、WebP、BMP、TIFF、GIF、HEIC、HEIF | 小於 30 MB;寬和高 300–6000 px;長寬比(寬 / 高)0.4–2.5;1–9 張參考圖片 |
| 影片 | MP4、MOV(H.264 或 H.265) | 每段 2–15 秒,最多 3 段,總長不超過 15 秒;不超過 200 MB;24–60 FPS;寬和高 300–6000 px;長寬比 0.4–2.5;407,696–8,295,044 像素(寬 × 高) |
| 音訊 | WAV、MP3 | 每段 2–15 秒,最多 3 段,總長不超過 15 秒;需要同時提供參考圖片或參考影片;不超過 15 MB |
模型不支援包含真人臉孔的參考圖片和參考影片。
媒體會在任務開始時、任何生成之前接受檢查。媒體違反上述任一限制的任務會以 failed 結束,附帶 invalid_request_error 和一則指出所違反規則的訊息,例如 The request was rejected: content reference videos must total at most 15 seconds.,且不計費。當時無法讀取的檔案會交給模型,由模型決定接受或拒絕;無論哪種情況,失敗的任務都不計費。
計費維度
目前費率請查看模型定價區段。Seedance 2.0 按影片 token 計費,這是官方的計費單位:
video tokens = (output seconds + reference video seconds) × width × height × 24 / 1024每百萬 token 的費率取決於輸出解析度,以及請求是否包含參考影片;包含參考影片的請求,其全部 token 都按較低的費率計費。文字、圖片和音訊輸入不計費。在 16:9 下,每秒在 480p(864×496)為 10,044 個 token,720p 為 21,600,1080p 為 48,600,4K 為 194,400。
扣款以生成完成的影片所回報的 token(usage.completion_tokens)為準,因此 duration: -1 會按實際生成的長度計費。算繪出的片段會略長於請求的長度:一個 5 秒、720p、16:9 的請求會算繪 121 個影格,回報 108,900 個 token,而不是 108,000。最終扣款請在帳號的用量記錄中查看。失敗和逾期的任務不計費。
輸出結構
提交後會回傳任務 ID:
{"id": "task_..."}查詢任務
curl https://api.seedrouter.ai/v1/contents/generations/tasks/YOUR_TASK_ID \
-H "Authorization: Bearer $SEEDROUTER_API_KEY"每 10–20 秒輪詢一次,直到 status 變為 succeeded、failed 或 expired。輪詢過程中發生網路逾時,並不代表生成失敗:請保留任務 ID 並繼續查詢。不要為了查看進度而再建立一個任務。
完整輪詢範例
請在上方的 Python 提交範例之後執行這段程式碼。
import time
deadline = time.monotonic() + 1800
while time.monotonic() < deadline:
result = requests.get(
f"https://api.seedrouter.ai/v1/contents/generations/tasks/{task_id}",
headers={"Authorization": f"Bearer {os.environ['SEEDROUTER_API_KEY']}"},
timeout=30,
)
result.raise_for_status()
task = result.json()
if task["status"] == "succeeded":
print(task["content"]["video_url"])
break
if task["status"] in ("failed", "expired"):
raise RuntimeError(task["error"]["message"])
time.sleep(15)
else:
raise TimeoutError(f"Still waiting. Resume polling task {task_id}.")成功的任務
{
"id": "task_...",
"model": "dreamina-seedance-2-0",
"status": "succeeded",
"content": {
"video_url": "https://static.seedrouter.ai/media/tasks/task_example/0.mp4",
"last_frame_url": "https://static.seedrouter.ai/media/tasks/task_example/last_frame/0.jpg"
},
"usage": {"completion_tokens": 108900, "total_tokens": 108900},
"seed": 42,
"resolution": "720p",
"ratio": "16:9",
"duration": 5,
"framespersecond": 24,
"generate_audio": true,
"draft": false,
"output_format": "mp4",
"service_tier": "default",
"execution_expires_after": 172800,
"priority": 0,
"created_at": 1790321515,
"updated_at": 1790321652
}| 欄位 | 含義 |
|---|---|
id | 請保留該 ID 供後續查詢使用。 |
status | queued、running、succeeded、failed 或 expired。 |
content.video_url | 生成的影片。 |
content.last_frame_url | 最後一個影格,在 return_last_frame 為 true 時回傳。 |
usage.completion_tokens | 生成完成的影片的影片 token 數,即計費數量。 |
duration、resolution、ratio、framespersecond、seed | 實際算繪時的值;seed 是模型選定的值。 |
created_at、updated_at | 以秒為單位的 Unix 時間戳記。 |
error | 任務失敗或逾期時回傳 {"code", "message"}。 |
影片 URL 託管在我們的儲存空間上。需要長期保存時,請把檔案儲存到你自己的儲存空間中。
列出任務
curl "https://api.seedrouter.ai/v1/contents/generations/tasks?page_num=1&page_size=20&filter.status=succeeded" \
-H "Authorization: Bearer $SEEDROUTER_API_KEY"回傳 {"total": N, "items": [...]},包含最近 7 天的任務物件,由新到舊排列。page_num 和 page_size 的範圍是 1–500(預設分別為 1 和 20)。篩選條件:filter.status、filter.model、filter.task_ids(可重複)和 filter.service_tier。
錯誤
在任務建立之前就被拒絕的請求,會回傳 HTTP 錯誤狀態碼和一個 error 物件,且不計費。受理之後才失敗的任務,查詢時會回傳 HTTP 200,並帶有 status: "failed"(或 "expired")和一個 error 物件。被內容過濾攔下的輸出會以 content_policy_violation 失敗;執行超過 execution_expires_after 的任務會以 expired 結束,錯誤碼為 task_expired。
錯誤碼、HTTP 狀態碼和重試建議請參見共用錯誤目錄。
{
"id": "task_...",
"model": "dreamina-seedance-2-0",
"status": "failed",
"error": {
"code": 60001,
"message": "The request was rejected by the content policy. Please revise the prompt or input images."
}
}如果提交本身逾時,請先檢查你的任務清單再重新提交:第一次請求有可能已經被受理。
實用建議
- 用完整的句子描述主體、動作、運鏡和光線。
- 先用 480p 和較短的
duration產出草稿,再用更高的解析度算繪選定的版本。 - 用
return_last_frame串接鏡頭:把回傳的影格當作下一個任務的first_frame。
