---
name: zenstory-ai-short-drama-write
description: "编写或修订可拍摄的中文短剧、漫剧单集 Markdown 剧本，也负责保留作者原文并规范化现成剧本。用户提出“写/改一集短剧”“把大纲写成剧本”“优化场景/对白”“去模板感”“去 AI 味润色”“续写下一集”或提供剧本要求进入后续制作时使用；不负责资产、分镜、媒体提示词或终审。"
license: "MIT"
metadata:
  decimalai-skill-id: "a3f98cd4-6d6f-4e04-89a9-fca3be19cd09"
  decimalai-version-id: "fb399ba0-e0b7-4bc6-8733-4ecbe773dd81"
  decimalai-version: "4"
  decimalai-body-sha256: "c469b7c99dd981558a2909b2cda19ba5aa312bb679a0d21fa20a512b3f78ef31"
  decimalai-name: "zenstory-ai/short-drama-write"
  decimalai-format: "1"
  decimalai-invocation: "model"
  decimalai-category: "design-media"
  decimalai-source: "https://app.decimal.ai/s/zenstory-ai-short-drama-write@4/SKILL.md"
---
# 短剧写作

把单集意图写成可表演、可拍摄、会改变故事状态的 `剧集/<EP>/剧本.md`。

## Quick Start

只维护一份剧本 Markdown，不另建 episode card、beats、block index、录音表、QA 或接受记录。
一级标题使用 `# EP001 集名`，场景标题使用 `## EP001-SC001 内 · 地点 · 时间/天气`。
对白写 `角色（可选表演提示）：台词`；生产标签使用 `[VO]`、`[OS]`、`[SFX]`、`[画面文字]`、
`[连续性]`、`[转场]`。不要把含冒号的动作叙述误写成对白。

## 入口

- 有分集规划：读取本集进入状态、目标、转折、回报和交接事实。
- 只有想法/大纲：在上下文形成最小单集契约和因果节拍，再直接写剧本。
- 已有剧本：保留作者语言，只做用户点名的定点修订。
- 非规范文本要进入制作：保留原文，只做必要的场景、动作、对白和生产标签规范化。

开发大纲和长篇分析都是可选上游；当前材料足够时直接写。

## 工作流

1. 锁定本集承诺的观看体验、谁现在要什么、阻力、当集兑现和退出状态。
2. 识别本集实际承担看点的机制：主打艰难选择时检查两边价值，判断转折依赖争议证据时检查证明边界，突出精确死线时检查动作容量，题面限定次数、轮次、呼吸或节拍时检查各单位是否在边界内完成所需状态。输入没有要求的机制不强加；已经作为主要看点的机制，要真正改变行动、关系或结果。
3. 在上下文排“因为—行动—结果—下一股压力”，不落盘节拍表；让物件、对白、沉默、空间或声音按本集题材承担必要工作，不预设某一种载体。
4. 逐场确定不可替代的功能、可见变化与场尾状态；由争取或冲突组织的场景再明确焦点议程与阻力。承担主要戏剧功能的配角要有自己的策略，事务性或环境性角色保持简洁即可。
5. 把动作、对白、画外音、声音事实和画面文字写入同一份剧本。
6. 用户要求整集就写完整集，场景批次自动续跑。
7. 交稿前静默反查：只读剧本，观众能否接收到本集承诺，人物行动是否有因果，题材语气是否一致；再对本集确实使用的选择、证据、有限单位或精确死线做专项检查。自检若增添了输入没有要求的机关，撤去新增机关。
8. 局部修订保留无关段落；明确问题直接修正，会改变剧情走向的选择交给用户。

## 写作要求

