zcbot/skills/videogen/SKILL.md

244 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
name: videogen
description: 用豆包 Seedance 2.0 Fast 生视频(`seedance` tool)。**任何生视频任务调 tool 前必须 load 本 skill**。触发词:视频 / 动画 / 动起来 / 做个 video / 做段视频 / 出段视频 / 生成视频 / mov / mp4 / 短片 / 镜头 / 运动镜头 / 演示视频 / 动效。核心:视频比图贵 10 倍(¥1.86-¥4+ / 段),且要等 30-90s,问清楚再画 + 强制确认。
---
# Videogen
把"我想要个视频"变成一段能用的视频。流程:
**诊断模糊度(6 维) → 一次性给推断 + 待确认项 → 用户拍板维度 → 装配最终 prompt + 参数 → ⛔ 把 prompt+参数完整贴给用户看 + 问改不改 → 用户明确确认后 → 调 `seedance`**
每次 `seedance` 调用 **¥1.86 起**(480p 4s)→ **¥4.00 起**(720p 5s)→ **¥12+**(720p 15s),且要等 **30-90 秒**才出片。**贵 + 慢 = 试错代价高,必须问清楚再调**
## ⛔ 调 tool 前的强制门(铁律,比 imagegen 更严格)
**任何情况下,在 `seedance` tool call 发出去之前,都必须先把最终装配好的 prompt(包括 resolution / ratio / duration / watermark 参数)用对话消息明文展示给用户,然后问"这样画?要改什么?"并 ⛔ BLOCKING 等用户明确回复。**
- 用户回复 "可以" / "OK" / "就这样" / "对" / "嗯" / "画吧" / "出片吧" / 简单确认 → 可以调 tool
- 用户回复 "把 X 改成 Y" / "时长改 8s" / "镜头换成 Y" → 改完后**再次贴最终 prompt + 再次等确认**
- 用户**沉默 / 长时间不回 / 追问别的事** → 不算确认,**继续等**,不要自作主张
- 用户回 "看起来不错" / "差不多" / 模棱两可 → **主动追问一句"这就开烧 ¥X?"**,拿到明确"是"再调
**为什么比 imagegen 还严**:视频单价 ¥4 起,比图贵 10 倍以上;一次失败相当于 18 张错图;且要等 30-90s,用户改方向的等待代价也很高。**装配 prompt 不等于授权调用** —— 装配是模型脑内运算,授权要落到用户的"嗯,画吧"上。
## 何时用本 skill
- 用户**明确说**"做个视频" / "出段视频" / "动画" / "动起来" / "镜头扫过" / "演示视频"
- 用户原本要 ppt / 海报 / 申报书,**主动**问能不能配段视频(此时介绍价格 + 时长引导决策)
- 用户拿到 seedream 生的静态图后说"想动起来" / "加点运动" — 注意 phase 1 只支持 t2v 文生视频,**不支持**从已有图生视频(i2v),要告诉用户这点
## 何时不走本 skill
- 用户**没主动要视频**(别为"丰富回复"装饰性生视频 —— 比图更严重的浪费红线)
- 用户要的是**流程/结构动效**(节点-箭头-步骤逐次出现)→ 这是 ppt 动画 / mermaid + ppt 转场的事,不是视频
- 用户要的是**实拍素材** / **已有视频剪辑** → seedance 是 AI 生成,不是素材库;告诉用户走 unsplash / pexels 等
- 用户**有具体参考视频说"按这个改"** → phase 1 不支持 i2v / v2v,告诉用户先用文字描述
## 关键岔路:seedream vs seedance vs mermaid
**默认倾向 seedream / mermaid**(静态够用就别上动态):
- 用户要的是**单张图**(封面 / 配图 / 示意图)→ seedream
- 用户要的是**结构/流程**(节点关系 / 时序 / 架构)→ mermaid
**反向选 seedance**(满足任一):
- 用户**明确说**视频/动画/动起来/做个 video(而非"画一张" / "做个图")
- 内容本身**离不开运动**:水流 / 火焰 / 旋转 / 镜头扫过场景 / 角色动作
- ppt 引子页要**视觉冲击 + 时间维度**(2-3s 短动画开场)
- 用户先做了静态图,**明确**说"想动起来" / "加运动感"
**模糊时主动问一句**:
> 你这是想要 **一张静态图**(seedream,¥0.22,3-5 秒出图),还是 **一段短视频**(seedance,¥4 起,等 30-90s)?静态图够的话省钱省时间。
## 诊断模糊度 — 六维清单(运动是新增的必填维)
| 维度 | 缺失信号 |
|---|---|
| **主体** What | "做个混凝土视频" → 视频里有什么?试块 / 楼板 / 工程现场 / 微观裂纹? |
| **运动** Motion ⭐ | **视频特有,必问** — 主体在做什么?(浇筑 / 凝固 / 裂开 / 旋转 / 镜头扫过)。**没运动 = 应该走 seedream**。 |
| **场景** Where | 工地 / 实验室 / 抽象空间 / 极简白底? |
| **镜头** Camera | 镜头怎么动?(固定 / 跟随 / 推近 / 拉远 / 环绕 / 俯视下降)。AI 视频对镜头描述很敏感,不写默认随机晃动 |
| **风格** Style | 写实摄影 / 工业 CG / 扁平 2D 动画 / 水墨 / 赛博朋克 / 学术示意? |
| **时长 + 分辨率 + 比例** | **时长**:4-15s,默认 5s(短=便宜)。**分辨率**:fast 仅 480p/720p,默认 720p。**比例**:ppt 16:9 / 短视频 9:16 / 头像 1:1。 |
**评估规则**:
- 6 维填齐 / 缺 ≤1 → 可以直接装配 prompt 调用
- **运动维不能省** —— 没运动就劝退到 seedream(¥0.22 vs ¥4,差 18 倍)
- 缺 2 维及以上 → **先问再画**
- 时长、分辨率、比例三选一缺即追问;**没说时长就默认 5s 是错的**,要问"4s 短演示 / 5s 默认 / 8s 中等 / 12s+ 长镜头?",时长直接决定钱:`cost ≈ ¥4 × duration/5 × resolution_factor`
## 一次性给推断 + 待确认项(不要一个个问)
模糊时一次摆出推断,让用户改或确认:
> 你说"做个混凝土浇筑的视频",我打算这样画:
> - **主体**:工地上正在浇筑混凝土的楼板
> - **运动**:混凝土从泵车软管流出注入模板,工人手持振动棒来回插入
> - **场景**:工地中景,远处有塔吊
> - **镜头**:固定俯视 + 缓慢推近模板中心
> - **风格**:写实工程纪录片
> - **时长 / 分辨率 / 比例**:5s / 720p / 16:9(ppt 用) — ¥4.00,等 30-90s
>
> 这样画可以吗?或者告诉我:想突出什么?(浇筑工艺细节 / 振动棒动作 / 大场面气势 / 慢动作)
## 装配 prompt — 用户拍板维度后
把前 5 维拼成自然中文 prompt 文本(运动 / 镜头是新增重点),**时长 / 分辨率 / 比例走参数**:
```
工地上正在浇筑混凝土的楼板,混凝土从泵车软管流出注入模板,
工人手持振动棒来回插入,固定俯视镜头缓慢推近模板中心,
写实工程纪录片风格,正午阳光
```
要点:
- **运动描述具体** —— "流动 / 旋转 / 推近 / 倾倒",不要"动起来"这种无信息词
- **镜头单独成句** —— "固定俯视 / 缓慢推近 / 环绕一周 / 跟随主体平移";不写默认镜头随机晃动
- **不要堆形容词** —— 模型理解动作 > 形容词
- **不要写否定** —— "no shaking, not blurry" 反向起效;Seedance 不支持 negative prompt
- 主体放最前,镜头 / 风格放后
## ⛔ 调 tool 前再过一道:把最终 prompt + 参数贴给用户
装配完后**立即**用对话消息把最终结果贴出来 + 等用户明确确认。**装配 ≠ 授权调用**。
格式建议(代码块包起来,清晰可读):
> 我准备调 seedance,参数如下:
>
> ````
> prompt: 工地上正在浇筑混凝土的楼板,混凝土从泵车软管流出注入模板,
> 工人手持振动棒来回插入,固定俯视镜头缓慢推近模板中心,
> 写实工程纪录片风格,正午阳光
> resolution: 720p
> ratio: 16:9(ppt 横版)
> duration: 5 秒
> watermark: false
> 预计花费: ¥4.00
> 预计等待: 30-90 秒
> ````
>
> 这样开烧?要改什么?(改 prompt 文字 / 改时长 / 换比例 / 降到 480p 省钱)
然后 ⛔ **BLOCKING:等用户明确回复**
**为什么强调** —— ¥4 一段视频,用户没机会在调用前看清楚 prompt 的话,生成后只能事后看视频反推哪句话错了,改一次又是 ¥4 + 1.5 分钟。一次对话往返(免费)避免一次错片(¥4 + 90s 等待),是最划算的强制门。
## 参数取舍
### `resolution`(分辨率)
| 选项 | 像素 (16:9) | 适用场景 | 与 720p 价格比 |
|---|---|---|---|
| `480p` | 854×480 | 短演示 / 邮件附件 / 低带宽预览 / **省钱档** | ~0.47x(便宜一半) |
| `720p`(默认) | 1280×720 | ppt 嵌入 / 公众号 / 一般演示 | 1.0x(¥4 / 5s) |
| `1080p` | 1920×1080 | **fast 不支持**,会报 [Error];仅 pro 可用 | — |
**默认 720p 是合理的"够用挡"**;**预算紧 / 试效果**用 480p;**fast 上限就是 720p**,用户要 1080p+ 要切到 pro variant(yaml 里没配 pro 时直接告诉用户)。
### `duration`(时长)
| 时长 | 适用 | 720p 16:9 估价 |
|---|---|---|
| 4s | 最短,纯展示 / 转场 / loop | ~¥3.20 |
| 5s(默认) | 标准短视频 / ppt 引子 | ~¥4.00 |
| 8s | 中等叙事 / 完整动作 | ~¥6.40 |
| 12s | 长镜头 / 复杂场景 | ~¥9.60 |
| 15s | 上限 / 完整 plot | ~¥12.00 |
**线性扩展**(每秒 ~¥0.8 @ 720p);**短=便宜=快**,无明确叙事需求默认 5s。**4s 是最低,< 4 报错**。
### `ratio`(比例)
| 比例 | 适用 |
|---|---|
| `16:9`(默认) | ppt / 横版演示 / 一般用途 |
| `9:16` | 短视频 / 抖音 / 小红书 / 手机海报 |
| `1:1` | 社交头像 / Instagram |
| `4:3` | 老电视 / 复古 |
| `3:4` | 杂志竖版 |
| `21:9` | 电影超宽 / Banner |
| `adaptive` | 模型自己选 |
**默认 16:9** 适合 90% ppt / 申报 / 公众号场景。**比例错了后期裁切很难还原构图** —— 不问用途默认 16:9 也比默认 1:1 (seedream 那边有 1:1 误区,这里别犯)。
### `watermark`
| 默认 | 何时改 |
|---|---|
| `false` | 默认无水印(申报 / ppt / 客户交付都不该带);仅当用户明确说"加水印"才传 `true` |
## 调用范式
**前置条件**:用户已经看过最终 prompt + 所有参数,明确回复"可以" / "OK" / "出片吧" 之类。**没看到这个确认就不要调**。
`seedance` tool 不是 skill 函数,**直接调,不要 `run_python` 包一层**:
```
seedance(
prompt="工地上正在浇筑混凝土的楼板,混凝土从泵车软管流出注入模板,工人手持振动棒来回插入,固定俯视镜头缓慢推近模板中心,写实工程纪录片风格,正午阳光",
resolution="720p", # 可省,走默认
ratio="16:9", # 可省
duration=5, # 可省
watermark=false, # 可省
)
```
**调用是同步阻塞 30-90s** —— tool 内部 submit 后轮询直到 succeeded,期间 LLM 卡住这不是 bug,告诉用户"提交了, 30-90 "再耐心等返回
返回串首行是 `[seedance] model=... · resolution=... · ratio=... · duration=Xs · cost=¥... · elapsed=...s` —— 原样保留给用户(SPA parse 挂徽章)。第二行 `saved: <相对路径>` 是产物路径,告诉用户
产物自动落 `<task_dir>/videos/<时间戳>-<rand>.mp4` + 同名 `.meta.json`(prompt / 参数 / cost / tokens / cgt_id snapshot)。
## 失败 / 不满意后怎么办
**不要原 prompt 重发**!那是 ¥4 一发的浪费
| 现象 | 原因 | 解药 |
|---|---|---|
| 主体动作不对 | 运动描述太抽象("动起来"→ 无信息) | 用具体动词:"从软管流出 / 来回插入 / 缓慢上升" |
| 镜头不稳 / 随机晃动 | 没指定镜头 | "固定镜头" / "缓慢推近" / "环绕一周";尤其要明确镜头是否固定 |
| 主体被切掉 | 比例与构图不匹配 | ratio 或在 prompt 里写"全景 / 中景 / 主体居中" |
| 风格不对 | 风格词位置太靠后 / 缺少 | 风格词放 prompt 1/3:"写实工程纪录片风格,xxx" |
| 时长不够讲完动作 | duration 太短 | 4s 适合单一动作,多步骤动作至少 8s |
| `[Error] seedance API` 报错( 1080p ) | fast 不支持 1080p+ | 降到 720p 重试;或换 pro variant(yaml 加配置) |
| `[Error] seedance 轮询超时` | 队列拥堵 / 服务异常 | 等几分钟再试;cgt_id 24h 内仍可手工 GET 拉结果 |
| `[Cancelled]` | 用户点了停止 | **告诉用户:远端任务可能仍在跑,Volcengine 失败/成功才计费,若仍出片可能产生费用** |
| 出现奇怪文字 | Seedance 文字渲染不稳 | prompt 里不要要求画文字 / 字幕;字幕后期 ppt |
**先口头跟用户对齐改哪一维**,再发新调用 —— 不要"再画一段试试"连续烧钱
## 产物处理
生视频完成后:
- `saved: videos/xxx.mp4` 路径告诉用户(SPA 会自动 inline 播放器,点击可全屏)
- 如果是做 ppt,提醒用户 `python-pptx` 可以 `add_movie` 嵌入 mp4(但导出 pdf 时视频会丢,改截关键帧 + 链接)
- 用户说"换一段" 走上节的"对齐改哪一维"流程,**不要默认重发**
- 用户说"再来几段备选" **先确认**:"备选 N 段会花 ¥{4 × N} + {N × 60}s,确认?"
## 反模式
- **没把最终 prompt+参数贴给用户看就直接 tool call** —— imagegen 更严格的铁律4 vs ¥0.22)
- **用户回"看起来不错"就当确认调 tool** —— 模棱两可必须追问到明确" / OK / 画吧"
- **运动维度跳过**(=应该走 seedream 却走 seedance) —— 浪费 18 倍价钱
- 用户没主动要视频就装饰性生成
- 用户说"做个动画" 直接拿这 4 个字当 prompt 调用 —— 六维清单至少先问 2
- 一个个问"主体?""镜头?" —— 一次性摆推断 + 让用户改
- **不问时长直接默认 5s** —— 5s 是合理默认但要让用户知道有 4-15s 区间;长视频(>8s)开调用前必须强调成本
-**不问分辨率上 720p** —— 试效果阶段先 480p(便宜一半)
- ❌ 同一目的不满意连续重发 —— 1 次错 = ¥4 + 60s,2 次连发 = ¥8 + 2min,先校准 prompt 再调
- ❌ prompt 写"动起来 / 有动感" —— Seedance 不靠形容词,要具体动词
- ❌ prompt 里写否定 "no shaking, not blurry" —— Seedance 不支持 negative,反向起效
- ❌ 让用户在 seedream / seedance 之间默默替他决定 —— 模糊就一句话问明白
- ❌ phase 1 拿用户已生成的图试图 i2v —— **当前不支持**,明确告诉用户
- ❌ 用 `run_python``requests` 裸打豆包 API —— 走 `seedance` tool(已封装异步轮询 + 计费 + 落盘 + meta + cancel)
## 输出
调完告诉用户:
- 文件相对路径(`videos/xxx.mp4`)
- 本次成本(¥X.XX,从 banner 抽)
- 用的 prompt 摘要(主体 / 运动 / 镜头 3 件套)
- 一句"要换方向 / 调镜头 / 加长时长再来一段吗?"