# Novel Storyboard

给 AI 短剧出分镜：三层结构, , 段（一次视频生成，≤15 秒）→ 分镜（段内 2, 5 秒的剪切，认领剧本节拍） → 分镜图（每切一张关键帧：主分镜图钉 0.00...

- Repository: https://github.com/eternityspring/shuohao-skills (5850 stars)
- Category: AI and agents
- License: Apache-2.0
- Last updated: 2026-10-26
- Runs scripts: yes, review before use

## Install

Claude Code: `npx skills add eternityspring/shuohao-skills --skill novel-storyboard -g -a claude-code -y`
Codex: `npx skills add eternityspring/shuohao-skills --skill novel-storyboard -g -a codex -y`
Cursor: `npx skills add eternityspring/shuohao-skills --skill novel-storyboard -g -a cursor -y`
Gemini CLI: `npx skills add eternityspring/shuohao-skills --skill novel-storyboard -g -a gemini-cli -y`

## Description

给 AI 短剧出分镜：三层结构, , 段（一次视频生成，≤15 秒）→ 分镜（段内 2, 5 秒的剪切，认领剧本节拍） → 分镜图（每切一张关键帧：主分镜图钉 0.00 秒，子分镜图钉各自切点）。 每段自带一条 MiniMax H3 视频提示词（官方口径默认英文、逐镜换行，promptLang 可切中文）：对齐指令和 [Shot k] 切点时刻由分镜结构推导、逐字对账，台词逐字进 <d> 块（写法规范已内化为 references/h3-prompt.md，不依赖外部 skill）。 产出 storyboard.json + Markdown + 单页评审报告（分镜节奏带 / 分集分镜表 / 生成批次单 / 配音对齐单，含导出 JSON）。不出图, , 交付的是每格的画面提示词和它该挂哪些参考图。 18 道质量门全部由脚本确定性检查（第 18 道 shot-recipe 可选：挂上 shot-recipes 卡库才查，不挂就明说跳过）； export 一键导出 H3 投产包（每段提示词 + 按 Picture 序的分镜图清单）。零依赖、零 API key，用当前会话额度。 Use when asked to 分镜、出分镜、镜头表、切镜、storyboard for AI short drama。

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

## novel-storyboard

给 AI 短剧出**分镜**, , 管线里第一个直接面对视频模型的层。**前提刻在骨子里：镜头是生成出来的，多切一镜的成本几乎为零**，所以这里不心疼镜头数量，上限只有一个：视频模型单段生成的时长（默认 15 秒）。

**核心机制：镜头认领节拍。** 每个镜头声明它覆盖剧本某场的哪几个连续节拍（`sceneIndex` + `beats: [起, 止]`），镜头不许跨场次, , 换景必换镜。这让分镜和剧本的关系变成可机械对账的：

| 交付 | 解决什么 |
| --- | --- |
| 节拍认领 | 每个节拍被恰好一个镜头认领、顺序不乱, , 剧本改了重跑 validate，失效的镜头当场点名 |
| 单镜头 ≤ 15 秒 | AI 视频单段生成上限，长对话在这里被强制拆镜（`params.maxShotSeconds` 按模型改） |
| 台词装得下 | 认领节拍的台词秒数 ≤ 镜头秒数, , 逐镜检查，不是拍脑袋 |
| 分镜图提示词 + 镜头正文 | 分镜图提示词（`frame`，中文，直呼角色名）给图像模型配合设定图出图；镜头正文（`shot`，中文，通用身份）写这几秒发生什么。景别是枚举，中文景别词必须写进分镜图提示词 |
| **H3 视频提示词（每段一条）** | MiniMax H3 的 I2VA 结构：固定对齐指令 + integrated_multimodal_description + overall_soundscape + non_diegetic_music。**认领节拍的台词逐字进 `<d>[Chinese] …</d>` 块**, , 对白、声景、配乐一段提示词全带上 |
| **Seedance 视频提示词（每段一条，程序拼）** | 跟 H3 并列。由脚本按官方结构拼：参考图声明、段级走位、逐镜量化字段、台词 `{}`、音效 `<>`、配乐 `（）`、编号约束。模型只写每切的 `shot`，不写秒数、编号和图片引用 |
| 构图量化字段 | 每段 `blocking`（谁在左谁在右、间距），每镜焦距／机位／构图／视线落点／焦点／稳定性, , 不出分镜图时，它们就是构图的全部来源 |
| 生成批次单 | 同场景 + 同光照的镜头归一批，共用同一张环境参考图, , AI 版的顺场表，脚本自动汇总 |
| 配音对齐单 | 每句台词对到镜号, , TTS 音频贴到哪一段视频，脚本自动汇总 |

`{baseDir}` = 本文件所在目录。脚本 `{baseDir}/scripts/novel-storyboard.mjs`，零依赖，`node` 直接跑。

**边界（不做的事）**：不写戏不改台词（`novel-script` 的活）、不出场景/角色/道具设定图（`novel-art` / `novel-characters` 的活）、不做视频生成与剪辑合成。口型/唇形同步暂不管, , 那是生成管线的事。

---

### Step 0, 定输入与范围

**script.json 是硬前提**, , 分镜离开剧本没有意义，validate/render 都必须给 `--script`。其余上游按有则用：

- `--outline` / `--cast`：提示词禁人名检查 + 报告里 C01 显示成人名
- `--art`：报告里 S01 显示成场景名 + 批次单嵌场景设定图
- `--shots <卡片目录>`：**可选**挂载 shot-recipes 的镜头配方卡库（指向 `shot-recipes/references/cards`，只接受目录不接受导出的 JSON），开第 18 道 `shot-recipe` 门。没装 shot-recipes 就别给, , 本 skill 自包含，不依赖它

**一次切几集**：跟剧本的批次走（剧本写到哪就分到哪），默认一批 ≤ 3 集。

**先定画幅**：storyboard.json 顶层 `aspectRatio` 是分镜与下游出图共同遵守的正式合同，只接受 `16:9` 或 `9:16`。没有特别要求时使用 `16:9`；竖屏短剧明确写 `9:16`。

### Step 1, seed 工作底稿

```bash
node {baseDir}/scripts/novel-storyboard.mjs seed <script.json> --eps 1-3 --aspect 16:9 > <workdir>/storyboard.json
```

The rest: https://github.com/eternityspring/shuohao-skills/blob/HEAD/skills/novel-storyboard/SKILL.md
