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。
