Seedance Draft 草稿模式

Seedance 2.5 Draft 用于先快速生成样片,确认画面方向后,再生成正式视频。整个流程分为两步,使用火山格式视频接口:

Step1:draft: true 生成样片
  ↓
保存 Step1 返回的任务 id
  ↓
Step2:通过 draft_task.id 引用样片,生成正式视频

适用模型与接口

  • 模型:bytedance/doubao-seedance-2-5-260628、byteplus/dreamina-seedance-2-5-260628。
  • 创建任务:POST /v3/contents/generations/tasks。
  • 查询任务:GET /v3/contents/generations/tasks/{id}。
  • Step2 使用的任务 ID必须是 Step1 创建响应中的本地任务 ID,格式通常为 qvideo-* 或 cgt-*。

Step1:生成样片

在正常的视频生成请求中设置 draft: true,其他生成参数按照普通请求填写。创建成功后,保存响应中的 id,后续 Step2 需要使用该值。

export MODELINK_API_KEY="替换为你的 Modelink API Key"
export MODELINK_BASE_URL="https://api.modelink.ai"
export TASKS_URL="$MODELINK_BASE_URL/v3/contents/generations/tasks"

DRAFT_RESPONSE="$(${curl:-curl} -sS "$TASKS_URL" \
  -X POST \
  -H "Authorization: Bearer $MODELINK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "bytedance/doubao-seedance-2-5-260628",
    "content": [
      {
        "type": "text",
        "text": "一只橘猫在阳光下的花园里追逐蝴蝶,镜头平稳跟随"
      }
    ],
    "draft": true,
    "ratio": "16:9",
    "duration": 5,
    "generate_audio": true
  }')"

export DRAFT_TASK_ID="$(jq -r '.id' <<<"$DRAFT_RESPONSE")"
echo "$DRAFT_TASK_ID"

创建成功后,响应只需要保存任务 id:

{
  "id": "xxx"
}

Step1 是异步任务。使用返回的任务 ID查询状态,等待 status 进入 succeeded 后再提交 Step2:

curl -sS "$TASKS_URL/$DRAFT_TASK_ID" \
  -H "Authorization: Bearer $MODELINK_API_KEY"

成功的查询响应示例:

{
  "id": "xxx",
  "model": "bytedance/doubao-seedance-2-5-260628",
  "status": "succeeded",
  "content": {
    "video_url": "https://example.com/draft-video.mp4"
  },
  "resolution": "480p",
  "ratio": "16:9",
  "duration": 5,
  "generate_audio": true
}

Step2:生成正式视频

Step1 成功后,在新的创建任务请求中通过 content[].draft_task.id 引用样片任务。Step2 的 content 只传入 draft_task,不要再次传入 Step1 的文本、图片或视频内容。

FINAL_RESPONSE="$(${curl:-curl} -sS "$TASKS_URL" \
  -X POST \
  -H "Authorization: Bearer $MODELINK_API_KEY" \
  -H "Content-Type: application/json" \
  -d "$(jq -n --arg task_id "$DRAFT_TASK_ID" '{
    model: "bytedance/doubao-seedance-2-5-260628",
    content: [
      {
        type: "draft_task",
        draft_task: {id: $task_id}
      }
    ]
  }')")"

export FINAL_TASK_ID="$(jq -r '.id' <<<"$FINAL_RESPONSE")"
echo "$FINAL_TASK_ID"

对应的 Step2 请求体如下:

{
  "model": "bytedance/doubao-seedance-2-5-260628",
  "content": [
    {
      "type": "draft_task",
      "draft_task": {
        "id": "xxx"
      }
    }
  ]
}

Step2 创建成功后,同样使用返回的任务 ID查询正式视频:

{
  "id": "xxx",
  "model": "bytedance/doubao-seedance-2-5-260628",
  "status": "succeeded",
  "content": {
    "video_url": "https://example.com/final-video.mp4"
  },
  "resolution": "1080p",
  "ratio": "16:9",
  "duration": 5,
  "generate_audio": true
}

计费规则

Draft 由样片和正式视频两个任务组成,两个步骤分别计费:

  • Step1 样片:Seedance 2.5 固定按 480p 任务计费,计费规则与普通 480p 视频生成一致。
  • Step2 正式视频:Seedance 2.5 固定按 1080p 任务计费。
  • 如果 Step1 使用了参考视频,Step2 会继续按照包含参考视频的任务计费。使用 draft_task.id 只是引用样片的方式,不会免除 Step2 的参考视频费用。
  • Step1 未使用参考视频时,Step2 不会因为引用了 Draft 任务而额外产生参考视频费用。

具体单价请以模型广场中对应模型和分辨率的当前价格为准。

请求规则

  • Step1 必须设置 draft: true。
  • Step1 成功后,才能提交 Step2。
  • Step2 必须使用 content 中的 draft_task 引用 Step1 任务 ID。
  • Step2 不需要传 draft 或 resolution。
  • 样片任务和 Step2 请求必须属于同一账号;任务 ID不正确、任务未完成或任务不存在时,请求会失败。

常见问题

查询响应里没有 draft 或 draft_task_id 怎么办?

这是正常行为。客户端应在 Step1 创建任务成功后,立即保存创建响应中的 id,并在 Step2 的 draft_task.id 中使用该值。查询接口不依赖 draft_task_id 字段返回关联关系。

Step2 可以继续传入原始提示词或参考素材吗?

不可以。Step2 通过样片任务 ID引用 Step1,content 只传 draft_task。如果需要修改提示词或参考素材,请重新创建一个 Step1 任务。