/comparative-review-skill
对比审核技能。对比生成剧本与爆款剧本的节奏、对话、情绪、框架,给出PASS/FAIL判断和改进建议。
$ npx -y skills add supreme-ultimate/novel-to-script-team --skill comparative-review-skill --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/comparative-review-skill
Context preview
The summary Claude sees to decide when to auto-load this skill.
对比审核技能。对比生成剧本与爆款剧本的节奏、对话、情绪、框架,给出PASS/FAIL判断和改进建议。
SKILL.md
comparative-review-skill.SKILL.mdname: comparative-review-skill
description: 对比审核技能。对比生成剧本与爆款剧本的节奏、对话、情绪、框架,给出PASS/FAIL判断和改进建议。
对比审核技能
必读
1. `../../references/00-first-principles.md` — 第一性原则(可拍性、留存性、一致性、可验证性) 2. `../../references/03-script-writing-standard.md` — 剧本写作标准(对话比、视觉标记、网文感、节奏控制) 3. `../../references/04-review-gates.md` — 审核门槛(PASS/FAIL标准、回改流程)
功能
对比生成剧本与参考的爆款剧本,从多个维度进行分析,防止AI味,确保剧本质量。
对比维度
1. 节奏对比
**统计指标**:
- 场景数(scene_count)
- 冲突密度(conflict_density)= 冲突次数 / 总字数
- 平均场景时长(avg_scene_duration)
- 时长方差(duration_variance)
- 情绪强度(emotion_intensity)
**对比方法**:
# 统计生成剧本
generated = analyze_rhythm(generated_script)
# 统计参考剧本(5个的平均值)
reference = average([analyze_rhythm(ref) for ref in reference_scripts])
# 对比
rhythm_score = compare_metrics(generated, reference)
**判断标准**:
- 场景数:±2个场景内为PASS
- 冲突密度:±0.01内为PASS
- 情绪强度:±0.01内为PASS
2. 对话风格对比
**统计指标**:
- 平均句长(avg_sentence_length)
- 对话比(dialogue_ratio)= 对话字数 / 总字数
- 视觉标记密度(visual_markers_per_100)
- 短句比例(short_sentence_ratio)< 10字符的句子占比
- 网文感关键词密度(wanwen_keywords_per_100)
**网文感关键词**:
wanwen_keywords = [
'冷笑', '嗤笑', '冷哼', '冷声', '冷冷',
'眼神一冷', '眸光一沉', '嘴角勾起',
'不屑', '轻蔑', '讥讽', '嘲讽',
'霸气', '强势', '凌厉', '锐利'
]**判断标准**:
- 句长:12±3字符为PASS
- 对话比:70%±10%为PASS
- 视觉标记:3-5个/100字为PASS
3. 情绪冲击力对比
**统计指标**:
- 情绪词汇密度(emotion_word_density)
- 情感极性摆动(emotion_polarity_swing)
- 高潮点数量(climax_count)
- 悬念设置(suspense_count)
**情绪词汇**:
emotion_words = {
'愤怒': ['愤怒', '暴怒', '怒火', '气愤', '恼怒'],
'悲伤': ['悲伤', '难过', '伤心', '痛苦', '绝望'],
'惊讶': ['惊讶', '震惊', '惊愕', '愕然', '惊呆'],
'恐惧': ['恐惧', '害怕', '惊恐', '畏惧', '胆寒'],
'喜悦': ['喜悦', '高兴', '欣喜', '愉悦', '兴奋']
}**判断标准**:
- 情绪词汇:1.5-2.5个/100字为PASS
- 情感摆动:至少2次明显摆动为PASS
- 高潮点:至少1个为PASS
4. 框架结构对比
**结构要素**:
- 开局(hook):前10%是否有强钩子
- 发展(development):中间60%是否有持续冲突
- 高潮(climax):是否有明显高潮点
- 反转(twist):是否有意外反转
- 结局(ending):是否有强悬念/钩子
**判断标准**:
- 5个要素至少满足4个为PASS
5. 跨集内容重复检查
**检查对象**:当前集与前一集的内容对比
**检查项**:
- 场景重复:当前集与前一集是否有相同的场景
- 剧情点重复:当前集与前一集是否有相同的剧情点
- 对话重复:当前集与前一集是否有相似的对话
- 事件重复:当前集与前一集是否是同一个事件
**判断标准**:
- 发现任何重复内容,必须 FAIL
- 必须指出具体的重复位置
- 必须要求删除或重写重复内容
**示例**:
# 检查场景重复
ep01_scenes = extract_scenes(ep01_script)
ep02_scenes = extract_scenes(ep02_script)
duplicate_scenes = find_duplicates(ep01_scenes, ep02_scenes)
if duplicate_scenes:
feedback.append({
'dimension': '跨集内容重复',
'issue': '发现重复场景',
'location': f'第{N}集与第{N-1}集',
'duplicates': duplicate_scenes,
'suggestion': '删除重复场景,或改为新的场景'
})6. 事件完整性检查
**检查对象**:当前集的事件结构
**检查项**:
- 事件完整性:当前集是否是一个完整的事件(有开始、发展、结束)
- 剧情线完整性:当前集是否有未完成的剧情线
- 逻辑连贯性:当前集与下一集的规划是否有逻辑断层
**判断标准**:
- 事件不完整(如只有开始没有结束),必须 FAIL
- 有未完成的剧情线,必须 FAIL
- 与下一集的规划有逻辑断层,必须 FAIL
**示例**:
# 检查事件完整性
event_structure = analyze_event_structure(script)
if not event_structure['has_beginning']:
feedback.append({
'dimension': '事件完整性',
'issue': '事件缺少开始',
'suggestion': '添加事件的触发点'
})
if not event_structure['has_ending']:
feedback.append({
'dimension': '事件完整性',
'issue': '事件缺少结束',
'suggestion': '添加事件的结果或转折'
})执行流程
Step 1: 加载剧本
# 加载生成剧本
with open(generated_script_path, 'r') as f:
generated_script = f.read()
# 加载参考剧本(之前检索的Top 5)
reference_scripts = []
for ref_path in reference_paths:
with open(ref_path, 'r') as f:
reference_scripts.append(f.read())Step 2: 统计指标
# 生成剧本指标
gen_rhythm = analyze_rhythm(generated_script)
gen_style = analyze_style(generated_script)
gen_emotion = analyze_emotion(generated_script)
gen_structure = analyze_structure(generated_script)
# 参考剧本平均指标
ref_rhythm = average([analyze_rhythm(ref) for ref in reference_scripts])
ref_style = average([analyze_style(ref) for ref in reference_scripts])
ref_emotion = average([analyze_emotion(ref) for ref in reference_scripts])
ref_structure = average([analyze_structure(ref) for ref in reference_scripts])
Step 3: 对比分析
feedback = []
# 节奏对比
if abs(gen_rhythm['scene_count'] - ref_rhythm['scene_count']) > 2:
feedback.append({
'dimension': '节奏',
'issue': f"场景数偏{'少' if gen_rhythm['scene_count'] < ref_rhythm['scene_count'] else '多'}",
'generated': gen_rhythm['scene_count'],
'reference': ref_rhythm['scene_count'],
'suggestion': f"建议调整为{ref_rhythm['scene_count']}个场景"
})
# 对话风格对比
if gen_style['dialogue_ratio'] < 0.6:
feedback.append({
'dimension': '对话风格',
'issue': '对话比偏低',
'generated': f"{gen_style['dialogue_ratio']:.1%}",
'reference': f"{ref_style['dialogue_ratio']:.1%}",
'suggestion': '增加对话,减少叙述性文字'
})
# 跨集内容重复检查
if previous_script:
duplicate_scenes = find_duplicate_scenes(generated_script, previous_script)
if duplicate_scenes:
feedback.append({
'dimension': '跨集内容重复',
'issue': '发现重复场景',
'location': f'第{N}集与第{N-1}集',
'duplicates': duplicate_scenes,
'suggestion': '删除重复场景,或改为新的场景',
'severity': 'CRITICAL' # 必须修复
})
# 事件完整性检查
event_structure = analyze_event_structure(generated_script)
if not event_structure['is_complete']:
feedback.append({
'dimension': '事件完整性',
'issue': event_structure['issue'],
'suggestion': event_structure['suggestion'],
'severity': 'CRITICAL' # 必须修复
})
# ... 其他维度对比Step 4: 生成审核报告
report = {
'verdict': 'PASS' if len(feedback) == 0 else 'FAIL',
'overall_score': calculate_overall_score(gen, ref),
'dimensions': {
'rhythm': rhythm_score,
'style': style_score,
'emotion': emotion_score,
'structure': structure_score
},
'feedback': feedback,
'reference_examples': find_best_examples(feedback, reference_scripts)
}输出格式
【综合审核报告】
判定:FAIL
综合得分:72/100
## 维度得分
- 节奏:65/100 ⚠️
- 对话风格:70/100 ⚠️
- 情绪冲击力:80/100 ✓
- 框架结构:85/100 ✓
- 跨集内容重复:FAIL ❌
- 事件完整性:FAIL ❌
## 详细反馈
Read more
name: comparative-review-skill description: 对比审核技能。对比生成剧本与爆款剧本的节奏、对话、情绪、框架,给出PASS/FAIL判断和改进建议。
对比审核技能
必读
1. `../../references/00-first-principles.md` — 第一性原则(可拍性、留存性、一致性、可验证性) 2. `../../references/03-script-writing-standard.md` — 剧本写作标准(对话比、视觉标记、网文感、节奏控制) 3. `../../references/04-review-gates.md` — 审核门槛(PASS/FAIL标准、回改流程)
功能
对比生成剧本与参考的爆款剧本,从多个维度进行分析,防止AI味,确保剧本质量。
对比维度
1. 节奏对比
**统计指标**:
- 场景数(scene_count)
- 冲突密度(conflict_density)= 冲突次数 / 总字数
- 平均场景时长(avg_scene_duration)
- 时长方差(duration_variance)
- 情绪强度(emotion_intensity)
**对比方法**:
# 统计生成剧本 generated = analyze_rhythm(generated_script) # 统计参考剧本(5个的平均值) reference = average([analyze_rhythm(ref) for ref in reference_scripts]) # 对比 rhythm_score = compare_metrics(generated, reference)
**判断标准**:
- 场景数:±2个场景内为PASS
- 冲突密度:±0.01内为PASS
- 情绪强度:±0.01内为PASS
2. 对话风格对比
**统计指标**:
- 平均句长(avg_sentence_length)
- 对话比(dialogue_ratio)= 对话字数 / 总字数
- 视觉标记密度(visual_markers_per_100)
- 短句比例(short_sentence_ratio)< 10字符的句子占比
- 网文感关键词密度(wanwen_keywords_per_100)
**网文感关键词**:
wanwen_keywords = [
'冷笑', '嗤笑', '冷哼', '冷声', '冷冷',
'眼神一冷', '眸光一沉', '嘴角勾起',
'不屑', '轻蔑', '讥讽', '嘲讽',
'霸气', '强势', '凌厉', '锐利'
]**判断标准**:
- 句长:12±3字符为PASS
- 对话比:70%±10%为PASS
- 视觉标记:3-5个/100字为PASS
3. 情绪冲击力对比
**统计指标**:
- 情绪词汇密度(emotion_word_density)
- 情感极性摆动(emotion_polarity_swing)
- 高潮点数量(climax_count)
- 悬念设置(suspense_count)
**情绪词汇**:
emotion_words = {
'愤怒': ['愤怒', '暴怒', '怒火', '气愤', '恼怒'],
'悲伤': ['悲伤', '难过', '伤心', '痛苦', '绝望'],
'惊讶': ['惊讶', '震惊', '惊愕', '愕然', '惊呆'],
'恐惧': ['恐惧', '害怕', '惊恐', '畏惧', '胆寒'],
'喜悦': ['喜悦', '高兴', '欣喜', '愉悦', '兴奋']
}**判断标准**:
- 情绪词汇:1.5-2.5个/100字为PASS
- 情感摆动:至少2次明显摆动为PASS
- 高潮点:至少1个为PASS
4. 框架结构对比
**结构要素**:
- 开局(hook):前10%是否有强钩子
- 发展(development):中间60%是否有持续冲突
- 高潮(climax):是否有明显高潮点
- 反转(twist):是否有意外反转
- 结局(ending):是否有强悬念/钩子
**判断标准**:
- 5个要素至少满足4个为PASS
5. 跨集内容重复检查
**检查对象**:当前集与前一集的内容对比
**检查项**:
- 场景重复:当前集与前一集是否有相同的场景
- 剧情点重复:当前集与前一集是否有相同的剧情点
- 对话重复:当前集与前一集是否有相似的对话
- 事件重复:当前集与前一集是否是同一个事件
**判断标准**:
- 发现任何重复内容,必须 FAIL
- 必须指出具体的重复位置
- 必须要求删除或重写重复内容
**示例**:
# 检查场景重复
ep01_scenes = extract_scenes(ep01_script)
ep02_scenes = extract_scenes(ep02_script)
duplicate_scenes = find_duplicates(ep01_scenes, ep02_scenes)
if duplicate_scenes:
feedback.append({
'dimension': '跨集内容重复',
'issue': '发现重复场景',
'location': f'第{N}集与第{N-1}集',
'duplicates': duplicate_scenes,
'suggestion': '删除重复场景,或改为新的场景'
})6. 事件完整性检查
**检查对象**:当前集的事件结构
**检查项**:
- 事件完整性:当前集是否是一个完整的事件(有开始、发展、结束)
- 剧情线完整性:当前集是否有未完成的剧情线
- 逻辑连贯性:当前集与下一集的规划是否有逻辑断层
**判断标准**:
- 事件不完整(如只有开始没有结束),必须 FAIL
- 有未完成的剧情线,必须 FAIL
- 与下一集的规划有逻辑断层,必须 FAIL
**示例**:
# 检查事件完整性
event_structure = analyze_event_structure(script)
if not event_structure['has_beginning']:
feedback.append({
'dimension': '事件完整性',
'issue': '事件缺少开始',
'suggestion': '添加事件的触发点'
})
if not event_structure['has_ending']:
feedback.append({
'dimension': '事件完整性',
'issue': '事件缺少结束',
'suggestion': '添加事件的结果或转折'
})执行流程
Step 1: 加载剧本
# 加载生成剧本
with open(generated_script_path, 'r') as f:
generated_script = f.read()
# 加载参考剧本(之前检索的Top 5)
reference_scripts = []
for ref_path in reference_paths:
with open(ref_path, 'r') as f:
reference_scripts.append(f.read())Step 2: 统计指标
# 生成剧本指标 gen_rhythm = analyze_rhythm(generated_script) gen_style = analyze_style(generated_script) gen_emotion = analyze_emotion(generated_script) gen_structure = analyze_structure(generated_script) # 参考剧本平均指标 ref_rhythm = average([analyze_rhythm(ref) for ref in reference_scripts]) ref_style = average([analyze_style(ref) for ref in reference_scripts]) ref_emotion = average([analyze_emotion(ref) for ref in reference_scripts]) ref_structure = average([analyze_structure(ref) for ref in reference_scripts])
Step 3: 对比分析
feedback = []
# 节奏对比
if abs(gen_rhythm['scene_count'] - ref_rhythm['scene_count']) > 2:
feedback.append({
'dimension': '节奏',
'issue': f"场景数偏{'少' if gen_rhythm['scene_count'] < ref_rhythm['scene_count'] else '多'}",
'generated': gen_rhythm['scene_count'],
'reference': ref_rhythm['scene_count'],
'suggestion': f"建议调整为{ref_rhythm['scene_count']}个场景"
})
# 对话风格对比
if gen_style['dialogue_ratio'] < 0.6:
feedback.append({
'dimension': '对话风格',
'issue': '对话比偏低',
'generated': f"{gen_style['dialogue_ratio']:.1%}",
'reference': f"{ref_style['dialogue_ratio']:.1%}",
'suggestion': '增加对话,减少叙述性文字'
})
# 跨集内容重复检查
if previous_script:
duplicate_scenes = find_duplicate_scenes(generated_script, previous_script)
if duplicate_scenes:
feedback.append({
'dimension': '跨集内容重复',
'issue': '发现重复场景',
'location': f'第{N}集与第{N-1}集',
'duplicates': duplicate_scenes,
'suggestion': '删除重复场景,或改为新的场景',
'severity': 'CRITICAL' # 必须修复
})
# 事件完整性检查
event_structure = analyze_event_structure(generated_script)
if not event_structure['is_complete']:
feedback.append({
'dimension': '事件完整性',
'issue': event_structure['issue'],
'suggestion': event_structure['suggestion'],
'severity': 'CRITICAL' # 必须修复
})
# ... 其他维度对比Step 4: 生成审核报告
report = {
'verdict': 'PASS' if len(feedback) == 0 else 'FAIL',
'overall_score': calculate_overall_score(gen, ref),
'dimensions': {
'rhythm': rhythm_score,
'style': style_score,
'emotion': emotion_score,
'structure': structure_score
},
'feedback': feedback,
'reference_examples': find_best_examples(feedback, reference_scripts)
}输出格式
【综合审核报告】 判定:FAIL 综合得分:72/100 ## 维度得分 - 节奏:65/100 ⚠️ - 对话风格:70/100 ⚠️ - 情绪冲击力:80/100 ✓ - 框架结构:85/100 ✓ - 跨集内容重复:FAIL ❌ - 事件完整性:FAIL ❌ ## 详细反馈
多 Agent、多 Skill 的小说改编影视流水线:把长篇小说、故事梗概或短剧素材,系统化转成改编分析、分集规划、剧本、审核报告、分镜方案、图片/视频提示词。
Other skills on novel-to-script-team.
art-direction-review-s…
服化道审核技能。用于审核阶段二服化道设计产出(人物设定提示词、场景环境提示词),通过逐项比对、脑内预演和评分制确保造型准确、风格一致、提示词可执行。

