novel-to-storyboard · v1.0.0 · 2026-09-28 · sha256 8ed30b37880b46c3

novel-to-storyboard v1.0.0A

Immutable. This exact content never changes and is served at /api/v1/blob/8ed30b37880b46c3.

---
name: novel-to-storyboard
title: 小说剧本转分镜脚本
description: 将小说/剧本文案自动转换为分镜脚本,并提取角色特征卡与场景特征卡,辅助影视/漫画/短视频制作。
description_zh: 小说/剧本文案 → 分镜脚本 + 角色特征 + 场景特征,一键生成 Markdown 报告 + JSON 数据
description_en: Convert novel/script text to storyboard, character cards, and scene cards.
version: 1.0.0
author: WorkBuddy
tags: [storyboard, novel, screenplay, character, scene, 分镜, 剧本, 小说, 角色, 场景]
trigger_priority: 100
allowed-file-types: [.txt, .md]
output-format: [markdown, json]
base_dir: C:\Users\drago\.workbuddy\skills\novel-to-storyboard
---

# 小说剧本转分镜脚本 Skill v1.0

## 功能概述

| 模块 | 说明 |
|------|------|
| **分镜脚本生成** | 自动将每段叙事/对白拆解为带镜头类型、摄影机运动、光线、色调、音效的分镜 |
| **角色特征卡** | 提取角色名、外貌描述、性格描述、出场次数、代表台词、AI 绘图提示词 |
| **场景特征卡** | 提取地点类型、时间、氛围、色调、出场人物、AI 场景提示词 |
| **统计摘要** | 总镜头数、场景数、角色数一览 |

---

## 触发条件

当用户提出以下需求时,立即加载并执行本 Skill:

- "把这篇小说/剧本转成分镜脚本"
- "帮我分析剧本的角色特征/场景特征"
- "我有一段文案,帮我出分镜"
- "根据脚本生成角色卡"
- "小说转分镜"、"剧本分镜"

---

## 工作流程

```
用户提供文案(粘贴文本 or 文件路径)
        ↓
[步骤 1] 读取 & 清洗文本
        ↓
[步骤 2] 段落切分 & 类型标注(叙事/对白/动作/场景标头)
        ↓
[步骤 3] 场景聚合 → 场景特征分析(地点/时间/氛围/色调)
        ↓
[步骤 4] 角色提取 → 角色特征分析(外貌/性格/对白统计)
        ↓
[步骤 5] 分镜脚本生成(镜头类型/摄影机运动/光线/音效)
        ↓
[步骤 6] 输出 Markdown 报告 + 可选 JSON 数据
```

---

## 使用方式

### 方式一:直接粘贴文案

用户将小说/剧本文字粘贴到对话框,AI 直接处理,无需文件。

```
用户:帮我把下面这段剧本转成分镜脚本:
[粘贴文案内容]
```

**此时 AI 无需调用脚本**,直接按照分镜模板在对话中输出结构化内容。

---

### 方式二:文件处理(调用 Python 脚本)

当用户提供 `.txt` 或 `.md` 文件时,调用核心脚本处理:

```powershell
# 基础用法(输出 Markdown)
python "C:\Users\drago\.workbuddy\skills\novel-to-storyboard\scripts\parse_novel.py" "C:\path\to\novel.txt"

# 指定输出目录 + 同时输出 JSON
python "C:\Users\drago\.workbuddy\skills\novel-to-storyboard\scripts\parse_novel.py" "C:\path\to\novel.txt" -o "C:\output" -f both

# 只输出 JSON(供程序化使用)
python "C:\Users\drago\.workbuddy\skills\novel-to-storyboard\scripts\parse_novel.py" "C:\path\to\novel.txt" -f json
```

**命令参数说明:**

| 参数 | 说明 | 默认 |
|------|------|------|
| `input` | 输入文件路径(.txt / .md) | 必填 |
| `-o / --output` | 输出目录 | 当前目录 |
| `-f / --format` | 输出格式:`markdown` / `json` / `both` | `markdown` |

---

## 输出内容说明

### 1. 分镜脚本(Storyboard)

每个镜头包含:

| 字段 | 说明 |
|------|------|
| 镜头编号 | 全局唯一编号 |
| 所属场景 | 场景 ID + 场景标头 |
| 镜头类型 | 远景 / 全景 / 中景 / 近景 / 特写 / 大特写 等 |
| 画面内容 | 当前镜头的叙事/动作描述 |
| 出场角色 | 该镜头中的角色列表 |
| 摄影机运动 | 静止 / 推镜头 / 跟拍 / 慢推 等 |
| 光线 | 自然光 / 月光 / 低光冷调 等 |
| 色调 | 暖橙 / 冷蓝绿 / 去饱和等 |
| 音效/配乐 | 基于场景氛围推断 |
| 对白 | 该镜头内的角色台词 |
| 动作提示 | 括号内的舞台/动作指令 |

### 2. 角色特征卡(Character Cards)

每个角色包含:

| 字段 | 说明 |
|------|------|
| 总出场次数 | 全文提及次数 |
| 对白条数 | 有台词的行数 |
| 出镜镜头数 | 出现在多少个分镜中 |
| 外貌特征 | 从文本中自动提取 |
| 性格特征 | 从文本中自动提取 |
| 代表台词 | 前 3 条对白示例 |
| AI 绘图提示词 | 供即梦/Midjourney 等工具使用 |

### 3. 场景特征卡(Scene Cards)

每个场景包含:

| 字段 | 说明 |
|------|------|
| 地点类型 | 室内 / 室外 / 特殊 |
| 时间 | 白天 / 黄昏 / 夜晚 / 未知 |
| 氛围 | 紧张 / 温馨 / 压抑 / 激烈 / 神秘 / 平静 |
| 色调方案 | 基于氛围自动推断 |
| 光线方案 | 基于时间+氛围推断 |
| 音效方案 | 基于氛围推断 |
| 出场人物 | 场景内出现的角色 |
| AI 场景提示词 | 供即梦/Midjourney 等工具生成场景图 |

