[](README.md)
[](README.en.md)
[](https://x.com/eternityspring)
🎬 **[AI视频工作台](https://reelbench.79px.com/)**
[](https://reelbench.79px.com/)
# shuohao-skills
**AI 短剧制作的 skill 集合**:从一本小说到直接喂生成管线的制作素材——拆角色、排大纲、出场景与道具设定、写剧本、切分镜。给 AI 编码 agent 用,**Claude Code 和 codex 都能跑**。
整条管线长这样——**改编大纲收敛结构,剧本、场景、角色三者同步迭代,分镜只做输出不做新决定**:
| Skill | 做什么 |
| --- | --- |
| [**novel-outline**](skills/novel-outline) | 把一本小说改编成短剧大纲五件套:改编说明、人物表、爽点表、分集梗概、资产清单(含叙事道具表)。14 道质量门全部脚本检查,支持已有大纲的体检模式 |
| [**novel-characters**](skills/novel-characters) | 把大纲定下的角色做成角色设定集:人物画像、形象提示词、音色提示词、角色设定图。吃 outline.json 预填角色表,报告语言可选 |
| [**character-refs**](skills/character-refs) | 给任何故事里的角色**真出**参考图(不限小说,自己原创的故事也行):一段话描述角色,拆字段、补全、确认后先出正面全身锚点,大头照、90° 侧面、背面、细节图都只参考这张锚点,按需分档。每张图带标识、可单独重出,过期自动标出。支持 Qwen Image(ComfyUI)、codex 出图、GPT Image 2 API、自定义命令 |
| [**novel-art**](skills/novel-art) | 给 AI 短剧出美术设定集(场景 + 叙事道具):一致性锚点、光照与状态变体、尺度参照、无人无手白底提示词。吃 outline.json 预填清单,10 道质量门全部脚本检查 |
| [**novel-script**](skills/novel-script) | 给 AI 短剧写剧本:场次 + 节拍流(动作与台词交替),逐集时长按语速确定性折算,钩子前 3 拍冷开场兑现是门,台词本按角色聚合带音色提示词直接对接 TTS。10 道质量门全部脚本检查 |
| [**novel-storyboard**](skills/novel-storyboard) | 给 AI 短剧出分镜:段(一次生成 ≤15 秒)→ 分镜(2–5 秒硬门)→ 分镜图(主图钉 0.00 秒、子图钉各自切点),MiniMax H3 提示词的对齐指令与切点时刻逐字对账;分镜图拿设定图当参考图真出图,export 一键出 H3 / Seedance 投产包。18 道质量门全部脚本检查 |
**五段管线 skill 的报告都支持中英双语界面**:默认中文,`render --lang en` 出全英文报告(数据内容保持原文)。character-refs 的报告同样内置中英日界面,其他语言现场翻译。
## AI 短剧交流社群
我建了一个付费AI视频交流群,讨论 AI 视频的工作流、工具和实操。**交流群 ReelBench AI 视频工作台是两项独立服务。**
有兴趣的加我:**微信 `hao_dev`**,添加时备注 **`github`**。
## 合成一张单页
五段的报告可以合成一张单页,左侧导航切换——**有哪几段就出哪几个面板**:
```bash
node scripts/report.mjs --from --out report.html
```
`--from` 按下面的[工作目录约定](#端到端-demo-工作目录约定)自动发现五份 json;也可以逐个指定(`--outline` `--cast` `--art` `--script` `--storyboard`)。只跑了角色那一段就只有一个面板,不报错。
它是**组装器,不是独立 skill**:不 import 任何 skill 的代码,而是调各自的 `render --html` 拿产物再拼装。所以五个 skill 一行不改、各自仍然独立可跑、可以单独拷走;某个 skill 改了渲染,这边自动跟上。
合并时处理三件事——**这三件都在组装器里做,不侵入 skill**:
- **样式串味**。五份报告共用 57 个类名,其中 13 个同名不同定义(`.copy` `.kpis` `.badge` `.chip`……),所以给每份样式的每条选择器加作用域前缀
- **脚本串味**。各报告的脚本都是 `document.querySelector('.expo')` 这种全局查询,合成一页后只会命中第一个——五个导出按钮会全废。做法是给每份脚本套一层作用域代理
- **图片路径**。各报告的图相对自己那份 json 的目录(`images/…`、`E01-01/f1.png`),合成后按输出文件的位置重算
默认一次显示一个面板(五份加起来将近六十万字符)。左下角「平铺全部」把所有面板同时展开,Cmd+F 恢复全局搜索。数字键 `1`–`5` 切面板,`#pane-script` 这样的深链可以直接分享到某一屏。
```bash
node scripts/report-selftest.mjs # 92 项断言,不起浏览器
```
丢一本小说进去,出这五套:
**novel-outline · 短剧改编大纲**

**novel-characters · 角色设定集**

**novel-art · 美术设定集(场景 + 道具,设定图为 skill 实际生成)**

**novel-script · 剧本(时长仪表 + 分集剧本 + 台词本)**

**novel-storyboard · 分镜(分镜节奏带 + 主/子分镜图为 skill 实际生成 + H3 提示词)**

不从小说出发也行,给任何一个角色真出参考图:
**character-refs · 角色参考图(锚点 GPT 出、其余 Qwen 出,全部为 skill 实际生成)**

## 安装
```bash
git clone https://github.com/eternityspring/shuohao-skills.git
cd shuohao-skills
./scripts/install.sh
```
自动检测本机装了 Claude Code 还是 codex,把所有 skill **软链**过去——`git pull` 之后立刻生效,不用重装。
```bash
./scripts/install.sh novel-characters # 只装某一个
./scripts/install.sh --codex # 只装到 codex
./scripts/install.sh --uninstall # 取消软链
```
不想用脚本就自己链:
```bash
ln -s "$PWD/skills/novel-characters" ~/.claude/skills/novel-characters
ln -s "$PWD/skills/novel-characters" ~/.codex/skills/novel-characters
```
## 前置条件
| | 必需? | 说明 |
| --- | --- | --- |
| **Node** | 必需 | ≥ 18。skill 的脚本只用标准库,**没有 npm 依赖,不需要 install** |
| **模型额度** | 必需 | 用你当前会话的额度,**不需要任何 API key** |
| **codex CLI** | 可选 | 只是一个能跑这些 skill 的运行环境,跟 Claude Code 等价。五段管线 skill **不出图**,不需要它的任何本机能力 |
| **出图模型** | 只有 character-refs 需要 | 四选一:自己的 ComfyUI(Qwen Image)、本机 codex 内置出图(吃 ChatGPT 订阅额度)、OpenAI API key(GPT Image 2)、自定义命令。第一次使用时选 |
## 仓库约定
每个 skill 一个目录,**自包含、可以单独拷走**:
```
skills//
├── SKILL.md 给 agent 读的工作流(必需)
├── README.md 给人读的说明
├── scripts/
│ ├── .mjs 确定性工具,零依赖
│ └── selftest.mjs 自测,不调模型(必需)
├── references/ 按需加载的详细指令
├── examples/ 自带样例,同时当测试夹具
└── assets/ 截图
```
两条硬要求:
- 每个 skill 必须有 `SKILL.md`
- 每个 skill 必须有 `scripts/selftest.mjs`,**不调用模型、不花额度**,覆盖全部确定性逻辑
加新 skill 之前,先把全部自测跑一遍:
```bash
for f in skills/*/scripts/selftest.mjs; do node "$f"; done
```
没有配 CI——自测足够快(1 秒),本地跑一次比等 CI 更省事。**只在 macOS + Node 24 上验过**;代码没有平台相关调用,Linux 和更低版本 Node 理论上没问题,但没验。
## 端到端 demo 工作目录约定
把一本小说从头跑完五段(角色 → 大纲 → 美术 → 剧本 → 分镜),会产出大量 `*.json` / `*.md` / `*-report.html`。**不要平铺在根目录**,按五个 skill 各建一个目录归档,一眼对应流水线五段:
```
/
├── outline/ ← novel-outline 产出:<剧>-outline.json / .md / -report.html
├── characters/ ← novel-characters 产出:<剧>-cast.json / .md / -report.html
├── art/ ← novel-art 产出:<剧>-art.json / .md / -report.html
├── script/ ← novel-script 产出:<剧>-script.json / .md / -report.html
├── storyboard/ ← novel-storyboard 产出:<剧>-storyboard.json / .md / -report.html
│ ├── manifest.json ← export 产出
│ ├── E01-01/ ← export 的分镜投产包,每段一个文件夹(prompt.md + f1..fN.png)
│ ├── E01-02/
│ └── …
├── docs/ ← 自己写的使用说明、PR 草稿等(与机器产物解耦)
└── scripts/ ← 跑管线的辅助脚本(探索期脚本用 _ 前缀保留溯源)
```
约定要点:
- **每个 skill 一个目录**,装它自己的 `json` / `md` / `html` 三件套,加新角色/场景只往对应目录放,不污染根目录
- **分镜的 `manifest.json` 与 `E01-0x/` 投产包一起归 `storyboard/`**,就是 `export --out storyboard` 的原样产出。**段文件夹不要再往下收一层**(例如收进 `segments/`):分镜报告里的图走相对路径 `<段号>/f<切序>.png`,默认要求报告 html 与段文件夹同级(放在别处就用 `render --frames <目录>` 指过去),多套一层目录又不指,报告里的图会**静默**全变成「未生成」占位——实测把 10 个段文件夹移进 `segments/` 之后,内嵌图从 2 张变 0 张,报告不会报错
- **报告 HTML 与生成的图/视频可由 `render` 重跑再生**——进版本控制时建议只提交 `json` / `md` / `docs` / `scripts`,报告 HTML 和分镜 `png` 用 `.gitignore` 排除,保持仓库轻量
- 用法类文档(如各报告的使用说明)放 `docs/`,与 skill 自动生成的产物分开,方便单独维护
> 这套结构来自《渡口》端到端 demo 的实际归档经验,demo 的工作目录在本仓库之外,这里只固化约定。
## Star 趋势
[](https://star-history.com/#eternityspring/shuohao-skills&Date)
## License
[Apache 2.0](LICENSE)