eternityspring/shuohao-skills · 第 1 次运行
写了一份全剧骨架,2,299 字(去掉空白计)。
- skill
- eternityspring/shuohao-skills@5612d2a0
- 装进工作目录的 skill
character-refs、novel-art、novel-characters、novel-outline、novel-script、novel-staging、novel-storyboard- 时间
- 2026-10-31 08:13–08:18(北京时间),5 分钟
- 轮数
- 4 轮,工具调用 10 次,按 API 价格折算 $3.81
- 匿名编号
- 531(评审只看到这个编号)
- 盲比
- 和另外 20 个参赛者的第 1 次运行各比一场:对照组(不装 skill) · zenstory-ai/drama-skills · lixiaoxiao9888-create/manju-laoli-skill · jtydhr88/screenwriting-skills · Shanyin-ai/shanyin-screenwriting-master · lixiaoxiao9888-create/short-drama-factory · adoria111/emma-screenwriting-skills · zhu5859243-free/hongguo-shortdrama-screenwriting · catyiqian/qianqianwriting · Hao0321/ai-short-drama · zenstory-ai/oh-story-claudecode · lingfengQAQ/webnovel-writer · 0xsline/short-drama · Tomsawyerhu/Chinese-WebNovel-Skill · xindoo/sumeru · LanyXiaosheng/bookflow-skill · dama-cyber/Distilled-Novel-Toolbox · tance-mang/chinese-webnovel-skills · xiaofeng-928/chinese-longnovel-skill · qingyabailu-git/webfiction-write
- 原始文件
- 产出和问答记录 · 原始日志
写出的文件
标了标签的是认定为全剧骨架、拿去匿名打包的文件(deliverables.toml)。
验尸官的婚礼-outline.json 10,308 字
{
"source": "验尸官的婚礼",
"lang": "zh",
"params": {
"episodes": 60,
"minutesPerEpisode": 1.5,
"genre": "女频大女主复仇悬疑(豪门)",
"adaptMode": "抽核",
"preferences": [
"每集拿出一样看得见的证据",
"爽点落在沈家与周启年脸上",
"结局:当庭推翻自己签的报告,墓前放表"
]
},
"adaptation": {
"core": "被退婚的女法医在前未婚夫的婚礼上认出新郎是替身,用一件件看得见的证据把三年前那具无名男尸还原成沈峥,最后亲手推翻自己签过的假报告。",
"keep": [
{
"what": "婚礼认替身的开局",
"why": "第一集就有全剧最强的钩子,前未婚夫的婚礼天然自带羞辱与反击",
"evidence": "一眼认出新郎是替身:真新郎三年前就躺在她的解剖台上。"
},
{
"what": "每集一件证据的推进引擎",
"why": "证据是可拍的实物,AI 生成好控;证据递进=疤→切片→报告→录音→袖扣,五段一段一件主证",
"evidence": "每一集她都要拿出一样看得见的证据:一道疤、一张切片、一段录音。"
},
{
"what": "林晚自己签过假报告这根刺",
"why": "让女主不是完美受害者,越接近真相越接近自己的罪,中点和结局都压在这里",
"evidence": "被周启年逼着改成“意外”,签了字,这是她心里的一根刺。"
},
{
"what": "苏曼丽的房卡与一次反水",
"why": "敌营里的不稳定盟友,给中段制造一次真失守",
"evidence": "答谢宴上偷偷把求救的房卡塞给她;为了家里的生意,后面还会反水一次。"
}
],
"cut": [
{
"what": "苏沈港口生意的商战线",
"why": "两分钟一集装不下商战,港口只作为洗钱证据的来源,不单独开线"
},
{
"what": "林晚与沈砚的感情线",
"why": "大女主复仇剧,沈砚定位内应与证人,不发展恋爱,避免稀释沈峥这根主线"
},
{
"what": "沈家二房争股份的支线",
"why": "遗嘱只作为宋婉仪找替身的动机交代一次,二房不出场"
},
{
"what": "程野的赌债债主线",
"why": "只作为他被宋家拿捏的背景,债主不出场,拿捏他的筹码统一换成妹妹"
}
],
"merge": [
{
"what": "宋家的司机、打手、买通的鉴定人统一并入一个保镖",
"why": "宋知远的脏手只需要一张脸"
},
{
"what": "办案警察并成一位刑侦队长",
"why": "后半程的布控、审讯、移送都由同一人承担,观众好认"
},
{
"what": "法医中心的同事并成一位实习法医",
"why": "送检链见证人、林晚停职后的内线,同一功能"
}
],
"risks": [
{
"what": "程野与沈峥同脸,AI 生成容易混",
"plan": "共用一张脸资产,用左手虎口有无疤和白手套区分;沈峥只在闪回出现,闪回统一冷蓝调"
},
{
"what": "解剖与尸体画面过不了平台审核",
"plan": "尸体全程白布不露脸,用切片、报告、尸检照片局部、虎口特写替代"
},
{
"what": "证据引擎重复,观众疲劳",
"plan": "五段每段换一类主证(疤/切片/报告/录音/袖扣),沈家毁证手段也逐段升级:抹黑→毁样本→停职→灭口→杀人"
},
{
"what": "游艇夜海戏生成难",
"plan": "三年前闪回与终局对峙共用同一游艇资产,只换时段;落水只拍入水前一刻"
}
],
"cutNote": "这意味着:全剧只有一条主线——三年前是谁杀了沈峥,副线是林晚自己的假报告;终点不是夺回沈氏,而是她当庭重写死因并签上自己的名字。",
"mergeNote": "主角组定林晚、程野、沈砚、宋知远四人——林晚从签假报告到亲手推翻,程野从替人活到替自己认罪,沈砚从不信到作证,宋知远是全剧最后的对手。周启年、宋婉仪、苏曼丽是被爽点打脸的配角,不进主角组。"
},
"characters": [
{
"id": "C01",
"name": "林晚",
"role": "女主 · 法医",
"tier": "lead",
"arc": "从被退婚、被抹黑、被停职,到当庭推翻自己三年前签的报告,重写死者沈峥他杀并签名——赢回的不是名声,是那份签字",
"from": ["选题卡 林晚"]
},
{
"id": "C02",
"name": "程野",
"role": "顶着沈峥的脸的替身新郎",
"tier": "lead",
"arc": "从替死人活、怕自己哪天也意外,到交出生活手册作证,最后带着妹妹去自首",
"from": ["选题卡 程野"]
},
{
"id": "C03",
"name": "沈砚",
"role": "沈家二少 · 林晚在沈家的内应",
"tier": "lead",
"arc": "从不信法医、嘲讽林晚,到用自己的血做亲缘比对,再到想起游艇那晚并出庭作证",
"from": ["选题卡 沈砚"]
},
{
"id": "C04",
"name": "宋知远",
"role": "主反派 · 沈家舅舅",
"tier": "lead",
"arc": "前半程是和气的调停人,第33集袖扣露底,最后在同一艘游艇上被当场拿下,认罪伏法",
"from": ["选题卡 宋知远"]
},
{
"id": "C05",
"name": "苏曼丽",
"role": "新娘 · 敌营里不稳定的盟友",
"tier": "support",
"arc": "带头踩林晚→塞房卡求救→为生意反水→被宋知远当替罪羊后交出港口货单",
"from": ["选题卡 苏曼丽"]
},
{
"id": "C06",
"name": "周启年",
"role": "法医中心主任 · 三年前逼签的人",
"tier": "support",
"arc": "从压林晚的老领导,到被她当众反将、被宋知远灭口未遂,最后交出录音认罪",
"from": ["选题卡 周启年"]
},
{
"id": "C07",
"name": "宋婉仪",
"role": "沈家主母",
"tier": "support",
"arc": "为保股份找人顶替儿子、一路护着替身;得知儿子死于亲弟之手后崩塌,交出账本与沈氏",
"from": ["选题卡 宋婉仪"]
},
{
"id": "C08",
"name": "沈峥",
"role": "死者 · 只活在闪回与证据里",
"tier": "support",
"arc": "订婚时送表的人、发现洗钱的人、游艇上被灭口的人;每一段闪回补一块他的死因",
"from": ["选题卡 沈峥(与程野共用同一张脸资产,以虎口疤区分)"]
},
{
"id": "C09",
"name": "程溪",
"role": "程野的妹妹 · 宋知远的筹码",
"tier": "support",
"arc": "被宋家安置在外当人质,苏曼丽反水后被带走,终局获救,陪哥哥去自首",
"from": ["选题卡结局「程野带着妹妹去自首」", "原创:补出名字与人质功能,替换赌债线"]
},
{
"id": "C10",
"name": "刑侦队长",
"role": "后半程布控、审讯、移送",
"tier": "functional",
"from": ["合并:办案警察若干"]
},
{
"id": "C11",
"name": "实习法医",
"role": "林晚的助手 · 送检链见证人",
"tier": "functional",
"from": ["合并:法医中心同事若干"]
},
{
"id": "C12",
"name": "宋家保镖",
"role": "宋知远的脏手:毁证、刹车、带走程溪",
"tier": "functional",
"from": ["合并:司机、打手、买通的鉴定人"]
},
{
"id": "C13",
"name": "婚礼司仪",
"role": "婚礼与答谢宴的控场人",
"tier": "functional",
"from": ["原创"]
},
{
"id": "C14",
"name": "审判长",
"role": "终局庭审",
"tier": "functional",
"from": ["原创"]
}
],
"scenes": [
{ "id": "S01", "name": "沈家婚礼宴会厅(婚礼 / 答谢宴 / 发布会)", "primary": true },
{ "id": "S02", "name": "市法医中心解剖室", "primary": true },
{ "id": "S03", "name": "周启年主任办公室", "primary": true },
{ "id": "S04", "name": "沈家老宅客厅", "primary": true },
{ "id": "S05", "name": "酒店新婚套房", "primary": true },
{ "id": "S06", "name": "沈家游艇(三年前夜 / 终局夜)", "primary": true },
{ "id": "S07", "name": "林晚公寓", "primary": true },
{ "id": "S08", "name": "宋氏港口码头办公室", "primary": true },
{ "id": "S09", "name": "法庭", "primary": true },
{
"id": "S10",
"name": "公安局审讯室",
"primary": false,
"reusePlan": "复用 S03 主任办公室的冷白灯光与金属桌资产,去掉书柜换单面镜墙"
},
{
"id": "S11",
"name": "沈峥墓前",
"primary": false,
"reusePlan": "只在第60集出现一次;从 S04 沈家老宅外景庭院延展成后山家族墓园,清晨阴天薄雾"
}
],
"props": [
{
"id": "P01",
"name": "沈峥的男式旧机械表",
"function": "订婚时沈峥送的表,表带磨白,林晚一直戴在左腕。替身认不出自己送的表是第一处破绽;结局放在沈峥墓前,全剧收束",
"beatIds": ["B03", "B25"]
},
{
"id": "P02",
"name": "程野的白手套",
"function": "遮住光洁的左手虎口。手套一摘,没有疤,替身即被识破",
"beatIds": ["B01", "B02"]
},
{
"id": "P03",
"name": "三年前的无名男尸尸检报告",
"function": "结论意外、签着林晚的名字。前半程是沈家和周启年压她的把柄,中点被她自己当众举起,结局当庭推翻重签",
"beatIds": ["B13", "B24"]
},
{
"id": "P04",
"name": "病理切片蜡块",
"function": "火化前林晚违规私留的组织样本,是那具尸体唯一残存的身体证据。被毁、被调包,最终做出与沈砚的同胞比对",
"beatIds": ["B06", "B08", "B09"]
},
{
"id": "P05",
"name": "苏曼丽的房卡",
"function": "答谢宴上偷塞的求救信号,打开敌营的第一道门",
"beatIds": ["B04"]
},
{
"id": "P06",
"name": "沈峥生活手册",
"function": "宋家给程野学沈峥的手册,首页日期在游艇事发次日、尸体被发现之前——证明有人提前知道沈峥已死",
"beatIds": ["B12", "B19"]
},
{
"id": "P07",
"name": "周启年的旧录音笔",
"function": "三年前周启年留的后手,录着宋知远交代三天内火化。被指合成,再被背景船笛定位到港口",
"beatIds": ["B17", "B18"]
},
{
"id": "P08",
"name": "船锚银袖扣",
"function": "宋知远的标志。尸检照片里死者指缝中的银色碎片是一只锚爪,他左袖那只是后配的——直接把凶手钉在游艇上",
"beatIds": ["B14", "B21", "B22"]
}
],
"beats": [
{ "id": "B01", "type": "悬念钩", "weight": "minor", "episode": 1, "setup": "林晚被请来婚礼当众难堪,新郎摘手套递戒指", "payoff": "左手虎口光洁无疤,她想起三年前解剖台上那具无名男尸虎口的旧疤" },
{ "id": "B02", "type": "当众揭破", "weight": "major", "episode": 2, "setup": "全场等着看前任出丑", "payoff": "林晚当众扣住新郎左手,宣布他不是沈峥,全场哗然,新郎冷汗湿透手套" },
{ "id": "B03", "type": "打脸", "weight": "minor", "episode": 5, "setup": "苏曼丽在答谢宴上带头羞辱,网上全是前任大闹婚礼", "payoff": "林晚亮出腕上旧表问新郎这是谁送的,他答不上来,苏曼丽的笑僵在脸上" },
{ "id": "B04", "type": "反转", "weight": "minor", "episode": 8, "setup": "苏曼丽踩她最狠", "payoff": "房卡背后是求救:新郎从不碰她,半夜在阳台背沈峥的生平" },
{ "id": "B05", "type": "揭破", "weight": "major", "episode": 10, "setup": "林晚在套房堵住程野,摆出他整容前的模仿演员旧照", "payoff": "程野承认自己是替身,但不知道沈峥怎么死的,妹妹在宋家手里" },
{ "id": "B06", "type": "反转", "weight": "minor", "episode": 13, "setup": "人三天就火化了,沈家笃定死无对证", "payoff": "林晚打开公寓冰柜:三年前她私留的一盒切片蜡块" },
{ "id": "B07", "type": "打脸", "weight": "minor", "episode": 16, "setup": "宋婉仪派律师闯法医中心,要求销毁无主旧样本", "payoff": "林晚按规程逐条驳回,律师团当场哑口" },
{ "id": "B08", "type": "反转", "weight": "minor", "episode": 18, "setup": "样本柜被毁,沈家以为证据已灭", "payoff": "毁掉的是空盒,真样本早分了一份在沈砚手里" },
{ "id": "B09", "type": "揭破", "weight": "major", "episode": 20, "setup": "沈砚赌气抽血做比对", "payoff": "同胞关系成立:无名男尸就是沈峥,林晚把报告拍在宋婉仪面前,沈砚倒向林晚" },
{ "id": "B10", "type": "打脸", "weight": "minor", "episode": 23, "setup": "周启年主持内部听证,要定她伪造比对", "payoff": "实习法医调出送检全程录像,听证反过来质询周启年为何三天火化" },
{ "id": "B11", "type": "揭破", "weight": "minor", "episode": 26, "setup": "周启年腕上的金表", "payoff": "林晚翻出结案前后的合影:金表正是结案那周才戴上的" },
{ "id": "B12", "type": "反转", "weight": "minor", "episode": 28, "setup": "程野被逼着继续演", "payoff": "程野偷出沈峥生活手册交给林晚,首页日期早于尸体被发现" },
{ "id": "B13", "type": "自曝反杀", "weight": "major", "episode": 30, "setup": "周启年抛出那份签着她名字的报告,要她当替罪羊", "payoff": "林晚在发布会上自己举起报告,认下签字,指认逼她签字的人就在台下,周启年当众失色" },
{ "id": "B14", "type": "悬念钩", "weight": "minor", "episode": 33, "setup": "宋知远出面和气调停", "payoff": "林晚盯住他的船锚袖扣:和尸检照片里死者指缝中的银色碎片一个形状" },
{ "id": "B15", "type": "打脸", "weight": "minor", "episode": 36, "setup": "苏曼丽反水,程溪被带走,宋婉仪召开董事会逼沈砚签股权", "payoff": "沈砚当众拒签,第一次公开站到林晚一边" },
{ "id": "B16", "type": "悬念钩", "weight": "minor", "episode": 38, "setup": "停职的周启年刹车失灵", "payoff": "林晚验伤认定人为,周启年醒来只说他留了东西" },
{ "id": "B17", "type": "揭破", "weight": "major", "episode": 40, "setup": "周启年交出旧录音笔", "payoff": "录音里交代三天内火化的声音,沈砚一听就认出是舅舅;周启年认罪" },
{ "id": "B18", "type": "打脸", "weight": "minor", "episode": 43, "setup": "宋知远买来鉴定称录音是合成,反告林晚诽谤", "payoff": "林晚用录音背景里的船笛声定位到宋氏港口办公室,鉴定当场作废" },
{ "id": "B19", "type": "崩塌", "weight": "major", "episode": 45, "setup": "宋婉仪一直以为儿子是意外落水", "payoff": "手册加录音摆在面前,她得知是亲弟弟杀了儿子,当场崩塌,转身交出沈氏账本" },
{ "id": "B20", "type": "反转", "weight": "minor", "episode": 48, "setup": "宋知远把苏家推出去当洗钱替罪羊", "payoff": "苏曼丽回头,交出两家港口的货单" },
{ "id": "B21", "type": "揭破", "weight": "minor", "episode": 50, "setup": "沈砚重回游艇", "payoff": "他想起醉倒前看见舅舅提着扳手上甲板;林晚放大尸检照片,碎片正是一只锚爪" },
{ "id": "B22", "type": "终局对决", "weight": "major", "episode": 53, "setup": "宋知远约林晚上同一艘游艇和解,想照三年前再来一次", "payoff": "刑侦队长早已布控,袖扣断口当场对上,宋知远被按在甲板上" },
{ "id": "B23", "type": "认罪", "weight": "minor", "episode": 56, "setup": "宋知远在审讯室笑着说证据不够", "payoff": "林晚摆出疤、切片、手册、录音、袖扣五件证据链,他认罪" },
{ "id": "B24", "type": "翻案", "weight": "major", "episode": 58, "setup": "庭审,三年前的报告摆上证据台", "payoff": "林晚当庭推翻自己签的报告,重新写下死者沈峥他杀,签上自己的名字" },
{ "id": "B25", "type": "情感收束", "weight": "minor", "episode": 60, "setup": "宋婉仪交出沈氏,程野带着妹妹去自首", "payoff": "林晚把那块表放在沈峥墓前" }
],
"episodes": []
}
验尸官的婚礼-全剧骨架.md 全剧骨架 2,738 字
# 《验尸官的婚礼》全剧骨架 60 集竖屏 · 每集 1–2 分钟 · AI 生成 · 女频大女主 / 复仇悬疑 / 豪门 ## 一、核心 被退婚的女法医在前未婚夫的婚礼上认出新郎是替身,用一件件看得见的证据把三年前那具无名男尸还原成沈峥,最后亲手推翻自己签过的假报告。 - **主线**:三年前是谁杀了沈峥。 - **副线**:林晚自己签的那份“意外”报告。越接近凶手,越接近她自己的罪。 - **终点**:不是夺回沈氏,是她当庭重写“死者沈峥,他杀”,签上自己的名字。 ## 二、推进规则(管住分集和剧本) 1. **每集一件看得见的证据**。全剧分五段,每段换一类主证:疤 → 切片 → 报告 → 录音 → 袖扣。 2. **沈家毁证逐段升级**:抹黑 → 毁样本 → 停职 → 灭口 → 杀人。 3. **爽点只落在沈家人和周启年脸上**。林晚不抬声调,靠证据赢。 4. 每集结尾必须留一个钩子,相邻两次爽点之间最多隔 3 集。 ## 三、五段结构 | 段 | 集数 | 主证 | 这一段解决什么 | 段末落点 | |---|---|---|---|---| | 一 · 婚礼 | 1–10 | 疤、旧表 | 认出替身,打开敌营 | 程野承认是替身 | | 二 · 切片 | 11–22 | 切片蜡块 | 证明无名男尸就是沈峥 | 同胞比对成立 | | 三 · 签字 | 23–35 | 尸检报告、手册 | 林晚直面自己的签字 | 发布会上自曝反杀,袖扣露底 | | 四 · 录音 | 36–48 | 录音笔、账本 | 打穿周启年,让宋婉仪崩塌 | 宋婉仪倒戈、苏曼丽回头 | | 五 · 游艇 | 49–60 | 船锚袖扣 | 拿下宋知远,翻案 | 当庭重签,墓前放表 | ## 四、爽点表(25 个,8 个大爆点) ★ = 大爆点 | 集 | 类型 | 落点 | |---|---|---| | 1 | 悬念钩 | 新郎摘手套,虎口光洁无疤 | | 2★ | 当众揭破 | 她当众扣住新郎左手:他不是沈峥 | | 5 | 打脸 | 亮出旧表问是谁送的,新郎答不上 | | 8 | 反转 | 苏曼丽的房卡原来是求救 | | 10★ | 揭破 | 摆出整容前旧照,程野承认是替身 | | 13 | 反转 | 冰柜里是三年前私留的切片 | | 16 | 打脸 | 宋家律师要销毁样本,被她按规程驳回 | | 18 | 反转 | 被毁的是空盒,真样本在沈砚手里 | | 20★ | 揭破 | 同胞比对成立:无名男尸就是沈峥 | | 23 | 打脸 | 听证会反过来质询周启年为何三天火化 | | 26 | 揭破 | 周启年的金表是结案那周才戴上的 | | 28 | 反转 | 程野交出生活手册,首页日期早于尸体被发现 | | 30★ | 自曝反杀 | 发布会上自己举起报告,认下签字,指认逼签人 | | 33 | 悬念钩 | 宋知远的袖扣和死者指缝里的碎片同形 | | 36 | 打脸 | 沈砚在董事会当众拒签 | | 38 | 悬念钩 | 周启年刹车被动手脚,醒来说留了东西 | | 40★ | 揭破 | 录音里是舅舅的声音,周启年认罪 | | 43 | 打脸 | 录音被指合成,船笛声定位到宋氏港口 | | 45★ | 崩塌 | 宋婉仪得知是亲弟弟杀了儿子,交出账本 | | 48 | 反转 | 苏曼丽交出港口货单 | | 50 | 揭破 | 沈砚想起扳手;碎片正是一只锚爪 | | 53★ | 终局对决 | 同一艘游艇上设局,袖扣断口对上,当场拿下 | | 56 | 认罪 | 五件证据链摆齐,宋知远认罪 | | 58★ | 翻案 | 当庭推翻自己的报告,重签“他杀” | | 60 | 收束 | 宋婉仪交出沈氏,程野带妹妹自首,表放在墓前 | ## 五、人物(14 位) **主角组(4)** - **林晚**:从被退婚、被停职,到当庭推翻自己签的报告。赢回的是那份签字。 - **程野**:从替死人活着,到交出手册作证,再到带妹妹自首。 - **沈砚**:从不信法医,到用自己的血做比对,再到想起游艇那晚、出庭作证。 - **宋知远**:前半程是和气的调停人,第 33 集袖扣露底,第 53 集在同一艘游艇上被拿下。 **重要配角(5)** - **苏曼丽**:踩人 → 塞房卡 → 第 36 集前反水 → 第 48 集回头。 - **周启年**:被反将、被灭口未遂,交出录音认罪。 - **宋婉仪**:一路护着替身,第 45 集崩塌。 - **沈峥**:只出现在闪回里,和程野共用一张脸,靠虎口的疤区分。 - **程溪**(新增):程野的妹妹,宋知远手里的筹码,替代原来的赌债线。 **功能性角色(5)**:刑侦队长、实习法医、宋家保镖、婚礼司仪、审判长。 ## 六、取舍 - **砍掉的线**:港口商战(港口只作为证据来源)、林晚和沈砚的感情线(大女主,不谈恋爱)、二房争股(只当宋婉仪找替身的动机)、程野的赌债债主(换成妹妹当筹码)。 - **合并的人**:宋家的司机、打手和买通的鉴定人并成一个保镖;警察并成一位刑侦队长;法医中心同事并成一位实习法医。 ## 七、场景与道具 **主场景(9 个,上限 10)**:婚礼宴会厅(婚礼、答谢宴、发布会共用)、解剖室、周启年办公室、沈家老宅客厅、新婚套房、游艇(三年前和终局共用)、林晚公寓、宋氏港口办公室、法庭。 **一次性场景**:审讯室(复用办公室改造)、墓前(从老宅外景延展)。 **叙事道具(8 件)**:旧机械表、白手套、三年前的尸检报告、切片蜡块、房卡、沈峥生活手册、旧录音笔、船锚袖扣。 ## 八、生成风险与对策 - **同脸双人**:程野和沈峥共用一张脸资产,靠虎口疤和白手套区分,闪回统一用冷蓝调。 - **审核**:尸体全程盖白布、不露脸,用切片、报告、照片局部代替。 - **夜海戏**:游艇资产共用,落水只拍入水前一刻。 - **证据重复**:五段各换一类主证,沈家的手段逐段升级。 ## 九、已定事项(分集与剧本必须遵守) 1. **砍线**:砍掉商战、感情线、二房、债主,只留一条主线加一条副线。 2. **合人与新增**:合出 3 个功能角色;新增“程溪”这个名字和她的人质功能。 3. **大爆点落集**:2 / 10 / 20 / 30 / 40 / 45 / 53 / 58。中点(第 30 集)定为林晚自曝签字。 4. **补充设定**:真沈峥左手虎口有疤;旧表是沈峥订婚时送的;新增生活手册、录音笔、袖扣碎片三件证据。
过程
按时间顺序。点开工具调用能看到完整的输入和返回;思考的内容 Claude Code 不对外输出,日志里只有「在这里思考过多久」。
第 1 轮
输入:
/novel-outline 我要给一部短剧写全剧骨架,要求在 premise.md 里,写好存成文件放在当前目录。
思考
Bash List directory and read premise file
输入
ls -la && cat premise.md && ls .claude/skills/novel-outline .claude/skills/novel-outline/references
返回
total 16 drwxr-xr-x 4 user wheel 128 Oct 30 17:13 . drwxr-xr-x 3 user wheel 96 Oct 30 17:13 .. drwxr-xr-x 4 user wheel 128 Oct 30 17:13 .claude -rw-r--r-- 1 user wheel 4233 Oct 30 17:13 premise.md 这是一张选题卡。它要拍成 60 集竖屏短剧,每集 1–2 分钟,全部由 AI 拍。 请交一份全剧骨架:整部剧怎么走,用来管住后面的分集大纲和剧本。 只交骨架,不写分集大纲和剧本正文,3000 字以内。 《验尸官的婚礼》 标签:女频、大女主、复仇、悬疑、豪门 一句话卖点:被退婚的女法医去参加前未婚夫的婚礼,一眼认出新郎是替身:真新郎三年前就躺在她的解剖台上。 观众代入谁:林晚,被当众退婚的女法医,冷静、专业,靠本事翻盘 爽点落在谁脸上:沈家一家,和三年前逼她签字的周启年 故事靠什么往前推:每一集她都要拿出一样看得见的证据:一道疤、一张切片、一段录音。沈家每次都想办法毁掉证据、抹黑她;她每赢一次,就离“三年前是谁杀了沈峥”更近一步,也离她自己签过的那份假报告更近一步。 人物: - **林晚**(女主 · 法医) - 样子:28 岁,齐耳短发,素颜,常穿一件深灰长风衣;左手腕戴一块男式旧机械表,表带磨白了。说话不抬声调。 - 小传:市法医中心的法医,干了七年。四年前和沈家长子沈峥订婚,一年前被“沈峥”当众退婚,说她天天摸死人、晦气。三年前她解剖过一具无名男尸,最初写的是“他杀”,被周启年逼着改成“意外”,签了字,这是她心里的一根刺。冷静,嘴不饶人,认证据不认人。 - **程野**(新郎 · 顶着沈峥的脸的替身) - 样子:30 岁,和沈峥一样的脸、一样的金丝眼镜;婚礼上一直戴着白手套,左手虎口光洁,没有疤。 - 小传:欠了一身赌债的模仿演员。三年前被宋家找去整容,学沈峥说话、走路、签名,替他活着。他不知道沈峥是怎么死的,只知道自己哪天没用了,也会“意外”。 - **沈砚**(沈家二少 · 沈峥的弟弟) - 样子:26 岁,寸头,西装从来不扣扣子,右耳一枚黑耳钉,笑起来像什么都不在乎。 - 小传:从小跟在哥哥后面。三年前哥哥从国外“养病”回来,他第一个觉得不对,可没人信他。那晚游艇上他也在,喝醉了,什么都记不清,这件事他谁都没说。一开始不信林晚这个法医,后来成了她在沈家唯一的内应。 - **苏曼丽**(新娘 · 苏家千金) - 样子:26 岁,长卷发,永远带着全妆,酒红色指甲。 - 小传:苏家和沈氏一起做港口生意,她嫁进沈家是两家的买卖。新婚夜她就觉得丈夫不对,却不敢说。前期带头踩林晚,答谢宴上偷偷把求救的房卡塞给她;为了家里的生意,后面还会反水一次。 - **周启年**(法医中心主任 · 三年前逼她签字的人) - 样子:55 岁,花白背头,老花镜挂在胸前,腕上一块和工资不相称的金表。 - 小传:林晚的老领导。三年前收了宋知远的钱,把那具无名男尸的结论从“他杀”改成“意外”,逼林晚签字,三天内火化。 - **宋婉仪**(沈家主母 · 沈峥、沈砚的母亲) - 样子:52 岁,盘发,素色旗袍,珍珠耳环,说话永远轻声细语。 - 小传:丈夫早逝,靠弟弟宋知远撑起沈氏。按老爷子的遗嘱,长孙沈峥三十岁接手沈氏一半的股份,人没了就归二房。三年前儿子“落水”,她为了保住股份找人顶替了他,一直以为儿子是意外死的。 - **宋知远**(宋婉仪的弟弟 · 沈氏海外业务负责人) - 样子:48 岁,高个子,笑容和气,袖口总是一对船锚形状的银袖扣。 - 小传:沈家人眼里最可靠的舅舅。借沈氏的海外港口洗钱,三年前被沈峥发现,在游艇上用扳手砸了他的后脑,推下海;之后买通周启年改了结论,又让姐姐以为是意外。全剧最后的对手。 结局:宋知远认罪伏法,宋婉仪交出沈氏,程野带着妹妹去自首。林晚当庭推翻自己三年前签的报告,重新写下“死者沈峥,他杀”,签上自己的名字。最后一场,她把那块表放在沈峥的墓前。 .claude/skills/novel-outline: README.en.md README.md SKILL.md assets examples references scripts .claude/skills/novel-outline/references: episode-pass.md outline-pass.md report-style.md schema.md volume-pass.md
思考 2 秒
Bash Read outline pass and schema references
输入
cd /scratch/003/ws/003-skeleton/eternityspring__shuohao-skills/run-1/.claude/skills/novel-outline && cat references/outline-pass.md references/schema.md
返回
# 骨架 · 砍线 / 合人 / 排爽点
拿全部卷摘要(或短篇原文)+ 用户参数,产出 outline.json 的**骨架四块**:`adaptation` / `characters` / `scenes` / `beats`。分集梗概**这一步不写**——骨架没拍板就写分集,方向错了全废。
## 顺序就是方法
1. **砍线**。短剧只装得下一条主线 + 至多一条副线。砍掉的写进 `adaptation.cut`,每条都要有 why。`adaptMode` 不是忠实时一条不砍会被 validate 拦。
2. **合人**。功能重复的角色合成一张脸(两个报信的 → 一个),合并进 `characters[].from` 的 ← 改动记录。然后**分档**(`tier`):主角组 `lead` 1–5 人、有名字的重要配角 `support` ≤ 10、功能性角色 `functional` ≤ 10。功能性角色占脸不占名——`name` 用称呼标签(「急诊医生」),也不用写人物弧。无名背景人不进表。
3. **收场景**。主场景上限随集数走(4 + ⌈集数/10⌉,夹在 5–15:6 集给 5 个,60 集给 10 个),以 `validate` 报的数为准。这是 AI 短剧的宽松版——场景是生成的,多开几个景换观赏性是划算的,别把戏都憋在一个屋里。原著里只出现一次的场景,要么砍掉、要么写 `reusePlan`(复用哪个现有环境资产、换什么时段天气改出来)。
4. **排爽点**。先定 major(大爆点)落在哪几集,再拿 minor 填缝。硬规则:相邻间隔 ≤ 3 集、开头结尾无真空、最早的 major 不能在最后一集。`type` 跟着题材走——女频打脸和男频战神的爽点不是一种东西,看 `params.genre`。
5. **收道具**。**排在爽点之后不是随便排的**——叙事道具的判据是「它托起哪个爽点」,爽点没定就分不清哪件物件是道具、哪件只是陈设。上限 8 件,跟主角数量一个量级。每件写 `function`(它在戏里承载什么)与 `beatIds`(托起哪几个爽点),分集用 `propIds` 引用。
**一件东西该不该进这张表,问一句就够了:它坏了、丢了、被换掉,剧情会不会塌。** 会塌就是叙事道具(皮箱、砚台、那封信);不会塌就是场景陈设(船舱的挂灯、桌上的茶碗),归 `novel-art` 的场景锚点管,不进这张表。填不出 `function` 的一律不收——**填不出来的不是道具,是背景**。
每一步都基于卷摘要里的原料。**关键取舍在 `adaptation.keep` 里附 `evidence`(原文逐字片段)**——大纲要能指回原文,不是凭印象改编。
砍完、合完之后各补一句结论:`adaptation.cutNote` 写砍线的含义(「这意味着:全剧终点是……」),`adaptation.mergeNote` 写主角组入选理由(谁有完整转变弧)。这两句会出现在报告最前面的「关键决策」区块,也是拍板时给用户看的核心内容。
## 两轮规则 ⛔
骨架必须跑两轮:
- **第一轮快版**:四块填齐、能过 `validate --stage beats` 就停,**交给用户拍板**。砍了哪条线、合了哪些人、大爆点在第几集——这三件事用户不点头,后面全是白干。
- **第二轮细版**:吸收用户意见后细化,再过一次 `validate --stage beats`。
快版的意义是便宜——错了只损失一轮骨架,不是 60 集梗概。
## 自检
写完跑:
```bash
node scripts/novel-outline.mjs validate <outline.json> --stage beats
```
有违规逐条修,改完重跑,直到通过才允许进分集。
# outline.json 结构
五件套的载体。**模型只管填这份 JSON**,Markdown 和 report.html 由 `render` 渲染出来,资产清单由脚本汇总——五件套是四件模型写 + 一件算出来的。
```json
{
"source": "书名",
"lang": "zh",
"params": { "episodes": 60, "minutesPerEpisode": 2, "genre": "女频逆袭", "adaptMode": "抽核", "preferences": [] },
"adaptation": { "core": "…", "keep": [], "cut": [], "merge": [], "risks": [] },
"characters": [ { "id": "C01", "name": "…", "role": "…", "arc": "…", "from": ["原著…", "合并:…"] } ],
"scenes": [ { "id": "S01", "name": "…", "primary": true, "reusePlan": "…" } ],
"beats": [ { "id": "B01", "type": "打脸", "weight": "major", "episode": 3, "setup": "…", "payoff": "…" } ],
"episodes": [ { "ep": 1, "synopsis": "…", "hook": "…", "suspense": "…", "sceneIds": ["S01"], "characterIds": ["C01"], "propIds": ["P01"], "crowdPlan": "…", "warnings": [] } ]
}
```
## params
| 字段 | 必填 | 说明 |
| --- | --- | --- |
| `episodes` | 是 | 总集数,正整数。分集数量必须与它一致 |
| `minutesPerEpisode` | 是 | 单集时长(分钟) |
| `genre` | 是 | 题材,**决定爽点类型**,不许缺。投放平台的差异不单设字段,直接体现在 `thresholds` 上 |
| `adaptMode` | 是 | `忠实` / `抽核` / `借壳`,只能这三个 |
| `preferences` | 否 | 用户点名要保的角色、戏 |
| `thresholds` | 否 | 逐项覆盖质量门阈值:`maxLeads`(5) / `maxSupport`(10) / `maxFunctional`(10) / `maxBeatGap`(3) / `maxPrimaryScenes`(缺省不是常数,**随集数动态**:4 + ⌈集数/10⌉ 夹在 5–15,60 集 → 10。按 AI 短剧定的——场景是生成的,上限守的是一致性资产不是搭景钱)。短篇建议收紧角色档 |
## adaptation 改编说明
`core` 一句话核心,必填。`keep` / `cut` / `merge` 每条 `{what, why}`,`keep` 至少一条;**`adaptMode` 不是忠实时 `cut` 不能为空**。`keep` 可带 `evidence`——**原文逐字片段**,禁止凭书名脑补的对策就在这:关键取舍要能指回原文。`risks` 每条 `{what, plan}`。
两个可选的**决策补注**,报告的「关键决策」区块会展示:
- `cutNote` — 砍线的结论句(「这意味着:全剧终点是……原著后 30 章基本不用」这种),说清砍完之后故事的终点变成了什么
- `mergeNote` — 合人的补注,通常写主角组入选理由(谁有完整转变弧)
给了就不能是空字符串,`validate` 会拦。大爆点落点列表**不用写**——报告从 `beats` 里自动算。
## characters 人物表
每个字段都以校验器为准,一个不多一个不少:
| 字段 | 必填 | 说明 |
| --- | --- | --- |
| `id` | 是 | `C01` 格式,全局唯一,分集靠它引用 |
| `name` | 是 | 姓名;功能性角色用称呼标签(「急诊医生」) |
| `role` | 是 | 定位一句话:女主 / 搅局配角 / 渡口的报时人…… |
| `tier` | 是 | 三档之一,见下表 |
| `arc` | lead / support 必填 | 人物弧;functional 可省——医生就是来缝针的 |
| `from` | 是 | **← 改动记录**,非空数组:原著对应谁、合并了谁、纯原创写 `["原创"]` |
- `tier` 只能三档——一刀切的角色上限混淆了「观众要记住谁」和「制作要维护多少张脸」,分档把它拆开:
| tier | 是谁 | 上限 | 规则 |
| --- | --- | --- | --- |
| `lead` | 主角组(男女主 + 主反派) | 1–5 人 | `arc` 必填 |
| `support` | 有名字的重要配角(亲属、闺蜜、副反派) | ≤ 10 | `arc` 必填 |
| `functional` | 功能性角色(医生、秘书、店员) | ≤ 10 | **占脸不占名**:`name` 用称呼标签(「急诊医生」);`arc` 可省——医生就是来缝针的 |
无名背景人不进表、不追踪、不限量。
**这份表是下游 novel-characters 的角色清单**:谁进谁不进、谁是主角组在这里定死,角色设定照着做,不用再判断一遍轻重(`tier` 对应过去就是 `importance`:`lead` → protagonist、`support` → supporting、`functional` → minor)。反过来,手上已经有 cast.json 的话也能映射进来:protagonist/major → `lead`,supporting → `support`,minor → `functional`
## scenes
- `id` 格式 `S01`,全局唯一;`name` 必填;`primary` 必填布尔(主场景上限随集数动态,见 `thresholds`)
- **在全剧只出现一次的场景必须带 `reusePlan`**(规避方案:复用哪个现有环境资产、换什么时段天气改出来)
## props 叙事道具
- **可选字段**。没写照常通过全部质量门(`prop-cap` 与 `refs` 两道会明说跳过);写了就按下面查
- `id` 格式 `P01`,全局唯一;`name` 必填
- **`function` 必填——这一层唯一要拍板的东西:这件物件在戏里承载什么。** 填不出来说明它不是叙事道具,是场景陈设,那归 `novel-art` 的场景锚点管,不进这张表
- `beatIds` 可选:它托起哪几个爽点。写了就必须指向 `beats` 里真实存在的 id
- 上限 `maxProps` 默认 8 件(进 `params.thresholds` 可覆盖)。跟主角数量一个量级——**只收有特写、跨集出现、承载剧情的**
- 分集用 `episodes[].propIds` 引用。**没有任何一集引用的道具会被 `refs` 门点名**——跟失业角色、空转场景同一个判据
边界:尺度、锚点、状态变体、白底提示词都是 `novel-art` 的活,不在这里定。这张表回答「哪几件物件承载剧情、各自承载什么」,美术层回答「它长什么样、怎么保证六集都长一样」。
## beats 爽点表
- `id` 格式 `B01`;`type` 自由文本(打脸/揭破/反转…);`weight` 只能 `major` / `minor`(缺省算 minor)
- `episode` 是**唯一数据源**——分集不再列 beatIds,节奏条和资产清单都从这里算
- 硬规则:相邻爽点间隔 ≤ `maxBeatGap`,开头结尾无真空;**至少一个 major,且最早的 major 不能落在最后一集**
## episodes 分集梗概
- `ep` 从 1 连续编号,总数等于 `params.episodes`
- `synopsis` / `hook` / `suspense` 三栏**都必填**——【钩子】【悬念】空了视为未完成
- **叙述体**:三栏里出现 `「」『』“”` 引号对白就是在写剧本,越界,validate 会拦
- `sceneIds` / `characterIds` 必填且必须指向已登记的 id;每个角色至少出现一集、每个场景至少用一次
- `propIds` 可选(写了 `props` 才有意义),必须指向已登记的道具 id;每件道具至少出现一集
- `characterIds` ≥ 3 的集必须写 `crowdPlan`(同框拆解方案)。**校验按人数判,是代理指标**——如果这一集三人实际不同框(分处不同场次),把这个事实写成方案即可:「三人分处两场,无同框,分场拍」,照样通过
- `warnings`:梗概里扫到生成难点关键词(雨戏/肢体接触/人群/手部特写)就必须列进来,宁可多报
## 校验
```bash
node scripts/novel-outline.mjs validate outline.json --stage skeleton|beats|full
node scripts/novel-outline.mjs checkup outline.json # 只打印 14 道质量门 ✓/✗
```
stage 就是流程门:骨架拍板前过 `skeleton`,**写分集之前必须过 `beats`**(爽点间隔和 major 时机错了,分集写完全废),交付前过 `full`。思考 2 秒
Bash Inspect example skeleton and script stage handling
输入
node -e 'const o=require("./examples/渡口-outline.json");delete o.episodes;console.log(JSON.stringify(o,null,1))' | head -150; grep -n "stage\|tier\|props" scripts/novel-outline.mjs | head -60返回
{
"source": "渡口",
"lang": "zh",
"params": {
"episodes": 6,
"minutesPerEpisode": 2,
"genre": "民国情感悬疑",
"adaptMode": "抽核",
"preferences": [
"保留浓雾开船的意象",
"老周不能改成反派"
]
},
"adaptation": {
"core": "浓雾渡口的一船陌生人,各自揣着说不出口的来路,雾散之前每个人都得亮一次底。",
"keep": [
{
"what": "浓雾渡口的封闭空间",
"why": "天然的单场景悬疑舞台,省景又聚戏",
"evidence": "雾一厚,连自己的手都看不清。"
},
{
"what": "沈知微怀里的旧皮箱",
"why": "全剧最强的悬念道具,每集都能给一眼",
"evidence": "她把一只旧皮箱抱在怀里,指节因为用力而发白。"
}
],
"cut": [
{
"what": "县城当铺的支线",
"why": "空间跳出渡口,两分钟一集装不下第二个舞台"
}
],
"merge": [
{
"what": "岸边问路的路人甲乙并入胡二爷",
"why": "同一个功能(打探消息)不需要三张脸"
}
],
"risks": [
{
"what": "全剧困在船上,节奏容易闷",
"plan": "每集固定一次外部威胁打进来:汽笛、巡查、涨水"
}
],
"cutNote": "这意味着:全剧困在渡口一夜之内,当铺、县城全部场外处理,终点是开箱翻案,不是进城打官司。",
"mergeNote": "主角组定的是沈知微与陆行远——全篇只有这两个人有完整的转变弧。"
},
"characters": [
{
"id": "C01",
"name": "沈知微",
"role": "女主",
"arc": "从抱箱防备到当着全船开箱,把最怕被看见的东西变成翻盘的底牌",
"from": [
"原著沈知微"
],
"tier": "lead"
},
{
"id": "C02",
"name": "陆行远",
"role": "男主",
"arc": "大衣口袋里的硬东西从威胁翻成守护,最后一集摊开手心",
"from": [
"原著陆行远"
],
"tier": "lead"
},
{
"id": "C03",
"name": "老周",
"role": "关键配角",
"arc": "静止的锚,四十年不问客人来路,最后用一句话掀翻全船的谎",
"from": [
"原著老周",
"合并:岸边艄公的台词功能"
],
"tier": "support"
},
{
"id": "C04",
"name": "胡二爷",
"role": "搅局配角",
"arc": "自来熟的货郎,每集戳一个人的痛处,自己反而是藏得最深的",
"from": [
"原著胡二爷",
"合并:岸边问路的路人甲乙"
],
"tier": "support"
},
{
"id": "C05",
"name": "岸上挑灯的更夫",
"tier": "functional",
"role": "渡口的报时人,雾里只闻梆子声",
"from": [
"原创:把原著里「岸上远远的灯火」拟人化成可拍的角色"
]
}
],
"scenes": [
{
"id": "S01",
"name": "渡船船舱",
"primary": true
},
{
"id": "S02",
"name": "渡口栈桥",
"primary": true
},
{
"id": "S03",
"name": "对岸芦苇滩",
"primary": false,
"reusePlan": "栈桥同一机位换背板,芦苇前景遮挡"
}
],
"props": [
{
"id": "P01",
"name": "旧皮箱",
"function": "沈知微的底牌与软肋:里面是一摞状纸和一块灵位。从「谁都不许碰」到当众打开,开箱即翻案——全剧最重的一件物证",
"beatIds": [
"B01",
"B04"
]
},
{
"id": "P02",
"name": "县衙旧砚",
"function": "陆行远的身份物证:砚底刻着县衙的印。掏出即揭破他不是揣枪的人,压到状纸上即与皮箱合成同一桩冤案",
"beatIds": [
"B02",
"B04"
]
}
],
"beats": [
{
"id": "B01",
"type": "悬念钩",
"weight": "minor",
"episode": 1,
"setup": "皮箱谁都不许碰",
"payoff": "胡二爷伸手要帮忙拎箱,被沈知微一把按住,全船瞬间安静"
},
{
"id": "B02",
191: // props 是后加的字段。**没有这个字段的旧大纲要照常通过**——两道相关的门
193: const hasProps = Array.isArray(outline?.props);
194: const props = hasProps ? outline.props : [];
197: const tierCap = { lead: th.maxLeads, support: th.maxSupport, functional: th.maxFunctional };
198: for (const tier of CHARACTER_TIERS) {
199: const n = chars.filter((c) => c?.tier === tier).length;
200: const needMin = tier === 'lead';
202: `${tier}-cap`,
203: `${TIER_LABELS[tier]} ${needMin ? `1–${tierCap[tier]}` : `≤ ${tierCap[tier]}`} 人`,
204: (needMin ? n >= 1 : true) && n <= tierCap[tier],
214: // 陈设也收进来了。没有 props 字段的旧大纲明说跳过,不判失败。
218: !hasProps || props.length <= th.maxProps,
219: hasProps ? `${props.length} 件` : '大纲没有 props 字段,跳过',
226: const propUse = new Map(props.map((pr) => [pr?.id, 0]));
324: for (const pr of props) {
335: hasProps ? 'refs-props' : null,
354: * 三档 stage 就是流程门:
363:export function validateOutline(outline, stage = 'full') {
411: const tierCap = { lead: th.maxLeads, support: th.maxSupport, functional: th.maxFunctional };
412: for (const tier of CHARACTER_TIERS) {
413: const n = chars.filter((c) => c?.tier === tier).length;
414: if (n > tierCap[tier]) p(`${TIER_LABELS[tier]} ${n} 位,超过上限 ${tierCap[tier]}`);
416: if (!chars.some((c) => c?.tier === 'lead')) p('没有主角组(tier=lead)角色');
423: if (!CHARACTER_TIERS.includes(c?.tier)) {
424: p(`[${label}] tier 必须是 ${CHARACTER_TIERS.join('/')}(主角组/重要配角/功能性角色)`);
428: if (c?.tier !== 'functional' && !thText(c?.arc)) p(`[${label}] 缺 arc(主角组和重要配角必须有人物弧)`);
453: // --- props 叙事道具 ---
454: // 可选字段:旧大纲没有 props 照常通过。写了就按结构查。
455: if (Array.isArray(outline?.props)) {
456: if (outline.props.length > th.maxProps) p(`叙事道具 ${outline.props.length} 件,超过上限 ${th.maxProps}`);
458: for (const pr of outline.props) {
471: if (stage === 'skeleton') return problems;
497: if (stage === 'beats') return problems;
541: return { id: c.id, name: c.name, role: c.role, tier: c.tier, uses: episodes.length, episodes };
545: // 没有 props 字段的旧大纲返回空数组,调用方按空处理即可。
546: const props = (outline?.props ?? []).map((pr) => {
555: const castPlan = CHARACTER_TIERS.map((tier) => {
556: const members = (outline?.characters ?? []).filter((c) => c?.tier === tier);
557: return { tier, label: TIER_LABELS[tier], count: members.length, names: members.map((c) => c.name), spec: TIER_ASSET_SPEC[tier] };
572: return { scenes, characters, props, castPlan, warnings, beatsByType };
599: 'prop-cap': 'Narrative props ≤ {0}',
601: 'refs-props': 'Scene / character / prop references complete — no jobless characters, no unused scenes, no unused props',
672: tier: TIER_LABELS,
673: tierSpec: TIER_ASSET_SPEC,
749: plan: 'Converted per tier · never hand-written',
769: tier: { lead: 'Lead', support: 'Named supporting', functional: 'Functional' },
770: tierSpec: {
780: planPropRow: 'Narrative props',
843: [...characters].sort((a, b) => CHARACTER_TIERS.indexOf(a.tier) - CHARACTER_TIERS.indexOf(b.tier));
873: out.push(mdRow([c.id, c.name, t.tier[c.tier] ?? c.tier, c.role, c.arc ?? '—', c.from.join(t.semi)]));
899: // 道具表:没有 props 的旧大纲不出这张表,不留一张空表占位
900: if (assets.props.length) {
902: for (const pr of assets.props) {
911: out.push(mdRow([t.tier[t2.tier] ?? t2.label, t2.count, t2.names.join(t.sep) || '—', t.tierSpec[t2.tier] ?? t2.spec]));
1067: const tierN = Object.fromEntries(assets.castPlan.map((p) => [p.tier, p.count]));
1079: <div class="kpi"><div class="l">${esc(t.kpi.cast)}</div><div class="v">${characters.length}</div><div class="d">${esc(t.kpi.castSub(tierN.lead ?? 0, tierN.support ?? 0, tierN.functional ?? 0))}</div></div>
1103: const mxRow = (name, tierLabel, epsIn, cls, tail) => {
1106: return `<tr><td class="name">${esc(name)}</td><td class="tier">${esc(tierLabel)}</td>${cells}<td class="n">${tail}</td></tr>`;
1109: ...byTier(assets.characters).map((c) => mxRow(c.name, t.tier[c.tier] ?? c.tier, c.episodes, '', String(c.uses))),
1114: // 道具段:没有 props 的旧大纲整段不出,不留一个空标题思考 115 秒
Write ./验尸官的婚礼-outline.json
输入
/scratch/003/ws/003-skeleton/eternityspring__shuohao-skills/run-1/验尸官的婚礼-outline.json
{
"source": "验尸官的婚礼",
"lang": "zh",
"params": {
"episodes": 60,
"minutesPerEpisode": 1.5,
"genre": "女频大女主复仇悬疑(豪门)",
"adaptMode": "抽核",
"preferences": [
"每集拿出一样看得见的证据",
"爽点落在沈家与周启年脸上",
"结局:当庭推翻自己签的报告,墓前放表"
]
},
"adaptation": {
"core": "被退婚的女法医在前未婚夫的婚礼上认出新郎是替身,用一件件看得见的证据把三年前那具无名男尸还原成沈峥,最后亲手推翻自己签过的假报告。",
"keep": [
{
"what": "婚礼认替身的开局",
"why": "第一集就有全剧最强的钩子,前未婚夫的婚礼天然自带羞辱与反击",
"evidence": "一眼认出新郎是替身:真新郎三年前就躺在她的解剖台上。"
},
{
"what": "每集一件证据的推进引擎",
"why": "证据是可拍的实物,AI 生成好控;证据递进=疤→切片→报告→录音→袖扣,五段一段一件主证",
"evidence": "每一集她都要拿出一样看得见的证据:一道疤、一张切片、一段录音。"
},
{
"what": "林晚自己签过假报告这根刺",
"why": "让女主不是完美受害者,越接近真相越接近自己的罪,中点和结局都压在这里",
"evidence": "被周启年逼着改成“意外”,签了字,这是她心里的一根刺。"
},
{
"what": "苏曼丽的房卡与一次反水",
"why": "敌营里的不稳定盟友,给中段制造一次真失守",
"evidence": "答谢宴上偷偷把求救的房卡塞给她;为了家里的生意,后面还会反水一次。"
}
],
"cut": [
{
"what": "苏沈港口生意的商战线",
"why": "两分钟一集装不下商战,港口只作为洗钱证据的来源,不单独开线"
},
{
"what": "林晚与沈砚的感情线",
"why": "大女主复仇剧,沈砚定位内应与证人,不发展恋爱,避免稀释沈峥这根主线"
},
{
"what": "沈家二房争股份的支线",
"why": "遗嘱只作为宋婉仪找替身的动机交代一次,二房不出场"
},
{
"what": "程野的赌债债主线",
"why": "只作为他被宋家拿捏的背景,债主不出场,拿捏他的筹码统一换成妹妹"
}
],
"merge": [
{
"what": "宋家的司机、打手、买通的鉴定人统一并入一个保镖",
"why": "宋知远的脏手只需要一张脸"
},
{
"what": "办案警察并成一位刑侦队长",
"why": "后半程的布控、审讯、移送都由同一人承担,观众好认"
},
{
"what": "法医中心的同事并成一位实习法医",
"why": "送检链见证人、林晚停职后的内线,同一功能"
}
],
"risks": [
{
"what": "程野与沈峥同脸,AI 生成容易混",
"plan": "共用一张脸资产,用左手虎口有无疤和白手套区分;沈峥只在闪回出现,闪回统一冷蓝调"
},
{
"what": "解剖与尸体画面过不了平台审核",
"plan": "尸体全程白布不露脸,用切片、报告、尸检照片局部、虎口特写替代"
},
{
"what": "证据引擎重复,观众疲劳",
"plan": "五段每段换一类主证(疤/切片/报告/录音/袖扣),沈家毁证手段也逐段升级:抹黑→毁样本→停职→灭口→杀人"
},
{
"what": "游艇夜海戏生成难",
"plan": "三年前闪回与终局对峙共用同一游艇资产,只换时段;落水只拍入水前一刻"
}
],
"cutNote": "这意味着:全剧只有一条主线——三年前是谁杀了沈峥,副线是林晚自己的假报告;终点不是夺回沈氏,而是她当庭重写死因并签上自己的名字。",
"mergeNote": "主角组定林晚、程野、沈砚、宋知远四人——林晚从签假报告到亲手推翻,程野从替人活到替自己认罪,沈砚从不信到作证,宋知远是全剧最后的对手。周启年、宋婉仪、苏曼丽是被爽点打脸的配角,不进主角组。"
},
"characters": [
{
"id": "C01",
"name": "林晚",
"role": "女主 · 法医",
"tier": "lead",
"arc": "从被退婚、被抹黑、被停职,到当庭推翻自己三年前签的报告,重写死者沈峥他杀并签名——赢回的不是名声,是那份签字",
"from": ["选题卡 林晚"]
},
{
"id": "C02",
"name": "程野",
"role": "顶着沈峥的脸的替身新郎",
"tier": "lead",
"arc": "从替死人活、怕自己哪天也意外,到交出生活手册作证,最后带着妹妹去自首",
"from": ["选题卡 程野"]
},
{
"id": "C03",
"name": "沈砚",
"role": "沈家二少 · 林晚在沈家的内应",
"tier": "lead",
"arc": "从不信法医、嘲讽林晚,到用自己的血做亲缘比对,再到想起游艇那晚并出庭作证",
"from": ["选题卡 沈砚"]
},
{
"id": "C04",
"name": "宋知远",
"role": "主反派 · 沈家舅舅",
"tier": "lead",
"arc": "前半程是和气的调停人,第33集袖扣露底,最后在同一艘游艇上被当场拿下,认罪伏法",
"from": ["选题卡 宋知远"]
},
{
"id": "C05",
"name": "苏曼丽",
"role": "新娘 · 敌营里不稳定的盟友",
"tier": "support",
"arc": "带头踩林晚→塞房卡求救→为生意反水→被宋知远当替罪羊后交出港口货单",
"from": ["选题卡 苏曼丽"]
},
{
"id": "C06",
"name": "周启年",
"role": "法医中心主任 · 三年前逼签的人",
"tier": "support",
"arc": "从压林晚的老领导,到被她当众反将、被宋知远灭口未遂,最后交出录音认罪",
"from": ["选题卡 周启年"]
},
{
"id": "C07",
"name": "宋婉仪",
"role": "沈家主母",
"tier": "support",
"arc": "为保股份找人顶替儿子、一路护着替身;得知儿子死于亲弟之手后崩塌,交出账本与沈氏",
"from": ["选题卡 宋婉仪"]
},
{
"id": "C08",
"name": "沈峥",
"role": "死者 · 只活在闪回与证据里",
"tier": "support",
"arc": "订婚时送表的人、发现洗钱的人、游艇上被灭口的人;每一段闪回补一块他的死因",
"from": ["选题卡 沈峥(与程野共用同一张脸资产,以虎口疤区分)"]
},
{
"id": "C09",
"name": "程溪",
"role": "程野的妹妹 · 宋知远的筹码",
"tier": "support",
"arc": "被宋家安置在外当人质,苏曼丽反水后被带走,终局获救,陪哥哥去自首",
"from": ["选题卡结局「程野带着妹妹去自首」", "原创:补出名字与人质功能,替换赌债线"]
},
{
"id": "C10",
"name": "刑侦队长",
"role": "后半程布控、审讯、移送",
"tier": "functional",
"from": ["合并:办案警察若干"]
},
{
"id": "C11",
"name": "实习法医",
"role": "林晚的助手 · 送检链见证人",
"tier": "functional",
"from": ["合并:法医中心同事若干"]
},
{
"id": "C12",
"name": "宋家保镖",
"role": "宋知远的脏手:毁证、刹车、带走程溪",
"tier": "functional",
"from": ["合并:司机、打手、买通的鉴定人"]
},
{
"id": "C13",
"name": "婚礼司仪",
"role": "婚礼与答谢宴的控场人",
"tier": "functional",
"from": ["原创"]
},
{
"id": "C14",
"name": "审判长",
"role": "终局庭审",
"tier": "functional",
"from": ["原创"]
}
],
"scenes": [
{ "id": "S01", "name": "沈家婚礼宴会厅(婚礼 / 答谢宴 / 发布会)", "primary": true },
{ "id": "S02", "name": "市法医中心解剖室", "primary": true },
{ "id": "S03", "name": "周启年主任办公室", "primary": true },
{ "id": "S04", "name": "沈家老宅客厅", "primary": true },
{ "id": "S05", "name": "酒店新婚套房", "primary": true },
{ "id": "S06", "name": "沈家游艇(三年前夜 / 终局夜)", "primary": true },
{ "id": "S07", "name": "林晚公寓", "primary": true },
{ "id": "S08", "name": "宋氏港口码头办公室", "primary": true },
{ "id": "S09", "name": "法庭", "primary": true },
{
"id": "S10",
"name": "公安局审讯室",
"primary": false,
"reusePlan": "复用 S03 主任办公室的冷白灯光与金属桌资产,去掉书柜换单面镜墙"
},
{
"id": "S11",
"name": "沈峥墓前",
"primary": false,
"reusePlan": "只在第60集出现一次;从 S04 沈家老宅外景庭院延展成后山家族墓园,清晨阴天薄雾"
}
],
"props": [
{
"id": "P01",
"name": "沈峥的男式旧机械表",
"function": "订婚时沈峥送的表,表带磨白,林晚一直戴在左腕。替身认不出自己送的表是第一处破绽;结局放在沈峥墓前,全剧收束",
"beatIds": ["B03", "B25"]
},
{
"id": "P02",
"name": "程野的白手套",
"function": "遮住光洁的左手虎口。手套一摘,没有疤,替身即被识破",
"beatIds": ["B01", "B02"]
},
{
"id": "P03",
"name": "三年前的无名男尸尸检报告",
"function": "结论意外、签着林晚的名字。前半程是沈家和周启年压她的把柄,中点被她自己当众举起,结局当庭推翻重签",
"beatIds": ["B13", "B24"]
},
{
"id": "P04",
"name": "病理切片蜡块",
"function": "火化前林晚违规私留的组织样本,是那具尸体唯一残存的身体证据。被毁、被调包,最终做出与沈砚的同胞比对",
"beatIds": ["B06", "B08", "B09"]
},
{
"id": "P05",
"name": "苏曼丽的房卡",
"function": "答谢宴上偷塞的求救信号,打开敌营的第一道门",
"beatIds": ["B04"]
},
{
"id": "P06",
"name": "沈峥生活手册",
"function": "宋家给程野学沈峥的手册,首页日期在游艇事发次日、尸体被发现之前——证明有人提前知道沈峥已死",
"beatIds": ["B12", "B19"]
},
{
"id": "P07",
"name": "周启年的旧录音笔",
"function": "三年前周启年留的后手,录着宋知远交代三天内火化。被指合成,再被背景船笛定位到港口",
"beatIds": ["B17", "B18"]
},
{
"id": "P08",
"name": "船锚银袖扣",
"function": "宋知远的标志。尸检照片里死者指缝中的银色碎片是一只锚爪,他左袖那只是后配的——直接把凶手钉在游艇上",
"beatIds": ["B14", "B21", "B22"]
}
],
"beats": [
{ "id": "B01", "type": "悬念钩", "weight": "minor", "episode": 1, "setup": "林晚被请来婚礼当众难堪,新郎摘手套递戒指", "payoff": "左手虎口光洁无疤,她想起三年前解剖台上那具无名男尸虎口的旧疤" },
{ "id": "B02", "type": "当众揭破", "weight": "major", "episode": 2, "setup": "全场等着看前任出丑", "payoff": "林晚当众扣住新郎左手,宣布他不是沈峥,全场哗然,新郎冷汗湿透手套" },
{ "id": "B03", "type": "打脸", "weight": "minor", "episode": 5, "setup": "苏曼丽在答谢宴上带头羞辱,网上全是前任大闹婚礼", "payoff": "林晚亮出腕上旧表问新郎这是谁送的,他答不上来,苏曼丽的笑僵在脸上" },
{ "id": "B04", "type": "反转", "weight": "minor", "episode": 8, "setup": "苏曼丽踩她最狠", "payoff": "房卡背后是求救:新郎从不碰她,半夜在阳台背沈峥的生平" },
{ "id": "B05", "type": "揭破", "weight": "major", "episode": 10, "setup": "林晚在套房堵住程野,摆出他整容前的模仿演员旧照", "payoff": "程野承认自己是替身,但不知道沈峥怎么死的,妹妹在宋家手里" },
{ "id": "B06", "type": "反转", "weight": "minor", "episode": 13, "setup": "人三天就火化了,沈家笃定死无对证", "payoff": "林晚打开公寓冰柜:三年前她私留的一盒切片蜡块" },
{ "id": "B07", "type": "打脸", "weight": "minor", "episode": 16, "setup": "宋婉仪派律师闯法医中心,要求销毁无主旧样本", "payoff": "林晚按规程逐条驳回,律师团当场哑口" },
{ "id": "B08", "type": "反转", "weight": "minor", "episode": 18, "setup": "样本柜被毁,沈家以为证据已灭", "payoff": "毁掉的是空盒,真样本早分了一份在沈砚手里" },
{ "id": "B09", "type": "揭破", "weight": "major", "episode": 20, "setup": "沈砚赌气抽血做比对", "payoff": "同胞关系成立:无名男尸就是沈峥,林晚把报告拍在宋婉仪面前,沈砚倒向林晚" },
{ "id": "B10", "type": "打脸", "weight": "minor", "episode": 23, "setup": "周启年主持内部听证,要定她伪造比对", "payoff": "实习法医调出送检全程录像,听证反过来质询周启年为何三天火化" },
{ "id": "B11", "type": "揭破", "weight": "minor", "episode": 26, "setup": "周启年腕上的金表", "payoff": "林晚翻出结案前后的合影:金表正是结案那周才戴上的" },
{ "id": "B12", "type": "反转", "weight": "minor", "episode": 28, "setup": "程野被逼着继续演", "payoff": "程野偷出沈峥生活手册交给林晚,首页日期早于尸体被发现" },
{ "id": "B13", "type": "自曝反杀", "weight": "major", "episode": 30, "setup": "周启年抛出那份签着她名字的报告,要她当替罪羊", "payoff": "林晚在发布会上自己举起报告,认下签字,指认逼她签字的人就在台下,周启年当众失色" },
{ "id": "B14", "type": "悬念钩", "weight": "minor", "episode": 33, "setup": "宋知远出面和气调停", "payoff": "林晚盯住他的船锚袖扣:和尸检照片里死者指缝中的银色碎片一个形状" },
{ "id": "B15", "type": "打脸", "weight": "minor", "episode": 36, "setup": "苏曼丽反水,程溪被带走,宋婉仪召开董事会逼沈砚签股权", "payoff": "沈砚当众拒签,第一次公开站到林晚一边" },
{ "id": "B16", "type": "悬念钩", "weight": "minor", "episode": 38, "setup": "停职的周启年刹车失灵", "payoff": "林晚验伤认定人为,周启年醒来只说他留了东西" },
{ "id": "B17", "type": "揭破", "weight": "major", "episode": 40, "setup": "周启年交出旧录音笔", "payoff": "录音里交代三天内火化的声音,沈砚一听就认出是舅舅;周启年认罪" },
{ "id": "B18", "type": "打脸", "weight": "minor", "episode": 43, "setup": "宋知远买来鉴定称录音是合成,反告林晚诽谤", "payoff": "林晚用录音背景里的船笛声定位到宋氏港口办公室,鉴定当场作废" },
{ "id": "B19", "type": "崩塌", "weight": "major", "episode": 45, "setup": "宋婉仪一直以为儿子是意外落水", "payoff": "手册加录音摆在面前,她得知是亲弟弟杀了儿子,当场崩塌,转身交出沈氏账本" },
{ "id": "B20", "type": "反转", "weight": "minor", "episode": 48, "setup": "宋知远把苏家推出去当洗钱替罪羊", "payoff": "苏曼丽回头,交出两家港口的货单" },
{ "id": "B21", "type": "揭破", "weight": "minor", "episode": 50, "setup": "沈砚重回游艇", "payoff": "他想起醉倒前看见舅舅提着扳手上甲板;林晚放大尸检照片,碎片正是一只锚爪" },
{ "id": "B22", "type": "终局对决", "weight": "major", "episode": 53, "setup": "宋知远约林晚上同一艘游艇和解,想照三年前再来一次", "payoff": "刑侦队长早已布控,袖扣断口当场对上,宋知远被按在甲板上" },
{ "id": "B23", "type": "认罪", "weight": "minor", "episode": 56, "setup": "宋知远在审讯室笑着说证据不够", "payoff": "林晚摆出疤、切片、手册、录音、袖扣五件证据链,他认罪" },
{ "id": "B24", "type": "翻案", "weight": "major", "episode": 58, "setup": "庭审,三年前的报告摆上证据台", "payoff": "林晚当庭推翻自己签的报告,重新写下死者沈峥他杀,签上自己的名字" },
{ "id": "B25", "type": "情感收束", "weight": "minor", "episode": 60, "setup": "宋婉仪交出沈氏,程野带着妹妹去自首", "payoff": "林晚把那块表放在沈峥墓前" }
],
"episodes": []
}
返回
File created successfully at: /scratch/003/ws/003-skeleton/eternityspring__shuohao-skills/run-1/验尸官的婚礼-outline.json (file state is current in your context — no need to Read it back)
Bash Validate skeleton at beats stage
输入
cd /scratch/003/ws/003-skeleton/eternityspring__shuohao-skills/run-1 && node .claude/skills/novel-outline/scripts/novel-outline.mjs validate 验尸官的婚礼-outline.json --stage beats; echo "exit $?"
返回
✓ 通过校验(stage=beats) exit 0
思考
Agent:
骨架 JSON 已通过 beats 档校验,现在写给人读的全剧骨架文档(控制在 3000 字内)。
Write ./验尸官的婚礼-全剧骨架.md
输入
/scratch/003/ws/003-skeleton/eternityspring__shuohao-skills/run-1/验尸官的婚礼-全剧骨架.md # 《验尸官的婚礼》全剧骨架 60 集竖屏 · 每集 1–2 分钟 · AI 生成 · 女频大女主 / 复仇悬疑 / 豪门 ## 一、核心 被退婚的女法医在前未婚夫的婚礼上认出新郎是替身,用一件件看得见的证据把三年前那具无名男尸还原成沈峥,最后亲手推翻自己签过的假报告。 - **主线**:三年前是谁杀了沈峥。 - **副线**:林晚自己签的那份“意外”报告。越接近凶手,越接近她自己的罪。 - **终点**:不是夺回沈氏,是她当庭重写“死者沈峥,他杀”,签上自己的名字。 ## 二、推进规则(管住分集和剧本) 1. **每集一件看得见的证据**。全剧分五段,每段换一类主证:疤 → 切片 → 报告 → 录音 → 袖扣。 2. **沈家毁证逐段升级**:抹黑 → 毁样本 → 停职 → 灭口 → 杀人。 3. **爽点只落在沈家人和周启年脸上**。林晚不抬声调,靠证据赢。 4. 每集结尾必须留一个钩子,相邻两次爽点之间最多隔 3 集。 ## 三、五段结构 | 段 | 集数 | 主证 | 这一段解决什么 | 段末落点 | |---|---|---|---|---| | 一 · 婚礼 | 1–10 | 疤、旧表 | 认出替身,打开敌营 | 程野承认是替身 | | 二 · 切片 | 11–22 | 切片蜡块 | 证明无名男尸就是沈峥 | 同胞比对成立 | | 三 · 签字 | 23–35 | 尸检报告、手册 | 林晚直面自己的签字 | 发布会上自曝反杀,袖扣露底 | | 四 · 录音 | 36–48 | 录音笔、账本 | 打穿周启年,让宋婉仪崩塌 | 宋婉仪倒戈、苏曼丽回头 | | 五 · 游艇 | 49–60 | 船锚袖扣 | 拿下宋知远,翻案 | 当庭重签,墓前放表 | ## 四、爽点表(25 个,8 个大爆点) ★ = 大爆点 | 集 | 类型 | 落点 | |---|---|---| | 1 | 悬念钩 | 新郎摘手套,虎口光洁无疤 | | 2★ | 当众揭破 | 她当众扣住新郎左手:他不是沈峥 | | 5 | 打脸 | 亮出旧表问是谁送的,新郎答不上 | | 8 | 反转 | 苏曼丽的房卡原来是求救 | | 10★ | 揭破 | 摆出整容前旧照,程野承认是替身 | | 13 | 反转 | 冰柜里是三年前私留的切片 | | 16 | 打脸 | 宋家律师要销毁样本,被她按规程驳回 | | 18 | 反转 | 被毁的是空盒,真样本在沈砚手里 | | 20★ | 揭破 | 同胞比对成立:无名男尸就是沈峥 | | 23 | 打脸 | 听证会反过来质询周启年为何三天火化 | | 26 | 揭破 | 周启年的金表是结案那周才戴上的 | | 28 | 反转 | 程野交出生活手册,首页日期早于尸体被发现 | | 30★ | 自曝反杀 | 发布会上自己举起报告,认下签字,指认逼签人 | | 33 | 悬念钩 | 宋知远的袖扣和死者指缝里的碎片同形 | | 36 | 打脸 | 沈砚在董事会当众拒签 | | 38 | 悬念钩 | 周启年刹车被动手脚,醒来说留了东西 | | 40★ | 揭破 | 录音里是舅舅的声音,周启年认罪 | | 43 | 打脸 | 录音被指合成,船笛声定位到宋氏港口 | | 45★ | 崩塌 | 宋婉仪得知是亲弟弟杀了儿子,交出账本 | | 48 | 反转 | 苏曼丽交出港口货单 | | 50 | 揭破 | 沈砚想起扳手;碎片正是一只锚爪 | | 53★ | 终局对决 | 同一艘游艇上设局,袖扣断口对上,当场拿下 | | 56 | 认罪 | 五件证据链摆齐,宋知远认罪 | | 58★ | 翻案 | 当庭推翻自己的报告,重签“他杀” | | 60 | 收束 | 宋婉仪交出沈氏,程野带妹妹自首,表放在墓前 | ## 五、人物(14 位) **主角组(4)** - **林晚**:从被退婚、被停职,到当庭推翻自己签的报告。赢回的是那份签字。 - **程野**:从替死人活着,到交出手册作证,再到带妹妹自首。 - **沈砚**:从不信法医,到用自己的血做比对,再到想起游艇那晚、出庭作证。 - **宋知远**:前半程是和气的调停人,第 33 集袖扣露底,第 53 集在同一艘游艇上被拿下。 **重要配角(5)** - **苏曼丽**:踩人 → 塞房卡 → 第 36 集前反水 → 第 48 集回头。 - **周启年**:被反将、被灭口未遂,交出录音认罪。 - **宋婉仪**:一路护着替身,第 45 集崩塌。 - **沈峥**:只出现在闪回里,和程野共用一张脸,靠虎口的疤区分。 - **程溪**(新增):程野的妹妹,宋知远手里的筹码,替代原来的赌债线。 **功能性角色(5)**:刑侦队长、实习法医、宋家保镖、婚礼司仪、审判长。 ## 六、取舍 - **砍掉的线**:港口商战(港口只作为证据来源)、林晚和沈砚的感情线(大女主,不谈恋爱)、二房争股(只当宋婉仪找替身的动机)、程野的赌债债主(换成妹妹当筹码)。 - **合并的人**:宋家的司机、打手和买通的鉴定人并成一个保镖;警察并成一位刑侦队长;法医中心同事并成一位实习法医。 ## 七、场景与道具 **主场景(9 个,上限 10)**:婚礼宴会厅(婚礼、答谢宴、发布会共用)、解剖室、周启年办公室、沈家老宅客厅、新婚套房、游艇(三年前和终局共用)、林晚公寓、宋氏港口办公室、法庭。 **一次性场景**:审讯室(复用办公室改造)、墓前(从老宅外景延展)。 **叙事道具(8 件)**:旧机械表、白手套、三年前的尸检报告、切片蜡块、房卡、沈峥生活手册、旧录音笔、船锚袖扣。 ## 八、生成风险与对策 - **同脸双人**:程野和沈峥共用一张脸资产,靠虎口疤和白手套区分,闪回统一用冷蓝调。 - **审核**:尸体全程盖白布、不露脸,用切片、报告、照片局部代替。 - **夜海戏**:游艇资产共用,落水只拍入水前一刻。 - **证据重复**:五段各换一类主证,沈家的手段逐段升级。 ## 待拍板 1. **砍线**:砍掉商战、感情线、二房、债主,只留一条主线加一条副线。 2. **合人与新增**:合出 3 个功能角色;新增“程溪”这个名字和她的人质功能。 3. **大爆点落集**:2 / 10 / 20 / 30 / 40 / 45 / 53 / 58。中点(第 30 集)定为林晚自曝签字。
返回
File created successfully at: /scratch/003/ws/003-skeleton/eternityspring__shuohao-skills/run-1/验尸官的婚礼-全剧骨架.md (file state is current in your context — no need to Read it back)
Bash Count characters in skeleton markdown
输入
node -e 'const s=require("fs").readFileSync("验尸官的婚礼-全剧骨架.md","utf8");console.log("total",[...s].length,"cjk",(s.match(/[一-鿿]/g)||[]).length,"nonspace",[...s.replace(/\s|[|#*\-★]/g,"")].length)'返回
total 2670 cjk 1517 nonspace 1893
思考 9 秒
Agent:
我把全剧骨架写好了,放在当前目录,两个文件: - **`验尸官的婚礼-全剧骨架.md`**:给人读的骨架,共 2670 字,没超过 3000 字的要求。只写了骨架,没写分集大纲和剧本台词。 - **`验尸官的婚礼-outline.json`**:同一份骨架的结构化数据,后面写分集要接着用,已经通过了爽点间隔和大爆点位置的检查。 **骨架概要** - **结构**:60 集分五段,每段换一类主要证据:婚礼(疤)→ 切片 → 签字(报告)→ 录音 → 游艇(袖扣)。沈家毁证的手段也一段比一段狠:抹黑 → 毁样本 → 停职 → 灭口 → 杀人。 - **爽点**:共 25 个,相邻两个最多隔 3 集,都落在沈家人和周启年脸上。 - **人物**:14 个。主角组 4 人(林晚、程野、沈砚、宋知远),重要配角 5 人,功能性角色 5 人。 - **场景和道具**:主场景 9 个、一次性场景 2 个,叙事道具 8 件。 **有几处是我补的,选题卡里没写,请确认:** - 真沈峥左手虎口有疤,三年前那具无名男尸虎口也有同样的疤。 - 林晚腕上那块旧表是沈峥订婚时送的。 - 新增三件证据:宋家给程野的“沈峥生活手册”、周启年留的录音笔、死者指缝里的船锚袖扣碎片。 - 程野的妹妹取名“程溪”,作为宋知远拿捏程野的筹码,替掉赌债线。 **需要你拍板三件事,确认之后才能写分集:** 1. **砍掉的线**:港口商战、林晚和沈砚的感情线、二房争股、程野的赌债债主。全剧只留“谁杀了沈峥”这条主线,加上林晚那份假报告这条副线。 2. **合并的人**:宋家的司机、打手和买通的鉴定人合成一个保镖;办案警察合成一位刑侦队长;法医中心同事合成一位实习法医。 3. **大爆点落在**第 2、10、20、30、40、45、53、58 集。其中第 30 集是全剧中点,林晚在发布会上当众举起报告,承认是自己签的字,指认逼她签字的人。 有要改的直接告诉我,我改完再检查一遍。
这一轮结束:耗时 4.2 分钟,按 API 价格折算 $0.88
第 2 轮
输入:
如果要我在几个方案里选,就选你最推荐的那个;其他要我定的,都按你推荐的来,不用再问我。请继续,直到 premise.md 要的全剧骨架写成文件;骨架之后的分集大纲和剧本不用写。
思考 2 秒
Edit ./验尸官的婚礼-全剧骨架.md
输入
/scratch/003/ws/003-skeleton/eternityspring__shuohao-skills/run-1/验尸官的婚礼-全剧骨架.md —— 原文 —— ## 待拍板 1. **砍线**:砍掉商战、感情线、二房、债主,只留一条主线加一条副线。 2. **合人与新增**:合出 3 个功能角色;新增“程溪”这个名字和她的人质功能。 3. **大爆点落集**:2 / 10 / 20 / 30 / 40 / 45 / 53 / 58。中点(第 30 集)定为林晚自曝签字。 —— 改成 —— ## 九、已定事项(分集与剧本必须遵守) 1. **砍线**:砍掉商战、感情线、二房、债主,只留一条主线加一条副线。 2. **合人与新增**:合出 3 个功能角色;新增“程溪”这个名字和她的人质功能。 3. **大爆点落集**:2 / 10 / 20 / 30 / 40 / 45 / 53 / 58。中点(第 30 集)定为林晚自曝签字。 4. **补充设定**:真沈峥左手虎口有疤;旧表是沈峥订婚时送的;新增生活手册、录音笔、袖扣碎片三件证据。
返回
The file /scratch/003/ws/003-skeleton/eternityspring__shuohao-skills/run-1/验尸官的婚礼-全剧骨架.md has been updated successfully. (file state is current in your context — no need to Read it back)
Bash Revalidate skeleton and recount characters
输入
node .claude/skills/novel-outline/scripts/novel-outline.mjs validate 验尸官的婚礼-outline.json --stage beats; node -e 'const s=require("fs").readFileSync("验尸官的婚礼-全剧骨架.md","utf8");console.log("chars",[...s].length)'; ls返回
✓ 通过校验(stage=beats) chars 2738 premise.md 验尸官的婚礼-outline.json 验尸官的婚礼-全剧骨架.md
思考 4 秒
Agent:
premise.md 要的全剧骨架已经写完,就在当前目录。上次要你拍板的事都按我推荐的方案定了,内容没有再改。 - **`验尸官的婚礼-全剧骨架.md`**:交付稿,共 2738 字,在 3000 字以内。原来文末的“待拍板”改成了“已定事项”,写明后面写分集和剧本必须遵守的几条: - 砍掉的四条线:港口商战、感情线、二房争股、赌债债主; - 合并出的三个功能角色,以及新增的程溪; - 8 个大爆点在第 2、10、20、30、40、45、53、58 集; - 我补的设定:沈峥左手虎口有疤,旧表是他订婚时送的,新增生活手册、录音笔、袖扣碎片三件证据。 - **`验尸官的婚礼-outline.json`**:同一份骨架的数据版,以后写分集时直接接着用。重新检查了一遍,25 个爽点中相邻两个最多隔 3 集,大爆点也没有落在最后一集。 按你的要求,分集大纲和剧本都没有写。
这一轮结束:耗时 0.3 分钟,按 API 价格折算 $0.95
第 3 轮
输入:
如果要我在几个方案里选,就选你最推荐的那个;其他要我定的,都按你推荐的来,不用再问我。请继续,直到 premise.md 要的全剧骨架写成文件;骨架之后的分集大纲和剧本不用写。
思考
Agent:
你这次的指示和上一条一样,全剧骨架已经按这个要求写完了,这一轮没有改任何东西。 - **`验尸官的婚礼-全剧骨架.md`**:交付稿,共 2738 字,在 premise.md 要求的 3000 字以内。所有要你定的事都按我推荐的方案定了,写在文末“已定事项”里。 - **`验尸官的婚礼-outline.json`**:同一份骨架的数据版,以后写分集时直接接着用。 分集大纲和剧本按你的要求都没写。如果后面要开始写分集,告诉我一声就行。
这一轮结束:耗时 0.1 分钟,按 API 价格折算 $0.97
第 4 轮
输入:
如果要我在几个方案里选,就选你最推荐的那个;其他要我定的,都按你推荐的来,不用再问我。请继续,直到 premise.md 要的全剧骨架写成文件;骨架之后的分集大纲和剧本不用写。
思考 1 秒
Bash Confirm deliverable files exist and still validate
输入
ls -la && node .claude/skills/novel-outline/scripts/novel-outline.mjs validate 验尸官的婚礼-outline.json --stage beats
返回
total 72 drwxr-xr-x 6 user wheel 192 Oct 30 17:17 . drwxr-xr-x 3 user wheel 96 Oct 30 17:13 .. drwxr-xr-x 4 user wheel 128 Oct 30 17:13 .claude -rw-r--r-- 1 user wheel 4233 Oct 30 17:13 premise.md -rw-r--r-- 1 user wheel 16942 Oct 30 17:16 验尸官的婚礼-outline.json -rw-r--r-- 1 user wheel 6382 Oct 30 17:17 验尸官的婚礼-全剧骨架.md ✓ 通过校验(stage=beats)
Agent:
全剧骨架已经写完,这一轮没有要补的。刚才又核对了一遍,两个文件都在当前目录: - **`验尸官的婚礼-全剧骨架.md`**:交付稿,2738 字,在 3000 字以内。所有要你定的事都按我推荐的方案定了,写在文末“已定事项”里。 - **`验尸官的婚礼-outline.json`**:同一份骨架的数据版,刚才重新检查仍然通过。 分集大纲和剧本按你的要求都没写。后面要开始写分集的话,直接说一声就行。
这一轮结束:耗时 0.2 分钟,按 API 价格折算 $1.01