---

## 文本格式建议(获得最佳效果)

为了让 AI 更准确地识别场景、角色和对白,建议文案遵循以下格式:

### 推荐格式:剧本格式

```
第一场 旧街道 黄昏

街道上行人稀少,橙红色的夕阳把影子拉得很长。

林默(站在路口,望着远处):我知道你一直在这里。

阿九(从阴影中走出,声音低沉):你终于来了。

(两人对视,沉默片刻)

---

第二场 咖啡馆内 夜晚

咖啡馆里灯光昏黄,角落里只剩最后一桌客人。
```

### 也支持:小说叙事格式

```
林默站在旧街道的路口,夕阳把他的影子拉得很长。他是一个三十岁出头的男人,眼神里总带着一丝不动声色的警惕。

"我知道你一直在这里。"他开口说,声音平静。

阿九从阴影中走出来。她的脸容姣好,但眉宇间有一种说不清的压抑。"你终于来了。"
```

---

## AI 直接输出模式(无文件时)

当用户粘贴文案时,AI 直接在对话中输出以下结构:

### 输出模板

```markdown
## 统计摘要
- 总镜头数:XX
- 场景数:XX
- 角色数:XX

---

## 分镜脚本

### 场景 1:[场景名]
地点:室内/室外  时间:白天/夜晚  氛围:紧张/温馨...

#### 镜头 1  `全景`
| 项目 | 内容 |
|------|------|
| 画面内容 | ... |
| 出场角色 | ... |
| 摄影机运动 | ... |
| 光线 | ... |
| 色调 | ... |
| 音效 | ... |
| 对白 | ... |

...(后续镜头)

---

## 角色特征卡

### 林默
| 属性 | 内容 |
|------|------|
| 总出场次数 | 15 |
| 对白条数 | 8 |
| 外貌特征 | 三十岁出头,眼神警惕 |
| 性格特征 | 沉稳,不动声色 |
| 代表台词 | 「我知道你一直在这里。」 |
| AI 绘图提示词 | `林默,三十岁男性,警惕眼神,电影级写实风格` |

---

## 场景特征卡

### 场景 1:旧街道 黄昏
| 属性 | 内容 |
|------|------|
| 地点类型 | 室外 |
| 时间 | 黄昏 |
| 氛围 | 神秘 |
| 色调 | 深蓝紫暗调 |
| 光线 | 暖橙逆光 |
| AI 场景提示词 | `旧街道黄昏,室外,暖橙逆光,神秘氛围,8K电影分镜概念图` |
```

---

## 镜头类型推断规则

| 文本特征 | 推断镜头类型 |
|----------|-------------|
| 环境/全景描写("远处"、"一片"、"俯瞰") | 远景 |
| 人物进入/全身动作("走进"、"站在"、"坐在") | 全景 |
| 对白/交流场景("说"、"问"、"笑道") | 近景 |
| 细节/表情/眼神("眼睛"、"嘴角"、"微微") | 特写 |
| 心理活动/意识("心中"、"脑海"、"意识到") | 大特写 |
| 追逐/动作(action 段落) | 跟拍 |
| 其他叙事 | 中景(默认) |

---

## 氛围色调映射表

| 氛围 | 色调方案 | 光线 | 音效 |
|------|----------|------|------|
| 紧张 | 高对比冷蓝绿 | 低光·冷调 | 低频警报·急促心跳声 |
| 温馨 | 暖黄橙低饱和 | 暖橙逆光/自然光 | 轻柔钢琴·背景人声 |
| 压抑 | 去饱和冷灰 | 低光·冷调 | 沉默·低沉弦乐 |
| 激烈 | 高饱和红橙 | 强光/混乱 | 打击乐·音效爆破 |
| 神秘 | 深蓝紫暗调 | 低光·冷调 | 环境音·诡异回响 |
| 平静 | 中性自然色 | 自然光·散射 | 自然环境音 |

---

## 快速使用示例

**用户输入:**
```
帮我把下面这段文案转成分镜脚本:

林默推开门,走进昏暗的地下室。角落里坐着一个人,背对着他。

"你找到我了。"那人没有回头,声音沙哑。

林默慢慢走近,手放在腰间的枪上。"游戏结束了。"

(两人对峙,空气凝固)
```

**AI 输出:**
- 统计:4 个镜头,1 个场景,2 个角色
- 分镜:建立镜头(全景,推镜头)→ 对白镜头1(近景)→ 对白镜头2(近景)→ 对峙特写
- 角色卡:林默(动作主导)、未知角色(对白出场)
- 场景卡:室内·地下室·夜晚·紧张氛围·高对比冷蓝绿

---

## 文件结构

```
novel-to-storyboard/
├── SKILL.md                  ← 本文件(技能文档)
├── skill.json                ← 技能元数据
└── scripts/
    └── parse_novel.py        ← 核心处理脚本(文件模式使用)
```

---

## 注意事项

1. **中文剧本格式** 支持最佳,英文剧本(INT./EXT. 格式)同样支持
2. **对白识别** 依赖 `角色名:台词` 格式,如格式不规范可能漏识别
3. **场景切分** 优先识别 `第X场`、`INT.`、`EXT.`、`场景X` 等标头;无标头则按双空行自动切分
4. **特征提取** 基于关键词规则,复杂隐晦的描述可能需要 AI 进一步人工补充
5. **长文本** 建议使用文件模式(`.txt`),对话模式适合 5000 字以内的文案

---

*novel-to-storyboard Skill v1.0 — 2026-04*