---
name: openakita/seedance-video
source: https://app.decimal.ai/s/openakita-seedance-video@1/SKILL.md
source_sha256: 0edc20a3ac51
---

# 即梦工作室 / Seedance Studio

## 是什么 / What

输入一句中文/英文描述（可选参考图/视频），输出一段 AI 生成的高清视频。
所有调用都是 Ark API 异步任务：先 `POST /contents/generations/tasks` 拿 `task_id`，
再轮询 `GET task_id`，就绪后下载视频 URL 并落盘到 `data_dir/videos/`。

## 何时用 / When

- 用户描述了一个视频创意，想直接生成短视频
- 用户有一张或多张图片，想变成视频（图生视频）
- 用户需要编辑已有视频（局部替换、特效叠加）
- 用户需要续写/延伸视频（向前、向后、链式）
- 用户需要多段视频按分镜脚本批量生成并拼接成长视频
- **不要用于**: 图片生成（用 `tongyi-image` skill）；纯文本/音频（用其他插件）

## 工具 / Tools

- `seedance_create({prompt, model?, mode?, ratio?, duration?, resolution?, ...})`
- `seedance_edit({prompt, source_video_url, model?, duration?, ratio?, resolution?})`
- `seedance_extend({prompt, source_video_url, model?, duration?, ratio?, resolution?})`
- `seedance_transition({prompt, source_video_url, next_scene_prompt?, model?, duration?, ratio?, resolution?})`
- `seedance_status({task_id})`
- `seedance_list({limit?})`

## 模式 / Modes

| mode       | 描述                              | 典型模型               |
| ---------- | --------------------------------- | ---------------------- |
| t2v        | 纯文本生视频                      | seedance-1-lite        |
| i2v        | 首帧图生视频                      | seedance-1-lite        |
| i2v_end    | 首尾帧图生视频                    | seedance-1-lite        |
| multimodal | 多图/视频/音频参考生成            | seedance-1-lite        |
| edit       | 视频编辑（替换/叠加）            | seedance-1-lite        |
| extend     | 视频续写（向前/向后/链式）       | seedance-1-lite        |

## 流程 / Pipeline

```
prompt + (可选 image/video/audio) → Ark POST → task_id →
  poll loop（默认 10s）→ status==completed →
    extract video URL → (可选 auto_download) → 落盘 + 广播 task_update
```

## 长视频 / Long Video Pipeline

```
故事脚本 → LLM 分镜拆解(decompose_storyboard) → N 段分镜 →
  串行模式: 上一段末帧 → 下一段首帧参考 (视觉连贯)
  云端续写模式: 上一段 video_url → Seedance extend 生成下一段/过渡段
  并行模式: 各段独立生成 →
    ffmpeg concat → 最终长视频(含转场)
```

## 编辑 / 延长 / 过渡

- `edit` 和 `extend` 必须使用 Seedance 任务返回的公网 `video_url`，通过 `source_video_url` 传入。
- 不要把本地视频路径、`/api/plugins/...` 预览地址或 base64 视频当作源视频传给 `edit` / `extend`；Ark 无法访问这些本地资源。
- `seedance_transition` 表示“云端生成过渡/续写片段”，不是 ffmpeg 拼接。若需要最终长片，先生成过渡片段，再用本地 concat 合成。
- `/long-video/concat` 是本地合成：`none` 是硬拼接，`crossfade` 是本地 xfade 重编码，不等于 Seedance 云端 AI 过渡。

## Quality Gates (G1–G3)

| Gate | 检查内容                                   | 通过条件                                                        |
| ---- | ------------------------------------------ | --------------------------------------------------------------- |
| G1   | Ark API Key 已配置                         | `await tm.get_config("ark_api_key")` 非空                      |
| G2   | upload 路径在插件 data_dir 内（防遍历）   | `add_upload_preview_route` 已注册 + `path.relative_to(base)` OK |
| G3   | task 异常用日志 + UI broadcast 兜底        | `_broadcast_update(task_id, "failed")` + `error_message` 落库   |

## Trust Hooks（你怎么知道我没乱花钱 / 偷数据）

| 信任点              | 怎么自查                                                      |
| ------------------- | ------------------------------------------------------------- |
| 钱花在哪 / Cost     | Ark API 唯一调用方；本插件不引入第三方计费                    |
| 数据流向 / Data     | 上传文件先存 `data_dir/uploads/`，仅作为 base64 发给 Ark API  |
| 出错怎么办 / Errors | 全部异常落库 `error_message`，UI 通过 task_update 推送        |
| 远程依赖 / Network  | 仅 `https://ark.cn-beijing.volces.com/`；无遥测               |

## 已知坑 / Known Pitfalls

- **API Key 没填**: 所有请求 502 → UI 提示去 Settings 配置
- **Ark content moderation**: 敏感内容（含人脸）会触发安全审核直接 fail — 改 prompt 重试
- **视频 URL 过期**: 必须开 `auto_download=true`（默认开）才能离线复用
- **编辑/延长只能用云端 URL**: 必须传上游任务返回的 `video_url`，不能传本地 mp4
- **长时间任务排队**: 默认 poll 间隔 10s，繁忙时段可能等几分钟 — 不会卡 UI
- **串行长视频人脸限制**: Seedance 不接受含人脸的参考图，串行链接会回退到纯文本生成，连续性下降 — 优先使用动画角色/动物/风景
- **ffmpeg 依赖**: 长视频拼接需要系统安装 ffmpeg — 缺失时 UI 会提示

## 安全升级 / Hardening Notes

- `ArkClient` 继承 `BaseVendorClient`，自动获得 retry/timeout/VendorError 分类
- `on_unload` 清理后台任务和资源，避免 Windows 文件锁问题
- 所有后台轮询任务通过 `api.spawn_task(...)` 管理，unload 时统一 cancel + drain
- `/storage/stats` 走 SDK `collect_storage_stats`，UI 不再卡顿
- `POST /upload` 走 SDK `add_upload_preview_route`，防路径遍历