Install any skill in seconds. Free to start, no credit card required.
Get Started Free →编剧环节:创作或修订中文短剧、漫剧单集卡、因果节拍与可拍摄的 Markdown 剧本,也负责把现有中文剧本以保留原文、预览语义差异、创作者接受后发布的方式规范化。用户提出“写/改一集短剧”“把大纲写成剧本”“优化场景/对白”“去模板感地修订”“去 AI 味润色”“续写下一集”或提供现成剧本要求进入后续制作时使用;不负责资产、分镜、媒体提示词或终审。
.claude/skills/worldwonderer-short-drama-write/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 107% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 68% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 125% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 135% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -25% | 0% |
把单集意图写成可表演、可追踪且会改变故事状态的场景。screenplay.md 是唯一可编辑剧本源;卡片和节拍帮助推理,不是另一份正文。
离线验证剧本分块索引与录音表逐字投影:
bashpython3 {技能目录}/scripts/selftest.py python3 {技能目录}/scripts/screenplay_index.py <screenplay.md> --output <screenplay-index.jsonl>
本技能可独立安装和执行。先读取用户明确提供的单集材料与本任务直接输入;若当前目录是 short-drama 项目且项目工具可用,可以读取 status 并使用其发布生命周期,但缺少 core 或任何其他技能都不是写作工作的阻断条件。阶段契约 给出 本阶段边界与规则表,无需读取其他技能的文件。
$short-drama-develop。一轮写一个明确的场景或场景组。“把整集写完”也按场景边界拆成若干轮,每轮:
资产拆解、生产和审查各自是独立的工作单元,由创作者明确请求时开始。
确认创作者约束、已接受的上游事实、本集进入状态和待兑现铺垫。若修订已有剧本,引用当前文件而不是凭对话记忆重写。本阶段拥有什么、继承什么见 阶段契约。
项目开发/episode-map.jsonl 记录:复制episode-card.json。它在 sources 里声明上游快照,用 {"src": "episode-map", "record_id": "EP001"} 指向那条记录,其余只保存写作执行选择; 不复制、不改写 incoming/objective/turn/payoff/handoff。
episode-card-standalone.json,以 write_standalone 模式拥有最小单集契约。
同一集不得同时激活两个模式。若后续建立 development map,先做语义 diff,让创作者明确选择 authority 迁移,将 standalone 契约标记 superseded, 再换成 pointer 卡。若上游契约需改,发 develop owner revision;不在 execution 字段里偷改。不要用悬念替代整集回报。
单集契约进入本阶段时必须包含哪些字段、缺失时怎么办,见 阶段契约 的“单集契约与题材边界”。若只做原文规范化, 跳过本步,不推断缺失剧情。 从想法或 write_standalone 直接写作时,本阶段执行已接受的题材与钩子取向,不自行给项目 归类题材;没有已接受取向时按同一节的做法处理,不为贴题材标签另造公式。
复制 beats.jsonl,让每条节拍回答:
若节拍开启新线,明确声明;不要把“然后发生”伪装成“因此发生”。数量与长短服从本集动作,而非统一模板。
关系字段遵守同一约定:同一 beats.jsonl 内的前因、铺垫与兑现只写稳定 because_of_ids/setup_ids/payoff_ids,避免自引用文件哈希;来自 episode map、 前集或其他 owner artifact 的关系写 canonical because_of_refs/setup_refs/ payoff_refs。*_refs 只放引用对象。
引用这样写:文件首行的 {"record_type": "sources", "schema_version": "1.0.0", "sources": {...}} 记录把每个上游快照声明一次,sources 的每个短键映射到 {"owner": ..., "artifact": ..., "hash": ...};每条引用写 {"src": "<sources 键>", "record_id": "<记录 ID>"},需要时再加 field 指向该记录内 的 JSON pointer。指向整个 artifact 时只写 {"src": "<sources 键>"}。同一份文件里 同一个键始终指同一个快照。.json 文件把同样的 sources 对象写在顶层。
对每个场景先回答:为什么必须存在、谁的议程对撞、哪个可见动作承载冲突、哪里发生方向性变化、退出状态给下游留下什么。需要场景与可见行动方法时读取 script-craft.md。
写对白前读取 dialogue-craft.md,尤其检查人物策略、潜台词、信息争夺和声音差异。 当声源、环境撤出、主动留白、画外存在或相邻场 sound bridge 承担戏剧转向时,读取 scene-sound-dramaturgy.md。剧本只拥有故事必需的声音事实, 不替分镜设计逐镜声轨,也不用配乐替代表演。
创作者指出某个兑现的呈现方式可能需要更换时,读取 substitutable-realization.md,把功能、当前实现 与备选实现分开写下来。不要因此提前磨平任何内容:先按最想要的拍法写,备选只在真的 需要时启用。创作者没有标注时不做这一步,也不替创作者预判。
长单集需要跨多轮续写、上下文即将切换或中断恢复时,读取 scene-handoff-capsule.md,只保存从当前剧本派生的 最小场景交接;一次完成或局部修订时不要额外建立第二份摘要。
复制 screenplay.md,严格按 screenplay-format.md 写:
## EP001-SC001 内 · 地点 · 时间;角色(可表演提示):台词;[VO]、[OS]、[SFX]、[画面文字]、[转场]、[连续性]。识别创作者交来的行业通行方言(△ 动作行、【卡点】 等)、做原文规范化映射, 或按创作者要求以方言交付时,读取 production-format-dialect.md。
不要把镜头、资产全集、模型参数或提示词写进剧本。私密想法要转成行为、证据、空间后果,或明确标记的声音表达。
正文发布后,用 screenplay_index.py 生成只读派生索引;工具只识别格式契约中的场景标题、动作、对白、六种生产标签和注释,并保留 UTF-8 byte offsets、行范围与 source/content hash:
bashpython3 <skill-dir>/scripts/screenplay_index.py 剧集/EP001/screenplay.md \ --output 剧集/EP001/screenplay-index.jsonl \ --source-ref 剧集/EP001/screenplay.md \ --speaker 葛晴 --speaker 游森
由 write owner 阅读当前剧本后,把本集实际说话者逐个传给 --speaker;索引器只做精确 标签核对,不用冒号正则猜人物。未登记的 前缀:内容 写成 ambiguous_dialogue_or_action,由 agent 判断应保留为动作、改用 [画面文字],还是补入说话者清单。
规范化预览尚未获 creator acceptance 时加 --authority candidate,使 meta、block 与 source issue 的 refs 都保持 candidate;accepted 剧本发布后再以默认 accepted authority 重建,不得只手改状态字段。
修订时同时传 --previous-index 和 --previous-source。完全相同且唯一的邻近块复用 stable ID;拆分、合并或重复块歧义会写入 mapping_review_request,必须显式重映射。索引器绝不改写 screenplay.md。
正文落定后做一次量级粗测:按项目已接受的语速/字数比把正文字数折成秒数(项目没有这个 比值就向创作者要一个量级),与本集目标时长比一次。差出两倍以上就在报告里点名,由创作者 决定改集长还是拆集;两倍以内不必提。
创作者要为录音准备台词表时,复制 voice-record-sheet.jsonl.md。它是剧本的投影, 不是第二份台词权威:首行声明所引 screenplay-index.jsonl 快照,其后每行用 source_ref 绑定一个剧本块并逐字等于该块,要改词就改剧本再重新投影。
录音顺序几乎从不是剧情顺序(通常按人物集中录),配音者失去的正是上下文,所以每行要补 对谁说、接谁的话、此刻他知道什么、这一句要达成什么。写策略而不是情绪词——"愤怒"不可 执行,"质问"可执行。多音字、生僻字与专名的读法在进棚前定完并留痕;棚里中断是最贵的。
不需要录音时不生成这份文件。本写作阶段不生成音频,也不从这份文本判断成品音质; 实际 TTS 的确认后生产边界见文末。
写完后用 voice_sheet_check.py 核对它仍然是投影:
bashpython3 <skill-dir>/scripts/voice_sheet_check.py 剧集/EP001/voice-record-sheet.jsonl \ --index 剧集/EP001/screenplay-index.jsonl \ --screenplay 剧集/EP001/screenplay.md
脚本按块 ID 定位、切出剧本原字节、核对内容 hash,再逐字比对台词与说话人。剧本改过而 索引没重建、或有人在表里顺手改了词,都会被单独报出来——这两种情况下的配音本看起来 和正常的一模一样,而它被带进录音棚的那一刻正是没人能核对的时刻。
只覆盖部分对白(按人物或按场次分表)是正常做法,未覆盖的块只报告不判错。
按顺序做所有者修订:
局部修订保留不相关段落。先展示语义差异与可能失效的下游产物,创作者接受后再发布。
完成结构检查后只报告当前范围是否适合单独复核,不自动启动复核。若之后收到带证据的修订请求, 只修改本技能拥有的单集卡、节拍或剧本;完成该有界修订后再次交还控制权,复审需要新的明确请求。
structural_invariant:场景/块 ID、引用、已有生产标签语法、来源哈希与明确矛盾;校验器可阻断。
reviewed_invariant:因果是否成立、场景是否真正转向、内心是否可表演、对白是否改变局面,以及生产关键事实是否漏标;reviewer 须引用文本证据。
craft_default:进入得晚、退出得早、以选择和后果推动、用具体动作承载情绪;可说明理由覆盖。taste_option:沉默、旁白、方言、打断、场景静动、句式节奏;遵从创作者选择。不要把统一的爆点安排、转折时刻、台词比例、字数、场景数或节拍数设为质量门槛。
本技能只拥有:
剧集/<EP>/episode-card.json(上游 pointer + write execution,或显式write_standalone 契约;二者不并存)
剧集/<EP>/beats.jsonl剧集/<EP>/screenplay.mdscreenplay-index.jsonl资产身份、分镜边界、图片/视频提示词及终审结论属于其他技能。本技能不生成媒体。
创作者要求实际合成已确认台词时,把当前录音表与声音绑定交给 $short-drama-produce。 生产技能必须先展示本次 TTS 任务的原句、角色/声音、数量、参数和输出路径,并取得针对这份 预览的明确确认;本技能不会替创作者确认,也不会把剧本接受状态当作付费生产授权。
Other measured skills in the registry, with their headline benchmark lift.