- 先服从输入已经给出的事实、`必须/禁止`、题材观看契约和退出状态；本技能的审查项与手艺默认只帮助实现这些要求，不能反过来补造题面没有的精确数字、记录、资源、程序、关系或机关。
- 每场改变信息、权力、关系、情绪、物理状态或风险；无变化的场删掉或合并。核心阻力的转向要有可追溯的事实、筹码、权限、代价或人物行动，不能只靠对手停止反应。
- 对白必须在争取、回避、试探、逼迫或重新定义关系；用可见、可听、可触的行为表现状态，不用解释替代行动，也不把已经演清的机制再说一遍。
- 自己写的对白初稿，写完读一遍，删掉不承担动作或冲突的句子；留下的每句都要能转成演员的一个动作或表情，转不成的删掉或改成动作。创作者带来的原文不按这条删。
- 全集第一拍应能独立形成钩子，见[开场第一拍](references/script-craft.md#81-开场接住进入状态)。
- 观众理解当前行动所必需的赌注要进入剧本，但载体服从题材；选择、证据、有限单位、精确死线等专项规则只在输入真正以它为发动机时启用，并按需读取[剧作手艺](references/script-craft.md)，普通决定、普通物件和模糊时间压力不升级成同一套机关。
- 压缩过程时只保留会改变策略、关系、风险或结果的节点。资源与外部反应必须来自输入或前文建立，且不能替人物完成最难的戏剧行动。
- 承担主要冲突的角色要保持相称的目标、判断或策略；事务性、环境性角色保持简洁，不为检查表硬加秘密、反转或人物弧。
- 已建立的代价、不可逆后果、关键持物、空间和知识状态要进入可追溯的退出状态；结尾可推进、留白、反讽、安静收束、形成余韵或让既有动作变义，不强制追加外部事件；已接受节奏档案的 `end_on_peak` 为 `true` 时，停在峰值上，不接余韵（见[项目节奏档案](references/script-craft.md#65-项目节奏档案)）。
- `[连续性]` 只交接由前文动作已经建立、又容易在下游丢失的状态；不能用作者标签证明镜头外从未发生某事，也不复述正文已清楚呈现的结果。
- 交稿前静默检查冗余：是否增加了输入没有要求的精确数字或记录链，是否用标签/对白重复动作，是否在回报后堆了多个同方向后果。删去没有新作用的内容，保留本集需要的选择、证据、时限、人物与连续性事实。
- 输入给出目标时长时按真实表演、动作和停顿通读压稿，先删重复验证、解释和同义收尾；不用统一字数、镜头数或节拍数填模板。
- 用户原文优先；“去 AI 味”是定点修订，不抹平作者个性。

## 按需知识

默认只读本 SKILL 和直接输入。出现下列明确信号时，在写正文前读取对应知识；同一输入有多个不同问题
可以分别读取，但不遍历无关引用：

- 阶段边界与规则分级：[阶段契约](references/stage-contract.md)
- 场景标题、对白和生产标签语法，或把创作者带来的现成剧本[规范化](references/screenplay-format.md#7-现有文本的规范化入口)：[剧本格式](references/screenplay-format.md)
- 项目特有的制作稿方言：[制作格式方言](references/production-format-dialect.md)
- 输入含[核心选择](references/script-craft.md#35-把一拍写成艰难选择时两个方向都要活着)、[有限次数/轮次/呼吸/节拍](references/script-craft.md#64-有限单位按完成状态计数)、[精确倒计时](references/script-craft.md#63-倒计时先算动作不要只写数字)或[会改变人物判断的关键物证](references/script-craft.md#53-证据先改变判断再改变关系)：[剧作手艺](references/script-craft.md)
- 过去关系必须通过对白进入，或关键人物容易只剩说明功能：[对白手艺](references/dialogue-craft.md)
- 声源、留白与 sound bridge：[场景声音戏剧](references/scene-sound-dramaturgy.md)
- 同一故事义务的不同可拍实现：[可替代实现](references/substitutable-realization.md)
- 长单集跨上下文时的最小交接：[场景交接摘要](references/scene-handoff-capsule.md)，只留在上下文
- 本集要用 `[VO]` 或内心独白交代信息，或有痛点要交代：[能演的不说](references/script-craft.md#44-能演的不说vo内心独白与痛点)
- `short-drama.json` 里有 `status` 为 `accepted` 的 `creator_authority.rhythm_profile`：[项目节奏档案](references/script-craft.md#65-项目节奏档案)

## 时长估算（按需）

用户问时长，或项目已接受节奏档案、需要核对 VO 占比时，才把索引写入系统临时目录。先用 Python 查询跨平台临时目录，把第一条命令打印的完整
路径原样替换进后两条命令的引号内。以下每条都是一行完整命令，不依赖 shell 变量或续行符；Windows
没有 `python3` 命令时使用 `py -3`。`--speaker` 的示例值必须替换为本集实际说话者。
项目配置存在时，可在第三条命令末尾加 `--project short-drama.json`。只有
`duration_estimate.py` 接受这个参数，第二条索引命令不接受：

```text
python3 -c "from pathlib import Path; import tempfile, uuid; print(Path(tempfile.gettempdir()) / ('short-drama-' + uuid.uuid4().hex + '.jsonl'))"
python3 "{技能目录}/scripts/screenplay_index.py" "剧集/EP001/剧本.md" --output "粘贴第一条命令输出的完整路径" --speaker "本集角色一" --speaker "本集角色二"
python3 "{技能目录}/scripts/duration_estimate.py" "剧集/EP001/剧本.md" --index "粘贴第一条命令输出的完整路径"
```

**改稿后重跑**：第二条命令写过一次的输出路径不能直接再写一次，会以 `already holds an index` 失败。
要保留原有块 ID，改稿前先保存旧剧本快照，重跑第二条命令时同时加
`--previous-index <同一路径>` 和 `--previous-source <旧剧本快照路径>`。没有旧快照或要从头重编号时，
加 `--no-previous`，也可以回到第一条命令另取一个临时路径。

估时前区分计数口径：`dialogue_characters` 包含标点，视频提示词中的参考语速按可发声字数计算。
按语速换算时排除标点，并按实际读法处理数字和缩写；不把两个计数混用。
项目已接受节奏档案、上限有效且本集有台词时，输出增加 `vo_share`：`[VO]` 字数占全部台词字数的比例、档案上限，以及是否超过。`[OS]` 计入全部台词，不计入 `[VO]`。

估算是参考，不是门禁；没有语速或动作段速率时只报告可数事实，不猜秒数。但任务已给目标时长时，
写作者仍须用真实朗读和动作通读判断能否容纳，并直接压缩重复节拍。

## 完成

用户点名的范围已写入，场景因果连贯，对白与行动可表演，承诺得到兑现或有意延迟，结尾完成本集预定的戏剧或情绪功能，即完成。最后一拍按本集结尾功能判断，不以新增事件作为完成条件。
资产、分镜、审查与生产只有用户点名时开始。
五份创作文档齐备后，可转 `$short-drama` 对跨文档结构做一次机械核对；内容质量仍由创作者审查。

## 安装维护

只有安装、升级或排障时运行 `python3 scripts/selftest.py`。
