Seedance 2.0 API
Seedance 2.0 支持广泛视频工作流,包括文生视频、帧控制、参考图视频、视频生视频和可选音频输入。
模型 key
doubao/seedance-2.0-fast— Seedance 2.0 Fastdoubao/seedance-2.0— Seedance 2.0
支持的 mode 与输入
| 模型 | Mode | 名称 | 输入要求 |
|---|---|---|---|
doubao/seedance-2.0-fast |
text_to_video |
文生视频 | Prompt max 20000 chars Audio: 0-3 files, 15 MB, max 15s, formats mp3, wav |
doubao/seedance-2.0-fast |
frames_to_video |
首尾帧生成视频 | Prompt max 20000 chars Images start_frame,end_frame: 1-2 files, 30 MB, formats jpg, png, webp, bmp, gif |
doubao/seedance-2.0-fast |
reference_to_video |
参考图生成视频 | Prompt max 20000 chars Images reference: 0-9 files, 30 MB, formats jpeg, png, webp, bmp, tiff, gifAudio: 0-3 files, 15 MB, max 15s, formats mp3, wav |
doubao/seedance-2.0-fast |
video_to_video |
视频生成视频 | Prompt max 20000 chars Images reference: 0-9 files, 30 MB, formats jpeg, png, webp, bmp, tiff, gifVideos: 1-3 files, 50 MB, max 15s, formats mp4, mov Audio: 0-3 files, 15 MB, max 15s, formats mp3, wav |
doubao/seedance-2.0 |
text_to_video |
文生视频 | Prompt max 20000 chars Audio: 0-3 files, 15 MB, max 15s, formats mp3, wav |
doubao/seedance-2.0 |
frames_to_video |
首尾帧生成视频 | Prompt max 20000 chars Images start_frame,end_frame: 1-2 files, 30 MB, formats jpg, png, webp, bmp, gif |
doubao/seedance-2.0 |
reference_to_video |
参考图生成视频 | Prompt max 20000 chars Images reference: 0-9 files, 30 MB, formats jpeg, png, webp, bmp, tiff, gifAudio: 0-3 files, 15 MB, max 15s, formats mp3, wav |
doubao/seedance-2.0 |
video_to_video |
视频生成视频 | Prompt max 20000 chars Images reference: 0-9 files, 30 MB, formats jpeg, png, webp, bmp, tiff, gifVideos: 1-3 files, 50 MB, max 15s, formats mp4, mov Audio: 0-3 files, 15 MB, max 15s, formats mp3, wav |
参数
| 模型 | 参数 | 默认值 | 可选值 | 适用 mode |
|---|---|---|---|---|
doubao/seedance-2.0-fast |
duration |
5s |
4s, 5s, 6s, 7s, 8s, 9s, 10s, 11s, 12s, 13s, 14s, 15s |
全部 mode |
doubao/seedance-2.0-fast |
resolution |
720p |
480p, 720p |
全部 mode |
doubao/seedance-2.0-fast |
aspect_ratio |
16:9 |
16:9, 9:16, 1:1, 4:3, 3:4, 21:9, adaptive |
全部 mode |
doubao/seedance-2.0-fast |
audio |
false |
true, false |
全部 mode |
doubao/seedance-2.0-fast |
web_search |
false |
true, false |
全部 mode |
doubao/seedance-2.0 |
duration |
5s |
4s, 5s, 6s, 7s, 8s, 9s, 10s, 11s, 12s, 13s, 14s, 15s |
全部 mode |
doubao/seedance-2.0 |
resolution |
720p |
480p, 720p, 1080p |
全部 mode |
doubao/seedance-2.0 |
aspect_ratio |
16:9 |
16:9, 9:16, 1:1, 4:3, 3:4, 21:9 |
全部 mode |
doubao/seedance-2.0 |
audio |
false |
true, false |
全部 mode |
doubao/seedance-2.0 |
web_search |
false |
true, false |
全部 mode |
价格
| 模型 | 价格 |
|---|---|
doubao/seedance-2.0-fast |
每秒 2 credits;参数倍率:resolution={"480p":1,"720p":2} |
doubao/seedance-2.0 |
每秒 3 credits;参数倍率:resolution={"480p":1,"720p":2,"1080p":4} |
生产建议
- 显式传入
mode。 - 只使用上表列出的参数值。
- 媒体输入类 mode 请先用
POST /api/v1/files上传素材。 - 如果页面包含多个变体,请使用你真正需要的模型 key。
示例:文生视频
curl https://img2vid.net/api/v1/generations \
-H "Authorization: Bearer $BUBLE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao/seedance-2.0-fast",
"mode": "text_to_video",
"prompt": "A cinematic product launch shot with slow camera movement, premium lighting, and realistic motion",
"duration": "5s",
"resolution": "720p",
"aspect_ratio": "16:9",
"audio": "false",
"web_search": "false"
}'
示例:素材驱动视频
curl https://img2vid.net/api/v1/generations \
-H "Authorization: Bearer $BUBLE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "doubao/seedance-2.0-fast",
"mode": "frames_to_video",
"prompt": "Animate the source into a polished cinematic motion shot with natural camera movement",
"start_frame": "https://example.com/start.png",
"duration": "5s",
"resolution": "720p",
"aspect_ratio": "16:9",
"audio": "false",
"web_search": "false"
}'
SDK 示例
下面的示例使用本页的公开模型 key、mode 和参数值。片段假设你已经按快速开始初始化了 SDK client,并引入了对应语言需要的 SDK 类型。媒体输入类 mode 仍然需要先上传本地文件,再把返回的 URL 放入 image_urls、start_frame、video_urls 等公开字段。
JavaScript / TypeScript
const task = await buble.generations.create({
model: 'doubao/seedance-2.0-fast',
mode: 'text_to_video',
prompt:
'A cinematic product launch shot with slow camera movement, premium lighting, and realistic motion',
duration: '5s',
resolution: '720p',
aspect_ratio: '16:9',
audio: 'false',
web_search: 'false',
});
const result = await buble.generations.wait(task.data.id);
console.log(result.data.result?.videos?.[0]?.url);
Python
task = client.generations.create(
model="doubao/seedance-2.0-fast",
mode="text_to_video",
prompt="A cinematic product launch shot with slow camera movement, premium lighting, and realistic motion",
duration="5s",
resolution="720p",
aspect_ratio="16:9",
audio="false",
web_search="false",
)
result = client.generations.wait(task["data"]["id"])
print(result["data"]["result"]["videos"][0]["url"])
Go
task, err := client.Generations.Create(ctx, &buble.CreateGenerationRequest{
Model: "doubao/seedance-2.0-fast",
Mode: "text_to_video",
Prompt: "A cinematic product launch shot with slow camera movement, premium lighting, and realistic motion",
Params: map[string]any{
"duration": "5s",
"resolution": "720p",
"aspect_ratio": "16:9",
"audio": "false",
"web_search": "false",
},
})
if err != nil {
return err
}
result, err := client.Generations.Wait(ctx, task.Data.ID)
if err != nil {
return err
}
fmt.Println(result.Data.Result.Videos[0].URL)
Rust
let task = client.generations().create(
CreateGenerationRequest::new("doubao/seedance-2.0-fast")
.mode("text_to_video")
.prompt("A cinematic product launch shot with slow camera movement, premium lighting, and realistic motion")
.param("duration", "5s")?
.param("resolution", "720p")?
.param("aspect_ratio", "16:9")?
.param("audio", "false")?
.param("web_search", "false")?,
).await?;
let result = client
.generations()
.wait(&task.data.id, WaitOptions::default())
.await?;
Swift
let task = try await client.generations.create(
try CreateGenerationRequest(model: "doubao/seedance-2.0-fast")
.mode("text_to_video")
.prompt("A cinematic product launch shot with slow camera movement, premium lighting, and realistic motion")
.param("duration", "5s")
.param("resolution", "720p")
.param("aspect_ratio", "16:9")
.param("audio", "false")
.param("web_search", "false")
)
let result = try await client.generations.wait(task.data.id)
print(result.data.result?.videos?.first?.url.absoluteString ?? "")
Dart / Flutter
final task = await client.generations.create(
CreateGenerationRequest(
model: 'doubao/seedance-2.0-fast',
mode: 'text_to_video',
prompt: 'A cinematic product launch shot with slow camera movement, premium lighting, and realistic motion',
).withParam('duration', '5s').withParam('resolution', '720p').withParam('aspect_ratio', '16:9').withParam('audio', 'false').withParam('web_search', 'false'),
);
final result = await client.generations.wait(task.data.id);
print(result.data.result?.videos.firstOrNull?.url);
Elixir
{:ok, task} =
Buble.Generations.create(client, %{
model: "doubao/seedance-2.0-fast",
mode: "text_to_video",
prompt: "A cinematic product launch shot with slow camera movement, premium lighting, and realistic motion",
duration: "5s",
resolution: "720p",
aspect_ratio: "16:9",
audio: "false",
web_search: "false"
})
{:ok, result} = Buble.Generations.wait(client, task["data"]["id"])
IO.puts(result["data"]["result"]["videos"] |> List.first() |> Map.fetch!("url"))
Java
Envelope<GenerationTask> task = client.generations().create(
CreateGenerationRequest.builder()
.model("doubao/seedance-2.0-fast")
.mode("text_to_video")
.prompt("A cinematic product launch shot with slow camera movement, premium lighting, and realistic motion")
.param("duration", "5s")
.param("resolution", "720p")
.param("aspect_ratio", "16:9")
.param("audio", "false")
.param("web_search", "false")
.build());
Envelope<GenerationTask> result = client.generations().wait(task.getData().getId());
.NET
var task = await client.Generations.CreateAsync(new CreateGenerationRequest
{
Model = "doubao/seedance-2.0-fast",
Mode = "text_to_video",
Prompt = "A cinematic product launch shot with slow camera movement, premium lighting, and realistic motion"
}.WithParam("duration", "5s").WithParam("resolution", "720p").WithParam("aspect_ratio", "16:9").WithParam("audio", "false").WithParam("web_search", "false"));
var result = await client.Generations.WaitAsync(task!.Data!.Id!);
PHP
$task = $client->generations()->create(
CreateGenerationRequest::make(
model: 'doubao/seedance-2.0-fast',
mode: 'text_to_video',
prompt: 'A cinematic product launch shot with slow camera movement, premium lighting, and realistic motion',
)
->withParam('duration', '5s')
->withParam('resolution', '720p')
->withParam('aspect_ratio', '16:9')
->withParam('audio', 'false')
->withParam('web_search', 'false')
);
$result = $client->generations()->wait($task['data']['id']);
Ruby
task = client.generations.create(
model: "doubao/seedance-2.0-fast",
mode: "text_to_video",
prompt: "A cinematic product launch shot with slow camera movement, premium lighting, and realistic motion",
duration: "5s",
resolution: "720p",
aspect_ratio: "16:9",
audio: "false",
web_search: "false"
)
result = client.generations.wait(task.dig("data", "id"))
puts result.dig("data", "result", "videos", 0, "url")