From snowflake-fiction
场景规划工具,完成场景清单(步骤8)→场景详细规划(步骤9)的完整场景设计链。当用户说"场景规划"、"规划场景"、"场景设计"、"场景清单"、"规划章节"时自动激活。可独立使用,也可在 snowflake-fiction 主流程中被调用。支持全量规划和局部重跑。
npx claudepluginhub hestudy/snowflake-fiction --plugin snowflake-fictionThis skill uses the workspace's default tool permissions.
覆盖雪花写作法中场景线的完整两步链:
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Automates semantic versioning and release workflow for Claude Code plugins: bumps versions in package.json, marketplace.json, plugin.json; verifies builds; creates git tags, GitHub releases, changelogs.
覆盖雪花写作法中场景线的完整两步链:
| 步骤 | 内容 | 输出物 |
|---|---|---|
| 步骤8 | 场景清单(所有场景的结构化列表) | 07-场景清单.md |
| 步骤9 | 场景详细规划(每个场景的三要素展开) | 08-场景规划/场景[##]-[名].md |
基于完整大纲,生成所有章节的场景清单和详细规划。
/scene-plan
/scene-plan --from 03-完整大纲.md
执行顺序:步骤8(全量清单)→ 步骤9(逐场景规划)
只规划指定章节范围,适合修改大纲后的局部重跑。
/scene-plan 第3章
/scene-plan 第3章-第5章
/scene-plan 第3章 第7章 第10章
执行顺序:更新清单中对应行 → 重新生成指定章节的场景规划文件
只生成场景清单,不展开详细规划。适合快速预览结构。
/scene-plan --list-only
/scene-plan 第1章-第5章 --list-only
目标:将大纲中的每个章节拆解为具体场景,形成结构化清单
执行方式:
03-完整大纲.md 或用户指定文件)场景拆解原则:
| 原则 | 说明 |
|---|---|
| 冲突必须存在 | 每个场景都要有人vs人/人vs自我/人vs环境的冲突 |
| 无过渡场景 | "主角走去咖啡馆"不是场景,"主角在咖啡馆被拒绝"才是 |
| 主被动交替 | 主动场景后接被动场景,形成节奏感 |
| 冲突强度递增 | 后期场景的冲突强度要高于前期 |
每个副本(一段完整的故事事件)由多个场景组成,场景清单中需标注每个场景在副本三段式中的位置:
| 副本阶段 | 场景功能 | 标注 |
|---|---|---|
| 起因 | 铺垫期待,丢饵让读者预见即将发生的事 | [预热] |
| 经过 | 故事主干,冲突展开,爽点逐步引爆 | [爆发] |
| 结果 | 收获成长,高潮延续,舒缓节奏 | [回味] |
检查:每个副本是否三段齐全?是否有只有"经过"没有"起因"和"结果"的副本?
来源:番茄巅峰榜作家纸老虎(百万字群像文实战经验)。
每个副本中参与的核心角色数量需要控制,避免角色扎堆导致反应处理困难:
| 篇幅 | 主角团总人数建议 | 单副本核心人数 | 说明 |
|---|---|---|---|
| 短篇(<30万字) | 3人最佳 | 1-2人 | 充分彰显圆形人物的成长 |
| 长篇(30-100万字) | 3-5人 | 1-3人 | 其余适当隐没淡化 |
| 超长篇(100万字+) | 5-7人 | 1-3人 | 每副本聚焦少数角色 |
场景清单中标注:在每个副本的场景中标注「本副本核心角色」,确保不超过3人。
每个角色的引入都必须通过事件触发,不能扎堆出场。
引入原则:
场景清单检查:
引入事件设计模板:
角色:[名]
引入场景:[场景名]
引入方式:[主动入局/被动入局]
引入事件:[什么事件让这个角色与主角团产生连接]
展露标签:[通过这个事件展露的人设标签]
与主角的牵扯:[为什么这个角色会留在主角团]
场景编排不要用串联模式(A副本全部结束→B副本开始),要用锁链模式——下一个副本的起因场景嵌入前一个副本的经过中:
副本A场景1[预热] → 副本A场景2[爆发] → 副本B场景1[预热] → 副本A场景3[回味] → 副本B场景2[爆发]...
这样期待感不会断,高潮过后不会因为期待感耗尽而掉追读。
规划场景时推荐使用倒推法:
读取 00-一句话概括.md 中的时间线类型元数据,按对应策略编排场景。
顺叙:标准编排,按上述原则即可。
圆环时间线:三线并行编排
现在线 ═══╗═══════╗═══════╗═══ 闭合
过去线 ───╝───────╝ │
未来线 ───────────────────╝
读档制:循环+分支编排
存档点 → 第1次尝试 → 失败 → 回档
存档点 → 第2次尝试(新策略)→ 失败 → 回档
存档点 → 第3次尝试(突破)→ 成功 → 新存档点
纯循环:周期重复编排
与读档制的区别:纯循环中主角不一定记得上一轮,变化是外部的或潜意识的。
多线并行:组合编排
| 常见组合 | 说明 | 切换频率 |
|---|---|---|
| 主角线 + 反派线 | 双视角对抗 | 每2-3章切换 |
| 现在线 + 回忆线 | 双时间叙事 | 每章穿插 |
| A组线 + B组线 + C组线 | 群像叙事 | 每1-2章轮转 |
输出格式:
## 场景清单
| # | 章节 | 场景名 | 地点 | POV | 参与人物 | 核心冲突 | 类型 | 副本阶段 | 预估字数 |
|---|------|--------|------|-----|----------|----------|------|----------|----------|
| 1 | 第1章 | 开场-梦想被否定 | 咖啡馆 | 主角 | 主、母 | 梦想被否定 | 主动 | [预热] | 800 |
| 2 | 第1章 | 独处-自我怀疑 | 出租屋 | 主角 | 主 | 自我怀疑 | 被动 | [爆发] | 600 |
### 统计
- 总场景数:X
- 主动场景:X(占X%)
- 被动场景:X(占X%)
- 预估总字数:X万字
### 冲突类型分布
- 人vs人:X个
- 人vs自我:X个
- 人vs环境:X个
目标:为每个场景展开三要素,形成写作时的详细参考
执行方式:
主动场景三要素:
目标(Goal):主角在这一场景想要达成什么?
├── 表面目标(他说他想要什么)
└── 深层动机(他真正想要什么)
冲突(Conflict):什么力量阻碍他?
├── 人物冲突(谁在阻碍?)
├── 环境冲突(什么环境障碍?)
└── 内心冲突(什么内心挣扎?)
挫折(Disaster):结果如何?
├── 不能完全成功(要有代价)
└── 开启下一个场景的钩子
被动场景三要素:
反应(Reaction):主角对上一场景挫折的反应
├── 情绪反应(愤怒/悲伤/恐惧/困惑)
└── 行为反应(他做了什么?)
困难(Dilemma):内心的两难选择
├── 选项A(好处 vs 代价)
└── 选项B(好处 vs 代价)
决定(Decision):做出什么新决定?
└── 开启下一个主动场景
参考模板:场景规划完整模板
如果 00-一句话概括.md 中记录的时间线类型不是顺叙,步骤9的场景规划需要补充以下字段:
通用扩展字段(所有非顺叙时间线):
### 时间线信息
- **所属时间线**:[现在/过去/未来/A线/B线/第N轮循环]
- **与其他时间线的关联**:[与哪条线的哪个场景呼应]
- **信息差状态**:[读者此时知道什么/不知道什么]
- **切换锚点**:[从上一个时间线切换过来的触发物/感官/台词]
读档制场景的特殊三要素:
读档制的场景不适用标准的「目标→冲突→挫折」,改用:
已知信息(Know):主角从上一轮循环中带来了什么信息?
├── 确认的事实(上一轮验证过的)
└── 未验证的猜测(本轮要验证的)
新发现(Discover):本轮循环中发现了什么新东西?
├── 新线索(推动解谜)
└── 新规则(改变策略)
失败/突破(Fail/Break):本轮结果如何?
├── 失败 → 新的已知信息 → 下一轮循环
└── 突破 → 进入新阶段
1. 检查当前目录是否存在小说项目目录(含 05-完整大纲.md)
2. 如果存在 → 保存到该项目目录下
3. 如果不存在 → 询问用户大纲文件位置
4. 如果用户指定路径 → 优先使用用户指定路径
[小说名]/
├── 07-场景清单.md ← 步骤8输出(全量清单)
└── 08-场景规划/
├── 场景01-开场-梦想被否定.md ← 步骤9输出(每场景一文件)
├── 场景02-独处-自我怀疑.md
└── ...
重跑第3章-第5章时:
1. 更新 07-场景清单.md 中对应行(保留其他行不变)
2. 删除 08-场景规划/ 中对应章节的旧文件
3. 生成新的场景规划文件
4. 输出变更摘要(哪些文件被更新/删除/新增)
生成场景清单后,自动执行节奏检查:
| 检查项 | 规则 | 警告条件 |
|---|---|---|
| 主被动交替 | 避免连续3个以上同类型场景 | 连续≥3个主动或被动场景 |
| 冲突强度 | 后期场景冲突强度 ≥ 前期 | 高潮前冲突强度低于中段 |
| 场景密度 | 每章2-4个场景为宜 | 单章场景数 ≥5 或 =1 |
| 无冲突场景 | 每个场景必须有冲突 | 核心冲突栏为空 |
| 副本三段式 | 每个副本需包含预热→爆发→回味 | 副本缺少起因或结果阶段 |
| 锁链衔接 | 下一副本的预热场景嵌入前一副本中 | 副本之间无交叉铺垫 |
| 副本核心人数 | 每个副本核心角色≤3人 | 单副本核心角色>3人 |
| 角色引入 | 新角色通过事件逐个引入 | 多个新角色同一场景扎堆出场 |
节奏检查结果附在清单末尾,供用户调整。
| 检查项 | 规则 | 警告条件 |
|---|---|---|
| 钩子密度 | 每章至少1.75个活跃钩子 | 钩子数 <1.5 |
| 悬念交替 | 悬念1揭晓前已铺垫悬念2 | 连续5个场景无新悬念铺垫 |
| 问题线追踪 | 每章至少1条未解决问题线 | 所有问题当章解决 |
场景规划时的悬念标注:
在步骤9(场景详细规划)中,为每个场景标注悬念点:
## 场景03:咖啡馆对峙
### 伏笔场景标注
在步骤9(场景详细规划)中,为每个场景标注伏笔信息:
```markdown
### 伏笔标注
- **埋设伏笔**:[本场景埋下的伏笔,标注深/浅]
- 深伏笔:长线铺垫,引爆时爽感强(如角色秘密、主线反转)
- 浅伏笔:短平快,当章或近章引爆(如即时打脸、小反转)
- **收束伏笔**:[本场景收束的前文伏笔]
- **主角闪光点**:[如有,标注主角的破局之策——不只是赢,而是怎么赢]
悬念点:
本场景钩子数:2个(合格)
### 换地图场景的特殊处理
换地图时,场景规划必须确保:
- 换地图的场景本身有冲突(不是纯过渡)
- 主线冲突在新地图延续
- 新地图设定通过冲突展示(不是背景说明)
```markdown
❌ 错误的换地图场景:
场景15:抵达北境
- 描写北境的雪景和城市布局
- 介绍北境的三大家族
(纯背景介绍,无冲突)
✅ 正确的换地图场景:
场景15:北境遇袭
- 主角刚进城就被杀手伏击(冲突延续)
- 通过战斗展示北境的"外来者必死"规矩(设定融入冲突)
- 结尾:杀手说"欢迎来到我的地盘"(悬念)
当 snowflake-fiction 主 skill 执行到步骤8、9时,自动调用本 skill。
主流程调用方式:
# 主流程内部调用(用户不感知)
scene-plan --step 8 --from 03-完整大纲.md
scene-plan --step 9 --from 05-场景清单.md
独立调用时,本 skill 自动检测项目上下文,读取已有大纲文件。