SuperAPI AI 工具集

novel-script

写作与研究

查看项目

更新于 10-16 14:57

技能介绍

用途

novel-script 用于给 AI 短剧写剧本。它把 novel-outline 的分集梗概落成结构化的场次与节拍流(动作节拍与台词行交替),台词逐句带说话人与语气,时长逐集按语速确定性折算。

其前提设计是分层:剧本管戏,分镜管拍。「爽不爽」和「怎么拍」是两种迭代节奏,台词要反复推翻重写,若绑上镜头分解,每改一句都得重排镜头。因此这一层只有集、场次、节拍流,没有镜号;镜头、首帧提示词、生成批次都是下一层分镜 skill 的活。

底线是:台词必须是结构化数据,不能写成散文。每句台词是独立条目(说话人 + 台词 + 语气),动作是独立节拍——这是全部确定性检查的地基。

主要能力

  • 逐集时长预算:台词按语速折算、动作按节拍估时,写超写欠当场拦下。
  • 节拍流(动作 ⇄ 台词):台词可直接对接 TTS 逐句生成;动作节拍即画面要发生的事。
  • 每场至少一个动作节拍:避免纯对白的广播剧。
  • 开场钩子 + 结尾悬念:每集都落在纸面;hookBeat 认领具象位置,必须落在全集前 3 拍内(冷开场)。
  • 爽点认领:大纲里这一集的爆点必须被剧本认领,防止改丢。
  • 上游对账:场景/光照/道具对 art.json、角色对 outline.json。

脚本位于 {baseDir}/scripts/novel-script.mjs,零依赖,node 直接跑。

使用方式

Step 0 — 定输入与范围

outline.json 是剧本的直接上游(分集梗概、爽点落点、单集时长都在里面),标准流程从它开始。没有的话先问用户是否跑 novel-outline;用户坚持直接写,就问清集数与单集分钟数,手建骨架,对账门会明说跳过。一次写几集:默认一批 ≤ 3 集。可选参数:--outline(角色引用对账 + 爽点认领检查 + 报告里 C01 显示成人名)、--art(场景/光照状态/道具对账 + 报告里 S01 显示成场景名)。

Step 1 — seed 骨架

node {baseDir}/scripts/novel-script.mjs seed <outline.json> --eps 1-3 > <workdir>/script.json

确定性搬运:目标秒数(单集分钟 × 60)、钩子、悬念、该集爽点认领、候选场景与人物(进 seedNote)。scenes 留空,那才是写戏的活。

Step 2 — 逐集写戏

每集一份任务,能并发就并发。每份任务拿到:{baseDir}/references/script-pass.md 和 {baseDir}/references/schema.md;该集的 seed 骨架 + 大纲里这一集的梗概/爽点/人群方案;该集用到的场景卡(art.json 里的锚点、光照状态)与角色信息(有 cast.json 更好);前一集的结尾悬念。核心要求都在 script-pass.md 里,最重的四条:动作节拍只写常见动作;时长预算先于一切(三分钟一集约 50 个节拍,写完自己跑一遍 validate 看秒数);台词口语、单句一口气、谁的话像谁;每集第 1 拍冷开场给钩子的具象(hookBeat 认领),结尾一拍必须是悬念。写完把 seedNote 删掉。

Step 3 — 校验 ⛔ 不能跳

node {baseDir}/scripts/novel-script.mjs validate <script.json>
--outline <outline.json> --art <art.json>

10 道质量门全是代码:每集时长在目标 ±15% 内(台词按 4.5 字/秒折算、动作按 2.5 秒/拍,params 可调)、单句台词 ≤ 35 字、说话人在本场人物里或标 VO、每集钩子悬念落纸、钩子具象在全集前 3 拍内兑现(params.hookWindow 可调)、每场至少一个动作节拍、动作叙述体不混引号台词、爽点认领、角色对账、场景/光照/道具对账。有违规逐条修,改完重跑,直到通过。写超了先砍动作节拍再压台词;写欠了补戏不注水。

Step 4 — 输出与汇报

cd <输出目录> node {baseDir}/scripts/novel-script.mjs render <剧名>-script.json --md
--outline <outline.json> --art <art.json> > <剧名>-script.md node {baseDir}/scripts/novel-script.mjs render <剧名>-script.json --html
--outline <outline.json> --art <art.json> --cast <cast.json> > script-report.html

英文界面:加 --lang en(默认中文,也可跟 script.json 顶层的 lang 字段)。

报告含:KPI 带(含台词占比)、时长仪表、分集剧本、场次总表、台词本(按角色聚合、可整组复制;给了 --cast 每个角色组头带音色提示词按钮)、质量门面板、导出 JSON。

最终落地:

<输出目录>/ ├── <剧名>-script.json ├── <剧名>-script.md └── script-report.html ← 双击就能开

适用场景

四个 skill 的接力:novel-outline → outline.json(结构与分集)、novel-characters → cast.json(角色资产)、novel-art → art.json(美术资产)、novel-script → script.json(场次、节拍、台词)。seed 吃 outline.json;validate/render 的 --outline --art 负责对账和显示名字。往下一层是分镜:镜号、单镜头时长、首帧提示词、生成批次单都在那边。

限制

  • 边界(不做的事):不分镜头、无镜号、不写画面生成提示词、不出图、不配乐。不改大纲结构(砍线合人是 novel-outline 的活);不做角色和场景设定(novel-characters / novel-art 的活)。
  • 时长是估算不是秒表,容差 ±15% 就是为此留的;params.charsPerSecond 按配音语速可调。
  • VO 是画外音统一记号,谁的心声写在 delivery 里;台词本里 VO 单独成组。
  • 不设每集场次上限——换景次数只进 KPI 统计不设门。
  • 需要一个美术没登记的光照状态时,去 art.json 里补状态再回来,不要绕过门。

自测与样例

node {baseDir}/scripts/selftest.mjs

154 项断言,不调模型、不花额度。10 道质量门每一道都有击穿用例。

自带样例:{baseDir}/examples/渡口-script.json,《渡口》全 6 集完整剧本(9 场 123 句台词,每集冷开场兑现钩子、都落在 120 秒 ±15% 内),对着 novel-outline 与 novel-art 的样例全部质量门通过。