AI.Demo/.codebuddy/plans/replace-video-api-to-seedan...

4.5 KiB
Raw Permalink Blame History

name overview todos
replace-video-api-to-seedance 将 VideoExplanation.vue 中视频生成部分从阿里云万相(wan2.2-kf2v-flash)切换到火山引擎 Seedance 1.5 Pro (doubao-seedance-1-5-pro-251215),修改 API 调用、请求体结构和轮询逻辑。
id content status
replace-video-api-config 修改 VideoExplanation.vue 的 API 配置常量:删除 VIDEO_API_KEY/VIDEO_API_URL/VIDEO_TASK_URL/VIDEO_MODEL替换为 Seedance 的 VIDEO_API_URL 和 VIDEO_TASK_URL completed
id content status dependencies
rewrite-generate-single-clip 重写 generateSingleClip 函数,适配 Seedance 的 content 数组请求格式和响应字段结构 completed
replace-video-api-config

Product Overview

将 VideoExplanation.vue 中视频生成部分从阿里云万相模型wan2.2-kf2v-flash切换为豆包 Seedance 1.5 Pro 模型doubao-seedance-1-5-pro-251215通过 Ark 平台 API 实现首尾帧图片生视频功能。

Core Features

  • 替换视频生成 API 端点、请求结构和鉴权方式(从 DashScope 切换到 Ark
  • 适配 Seedance 的 content 数组格式text + first_frame image_url + last_frame image_url
  • 适配 Seedance 的异步任务查询接口和响应字段id/status/content.video_url
  • 复用已有的 /ark-api 代理和 DOUBAO_KEY 密钥,无需新增代理或配置

Tech Stack

  • 前端框架: Vue 3 (Composition API)
  • HTTP 请求: axios已在项目中使用
  • API 代理: Vite proxy/ark-api 已配置指向 ark.cn-beijing.volces.com

Implementation Approach

将视频生成 API 从 DashScope 万相模型切换到 Seedance 1.5 Pro核心变化如下

API 对比

维度 万相 (当前) Seedance 1.5 Pro (目标)
创建任务 POST /dashscope-api/api/v1/services/aigc/image2video/video-synthesis POST /ark-api/api/v3/contents/generations/tasks
请求体 { model, input: { first_frame_url, last_frame_url, prompt }, parameters: { resolution, prompt_extend, watermark } } { model, content: [{ type:"text", text }, { type:"image_url", image_url:{url}, role:"first_frame" }, { type:"image_url", image_url:{url}, role:"last_frame" }], ratio, duration, watermark }
异步标识 Header: X-DashScope-Async: enable 无需异步头,创建即返回任务 ID
查询任务 GET /dashscope-api/api/v1/tasks/{taskId} GET /ark-api/api/v3/contents/generations/tasks/{id}
响应字段 output.task_id / output.task_status / output.video_url id / status / content.video_url
状态值 SUCCEEDED / FAILED succeeded / failed
鉴权 独立 VIDEO_API_KEY DOUBAO_KEYArk 平台统一鉴权)
时长范围 无限制 4~12 秒(当前 CLIP_DURATION=5 符合)

关键技术决策

  1. 复用 DOUBAO_KEY: Seedance 同属 Ark 平台,直接复用 config/index.js 中已有的 DOUBAO_KEY无需新增配置
  2. 复用 /ark-api 代理: vite.config.js 已有 /ark-api 代理指向 ark.cn-beijing.volces.com,无需修改代理配置
  3. 保留首尾帧逻辑: 当前分镜图片生成流程(首帧+尾帧)与 Seedance 的 first_frame/last_frame 能力完全匹配,图片生成部分不需改动

Implementation Notes

  • 仅修改 VideoExplanation.vue 中的视频生成相关代码,不改动脚本生成和图片生成逻辑
  • 修改范围集中在两个区域API 配置常量第42-50行和 generateSingleClip 函数第251-319行
  • Seedance 任务轮询间隔保持 15 秒不变,最大轮询次数 24 次足够(最长等待 6 分钟)
  • 删除 VIDEO_API_KEY 常量,统一使用 DOUBAO_KEY

Directory Structure

src/views/VideoExplanation.vue  # [MODIFY] 替换视频生成 API修改 API 配置常量、重写 generateSingleClip 函数

Key Code Structures

generateSingleClip 函数签名(不变)

const generateSingleClip = async (shot, firstFrameUrl, lastFrameUrl): Promise<string | null>

Seedance 创建任务请求体结构

{
  model: "doubao-seedance-1-5-pro-251215",
  content: [
    { type: "text", text: string },
    { type: "image_url", image_url: { url: string }, role: "first_frame" },
    { type: "image_url", image_url: { url: string }, role: "last_frame" }
  ],
  ratio: "16:9",
  duration: 5,
  watermark: false
}

Seedance 查询响应结构

{
  id: string,           // 任务 ID
  status: "succeeded" | "failed" | "queued" | "running",
  content: { video_url: string },
  error: { code: string, message: string }
}