# Huashu Seedance

> Seedance 2.5 视频生成全流程。先把需求澄清成参数（时长/画幅/机位类型/跟随方式/要不要切镜），再用 scene.json 引擎生成白模参考视频（渲染前有几何体检），也能从用户给的照片反解出白模，最后按官方规范生成与白模严格对齐的提示词。

- Skill: `alchaincyf/huashu-seedance` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add alchaincyf/huashu-seedance`
- Raw SKILL.md: https://api.skillmd.com/api/skills/alchaincyf/huashu-seedance/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: alchaincyf (https://skillmd.com/u/alchaincyf)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/alchaincyf/huashu-seedance

---


# Seedance 工作台

把「想拍什么」变成一条 Seedance 2.5 能准确执行的指令。

## 第一步永远是澄清，不是开渲

用户来的时候通常只有一句话。**先读 `references/intake.md`**，按那里的规矩办：

- 只有三件事必须问他：**多长、发在哪（画幅）、一镜到底还是切镜头**
- 其余的（机位类型、跟随方式、焦段、景别、风格锚点）先从他的话里推断，把推断结果摊成一张表让他否决
- 摊完假设，**先给他看 3-5 行的镜头表**，让他在文字上改。镜头表改一行一秒，白模建完再改是几分钟

跳过这一步的代价是实测过的：2026-08-15 那次三条白模全部返工（一条重排全部人物轨迹、一条做时间重映射、一条只能本地重剪），根因就是照着自己的理解直接建了白模。

## 四条产线

| 产线 | 产出 | 什么时候用 |
|---|---|---|
| **A · 提示词** | 符合官方规范的 T2V / R2V 提示词 | 任何时候。这是主线 |
| **B · 白模** | 用 scene.json 引擎渲出的白模视频 | 要精确控制运镜、空间关系、时间节奏、镜头切换时 |
| **C · 参考图** | Seedream 生成的影视级参考图 | 要锁材质、光线、造型时 |
| **D · 照片反解** | 从用户的照片反解出白模 | 用户给了照片、要让这个场景动起来时 |

典型全链路：**澄清 → 镜头表 → B 做白模锁运镜 → C 做参考图锁质感 → A 把两者绑成一条 prompt**。
用户给了照片就把 B+C 换成 D：那张照片同时当空间来源和材质参考，两者天然一致。

## 主线工作流

```bash
E="$SKILL_DIR/engine"     # SKILL_DIR = 本 skill 所在目录

# ① 写 scene.json（规范见 references/scene-spec.md，样板在 templates/scenes/）
# ② 渲染前体检——必须 0 个 🔴 才往下走
node $E/probe.mjs scene.json

# ③ 生成工程并渲染
node $E/build.mjs scene.json
npx hyperframes@0.7.107 lint
npx hyperframes@0.7.107 render --quality draft --output whitemodel.mp4

# ④ 抽帧自检——这一步没有替代品（体检查得了几何，查不了好不好看）
node $E/frames.mjs whitemodel.mp4 scene.json            # 自动按镜头切点+段内均分挑
node $E/frames.mjs whitemodel.mp4 scene.json 0,7.5,15   # 或指定时刻

