Seedance 1.5 Pro API

Seedance 1.5 Pro 是稳定的视频模型,适合文生视频和帧控制图生视频。

模型 key

  • doubao/seedance-1.5-pro — Seedance 1.5 pro

支持的 mode 与输入

模型 Mode 名称 输入要求
doubao/seedance-1.5-pro text_to_video 文生视频 Prompt max 2000 chars
doubao/seedance-1.5-pro frames_to_video 首尾帧生成视频 Prompt max 2000 chars
Images start_frame,end_frame: 1-2 files, 10 MB, formats jpg, png, webp

参数

模型 参数 默认值 可选值 适用 mode
doubao/seedance-1.5-pro duration 4s 4s, 5s, 6s, 7s, 8s, 9s, 10s, 11s, 12s 全部 mode
doubao/seedance-1.5-pro resolution 720p 480p, 720p, 1080p 全部 mode
doubao/seedance-1.5-pro aspect_ratio 16:9 16:9, 9:16, 1:1, 4:3, 3:4, 21:9 全部 mode
doubao/seedance-1.5-pro audio false true, false 全部 mode
doubao/seedance-1.5-pro camera_fixed false true, false 全部 mode

价格

模型 价格
doubao/seedance-1.5-pro 每秒 2 credits;参数倍率:resolution={"480p":1,"720p":2,"1080p":3}

生产建议

  • 显式传入 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-1.5-pro",
    "mode": "text_to_video",
    "prompt": "A cinematic product launch shot with slow camera movement, premium lighting, and realistic motion",
    "duration": "4s",
    "resolution": "720p",
    "aspect_ratio": "16:9",
    "audio": "false",
    "camera_fixed": "false"
  }'

示例:素材驱动视频

curl https://img2vid.net/api/v1/generations \
  -H "Authorization: Bearer $BUBLE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao/seedance-1.5-pro",
    "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": "4s",
    "resolution": "720p",
    "aspect_ratio": "16:9",
    "audio": "false",
    "camera_fixed": "false"
  }'

SDK 示例

下面的示例使用本页的公开模型 key、mode 和参数值。片段假设你已经按快速开始初始化了 SDK client,并引入了对应语言需要的 SDK 类型。媒体输入类 mode 仍然需要先上传本地文件,再把返回的 URL 放入 image_urlsstart_framevideo_urls 等公开字段。

JavaScript / TypeScript

const task = await buble.generations.create({
  model: 'doubao/seedance-1.5-pro',
  mode: 'text_to_video',
  prompt:
    'A cinematic product launch shot with slow camera movement, premium lighting, and realistic motion',
  duration: '4s',
  resolution: '720p',
  aspect_ratio: '16:9',
  audio: 'false',
  camera_fixed: '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-1.5-pro",
    mode="text_to_video",
    prompt="A cinematic product launch shot with slow camera movement, premium lighting, and realistic motion",
    duration="4s",
    resolution="720p",
    aspect_ratio="16:9",
    audio="false",
    camera_fixed="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-1.5-pro",
	Mode:   "text_to_video",
	Prompt: "A cinematic product launch shot with slow camera movement, premium lighting, and realistic motion",
	Params: map[string]any{
		"duration": "4s",
		"resolution": "720p",
		"aspect_ratio": "16:9",
		"audio": "false",
		"camera_fixed": "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-1.5-pro")
        .mode("text_to_video")
        .prompt("A cinematic product launch shot with slow camera movement, premium lighting, and realistic motion")
        .param("duration", "4s")?
        .param("resolution", "720p")?
        .param("aspect_ratio", "16:9")?
        .param("audio", "false")?
        .param("camera_fixed", "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-1.5-pro")
        .mode("text_to_video")
        .prompt("A cinematic product launch shot with slow camera movement, premium lighting, and realistic motion")
        .param("duration", "4s")
        .param("resolution", "720p")
        .param("aspect_ratio", "16:9")
        .param("audio", "false")
        .param("camera_fixed", "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-1.5-pro',
    mode: 'text_to_video',
    prompt: 'A cinematic product launch shot with slow camera movement, premium lighting, and realistic motion',
  ).withParam('duration', '4s').withParam('resolution', '720p').withParam('aspect_ratio', '16:9').withParam('audio', 'false').withParam('camera_fixed', '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-1.5-pro",
    mode: "text_to_video",
    prompt: "A cinematic product launch shot with slow camera movement, premium lighting, and realistic motion",
    duration: "4s",
    resolution: "720p",
    aspect_ratio: "16:9",
    audio: "false",
    camera_fixed: "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-1.5-pro")
                .mode("text_to_video")
                .prompt("A cinematic product launch shot with slow camera movement, premium lighting, and realistic motion")
                .param("duration", "4s")
                .param("resolution", "720p")
                .param("aspect_ratio", "16:9")
                .param("audio", "false")
                .param("camera_fixed", "false")
                .build());

Envelope<GenerationTask> result = client.generations().wait(task.getData().getId());

.NET

var task = await client.Generations.CreateAsync(new CreateGenerationRequest
{
    Model = "doubao/seedance-1.5-pro",
    Mode = "text_to_video",
    Prompt = "A cinematic product launch shot with slow camera movement, premium lighting, and realistic motion"
}.WithParam("duration", "4s").WithParam("resolution", "720p").WithParam("aspect_ratio", "16:9").WithParam("audio", "false").WithParam("camera_fixed", "false"));

var result = await client.Generations.WaitAsync(task!.Data!.Id!);

PHP

$task = $client->generations()->create(
    CreateGenerationRequest::make(
        model: 'doubao/seedance-1.5-pro',
        mode: 'text_to_video',
        prompt: 'A cinematic product launch shot with slow camera movement, premium lighting, and realistic motion',
    )
    ->withParam('duration', '4s')
    ->withParam('resolution', '720p')
    ->withParam('aspect_ratio', '16:9')
    ->withParam('audio', 'false')
    ->withParam('camera_fixed', 'false')
);

$result = $client->generations()->wait($task['data']['id']);

Ruby

task = client.generations.create(
  model: "doubao/seedance-1.5-pro",
  mode: "text_to_video",
  prompt: "A cinematic product launch shot with slow camera movement, premium lighting, and realistic motion",
  duration: "4s",
  resolution: "720p",
  aspect_ratio: "16:9",
  audio: "false",
  camera_fixed: "false"
)

result = client.generations.wait(task.dig("data", "id"))
puts result.dig("data", "result", "videos", 0, "url")