# ⑤ 从白模的实际几何生成 prompt（同时产出参考图提示词，产线 C 直接可用）
node $E/make_prompt.mjs scene.json > prompt.md
```

单帧预览（对构图时用，一轮约 30 秒，可一次给多个时刻）：
`node $E/preview.mjs scene.json 0,7.5,15`
每帧会同时打印该时刻的机位事实（位置/焦距/距离/占画高）——**图和数字对不上就是引擎出了问题**，别只看图。

## 铁律

**1. 口径冲突时以 Seedance 2.5 / 2.0 官方为准。**
Veo / Sora / Kling 的官方指南可以参考，但与 Seedance 冲突时不采纳（三处已知冲突见 `references/model-differences.md`）。

**2. 每个参考素材必须声明「继承什么 / 不继承什么」。**
漏掉「不继承」，模型会把参考里的一切都端过来。这是所有规律里最重要的一条。

**3. 用技术术语，不用形容词。**
「电影感」只能被理解成「好看」。要写《敦刻尔克》、IMAX 65mm、Kodak Vision3、体积光柱、侧逆光。
实证：同一场景，形容词版出的是图库壁纸，技术术语版直接变成电影画面。

**4. 负面约束要具体到「排除哪个错误品类」。**
不写「不要低质量」，写「避免白模塑料感」（材质错）、「不做教学拆解」（叙事错）、「无箭头标签」（图形错）。

**5. 别把宝押在复杂物理上。**
四家官方口径一致：复杂运动的物理合理性（球的弹跳、高空抛物）和多主体互动稳定性现在都做不好。Seedance 2.5 官方博客结尾自己承认了。Kling 官方另外点明模型对数字不敏感，「沙滩上10只小狗」这种数量一致性做不到。

**6. prompt 里的每个数字都必须是从白模量出来的。**
不是从设计稿抄的，也不是想出来的。`make_prompt.mjs` 负责量。改了白模就重跑它，别手改数字。
2026-08-14 有两条 prompt 照设计稿写，一条承诺「环绕收到 2 米」（白模实际 3.4m），一条承诺「降回 12 米」（真降下去会把队形拍残）。

**7. 机械验收通过不等于画面正确。**
lint 全绿、时长全对、体检零红，仍然可能五个运镜坏五个。**渲完必须抽帧看**，这一步没有替代品。
反过来也成立：**抽帧看过也不等于全片对**——抽的是你挑的那几个时刻，坏的往往在你没挑的那一段。
所以顺序是 probe 找出可疑区间 → 抽那几帧去看，而不是均匀抽几张就宣布通过。

**8. 两个人以上，站位比动作重要。**
双人戏最先坏的不是打斗好不好看，而是**两个人在画面上叠成了一个**。判据不是世界坐标里离得远不远——
相机偏离两人中线时，纵向拉得越开、深度差越大，「近的人横向偏移被放大」会正好把左右错位抵消掉，
世界坐标分得清清楚楚，画面上却完全重合。`probe.mjs` 会逐帧算这件事并报红。
一镜到底尤其致命：没有硬切可以躲，坏了就是整条坏。

## 产线 A · 提示词

读 `references/prompt-spec.md`：官方四段式范式（时长画幅 → 参考绑定 → 镜头序列 → 全局约束）、`@图片N` / `@视频N` / `@白模N` 引用语法、时间戳写法、三个可套用模板、官方 prompt 全文样本（含 18 图 + 3 音频的商业案例）。

走了产线 B 的话，prompt 草稿由 `make_prompt.mjs` 直接生成，你只需要填叙事内容。

## 产线 B · 白模

读 `references/whitemodel.md`（流程与自检）、`references/scene-spec.md`（字段规范）、`references/camera-rig.md`（十种机位类型、景别距离表、多机位切换）。

核心事实：**白模可以极其简陋**。它只提供空间关系、运镜路径、时间节奏，材质细节全部交给参考图。所以时间要花在运镜和节奏上，不是建模上。

## 产线 C · 参考图

读 `references/reference-image.md`。六要素配方（缺一件就掉档）：真实片名锚点、器材规格、大气介质、尺度参照物、戏剧性布光、实拍瑕疵。

用哪个文生图后端不重要，价值全在 prompt 本身。两个尺寸要点：16:9 出 **2560×1440**，长边不要低于这个档位，参考图分辨率不够会把成片质感一起拉下来。

## 产线 D · 照片反解

读 `references/photo-to-whitemodel.md`。五步：叠网格读数 → 读灭点/相机高度/尺子/焦段 → 搭 scene.json → 渲首帧和照片并排对（两三轮收敛）→ 加运动和运镜。

```bash
python3 $E/photo_grid.py 照片.jpg 照片-grid.jpg
```

⚠️ **位置一律叠网格读数，不要肉眼估**。实测同一张走廊照片，肉眼估灭点 0.40、网格读出 0.51，差 0.11 就是差 5° 俯仰。自动灭点检测也不可信，地毯花纹会把它整个带偏。

## 几个绕不开的实证边界

| 事实 | 出处 |
|---|---|
| 单段上限 30 秒，输出 720P | 2026-08-06 实测 |
| 15 秒可用（手动模式数字框直接输 15） | 2026-08-16 实测 |
| 成片 24fps、白模 30fps，跨帧率切点误差 < 1 帧 | 2026-08-16 逐帧核对 |
| 单次参考上限 30 图 + 10 视频 + 10 音频 | 官方 |
| 主体占画高 < 10% 且位移 < 0.5 身高 → AI 会把它丢掉 | 2026-08-16 实测（成片最后 4 秒只剩空祭坛） |
| 白模能钉死位置、速度、时机、空间关系，**钉不死违反常识的姿态** | 倒着走的白模，成片里被 AI 悄悄纠正成正着走 |
| 白模主体的颜色会渗进成片 | 蓝色人群白模 → 成片出现蓝面罩人群 |

## 参考资料

| 文件 | 内容 |
|---|---|
| `references/intake.md` | 需求澄清：问什么、推断什么、怎么摊假设 |
| `references/scene-spec.md` | scene.json 完整字段规范 |
| `references/camera-rig.md` | 十种机位类型、景别距离表、多机位切换 |
| `references/whitemodel.md` | 白模流程、自检、首帧 bug、手写逃生舱 |
| `references/photo-to-whitemodel.md` | 照片反解产线 |
| `references/prompt-spec.md` | 提示词规范 + 官方样本 + 三个模板 |
| `references/reference-image.md` | 参考图六要素配方 + 避坑 |
| `references/model-differences.md` | 四家官方公式对比与三处冲突（仅供参考，不采纳） |
| `templates/scenes/` | 三个可直接改的 scene.json 样板 |
| `templates/whitemodel-base.html` | 手写路线的起手模板 |
| `docs/index.html` | 给人看的说明页 |

**方法论出处**：字节 Seed 的 Seedance 2.5 官方发布博客与官方演示物料（配着成片的 prompt 原文），以及 Veo / Sora / Kling 三家官方指南。信源清单见 `references/model-differences.md`。

## 版本自检（静默）

本节给 AI agent：每次使用本 skill 前，先做一个不联网的判断——读本 skill 目录（SKILL.md 所在目录）下的 `.last-update-check` 文件（内容为一行日期 YYYY-MM-DD）。文件存在且距今不足 30 天，跳过本节直接干活，不向用户提任何更新相关的话。

到期或文件不存在时，且仅在此时：

1. 本目录不是 git 克隆（无 `.git` 或无 origin）→ 写入今天日期后跳过本节
2. 对比版本：`git -C <本目录> rev-parse HEAD` 与 `git -C <本目录> ls-remote origin HEAD`
3. 无论结果如何，把今天日期写入 `.last-update-check`
4. 两者一致 → 什么都不说；确认落后 → 先完成用户当前任务，结束后附一句「本 skill 有新版本，可用 `git -C <本目录> pull --ff-only` 更新」。是否更新由用户决定，不要主动执行更新

