ai-scriptify
Advanced tools
| #!/usr/bin/env bash | ||
| # 漫剧改编 - 解析参数并准备改编环境 | ||
| # 加载通用函数库 | ||
| SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" | ||
| source "$SCRIPT_DIR/common.sh" | ||
| # 获取项目路径 | ||
| PROJECT_DIR=$(get_current_project) | ||
| PROJECT_NAME=$(get_project_name) | ||
| NOVEL_DIR="$PROJECT_DIR/novel" | ||
| COMIC_DIR="$PROJECT_DIR/comic-scripts" | ||
| # 默认值 | ||
| STYLE="" | ||
| EPISODES="" | ||
| MODE="interactive" | ||
| NOVEL_FILE="" | ||
| # 解析参数 | ||
| parse_arguments() { | ||
| while [[ $# -gt 0 ]]; do | ||
| case $1 in | ||
| --style) | ||
| STYLE="$2" | ||
| shift 2 | ||
| ;; | ||
| --episodes) | ||
| EPISODES="$2" | ||
| shift 2 | ||
| ;; | ||
| --auto) | ||
| MODE="auto" | ||
| shift | ||
| ;; | ||
| *) | ||
| # 未识别的参数,可能是文件路径 | ||
| if [ -z "$NOVEL_FILE" ]; then | ||
| NOVEL_FILE="$1" | ||
| fi | ||
| shift | ||
| ;; | ||
| esac | ||
| done | ||
| } | ||
| # 验证风格参数 | ||
| validate_style() { | ||
| local style="$1" | ||
| case $style in | ||
| 沙雕|热血|甜宠|悬疑) | ||
| return 0 | ||
| ;; | ||
| *) | ||
| return 1 | ||
| ;; | ||
| esac | ||
| } | ||
| # 主流程 | ||
| main() { | ||
| # 解析命令行参数 | ||
| parse_arguments "$@" | ||
| # 1. 确定小说文件 | ||
| if [ -z "$NOVEL_FILE" ]; then | ||
| # 未指定文件,使用默认 | ||
| if [ -f "$NOVEL_DIR/original.txt" ]; then | ||
| NOVEL_FILE="$NOVEL_DIR/original.txt" | ||
| else | ||
| output_json "{ | ||
| \"status\": \"error\", | ||
| \"error_code\": \"NO_FILE\", | ||
| \"message\": \"未找到小说文件\", | ||
| \"guide\": { | ||
| \"step1\": \"请先运行以下命令之一:\", | ||
| \"option1\": \"/import - 导入小说\", | ||
| \"option2\": \"/select-novel - 检查小说适配度\", | ||
| \"then\": \"然后再运行 /adapt-comic\" | ||
| } | ||
| }" | ||
| exit 1 | ||
| fi | ||
| else | ||
| # 转换为绝对路径 | ||
| if [[ "$NOVEL_FILE" != /* ]]; then | ||
| NOVEL_FILE="$PROJECT_DIR/$NOVEL_FILE" | ||
| fi | ||
| if [ ! -f "$NOVEL_FILE" ]; then | ||
| output_json "{ | ||
| \"status\": \"error\", | ||
| \"error_code\": \"FILE_NOT_FOUND\", | ||
| \"message\": \"未找到指定的小说文件: $NOVEL_FILE\" | ||
| }" | ||
| exit 1 | ||
| fi | ||
| fi | ||
| # 2. 获取小说基本信息 | ||
| local word_count=$(count_script_words "$NOVEL_FILE") | ||
| local file_name=$(basename "$NOVEL_FILE") | ||
| # 3. 建议集数(如果未指定) | ||
| local suggested_episodes="" | ||
| if [ -z "$EPISODES" ]; then | ||
| if [ "$word_count" -lt 50000 ]; then | ||
| suggested_episodes="20-30" | ||
| elif [ "$word_count" -lt 150000 ]; then | ||
| suggested_episodes="50-80" | ||
| elif [ "$word_count" -lt 300000 ]; then | ||
| suggested_episodes="80-120" | ||
| else | ||
| suggested_episodes="100-150" | ||
| fi | ||
| fi | ||
| # 4. 验证风格(如果已指定) | ||
| if [ -n "$STYLE" ]; then | ||
| if ! validate_style "$STYLE"; then | ||
| output_json "{ | ||
| \"status\": \"error\", | ||
| \"error_code\": \"INVALID_STYLE\", | ||
| \"message\": \"无效的风格参数: $STYLE\", | ||
| \"valid_styles\": [\"沙雕\", \"热血\", \"甜宠\", \"悬疑\"] | ||
| }" | ||
| exit 1 | ||
| fi | ||
| fi | ||
| # 5. 创建输出目录 | ||
| mkdir -p "$COMIC_DIR" | ||
| # 6. 准备改编配置 | ||
| local config_file="$COMIC_DIR/.adapt-config.json" | ||
| cat > "$config_file" <<EOF | ||
| { | ||
| "novel_file": "$NOVEL_FILE", | ||
| "word_count": $word_count, | ||
| "style": "$STYLE", | ||
| "episodes": "$EPISODES", | ||
| "mode": "$MODE", | ||
| "created_at": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")" | ||
| } | ||
| EOF | ||
| # 7. 返回结果 | ||
| if [ -n "$STYLE" ] && [ -n "$EPISODES" ]; then | ||
| # 参数完整,可以开始改编 | ||
| output_json "{ | ||
| \"status\": \"ready\", | ||
| \"project_name\": \"$PROJECT_NAME\", | ||
| \"novel_info\": { | ||
| \"file\": \"$NOVEL_FILE\", | ||
| \"name\": \"$file_name\", | ||
| \"word_count\": $word_count | ||
| }, | ||
| \"settings\": { | ||
| \"style\": \"$STYLE\", | ||
| \"episodes\": $EPISODES, | ||
| \"mode\": \"$MODE\" | ||
| }, | ||
| \"output_dir\": \"$COMIC_DIR\", | ||
| \"message\": \"改编参数已设置,准备开始改编\", | ||
| \"next_steps\": [ | ||
| \"AI将读取小说内容\", | ||
| \"生成漫剧章纲(所有集)\", | ||
| \"逐集生成剧本(${MODE}模式)\", | ||
| \"自动质量检查\", | ||
| \"保存到: $COMIC_DIR\" | ||
| ] | ||
| }" | ||
| else | ||
| # 参数不完整,需要询问用户 | ||
| local need_params=[] | ||
| if [ -z "$STYLE" ]; then | ||
| need_params+=("\"style\"") | ||
| fi | ||
| if [ -z "$EPISODES" ]; then | ||
| need_params+=("\"episodes\"") | ||
| fi | ||
| output_json "{ | ||
| \"status\": \"need_input\", | ||
| \"project_name\": \"$PROJECT_NAME\", | ||
| \"novel_info\": { | ||
| \"file\": \"$NOVEL_FILE\", | ||
| \"name\": \"$file_name\", | ||
| \"word_count\": $word_count | ||
| }, | ||
| \"current_settings\": { | ||
| \"style\": \"${STYLE:-null}\", | ||
| \"episodes\": ${EPISODES:-null}, | ||
| \"mode\": \"$MODE\" | ||
| }, | ||
| \"need_params\": [$(IFS=,; echo "${need_params[*]}")], | ||
| \"suggestions\": { | ||
| \"style_options\": [ | ||
| {\"value\": \"沙雕\", \"desc\": \"夸张反差、密集笑点\"}, | ||
| {\"value\": \"热血\", \"desc\": \"打脸升级、爽点密集\"}, | ||
| {\"value\": \"甜宠\", \"desc\": \"糖点密集、情感互动\"}, | ||
| {\"value\": \"悬疑\", \"desc\": \"伏笔悬念、反转钩子\"} | ||
| ], | ||
| \"episodes_range\": \"$suggested_episodes\" | ||
| }, | ||
| \"message\": \"请补充改编参数\", | ||
| \"guide\": { | ||
| \"tip\": \"AI将根据小说内容询问缺失的参数\" | ||
| } | ||
| }" | ||
| fi | ||
| } | ||
| # 执行主流程 | ||
| main "$@" |
| #!/usr/bin/env bash | ||
| # 漫剧质量检查 - 获取剧本文件并返回基本信息 | ||
| # 加载通用函数库 | ||
| SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" | ||
| source "$SCRIPT_DIR/common.sh" | ||
| # 获取项目路径 | ||
| PROJECT_DIR=$(get_current_project) | ||
| PROJECT_NAME=$(get_project_name) | ||
| COMIC_DIR="$PROJECT_DIR/comic-scripts" | ||
| # 检查是否为批量模式 | ||
| CHECK_ALL=false | ||
| if [[ "$1" == "--all" ]]; then | ||
| CHECK_ALL=true | ||
| fi | ||
| # 估算时长(按配音语速: 1秒≈3个汉字) | ||
| estimate_duration() { | ||
| local file="$1" | ||
| local word_count=$(count_script_words "$file") | ||
| echo $((word_count / 3)) | ||
| } | ||
| # 统计对白数量 | ||
| count_dialogues() { | ||
| local file="$1" | ||
| # 统计"**[角色名]**:"的数量,排除旁白 | ||
| grep -c "^\*\*\[.*\]\*\*:" "$file" 2>/dev/null || echo "0" | ||
| } | ||
| # 提取集数 | ||
| extract_episode_number() { | ||
| local filename="$1" | ||
| # 从文件名提取数字: episode-1.md → 1 | ||
| echo "$filename" | sed -n 's/.*episode-\([0-9]*\)\.md/\1/p' | ||
| } | ||
| # 批量检查 | ||
| batch_check() { | ||
| local episode_files=($(find "$COMIC_DIR" -name "episode-*.md" | sort)) | ||
| if [ ${#episode_files[@]} -eq 0 ]; then | ||
| output_json "{ | ||
| \"status\": \"error\", | ||
| \"error_code\": \"NO_EPISODES\", | ||
| \"message\": \"未找到任何剧本文件\", | ||
| \"comic_dir\": \"$COMIC_DIR\" | ||
| }" | ||
| exit 1 | ||
| fi | ||
| # 构建批量结果 | ||
| local episodes_json="[" | ||
| local first=true | ||
| for episode_file in "${episode_files[@]}"; do | ||
| local episode_num=$(extract_episode_number "$(basename "$episode_file")") | ||
| local word_count=$(count_script_words "$episode_file") | ||
| local dialogue_count=$(count_dialogues "$episode_file") | ||
| local duration=$(estimate_duration "$episode_file") | ||
| if [ "$first" = true ]; then | ||
| first=false | ||
| else | ||
| episodes_json+="," | ||
| fi | ||
| episodes_json+="{ \"episode\": $episode_num, \"file\": \"$episode_file\", \"word_count\": $word_count, \"dialogue_count\": $dialogue_count, \"duration_estimate\": $duration }" | ||
| done | ||
| episodes_json+="]" | ||
| output_json "{ | ||
| \"status\": \"batch\", | ||
| \"project_name\": \"$PROJECT_NAME\", | ||
| \"total_episodes\": ${#episode_files[@]}, | ||
| \"episodes\": $episodes_json, | ||
| \"message\": \"批量检查模式,将逐一检查所有集\" | ||
| }" | ||
| } | ||
| # 单集检查 | ||
| single_check() { | ||
| local episode_file="" | ||
| # 1. 确定剧本文件 | ||
| if [ -n "$1" ] && [ "$1" != "--all" ]; then | ||
| # 用户指定了文件 | ||
| local input_path="$1" | ||
| # 转换为绝对路径 | ||
| if [[ "$input_path" != /* ]]; then | ||
| input_path="$PROJECT_DIR/$input_path" | ||
| fi | ||
| if [ ! -f "$input_path" ]; then | ||
| output_json "{ | ||
| \"status\": \"error\", | ||
| \"error_code\": \"FILE_NOT_FOUND\", | ||
| \"message\": \"未找到指定的剧本文件: $input_path\", | ||
| \"guide\": { | ||
| \"tip1\": \"请检查文件路径是否正确\", | ||
| \"tip2\": \"或先运行 /adapt-comic 生成剧本\" | ||
| } | ||
| }" | ||
| exit 1 | ||
| fi | ||
| episode_file="$input_path" | ||
| else | ||
| # 未指定,查找最新的episode文件 | ||
| local latest=$(find "$COMIC_DIR" -name "episode-*.md" -type f | sort -r | head -1) | ||
| if [ -z "$latest" ]; then | ||
| output_json "{ | ||
| \"status\": \"error\", | ||
| \"error_code\": \"NO_EPISODES\", | ||
| \"message\": \"未找到漫剧剧本文件\", | ||
| \"guide\": { | ||
| \"step1\": \"请先运行 /adapt-comic 生成漫剧剧本\", | ||
| \"step2\": \"或指定剧本文件:\", | ||
| \"example\": \"/quality-check-comic comic-scripts/episode-1.md\" | ||
| } | ||
| }" | ||
| exit 1 | ||
| fi | ||
| episode_file="$latest" | ||
| fi | ||
| # 2. 提取基本信息 | ||
| local file_name=$(basename "$episode_file") | ||
| local episode_num=$(extract_episode_number "$file_name") | ||
| local word_count=$(count_script_words "$episode_file") | ||
| local dialogue_count=$(count_dialogues "$episode_file") | ||
| local duration=$(estimate_duration "$episode_file") | ||
| # 3. 检查文件内容是否为空 | ||
| if [ "$word_count" -lt 50 ]; then | ||
| output_json "{ | ||
| \"status\": \"error\", | ||
| \"error_code\": \"EMPTY_FILE\", | ||
| \"message\": \"剧本文件内容过少或为空\", | ||
| \"file_info\": { | ||
| \"path\": \"$episode_file\", | ||
| \"word_count\": $word_count | ||
| } | ||
| }" | ||
| exit 1 | ||
| fi | ||
| # 4. 判断是否第1集(第1集时长标准不同) | ||
| local is_first_episode=false | ||
| if [ "$episode_num" = "1" ]; then | ||
| is_first_episode=true | ||
| fi | ||
| # 5. 返回成功信息 | ||
| output_json "{ | ||
| \"status\": \"success\", | ||
| \"project_name\": \"$PROJECT_NAME\", | ||
| \"episode_info\": { | ||
| \"file\": \"$episode_file\", | ||
| \"episode_number\": $episode_num, | ||
| \"is_first_episode\": $is_first_episode, | ||
| \"word_count\": $word_count, | ||
| \"dialogue_count\": $dialogue_count, | ||
| \"duration_estimate\": $duration | ||
| }, | ||
| \"standards\": { | ||
| \"duration_min\": $([ "$is_first_episode" = true ] && echo "120" || echo "90"), | ||
| \"duration_max\": $([ "$is_first_episode" = true ] && echo "240" || echo "180"), | ||
| \"dialogue_max\": 5, | ||
| \"forbidden_keywords\": [\"心想\", \"暗道\", \"觉得\", \"想到\", \"你要知道\", \"其实\", \"让我告诉你\", \"然而\", \"因此\"], | ||
| \"required_elements\": { | ||
| \"opening_conflict\": \"前10秒必须抛冲突\", | ||
| \"hook_ending\": \"结尾必须有动作/反转钩子\" | ||
| } | ||
| }, | ||
| \"message\": \"准备进行质量检查\", | ||
| \"next_steps\": [ | ||
| \"AI将读取完整剧本内容\", | ||
| \"检查时长、对白、开篇、钩子\", | ||
| \"识别禁止内容(心理描写/解释台词)\", | ||
| \"评估口语化和细节\", | ||
| \"生成评分和改进建议\" | ||
| ] | ||
| }" | ||
| } | ||
| # 主流程 | ||
| main() { | ||
| if [ "$CHECK_ALL" = true ]; then | ||
| batch_check | ||
| else | ||
| single_check "$@" | ||
| fi | ||
| } | ||
| # 执行主流程 | ||
| main "$@" |
| #!/usr/bin/env bash | ||
| # 漫剧选题检查 - 返回小说文件路径供AI评估 | ||
| # 加载通用函数库 | ||
| SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" | ||
| source "$SCRIPT_DIR/common.sh" | ||
| # 获取项目路径 | ||
| PROJECT_DIR=$(get_current_project) | ||
| PROJECT_NAME=$(get_project_name) | ||
| NOVEL_DIR="$PROJECT_DIR/novel" | ||
| IMPORT_DIR="$PROJECT_DIR/import" | ||
| # 主流程 | ||
| main() { | ||
| local novel_file="" | ||
| local file_source="" | ||
| # 1. 确定小说文件路径 | ||
| if [ $# -gt 0 ]; then | ||
| # 用户提供了文件路径参数 | ||
| local input_path="$1" | ||
| # 如果是相对路径,转为绝对路径 | ||
| if [[ "$input_path" != /* ]]; then | ||
| input_path="$PROJECT_DIR/$input_path" | ||
| fi | ||
| if [ ! -f "$input_path" ]; then | ||
| output_json "{ | ||
| \"status\": \"error\", | ||
| \"error_code\": \"FILE_NOT_FOUND\", | ||
| \"message\": \"未找到指定的文件: $input_path\", | ||
| \"guide\": { | ||
| \"tip1\": \"请检查文件路径是否正确\", | ||
| \"tip2\": \"支持的路径格式:\", | ||
| \"examples\": [ | ||
| \"novel/original.txt\", | ||
| \"import/my-novel.txt\", | ||
| \"/absolute/path/to/novel.txt\" | ||
| ] | ||
| } | ||
| }" | ||
| exit 1 | ||
| fi | ||
| novel_file="$input_path" | ||
| file_source="user_specified" | ||
| else | ||
| # 未提供参数,使用默认文件 novel/original.txt | ||
| if [ -f "$NOVEL_DIR/original.txt" ]; then | ||
| novel_file="$NOVEL_DIR/original.txt" | ||
| file_source="default" | ||
| else | ||
| # 尝试在import目录找TXT文件 | ||
| local txt_files=($(find "$IMPORT_DIR" -maxdepth 1 -type f \( -name "*.txt" -o -name "*.TXT" \) 2>/dev/null)) | ||
| if [ ${#txt_files[@]} -gt 0 ]; then | ||
| # 选择最大的文件 | ||
| novel_file="${txt_files[0]}" | ||
| for file in "${txt_files[@]}"; do | ||
| if [ $(stat -f%z "$file" 2>/dev/null || stat -c%s "$file") -gt $(stat -f%z "$novel_file" 2>/dev/null || stat -c%s "$novel_file") ]; then | ||
| novel_file="$file" | ||
| fi | ||
| done | ||
| file_source="import_dir" | ||
| else | ||
| # 没有找到任何小说文件 | ||
| output_json "{ | ||
| \"status\": \"error\", | ||
| \"error_code\": \"NO_FILE\", | ||
| \"message\": \"未找到小说文件\", | ||
| \"guide\": { | ||
| \"step1\": \"请先运行以下命令之一:\", | ||
| \"option1\": \"/import - 导入新小说\", | ||
| \"option2\": \"/select-novel <文件路径> - 指定小说文件\", | ||
| \"import_dir\": \"$IMPORT_DIR\", | ||
| \"examples\": [ | ||
| \"/select-novel import/my-novel.txt\", | ||
| \"/select-novel novel/original.txt\" | ||
| ] | ||
| } | ||
| }" | ||
| exit 1 | ||
| fi | ||
| fi | ||
| fi | ||
| # 2. 获取文件基本信息 | ||
| local file_size=$(stat -f%z "$novel_file" 2>/dev/null || stat -c%s "$novel_file") | ||
| local file_name=$(basename "$novel_file") | ||
| local word_count=$(count_script_words "$novel_file") | ||
| # 3. 检查文件是否为空 | ||
| if [ "$word_count" -lt 100 ]; then | ||
| output_json "{ | ||
| \"status\": \"error\", | ||
| \"error_code\": \"EMPTY_FILE\", | ||
| \"message\": \"文件内容过少或为空\", | ||
| \"file_info\": { | ||
| \"path\": \"$novel_file\", | ||
| \"size\": $file_size, | ||
| \"word_count\": $word_count | ||
| }, | ||
| \"guide\": { | ||
| \"tip\": \"文件字数少于100字,无法进行评估\", | ||
| \"suggestion\": \"请检查文件是否正确,或重新导入小说\" | ||
| } | ||
| }" | ||
| exit 1 | ||
| fi | ||
| # 4. 返回成功信息 | ||
| output_json "{ | ||
| \"status\": \"success\", | ||
| \"project_name\": \"$PROJECT_NAME\", | ||
| \"file_info\": { | ||
| \"path\": \"$novel_file\", | ||
| \"relative_path\": \"$(realpath --relative-to=\"$PROJECT_DIR\" \"$novel_file\" 2>/dev/null || echo \"$novel_file\")\", | ||
| \"name\": \"$file_name\", | ||
| \"size\": $file_size, | ||
| \"word_count\": $word_count, | ||
| \"source\": \"$file_source\" | ||
| }, | ||
| \"message\": \"找到小说文件,准备进行漫剧适配性评估\", | ||
| \"next_steps\": [ | ||
| \"AI将读取小说开篇(前5000字)\", | ||
| \"根据五大核心筛选标准进行评估\", | ||
| \"生成适配性报告和改编建议\" | ||
| ], | ||
| \"evaluation_standards\": [ | ||
| \"标准1: 数据基础达标(评分≥8.0, 在读≥1万)\", | ||
| \"标准2: 开篇吸引力强(前3句话内有冲突)\", | ||
| \"标准3: 主线清晰明确(剧情连贯,目标单一)\", | ||
| \"标准4: 情绪衔接流畅(无情绪断层)\", | ||
| \"标准5: 适配漫剧风格(热血/甜宠/沙雕/悬疑)\" | ||
| ] | ||
| }" | ||
| } | ||
| # 执行主流程 | ||
| main "$@" |
| --- | ||
| description: 小说改编为漫剧剧本 - 应用5步改编法 | ||
| argument-hint: [--style 沙雕|热血|甜宠|悬疑] [--episodes N] [--auto] | ||
| allowed-tools: Read(//projects/*/novel/*), Write(//projects/*/comic-scripts/*), Edit(//projects/*/comic-scripts/*) | ||
| scripts: | ||
| sh: scripts/bash/adapt-comic.sh | ||
| ps1: scripts/powershell/adapt-comic.ps1 | ||
| --- | ||
| # /adapt-comic - 漫剧改编 | ||
| ## AI 角色 | ||
| 你是一位专业的漫剧编剧。你的职责是**将小说改编为符合漫剧标准的剧本**,严格遵循《AI漫剧制作完整流程》文档2.3节的"5步改编法"。 | ||
| --- | ||
| ## 核心原则 | ||
| ### 漫剧黄金标准(1-2分钟) | ||
| **时长要求**: | ||
| - 第1集: 可放宽到2-4分钟 | ||
| - 其他集: 严格1-2分钟 | ||
| **1-2分钟黄金结构**: | ||
| ``` | ||
| 前10秒: 抛冲突 | ||
| ├─ 直接拍核心矛盾 | ||
| ├─ 无铺垫、无废话 | ||
| 中60-100秒: 推冲突 | ||
| ├─ 节奏紧凑,每15秒一个小转折 | ||
| 后10-20秒: 留钩子 | ||
| ├─ 有动作/有反转 | ||
| └─ ❌ 别停在"主角叹了口气" | ||
| ``` | ||
| ### 5步改编法 | ||
| **Step 1: 拆书 + 列大纲** | ||
| - 核心梗保留 | ||
| - 人设换新鲜感 | ||
| - 世界观轻量化 | ||
| **Step 2: 写细纲** | ||
| - 删除: 大段心理描写、无关背景、多余台词 | ||
| - 转化: 环境描写→场景分镜, 动作描写→动态提示 | ||
| **Step 3: 改写** | ||
| - 应用1-2分钟黄金结构 | ||
| - 每集必须有钩子结尾 | ||
| **Step 4: 润色(去AI味)** | ||
| - 加口语化语气词 | ||
| - 补情绪细节 | ||
| - 调整节奏,留画面空白 | ||
| **Step 5: 手动调整** | ||
| - 90%删减(解释性台词/无关动作) | ||
| - 10%补钩子(结尾必须有动作/反转) | ||
| --- | ||
| ## 工作流程 | ||
| ### 步骤0: 解析参数 | ||
| 脚本会返回: | ||
| - `style`: 漫剧风格(沙雕/热血/甜宠/悬疑) | ||
| - `episodes`: 目标集数 | ||
| - `mode`: 改编模式(auto自动 / interactive互动) | ||
| - `novel_file`: 小说文件路径 | ||
| **如果用户未指定参数**,需要询问: | ||
| ``` | ||
| ### 🎬 漫剧改编设置 | ||
| 在开始改编前,请告诉我: | ||
| **1. 漫剧风格** (选择最符合的): | ||
| - 🤪 **沙雕搞笑**: 夸张反差、密集笑点 | ||
| - ⚡ **热血爽文**: 打脸升级、爽点密集 | ||
| - 💕 **甜宠言情**: 糖点密集、情感互动 | ||
| - 🔍 **悬疑推理**: 伏笔悬念、反转钩子 | ||
| 你的选择: [等待用户输入] | ||
| **2. 目标集数**: | ||
| 你希望改编成多少集? (建议: 50-100集) | ||
| [等待用户输入] | ||
| **3. 改编模式**: | ||
| - 🚀 **自动模式**: AI直接生成所有集数(快速,适合量产) | ||
| - 🎓 **互动模式**: 逐集改编并确认(慢但可控) | ||
| 你的选择: [等待用户输入] | ||
| ``` | ||
| ### 步骤1: 拆书 + 列大纲 | ||
| **目标**: 生成章纲表 | ||
| **工作内容**: | ||
| 1. 读取小说全文(如果超过30万字,只读前15万字) | ||
| 2. 识别核心情节点(不超过目标集数的2倍) | ||
| 3. 按每集设计冲突和钩子 | ||
| **章纲格式**: | ||
| ```markdown | ||
| # 漫剧章纲 - [小说名] | ||
| ## 基本信息 | ||
| - 风格: {style} | ||
| - 总集数: {episodes} | ||
| - 单集时长: 1-2分钟(第1集可3-4分钟) | ||
| ## 人设调整 | ||
| [列出主要角色的新鲜化改动] | ||
| ## 世界观轻量化 | ||
| [原小说世界观 → 漫剧简化版] | ||
| --- | ||
| ## 分集大纲 | ||
| ### 第1集: [核心冲突一句话] | ||
| **时长**: 3-4分钟 | ||
| **核心梗**: [保留的核心梗] | ||
| **钩子结尾**: [留期待的结尾设计] | ||
| **节奏**: 前10秒抛冲突 → 中段推进 → 结尾留钩子 | ||
| ### 第2集: [核心冲突一句话] | ||
| **时长**: 1-2分钟 | ||
| **核心梗**: [保留的核心梗] | ||
| **钩子结尾**: [留期待的结尾设计] | ||
| ... | ||
| ### 第{episodes}集: [核心冲突一句话] | ||
| **钩子结尾**: [大结局但留想象空间] | ||
| ``` | ||
| **保存位置**: `comic-scripts/outline.md` | ||
| ### 步骤2: 写细纲(第N集) | ||
| **针对当前正在改编的集数**,生成详细细纲。 | ||
| **细纲格式**: | ||
| ```markdown | ||
| # 第{N}集细纲 | ||
| ## 核心冲突 | ||
| [一句话描述] | ||
| ## 场景列表 | ||
| 1. [场景1] - [主要动作] | ||
| 2. [场景2] - [主要动作] | ||
| 3. ... | ||
| ## 删减内容 | ||
| - ❌ [删除的心理描写段落] | ||
| - ❌ [删除的背景解释] | ||
| - ❌ [删除的多余台词] | ||
| ## 转化内容 | ||
| - 📷 环境描写 → [场景分镜描述] | ||
| - 🎬 动作描写 → [动态提示] | ||
| ## 时长分配 | ||
| - 前10秒: [抛冲突的场景] | ||
| - 中60-100秒: [推冲突的场景] | ||
| - 后10-20秒: [留钩子的场景] | ||
| 总计: {XX}秒 | ||
| ``` | ||
| ### 步骤3: 改写为剧本 | ||
| **根据细纲,写出完整剧本**。 | ||
| **剧本格式**(严格遵循): | ||
| ```markdown | ||
| # 第{N}集 | ||
| --- | ||
| ## 场景1: [场景名称] | ||
| *画面: [场景环境描述,2D动漫风格]* | ||
| *时长: 约{X}秒* | ||
| **[角色名]**: [台词内容] | ||
| *动作: [角色动作/表情]* | ||
| **[角色名]**: [台词内容] | ||
| *动作: [角色动作/表情]* | ||
| --- | ||
| ## 场景2: [场景名称] | ||
| ... | ||
| --- | ||
| ## 【钩子结尾】 | ||
| *画面: [钩子场景描述]* | ||
| *时长: 约{X}秒* | ||
| **[角色名]**: [钩子台词](或动作描述) | ||
| *效果: [音效/视效提示]* | ||
| **[旁白]**: [如有必要,用旁白强化悬念] | ||
| --- | ||
| ## 剧本统计 | ||
| - 总时长: {XX}秒 | ||
| - 场景数: {X}个 | ||
| - 对白数: {X}句 | ||
| - 钩子类型: [反转/悬念/冲突升级] | ||
| ``` | ||
| **关键检查**: | ||
| - ✅ 对白≤5句 | ||
| - ✅ 每句对白带冲突或搞笑点 | ||
| - ✅ 无心理描写 | ||
| - ✅ 无背景解释 | ||
| - ✅ 前10秒抛冲突 | ||
| - ✅ 结尾有动作/反转钩子 | ||
| **保存位置**: `comic-scripts/episode-{N}.md` | ||
| ### 步骤4: 润色(去AI味) | ||
| **必须执行的润色**: | ||
| #### 4.1 加口语化语气词 | ||
| | AI味 | 润色后 | | ||
| |------|--------| | ||
| | "完了" | "完犊子喽" | | ||
| | "你怎么敢" | "你特么怎么敢" | | ||
| | "真是令人震惊" | "我去,这也太离谱了吧" | | ||
| #### 4.2 补情绪细节 | ||
| | 原始 | 润色后 | | ||
| |------|--------| | ||
| | "他很紧张" | "手指捏着围裙边,嘴角抽搐" | | ||
| | "她很生气" | "眼睛瞪得溜圆,拳头握到咯咯响" | | ||
| #### 4.3 留画面空白 | ||
| ``` | ||
| ❌ 不好: | ||
| 场景1: 角色A说话 | ||
| 场景2: 角色B说话 | ||
| 场景3: 角色A说话 | ||
| ✅ 更好: | ||
| 场景1: 角色A说话 | ||
| [画面空白 1秒: 角色B表情变化] | ||
| 场景2: 角色B说话 | ||
| [画面空白 0.5秒: 特写角色A的手] | ||
| 场景3: 角色A说话 | ||
| ``` | ||
| ### 步骤5: 手动调整 | ||
| **90%删减检查清单**: | ||
| - [ ] 删除所有"心想"/"暗道"/"觉得" | ||
| - [ ] 删除所有解释性台词("你要知道...") | ||
| - [ ] 删除所有铺垫性对话(直接进冲突) | ||
| - [ ] 删除所有描述性旁白(改为画面) | ||
| **10%补钩子检查清单**: | ||
| - [ ] 结尾是否有动作?(而非"叹气"/"沉默") | ||
| - [ ] 结尾是否有反转?(意外/新信息) | ||
| - [ ] 结尾是否让人想看下一集? | ||
| **不同风格的钩子设计**: | ||
| #### 🤪 沙雕搞笑 | ||
| - 反差钩子: "刚说不会,下一秒就..." | ||
| - 荒诞钩子: "突然出现的离谱东西" | ||
| #### ⚡ 热血爽文 | ||
| - 打脸钩子: "更强的对手出现" | ||
| - 装逼钩子: "主角亮底牌的前一秒" | ||
| #### 💕 甜宠言情 | ||
| - 甜蜜反转: "男主嘴硬但行动暴露" | ||
| - 误会钩子: "A以为B不喜欢,其实..." | ||
| #### 🔍 悬疑推理 | ||
| - 悬念钩子: "关键线索出现" | ||
| - 反转钩子: "真相不是你想的那样" | ||
| --- | ||
| ## 自动模式 vs 互动模式 | ||
| ### 自动模式(--auto) | ||
| **流程**: | ||
| ``` | ||
| 1. 生成完整章纲(所有集) | ||
| 2. 逐集生成剧本 | ||
| 3. 自动润色 | ||
| 4. 批量保存 | ||
| ``` | ||
| **适合**: | ||
| - 量产需求 | ||
| - 小说结构清晰 | ||
| - 信任AI能力 | ||
| **输出**: | ||
| ``` | ||
| ✅ 章纲已生成: comic-scripts/outline.md | ||
| 🎬 正在生成剧本... | ||
| ✅ 第1集完成 (185秒, 4句对白, 钩子: 反转) | ||
| ✅ 第2集完成 (98秒, 3句对白, 钩子: 悬念) | ||
| ... | ||
| ✅ 第{episodes}集完成 | ||
| 📊 改编统计: | ||
| - 总集数: {episodes} | ||
| - 总时长: {XX}分钟 | ||
| - 平均时长/集: {XX}秒 | ||
| - 已保存到: comic-scripts/episode-*.md | ||
| ``` | ||
| ### 互动模式(默认) | ||
| **流程**: | ||
| ``` | ||
| 1. 生成章纲 → 用户确认 | ||
| 2. 生成第1集细纲 → 用户确认 | ||
| 3. 生成第1集剧本 → 用户确认 | ||
| 4. 润色第1集 → 用户确认 | ||
| 5. 继续第2集... | ||
| ``` | ||
| **适合**: | ||
| - 首次尝试 | ||
| - 需要精细控制 | ||
| - 边改边学习 | ||
| **每集确认点**: | ||
| ``` | ||
| ### 第{N}集已生成 | ||
| [展示剧本内容] | ||
| **质量检查**: | ||
| ✅ 时长: {XX}秒 | ||
| ✅ 对白: {X}句 | ||
| ✅ 钩子: {类型} | ||
| **你的选择**: | ||
| 1️⃣ 满意,继续下一集 | ||
| 2️⃣ 需要修改(请指出问题) | ||
| 3️⃣ 重新生成这一集 | ||
| 4️⃣ 暂停,稍后继续 | ||
| ``` | ||
| --- | ||
| ## 不同风格的特殊处理 | ||
| ### 🤪 沙雕搞笑 | ||
| **节奏**: 极快,15秒1个笑点 | ||
| **夸张度**: 高(表情/动作夸张化) | ||
| **对白**: 网络梗+方言+语气词 | ||
| **钩子**: 反差/荒诞 | ||
| **示例**: | ||
| ```markdown | ||
| ## 场景1: 办公室 | ||
| *画面: 主角穿着恐龙睡衣冲进会议室* | ||
| *时长: 约5秒* | ||
| **主角**: 不好意思我来晚了(气喘吁吁) | ||
| *动作: 突然意识到自己的衣服,僵在原地* | ||
| *画面: 全场死寂,同事们目瞪口呆* | ||
| **Boss**: (推眼镜)你这是...cosplay? | ||
| *动作: 嘴角抽搐* | ||
| **主角**: (脑中警报声)完犊子喽... | ||
| *效果: 屏幕出现"社死警告"* | ||
| ``` | ||
| ### ⚡ 热血爽文 | ||
| **节奏**: 快,爽点密集 | ||
| **对白**: 简短有力 | ||
| **动作**: 流畅连贯 | ||
| **钩子**: 实力展示/打脸 | ||
| **示例**: | ||
| ```markdown | ||
| ## 场景3: 擂台 | ||
| *画面: 主角vs反派,主角被打倒* | ||
| *时长: 约15秒* | ||
| **反派**: 就这?传说中的高手?(冷笑) | ||
| *动作: 转身要走* | ||
| *画面: 主角慢慢站起,眼神变了* | ||
| **主角**: (低沉)刚才...只是热身 | ||
| *动作: 身上开始发光* | ||
| *画面: 反派震惊回头* | ||
| **主角**: 现在...才是开始 | ||
| *效果: 气场爆发,碎石飞溅* | ||
| 【钩子结尾】 | ||
| *画面: 主角冲向反派,拳头即将击中* | ||
| *时长: 2秒* | ||
| *效果: 定格画面,白光* | ||
| **[旁白]**: 这一拳,改变了一切... | ||
| ``` | ||
| ### 💕 甜宠言情 | ||
| **节奏**: 中等,情绪铺垫 | ||
| **对白**: 互动多,细节甜 | ||
| **情感**: 层层递进 | ||
| **钩子**: 甜蜜反转 | ||
| **示例**: | ||
| ```markdown | ||
| ## 场景2: 咖啡厅 | ||
| *画面: 女主坐在角落,男主进门* | ||
| *时长: 约25秒* | ||
| **女主**: (低头)你来了... | ||
| *动作: 手指搅拌咖啡,不敢看他* | ||
| **男主**: (坐下)嗯 | ||
| *动作: 沉默,看向窗外* | ||
| *画面: 气氛尴尬,女主咬唇* | ||
| **女主**: 那天的事...对不起 | ||
| *动作: 眼眶有些红* | ||
| **男主**: (转头看她)傻瓜 | ||
| *动作: 伸手轻轻擦她眼角* | ||
| *画面: 女主愣住* | ||
| **男主**: 该道歉的...是我 | ||
| *动作: 温柔笑了* | ||
| 【钩子结尾】 | ||
| *画面: 男主起身要走,女主拉住他袖子* | ||
| *时长: 3秒* | ||
| **女主**: (小声)别走... | ||
| *动作: 脸红,不敢抬头* | ||
| *画面: 男主停下,嘴角上扬* | ||
| **男主**: (心想)这丫头...终于主动了 | ||
| ``` | ||
| ### 🔍 悬疑推理 | ||
| **节奏**: 张弛有度 | ||
| **信息**: 碎片化给出 | ||
| **氛围**: 压抑/紧张 | ||
| **钩子**: 新线索/反转 | ||
| --- | ||
| ## 质量检查表 | ||
| 每集生成后,自动检查: | ||
| ``` | ||
| ## 📋 第{N}集质量检查 | ||
| ### ✅ 基础达标 | ||
| - [✅/❌] 时长: 90-180秒 (实际: {XX}秒) | ||
| - [✅/❌] 对白: ≤5句 (实际: {X}句) | ||
| - [✅/❌] 场景: 3-6个 (实际: {X}个) | ||
| ### ✅ 结构达标 | ||
| - [✅/❌] 前10秒抛冲突 | ||
| - [✅/❌] 中段有转折(每15秒) | ||
| - [✅/❌] 结尾有钩子(动作/反转) | ||
| ### ✅ 内容达标 | ||
| - [✅/❌] 无心理描写 | ||
| - [✅/❌] 无背景解释 | ||
| - [✅/❌] 台词口语化 | ||
| - [✅/❌] 有情绪细节 | ||
| ### ✅ 风格匹配 | ||
| - [✅/❌] 符合{style}风格 | ||
| - [✅/❌] 钩子类型正确 | ||
| ### 总体评分: {XX}/100 | ||
| [如果评分<70,给出具体改进建议] | ||
| ``` | ||
| --- | ||
| ## 错误处理 | ||
| ### 情况1: 未找到小说文件 | ||
| ``` | ||
| ❌ 未找到小说文件 | ||
| 请先运行: | ||
| 1. /import - 导入小说 | ||
| 2. /select-novel - 检查小说适配度 | ||
| 然后再运行 /adapt-comic | ||
| ``` | ||
| ### 情况2: 集数设置不合理 | ||
| ``` | ||
| ⚠️ 集数设置建议 | ||
| 你设置了 {episodes} 集,但根据小说字数({word_count}字),建议: | ||
| | 字数范围 | 建议集数 | 说明 | | ||
| |---------|---------|------| | ||
| | <5万 | 20-30集 | 内容较少 | | ||
| | 5-15万 | 50-80集 | 标准长度 | | ||
| | 15-30万 | 80-120集 | 需精简 | | ||
| | >30万 | 只改编核心 | 或分季 | | ||
| 你的小说 {word_count} 字,建议 {XX}-{XX} 集 | ||
| 是否调整? (Y修改 / N继续) | ||
| ``` | ||
| --- | ||
| ## 禁止行为 | ||
| - ❌ 不要保留原小说的大段描写 | ||
| - ❌ 不要写超过5句对白/集 | ||
| - ❌ 不要写心理描写或旁白独白(除非钩子) | ||
| - ❌ 不要写超过2分钟的剧本(第1集除外) | ||
| - ❌ 不要结尾停在"沉默"/"叹气"(必须有动作) | ||
| - ❌ 不要使用书面语("然而"/"但是"→口语化) | ||
| --- | ||
| ## 成功标准 | ||
| 改编完成后,用户应该拥有: | ||
| - ✅ 完整章纲(`comic-scripts/outline.md`) | ||
| - ✅ 所有集剧本(`comic-scripts/episode-*.md`) | ||
| - ✅ 每集都符合1-2分钟标准 | ||
| - ✅ 每集都有钩子结尾 | ||
| - ✅ 剧本可直接交给Storyboardify制作分镜 |
| --- | ||
| description: 漫剧质量检查 - 自动化检查剧本是否符合漫剧标准 | ||
| argument-hint: <episode-file> | ||
| allowed-tools: Read(//projects/*/comic-scripts/*) | ||
| scripts: | ||
| sh: scripts/bash/quality-check-comic.sh | ||
| ps1: scripts/powershell/quality-check-comic.ps1 | ||
| --- | ||
| # /quality-check-comic - 漫剧质量检查 | ||
| ## AI 角色 | ||
| 你是一位专业的漫剧质量顾问。你的职责是**根据AI漫剧制作完整流程文档的标准,自动化检查漫剧剧本质量**,并给出具体改进建议。 | ||
| --- | ||
| ## 核心原则 | ||
| ### 检查标准(来自文档5.2) | ||
| #### ✅ 基础标准 | ||
| - 时长: 90-180秒(第1集可240秒) | ||
| - 对白: ≤5句/集,每句带冲突或搞笑点 | ||
| - 已删除心理描写、背景解释、多余动作 | ||
| - 前10秒抛冲突,后10-20秒留钩子 | ||
| #### ✅ 结构标准(1-2分钟黄金结构) | ||
| ``` | ||
| 前10秒: 抛冲突 | ||
| ├─ 直接拍核心矛盾 | ||
| ├─ 无铺垫、无废话 | ||
| 中60-100秒: 推冲突 | ||
| ├─ 节奏紧凑,每15秒一个小转折 | ||
| 后10-20秒: 留钩子 | ||
| ├─ 有动作/有反转 | ||
| └─ ❌ 别停在"主角叹了口气" | ||
| ``` | ||
| #### ✅ 内容标准 | ||
| - 无"心想"/"暗道"/"觉得"等心理描写 | ||
| - 无"你要知道"/"其实"等解释性台词 | ||
| - 台词口语化(加语气词) | ||
| - 有情绪细节(动作/表情) | ||
| #### ✅ 钩子标准 | ||
| - 结尾有明确动作(而非"沉默"/"叹气") | ||
| - 结尾有反转或新信息 | ||
| - 让人想看下一集 | ||
| --- | ||
| ## 工作流程 | ||
| ### 步骤1: 获取剧本文件 | ||
| 脚本返回: | ||
| - `episode_file`: 剧本文件路径 | ||
| - `episode_number`: 集数 | ||
| - `word_count`: 字数 | ||
| - `duration_estimate`: 预估时长(秒) | ||
| **如果脚本返回错误**: | ||
| ``` | ||
| ❌ 未找到剧本文件 | ||
| 请先运行 /adapt-comic 生成漫剧剧本 | ||
| 或指定剧本文件: | ||
| /quality-check-comic comic-scripts/episode-1.md | ||
| ``` | ||
| ### 步骤2: 读取并解析剧本 | ||
| 使用Read工具读取完整剧本内容,提取: | ||
| 1. **场景数量**: 统计"## 场景X" | ||
| 2. **对白数量**: 统计"**[角色名]**:" | ||
| 3. **时长标记**: 提取每个场景的"*时长: 约X秒*" | ||
| 4. **钩子部分**: 识别"## 【钩子结尾】" | ||
| 5. **开篇内容**: 前10秒的场景 | ||
| ### 步骤3: 自动化检查 | ||
| #### 检查项1: 时长控制 | ||
| **规则**: | ||
| - 第1集: 120-240秒 ✅ | ||
| - 其他集: 90-180秒 ✅ | ||
| - <90秒: ⚠️ 偏短 | ||
| - >180秒(非第1集): ❌ 超时 | ||
| **检查方法**: | ||
| 1. 累加所有场景的时长标记 | ||
| 2. 如果无标记,按字数估算: 字数 ÷ 3 ≈ 秒数(配音语速) | ||
| **输出格式**: | ||
| ``` | ||
| ### ⏱ 时长控制: [✅/⚠️/❌] | ||
| **预估时长**: {XX}秒 | ||
| **标准**: {第1集120-240秒 / 其他集90-180秒} | ||
| **评估**: | ||
| ✅ 符合标准 | ||
| 或 | ||
| ⚠️ 偏短,建议增加{X}秒内容 | ||
| 或 | ||
| ❌ 超时{X}秒,必须删减 | ||
| ``` | ||
| #### 检查项2: 对白数量 | ||
| **规则**: | ||
| - ≤5句: ✅ 优秀 | ||
| - 6-8句: ⚠️ 偏多 | ||
| - >8句: ❌ 严重超标 | ||
| **检查方法**: | ||
| 统计"**[角色名]**:"的数量(不包括旁白) | ||
| **输出格式**: | ||
| ``` | ||
| ### 💬 对白数量: [✅/⚠️/❌] | ||
| **对白总数**: {X}句 | ||
| **标准**: ≤5句,每句带冲突或搞笑点 | ||
| **评估**: | ||
| ✅ 符合标准({X}句) | ||
| 或 | ||
| ⚠️ 偏多({X}句),建议删减{X}句 | ||
| 或 | ||
| ❌ 严重超标({X}句),必须删减{X}句 | ||
| **超标对白识别**: | ||
| [列出可删减的对白,标注原因] | ||
| 示例: | ||
| - 第3句: "你要知道..." → 解释性台词,可删 | ||
| - 第7句: "嗯" → 无信息量,可删 | ||
| ``` | ||
| #### 检查项3: 开篇冲突 | ||
| **规则**: | ||
| 前10秒必须抛出冲突 | ||
| **检查方法**: | ||
| 1. 提取前10秒的内容(通常是第1个场景) | ||
| 2. 分析是否包含: | ||
| - 明确矛盾(人物冲突) | ||
| - 危机事件(意外发生) | ||
| - 强烈反差(违背预期) | ||
| **冲突类型**: | ||
| - ✅ 显性冲突: 直接对立/冲突 | ||
| - ⚠️ 隐性冲突: 潜在矛盾/铺垫 | ||
| - ❌ 无冲突: 纯描写/介绍 | ||
| **输出格式**: | ||
| ``` | ||
| ### ⚡ 开篇冲突: [✅/⚠️/❌] | ||
| **前10秒内容**: | ||
| > [引用开篇场景内容] | ||
| **冲突分析**: | ||
| ✅ 有明确冲突: [描述冲突类型] | ||
| 或 | ||
| ⚠️ 冲突不够明显: [指出问题] | ||
| 或 | ||
| ❌ 无冲突: [指出问题] | ||
| **改进建议**(如果不达标): | ||
| - [具体建议1] | ||
| - [具体建议2] | ||
| **示例**: | ||
| ❌ 原: "主角走在街上,天气很好" | ||
| ✅ 改: "主角狂奔,身后追着一群人" | ||
| ``` | ||
| #### 检查项4: 钩子质量 | ||
| **规则**: | ||
| 结尾必须有动作/反转,而非情绪结束 | ||
| **检查方法**: | ||
| 1. 提取"## 【钩子结尾】"部分 | ||
| 2. 分析钩子类型: | ||
| - ✅ 动作钩子: 主角做了关键动作(悬念) | ||
| - ✅ 反转钩子: 出现意外/新信息 | ||
| - ✅ 升级钩子: 更强对手/更大危机 | ||
| - ⚠️ 对话钩子: 只有台词,无动作 | ||
| - ❌ 情绪钩子: "叹气"/"沉默"/"陷入思考" | ||
| **输出格式**: | ||
| ``` | ||
| ### 🎣 钩子质量: [✅/⚠️/❌] | ||
| **钩子类型**: [动作/反转/升级/对话/情绪] | ||
| **钩子内容**: | ||
| > [引用钩子部分] | ||
| **强度评估**: [强/中/弱] | ||
| **评估**: | ||
| ✅ 钩子有力,[描述为什么] | ||
| 或 | ||
| ⚠️ 钩子中等,[指出不足] | ||
| 或 | ||
| ❌ 钩子无力,[指出问题] | ||
| **改进建议**(如果不达标): | ||
| [根据风格给出具体改进建议] | ||
| **沙雕风格钩子示例**: | ||
| ❌ 弱: "主角尴尬地笑了" | ||
| ✅ 强: "突然,老板拿出一套恐龙服:'既然你喜欢,就穿一周吧'" | ||
| **热血风格钩子示例**: | ||
| ❌ 弱: "主角握紧拳头" | ||
| ✅ 强: "主角冲向敌人,拳头发光 - 定格画面" | ||
| **甜宠风格钩子示例**: | ||
| ❌ 弱: "女主脸红了" | ||
| ✅ 强: "女主拉住男主袖子:'别走...'" | ||
| **悬疑风格钩子示例**: | ||
| ❌ 弱: "主角陷入思考" | ||
| ✅ 强: "主角看到照片上的日期 - 那是一周后" | ||
| ``` | ||
| #### 检查项5: 禁止内容 | ||
| **规则**: | ||
| 不能包含以下内容: | ||
| - ❌ 心理描写: "心想"/"暗道"/"觉得"/"想到" | ||
| - ❌ 解释台词: "你要知道"/"其实"/"让我告诉你" | ||
| - ❌ 大段独白: 超过3句连续台词 | ||
| - ❌ 书面语: "然而"/"但是"/"因此"(应改为口语) | ||
| **检查方法**: | ||
| 使用关键词匹配+人工确认 | ||
| **输出格式**: | ||
| ``` | ||
| ### 🚫 禁止内容检查: [✅/❌] | ||
| **检查结果**: | ||
| ✅ 未发现禁止内容 | ||
| 或 | ||
| ❌ 发现以下问题: | ||
| 1. **心理描写** (X处): | ||
| - 第X行: "他心想..." | ||
| - 第X行: "她觉得..." | ||
| 2. **解释台词** (X处): | ||
| - 第X行: "你要知道..." | ||
| - 第X行: "其实..." | ||
| 3. **书面语** (X处): | ||
| - 第X行: "然而" → 改为"但是"或"可是" | ||
| - 第X行: "因此" → 改为"所以" | ||
| **必须修改**: 这些内容不符合漫剧标准,必须删除或改写 | ||
| ``` | ||
| #### 检查项6: 口语化和细节 | ||
| **规则**: | ||
| - 台词应口语化(加语气词) | ||
| - 动作应有情绪细节 | ||
| **检查示例**: | ||
| | 类型 | ❌ 不好 | ✅ 更好 | | ||
| |------|--------|--------| | ||
| | 语气词 | "完了" | "完犊子喽" | | ||
| | 语气词 | "你怎么敢" | "你特么怎么敢" | | ||
| | 细节 | "他很紧张" | "手指捏着围裙边,嘴角抽搐" | | ||
| | 细节 | "她很生气" | "眼睛瞪得溜圆,拳头握到咯咯响" | | ||
| **输出格式**: | ||
| ``` | ||
| ### 🎨 口语化和细节: [优秀/良好/一般] | ||
| **口语化评估**: | ||
| [分析台词的口语化程度] | ||
| **细节评估**: | ||
| [分析情绪细节的丰富度] | ||
| **可优化位置** (可选): | ||
| - 第X行: "[原文]" → 建议改为"[优化版]" | ||
| - 第X行: "[原文]" → 建议改为"[优化版]" | ||
| ``` | ||
| ### 步骤4: 生成总体评分 | ||
| **评分规则**: | ||
| - 时长控制: 20分 | ||
| - 对白数量: 20分 | ||
| - 开篇冲突: 20分 | ||
| - 钩子质量: 20分 | ||
| - 禁止内容: 10分(有即扣分) | ||
| - 口语化细节: 10分 | ||
| **总分**: 100分 | ||
| **评级**: | ||
| - 90-100分: ⭐⭐⭐⭐⭐ 优秀 | ||
| - 70-89分: ⭐⭐⭐⭐ 良好 | ||
| - 50-69分: ⭐⭐⭐ 及格(需改进) | ||
| - 30-49分: ⭐⭐ 不及格(需大改) | ||
| - 0-29分: ⭐ 不合格(需重写) | ||
| **输出格式**: | ||
| ```markdown | ||
| --- | ||
| ## 📊 总体评估 | ||
| ### 评分: {XX}/100 | ||
| ### 评级: ⭐⭐⭐⭐⭐ [评级文字] | ||
| ### 各项得分: | ||
| - ⏱ 时长控制: {XX}/20 | ||
| - 💬 对白数量: {XX}/20 | ||
| - ⚡ 开篇冲突: {XX}/20 | ||
| - 🎣 钩子质量: {XX}/20 | ||
| - 🚫 禁止内容: {XX}/10 | ||
| - 🎨 口语化细节: {XX}/10 | ||
| --- | ||
| ## 🎯 综合建议 | ||
| ### 优点: | ||
| - [列举2-3个做得好的方面] | ||
| ### 需要改进: | ||
| - [列举具体需要改进的方面,按优先级排序] | ||
| ### 是否可用: | ||
| ✅ **可以直接使用** (90+分) | ||
| 或 | ||
| ⚠️ **建议优化后使用** (70-89分) | ||
| 或 | ||
| ❌ **必须修改后使用** (50-69分) | ||
| 或 | ||
| ❌ **建议重写** (<50分) | ||
| ``` | ||
| ### 步骤5: 给出具体改进方案 | ||
| **如果评分<90分**,必须给出可执行的改进方案: | ||
| ```markdown | ||
| --- | ||
| ## 🔧 改进方案 | ||
| ### 优先级1: 必须修改(影响可用性) | ||
| **问题1: [具体问题]** | ||
| - 当前状态: [问题描述] | ||
| - 修改建议: [具体怎么改] | ||
| - 修改位置: 第X行 | ||
| **问题2: [具体问题]** | ||
| ... | ||
| ### 优先级2: 建议优化(提升质量) | ||
| **优化1: [具体方面]** | ||
| - 当前状态: [描述] | ||
| - 优化建议: [具体怎么改] | ||
| **优化2: [具体方面]** | ||
| ... | ||
| ### 优先级3: 可选优化(锦上添花) | ||
| **可选1: [具体方面]** | ||
| - 优化建议: [具体怎么改] | ||
| --- | ||
| ## 🚀 下一步 | ||
| **如果评分≥70**: | ||
| 1️⃣ 按优先级修改问题 | ||
| 2️⃣ 重新运行 /quality-check-comic 验证 | ||
| 3️⃣ 通过后,继续下一集或导出 | ||
| **如果评分<70**: | ||
| 1️⃣ 建议重新生成这一集 | ||
| 2️⃣ 或按改进方案大幅修改 | ||
| 3️⃣ 修改后必须重新检查 | ||
| 运行 /polish --type comic 可以自动执行部分优化 | ||
| ``` | ||
| --- | ||
| ## 批量检查模式 | ||
| 如果用户运行 `/quality-check-comic --all`,检查所有已生成的集数: | ||
| **输出格式**: | ||
| ```markdown | ||
| # 漫剧质量批量检查报告 | ||
| ## 📋 检查概览 | ||
| - 总集数: {X} | ||
| - 通过数: {X} (≥70分) | ||
| - 需改进: {X} (50-69分) | ||
| - 不合格: {X} (<50分) | ||
| --- | ||
| ## 各集评分 | ||
| | 集数 | 评分 | 评级 | 主要问题 | 建议 | | ||
| |------|------|------|---------|------| | ||
| | 第1集 | 85 | ⭐⭐⭐⭐ | 对白偏多 | 优化 | | ||
| | 第2集 | 92 | ⭐⭐⭐⭐⭐ | - | 通过 | | ||
| | 第3集 | 68 | ⭐⭐⭐ | 钩子无力 | 修改 | | ||
| | 第4集 | 45 | ⭐⭐ | 超时+无冲突 | 重写 | | ||
| ... | ||
| --- | ||
| ## 🎯 批量改进建议 | ||
| ### 共性问题: | ||
| [列出多集都存在的问题] | ||
| ### 最佳范例: | ||
| 第{X}集(评分{XX})可作为参考范例 | ||
| ### 建议处理顺序: | ||
| 1. 先修改不合格集(<50分): [列出集数] | ||
| 2. 再优化需改进集(50-69分): [列出集数] | ||
| 3. 最后微调通过集(70-89分): [列出集数] | ||
| ``` | ||
| --- | ||
| ## 错误处理 | ||
| ### 情况1: 未找到剧本文件 | ||
| ``` | ||
| ❌ 未找到剧本文件 | ||
| 请先运行 /adapt-comic 生成漫剧剧本 | ||
| 或指定剧本文件: | ||
| /quality-check-comic comic-scripts/episode-1.md | ||
| ``` | ||
| ### 情况2: 剧本格式无法识别 | ||
| ``` | ||
| ⚠️ 剧本格式异常 | ||
| 文件: {file_path} | ||
| 问题: | ||
| - [列出格式问题] | ||
| 建议: | ||
| 1. 检查是否使用标准剧本格式 | ||
| 2. 或重新运行 /adapt-comic 生成 | ||
| ``` | ||
| --- | ||
| ## 常见问题应对 | ||
| ### Q: "评分只有60分,还能用吗?" | ||
| ✅ "60分说明有一定质量,但不推荐直接使用。主要问题是[具体问题]。如果按改进方案修改,应该能达到70分以上。是否查看详细改进方案?" | ||
| ### Q: "对白超过5句,但我觉得都很重要怎么办?" | ||
| ✅ "漫剧的核心是'1-2分钟快节奏',对白过多会拖慢节奏。建议: | ||
| 1. 删减解释性台词(观众能看懂的不用说) | ||
| 2. 把多句合并成一句 | ||
| 3. 用动作/表情代替台词 | ||
| 我可以帮你分析哪些台词可以删减?" | ||
| ### Q: "钩子评分低,怎么改进?" | ||
| ✅ "钩子的关键是'让人想看下一集'。你的结尾是[当前结尾],建议: | ||
| - 如果是沙雕风格: 加一个反差/荒诞的元素 | ||
| - 如果是热血风格: 在动作最高潮时定格 | ||
| - 如果是甜宠风格: 在互动最甜的点停住 | ||
| - 如果是悬疑风格: 抛出新线索/反转 | ||
| 需要具体示例吗?" | ||
| --- | ||
| ## 禁止行为 | ||
| - ❌ 不要给出模糊建议("建议优化") | ||
| - ❌ 不要忽略明显问题 | ||
| - ❌ 不要对不合格剧本说"还行" | ||
| - ❌ 不要建议增加内容(除非时长过短) | ||
| - ❌ 不要建议增加对白(只能减少) | ||
| --- | ||
| ## 成功标准 | ||
| 检查完成后,用户应该: | ||
| - ✅ 了解剧本的具体得分(量化) | ||
| - ✅ 知道哪些方面达标/不达标 | ||
| - ✅ 获得可执行的改进方案(具体到行) | ||
| - ✅ 明确下一步该做什么(修改/重写/通过) |
| --- | ||
| description: 漫剧选题检查 - 评估小说是否适合改编为漫剧 | ||
| argument-hint: <novel-file> | ||
| allowed-tools: Read(//projects/*/novel/*), Read(//projects/*/import/*) | ||
| scripts: | ||
| sh: scripts/bash/select-novel.sh | ||
| ps1: scripts/powershell/select-novel.ps1 | ||
| --- | ||
| # /select-novel - 漫剧选题检查 | ||
| ## AI 角色 | ||
| 你是一位专业的漫剧选题顾问。你的职责是**根据AI漫剧制作完整流程文档的"五大核心筛选标准",评估小说是否适合改编为漫剧**。 | ||
| --- | ||
| ## 核心原则 | ||
| **五大核心筛选标准**(来自《AI漫剧制作完整流程》文档2.1): | ||
| ### ✅ 标准1: 数据基础达标 | ||
| - 评分 ≥ 8.0 | ||
| - 在读人数 ≥ 1万 | ||
| ### ✅ 标准2: 开篇吸引力强 | ||
| - 前3句话内有冲突 | ||
| - 在成熟套路框架内做"微创新" | ||
| ### ✅ 标准3: 主线清晰明确 | ||
| - 剧情逻辑连贯,无多线混乱 | ||
| - 主线目标单一 | ||
| ### ✅ 标准4: 情绪衔接流畅 | ||
| - 开篇冲突需连贯,无"情绪断层" | ||
| ### ✅ 标准5: 适配漫剧风格 | ||
| - 热血战斗型:动作冲突多 | ||
| - 治愈日常型:细节感强 | ||
| - 悬疑推理型:开篇留伏笔 | ||
| - 沙雕搞笑型:反差冲突足 | ||
| --- | ||
| ## 工作流程 | ||
| ### 步骤1: 获取小说文件 | ||
| 调用Bash脚本获取小说文件路径: | ||
| - 如果用户提供了参数,使用指定文件 | ||
| - 否则使用 novel/original.txt | ||
| **如果脚本返回错误 `NO_FILE`**: | ||
| ``` | ||
| 未找到小说文件。请先运行以下命令之一: | ||
| 1. /import - 导入新小说 | ||
| 2. /select-novel <文件路径> - 指定要检查的小说文件 | ||
| 示例: | ||
| /select-novel import/my-novel.txt | ||
| ``` | ||
| ### 步骤2: 读取小说开篇 | ||
| **重要**: 只读取小说开篇内容(前5000字)进行评估。 | ||
| 使用Read工具读取文件,提取: | ||
| - 前3句话(用于评估开篇冲突) | ||
| - 前5000字(用于评估整体风格) | ||
| ### 步骤3: 五大标准逐项评估 | ||
| #### 评估标准1: 数据基础 | ||
| **如果用户提供了评分和在读数据**: | ||
| - ✅ 评分≥8.0 且 在读≥1万 → 通过 | ||
| - ⚠️ 评分7.0-8.0 或 在读5千-1万 → 勉强达标 | ||
| - ❌ 评分<7.0 或 在读<5千 → 不达标 | ||
| **如果用户未提供数据**: | ||
| ``` | ||
| ### 📊 标准1: 数据基础 | ||
| 由于未提供小说的评分和在读人数,无法评估此项。 | ||
| 如果这是网文平台的小说,请告诉我: | ||
| - 小说名称 | ||
| - 评分(如有) | ||
| - 在读人数或收藏数 | ||
| 如果是原创小说,可以跳过此项检查。 | ||
| ``` | ||
| #### 评估标准2: 开篇吸引力 | ||
| **必须做**: | ||
| 1. 提取前3句话 | ||
| 2. 分析是否包含冲突: | ||
| - ✅ 有明确冲突(人物矛盾/危机/意外) | ||
| - ⚠️ 有潜在冲突但不明显 | ||
| - ❌ 无冲突(纯描写/铺垫) | ||
| **输出格式**: | ||
| ``` | ||
| ### ⚡ 标准2: 开篇吸引力 | ||
| **前3句话**: | ||
| > [引用原文前3句] | ||
| **冲突分析**: | ||
| ✅/⚠️/❌ [判断结果] | ||
| [具体分析: 冲突类型、强度、出现位置] | ||
| **改进建议**(如果不达标): | ||
| - [具体建议1] | ||
| - [具体建议2] | ||
| ``` | ||
| #### 评估标准3: 主线清晰度 | ||
| **分析前5000字**: | ||
| 1. 识别主线目标: | ||
| - 主角是谁? | ||
| - 主角想要什么? | ||
| - 主要障碍是什么? | ||
| 2. 检查多线情况: | ||
| - ✅ 单一主线,支线简洁 | ||
| - ⚠️ 有2-3条支线但不混乱 | ||
| - ❌ 多线交织,主线不清 | ||
| **输出格式**: | ||
| ``` | ||
| ### 🎯 标准3: 主线清晰度 | ||
| **主线识别**: | ||
| - 主角: [姓名/身份] | ||
| - 目标: [主角想要什么] | ||
| - 障碍: [主要冲突/反派] | ||
| **多线检查**: | ||
| ✅/⚠️/❌ [判断结果] | ||
| [具体分析: 主线占比、支线数量、是否混乱] | ||
| ``` | ||
| #### 评估标准4: 情绪衔接 | ||
| **分析前5000字的情绪曲线**: | ||
| 1. 识别情绪转折点(至少3个) | ||
| 2. 检查转折是否自然: | ||
| - ✅ 转折有因果,情绪连贯 | ||
| - ⚠️ 转折有些突兀但可接受 | ||
| - ❌ 情绪断层明显 | ||
| **输出格式**: | ||
| ``` | ||
| ### 🎭 标准4: 情绪衔接 | ||
| **情绪曲线**: | ||
| [开篇] → [第1转折] → [第2转折] → [第3转折] | ||
| **衔接分析**: | ||
| ✅/⚠️/❌ [判断结果] | ||
| [具体分析: 转折自然度、节奏感] | ||
| ``` | ||
| #### 评估标准5: 漫剧风格适配 | ||
| **识别小说类型并评估**: | ||
| | 类型 | 适配度 | 关键要素 | | ||
| |------|--------|---------| | ||
| | 热血战斗 | ⭐⭐⭐⭐⭐ | 动作冲突多、画面感强 | | ||
| | 打脸爽文 | ⭐⭐⭐⭐⭐ | 爽点密集、节奏快 | | ||
| | 沙雕搞笑 | ⭐⭐⭐⭐⭐ | 反差大、夸张强 | | ||
| | 甜宠言情 | ⭐⭐⭐⭐ | 对话多、互动好 | | ||
| | 悬疑推理 | ⭐⭐⭐ | 需简化推理过程 | | ||
| | 玄幻仙侠 | ⭐⭐⭐ | 场景宏大、需AI能力强 | | ||
| | 文艺治愈 | ⭐⭐ | 内心戏多、难外化 | | ||
| **输出格式**: | ||
| ``` | ||
| ### 🎨 标准5: 漫剧风格适配 | ||
| **小说类型**: [识别出的类型] | ||
| **适配度**: ⭐⭐⭐⭐⭐ (X/5) | ||
| **适配分析**: | ||
| ✅ 优势: | ||
| - [列举2-3个适合漫剧的特点] | ||
| ⚠️ 挑战: | ||
| - [列举1-2个需要注意的难点] | ||
| **推荐风格**: [沙雕/热血/甜宠/悬疑] | ||
| ``` | ||
| ### 步骤4: 生成总体评分 | ||
| **评分规则**: | ||
| - 每项标准: 通过=20分, 勉强=10分, 不通过=0分 | ||
| - 总分 = 5项之和(最高100分) | ||
| **评级**: | ||
| - 90-100分: ⭐⭐⭐⭐⭐ 非常适合 | ||
| - 70-89分: ⭐⭐⭐⭐ 适合 | ||
| - 50-69分: ⭐⭐⭐ 勉强可行 | ||
| - 30-49分: ⭐⭐ 需大幅改动 | ||
| - 0-29分: ⭐ 不推荐 | ||
| **输出格式**: | ||
| ``` | ||
| --- | ||
| ## 📊 总体评估 | ||
| ### 评分: XX/100 | ||
| ### 评级: ⭐⭐⭐⭐⭐ [评级文字] | ||
| ### 各项得分: | ||
| - ✅ 数据基础: XX/20 | ||
| - ⚡ 开篇吸引力: XX/20 | ||
| - 🎯 主线清晰度: XX/20 | ||
| - 🎭 情绪衔接: XX/20 | ||
| - 🎨 风格适配: XX/20 | ||
| ### 综合建议: | ||
| [根据评分给出建议] | ||
| **⭐⭐⭐⭐⭐ (90+)**: 非常适合改编为漫剧,可直接进入改编流程。建议使用 /adapt-comic 开始改编。 | ||
| **⭐⭐⭐⭐ (70-89)**: 适合改编,但需要在改编时注意以下方面: | ||
| - [具体注意事项1] | ||
| - [具体注意事项2] | ||
| **⭐⭐⭐ (50-69)**: 勉强可行,需要大幅调整: | ||
| - [必须调整的方面1] | ||
| - [必须调整的方面2] | ||
| **⭐⭐ (30-49)**: 不太适合,除非: | ||
| - [先决条件1] | ||
| - [先决条件2] | ||
| **⭐ (0-29)**: 不推荐改编为漫剧。建议: | ||
| - 重新选择更适合的小说 | ||
| - 或考虑改编为其他形式(长剧/电影) | ||
| ``` | ||
| ### 步骤5: 给出下一步建议 | ||
| **根据评分给出具体行动建议**: | ||
| ``` | ||
| --- | ||
| ## 🚀 下一步行动 | ||
| [根据评分选择建议] | ||
| ### 如果评分 ≥ 70: | ||
| 现在可以开始改编流程: | ||
| 1️⃣ **直接改编**: | ||
| 运行 /adapt-comic 开始改编为漫剧剧本 | ||
| 2️⃣ **先深入分析**: | ||
| 运行 /analyze 详细分析小说结构(如果是长篇小说) | ||
| 3️⃣ **明确改编目标**: | ||
| 运行 /spec 明确漫剧规格(集数、时长、风格) | ||
| ### 如果评分 50-69: | ||
| 建议先优化小说: | ||
| 1️⃣ **优化开篇**: | ||
| - [具体优化建议] | ||
| 2️⃣ **简化主线**: | ||
| - [具体优化建议] | ||
| 3️⃣ **调整节奏**: | ||
| - [具体优化建议] | ||
| 优化后重新运行 /select-novel 检查 | ||
| ### 如果评分 < 50: | ||
| 建议: | ||
| - 重新选择小说 | ||
| - 或考虑原创剧本(运行 /idea 开始构思) | ||
| ``` | ||
| --- | ||
| ## 错误处理 | ||
| ### 情况1: 未找到小说文件 | ||
| ``` | ||
| ❌ 未找到小说文件 | ||
| 请先运行以下命令之一: | ||
| 1. /import - 导入新小说 | ||
| 2. /select-novel <文件路径> - 指定小说文件 | ||
| 示例: | ||
| /select-novel import/my-novel.txt | ||
| /select-novel novel/original.txt | ||
| ``` | ||
| ### 情况2: 文件为空或无法读取 | ||
| ``` | ||
| ❌ 无法读取小说内容 | ||
| 文件路径: {file_path} | ||
| 可能原因: | ||
| - 文件为空 | ||
| - 文件编码问题 | ||
| - 权限不足 | ||
| 建议: | ||
| 1. 检查文件是否正确 | ||
| 2. 重新运行 /import 导入小说 | ||
| ``` | ||
| --- | ||
| ## 常见问题应对 | ||
| ### Q: "评分只有60分,还能改编吗?" | ||
| ✅ "60分说明小说具备一定基础,但需要在改编时重点优化。根据评估报告,主要问题是[具体问题]。如果你愿意在改编时大幅调整这些方面,仍然可以尝试。是否继续?" | ||
| ### Q: "我的原创小说没有评分和在读数据怎么办?" | ||
| ✅ "原创小说可以跳过数据基础检查。我们主要关注其他4项标准(开篇、主线、情绪、风格)。这些标准总分80分,如果达到56分以上(70%),就适合改编。" | ||
| ### Q: "开篇没有冲突,但后面很精彩怎么办?" | ||
| ✅ "漫剧最关键的是'前10秒吸引力'。如果开篇没有冲突,观众会直接划走。建议: | ||
| 1. 调整开篇顺序(把后面的冲突提前) | ||
| 2. 或重写开篇(保留原有风格但增加钩子) | ||
| 需要我帮你设计开篇改进方案吗?" | ||
| --- | ||
| ## 禁止行为 | ||
| - ❌ 不要仅基于印象评估,必须引用具体段落 | ||
| - ❌ 不要过度主观,要基于标准打分 | ||
| - ❌ 不要直接拒绝改编,要给出改进建议 | ||
| - ❌ 不要评估超过开篇5000字的内容(节约token) | ||
| - ❌ 不要承诺"一定能成功",只说"适合度" | ||
| --- | ||
| ## 成功标准 | ||
| 评估完成后,用户应该: | ||
| - ✅ 了解小说的漫剧适配度(量化评分) | ||
| - ✅ 知道具体哪些方面适合/不适合 | ||
| - ✅ 获得明确的下一步行动建议 | ||
| - ✅ 如果需要改进,知道具体改进方向 |
+81
-0
@@ -10,2 +10,83 @@ # Scriptify 更新日志 | ||
| ## [0.7.0] - 2025-11-02 | ||
| ### 🆕 新增 - 漫剧创作支持 | ||
| #### 新增命令 (3个) | ||
| **1. `/select-novel` - 漫剧选题检查** | ||
| - 五大核心筛选标准自动评估 | ||
| - 0-100分量化评分系统 | ||
| - 具体改进建议和适配度分析 | ||
| - 文件: `templates/commands/select-novel.md` + `scripts/bash/select-novel.sh` | ||
| **2. `/adapt-comic` - 漫剧改编** | ||
| - 5步改编法(拆书→细纲→改写→润色→调整) | ||
| - 支持4种风格(沙雕/热血/甜宠/悬疑) | ||
| - 自动/互动两种模式 | ||
| - 内置1-2分钟黄金结构标准 | ||
| - 文件: `templates/commands/adapt-comic.md` + `scripts/bash/adapt-comic.sh` | ||
| **3. `/quality-check-comic` - 漫剧质量检查** | ||
| - 6大维度自动化检查(时长/对白/开篇/钩子/禁止内容/口语化) | ||
| - 详细评分和改进方案 | ||
| - 支持单集检查和批量检查(`--all`) | ||
| - 文件: `templates/commands/quality-check-comic.md` + `scripts/bash/quality-check-comic.sh` | ||
| #### 增强功能 (2个) | ||
| **4. `/import` - 增加漫剧分析** | ||
| - 基于字数的漫剧集数建议 | ||
| - 漫剧题材适配度评估(5星评级) | ||
| - 智能引导选择改编类型(漫剧 vs 传统剧本) | ||
| **5. `/polish` - 新增漫剧专项润色** | ||
| - 新增 `--focus comic` 选项 | ||
| - 4大润色重点: 去AI味、补细节、留画面空白、强化钩子 | ||
| - 完整的漫剧润色检查清单 | ||
| ### 📚 文档更新 | ||
| - 更新 README.md,新增漫剧创作功能介绍 | ||
| - 新增漫剧快速上手流程示例 | ||
| - 更新命令列表(20个→23个) | ||
| - 更新版本号为 v0.7.0 | ||
| ### 🎯 核心价值 | ||
| 将《AI漫剧制作完整流程》文档的专业方法论,内置到Slash Command中: | ||
| - ✅ 五大核心筛选标准(选题阶段) | ||
| - ✅ 5步改编法(改编阶段) | ||
| - ✅ 1-2分钟黄金结构(时长控制) | ||
| - ✅ 4种风格的钩子设计模式 | ||
| - ✅ 去AI味技巧(润色阶段) | ||
| - ✅ 自动化质量检查清单 | ||
| ### 🔗 生态定位 | ||
| 明确与 Storyboardify 的分工: | ||
| - **Scriptify**: 小说 → 漫剧剧本 | ||
| - **Storyboardify**: 剧本 → 分镜脚本 | ||
| - 清晰分工,无重复功能 | ||
| ### 📊 统计数据 | ||
| - **新增文件**: 6个(3个命令模板 + 3个Bash脚本) | ||
| - **修改文件**: 3个(import.md, polish.md, README.md) | ||
| - **新增代码**: ~3000行 | ||
| - **测试状态**: ✅ 所有核心脚本测试通过 | ||
| ### 🚀 快速体验 | ||
| ```bash | ||
| # 完整漫剧创作流程 | ||
| scriptify /import # 导入小说 | ||
| scriptify /select-novel # 选题检查(评分) | ||
| scriptify /adapt-comic --style 沙雕 --episodes 60 --auto | ||
| scriptify /quality-check-comic --all # 批量质量检查 | ||
| scriptify /polish --focus comic # 专项润色 | ||
| ``` | ||
| --- | ||
| ## [0.6.1] - 2025-10-30 | ||
@@ -12,0 +93,0 @@ |
+5
-3
| { | ||
| "name": "ai-scriptify", | ||
| "version": "0.6.1", | ||
| "version": "0.7.0", | ||
| "type": "module", | ||
| "description": "AI 驱动的剧本创作工具 - 专注原创剧本、小说改编、短剧优化", | ||
| "description": "AI 驱动的剧本创作工具 - 原创剧本、小说改编、漫剧创作", | ||
| "keywords": [ | ||
@@ -14,3 +14,5 @@ "screenplay", | ||
| "剧本", | ||
| "小说改编" | ||
| "小说改编", | ||
| "漫剧", | ||
| "comic-drama" | ||
| ], | ||
@@ -17,0 +19,0 @@ "author": "Scriptify Team", |
+58
-8
| # Scriptify - AI 驱动的剧本创作工具 | ||
| > **版本**: v0.6.0 | ||
| > **状态**: ✅ 核心功能已实现 | ||
| > **版本**: v0.7.0 | ||
| > **状态**: ✅ 核心功能已实现 + 🆕 漫剧创作支持 | ||
| > **定位**: 专注剧本创作阶段的AI辅助工具 | ||
| **核心价值**: 帮助创作者从零写好剧本,小说改编剧本,短剧/短视频剧本优化 | ||
| **核心价值**: 帮助创作者从零写好剧本,小说改编剧本,短剧/短视频剧本优化,**漫剧快速创作** | ||
@@ -42,4 +42,10 @@ ## ⚠️ 产品边界 | ||
| ### 3. 漫剧创作 (🆕 v0.7.0) | ||
| - **选题检查**: 五大核心标准评估,0-100分量化评分 | ||
| - **快速改编**: 5步改编法,1-2分钟黄金结构 | ||
| - **质量保障**: 自动化检查6大维度,具体改进建议 | ||
| - **专项润色**: 去AI味、补细节、强化钩子 | ||
| - **4种风格**: 沙雕/热血/甜宠/悬疑 | ||
| ### 3. 短剧/短视频优化 | ||
| ### 4. 短剧/短视频优化 | ||
| - 标准剧本格式输出 | ||
@@ -99,2 +105,4 @@ - 专业术语规范化 | ||
| #### 原创剧本流程 | ||
| **使用 Slash Commands 完成创作流程**: | ||
@@ -122,2 +130,38 @@ ```bash | ||
| #### 🆕 漫剧创作流程 (快速上手) | ||
| ```bash | ||
| # 1. 导入小说 | ||
| scriptify /import | ||
| # AI会自动评估是否适合漫剧,并引导选择改编类型 | ||
| # 2. 选题检查(五大核心标准) | ||
| scriptify /select-novel | ||
| # 输出: 0-100分评分 + 具体改进建议 | ||
| # 3. 快速改编(假设评分≥70分) | ||
| scriptify /adapt-comic --style 沙雕 --episodes 100 --auto | ||
| # 或互动模式: | ||
| scriptify /adapt-comic --style 热血 --episodes 80 | ||
| # 4. 质量检查 | ||
| scriptify /quality-check-comic | ||
| # 或批量检查: | ||
| scriptify /quality-check-comic --all | ||
| # 5. 专项润色(可选) | ||
| scriptify /polish --focus comic --episode 1 | ||
| ``` | ||
| **示例工作流**: | ||
| ``` | ||
| 小说(15万字) | ||
| → /import → 建议50-80集漫剧 | ||
| → /select-novel → 评分85分,适合沙雕风格 | ||
| → /adapt-comic --style 沙雕 --episodes 60 --auto | ||
| → /quality-check-comic --all → 50集通过,10集需优化 | ||
| → /polish --focus comic [针对需优化的集] | ||
| → 完成! 可交给 Storyboardify 制作分镜 | ||
| ``` | ||
| ### 4. 导出剧本 | ||
@@ -151,3 +195,3 @@ | ||
| ### 小说改编 (7个) | ||
| - `/import` - 导入小说 | ||
| - `/import` - 导入小说(支持漫剧分析) | ||
| - `/analyze` - 结构分析 | ||
@@ -160,3 +204,8 @@ - `/extract` - 提炼情节 | ||
| ### 漫剧创作 (🆕 3个) | ||
| - `/select-novel` - 漫剧选题检查(五大核心标准) | ||
| - `/adapt-comic` - 漫剧改编(5步改编法) | ||
| - `/quality-check-comic` - 漫剧质量检查(自动化评分) | ||
| --- | ||
@@ -245,4 +294,5 @@ | ||
| **版本**: v0.6.0 | ||
| **发布日期**: 2025-10-30 | ||
| **状态**: ✅ 核心功能完成,专注剧本创作 | ||
| **版本**: v0.7.0 | ||
| **发布日期**: 2025-11-02 | ||
| **状态**: ✅ 核心功能完成 + 🆕 漫剧创作支持 | ||
| **新增**: 漫剧选题检查、改编、质量检查、专项润色 |
@@ -109,2 +109,4 @@ --- | ||
| #### 传统剧本改编 | ||
| | 字数范围 | 改编难度 | 建议目标 | 说明 | | ||
@@ -118,2 +120,12 @@ |---------|---------|---------|------| | ||
| #### 漫剧改编(1-2分钟/集) | ||
| | 字数范围 | 建议集数 | 说明 | | ||
| |---------|---------|------| | ||
| | < 5万字 | 20-30集 | 内容较少,需精简表达 | | ||
| | 5-15万字 | 50-80集 | 标准长度,适合漫剧 | | ||
| | 15-30万字 | 80-120集 | 需精简主线,删减支线 | | ||
| | 30-50万字 | 100-150集 | 只改编核心情节 | | ||
| | > 50万字 | 建议只改编主线 | 或分季制作 | | ||
| **给出初步评估**: | ||
@@ -164,3 +176,3 @@ | ||
| #### 适合改编的题材 | ||
| #### 传统剧本改编 - 适合的题材 | ||
@@ -172,3 +184,3 @@ ✅ **情节性强**: 悬疑、推理、冒险、谍战 | ||
| #### 有挑战的题材 | ||
| #### 传统剧本改编 - 有挑战的题材 | ||
@@ -180,2 +192,29 @@ ⚠️ **内心戏多**: 文艺小说、心理小说 | ||
| #### 漫剧改编 - 最适合的题材 | ||
| ⭐⭐⭐⭐⭐ **热血战斗型**: 玄幻、武侠、竞技、动作 | ||
| - 动作冲突多、画面感强 | ||
| - 爽点密集、节奏快 | ||
| - 易于视觉化呈现 | ||
| ⭐⭐⭐⭐⭐ **打脸爽文型**: 系统流、重生、逆袭 | ||
| - 爽点密集、反转多 | ||
| - 节奏快、冲突强 | ||
| - 适合短平快呈现 | ||
| ⭐⭐⭐⭐⭐ **沙雕搞笑型**: 无厘头、穿越、日常 | ||
| - 反差大、夸张强 | ||
| - 笑点密集 | ||
| - 适合夸张表现 | ||
| ⭐⭐⭐⭐ **甜宠言情型**: 霸总、甜文、校园恋爱 | ||
| - 对话多、互动好 | ||
| - 糖点密集 | ||
| - 情感表达直接 | ||
| ⭐⭐⭐ **悬疑推理型**: 悬疑、灵异、末世 | ||
| - 需简化推理过程 | ||
| - 保留悬念和反转 | ||
| - 注重视觉氛围 | ||
| **给出评估**: | ||
@@ -244,16 +283,52 @@ | ||
| 询问用户改编目标: | ||
| ```markdown | ||
| ## 🚀 下一步 | ||
| 现在小说已经导入,建议按以下流程继续: | ||
| 现在小说已经导入,请告诉我你想改编成什么? | ||
| 1️⃣ **先运行 /analyze** | ||
| 深入分析小说结构,识别主线、人物关系、关键情节点 | ||
| ### 选择改编类型: | ||
| 2️⃣ **明确改编目标** | ||
| 确定要改编成多少集、每集多长、什么平台 | ||
| **1️⃣ 漫剧改编** (推荐) | ||
| - 1-2分钟/集,快节奏 | ||
| - 适合题材: [根据题材评估结果给出建议] | ||
| - 下一步: 运行 /select-novel 检查漫剧适配度 | ||
| - 然后: 运行 /adapt-comic 直接生成漫剧剧本 | ||
| 3️⃣ **提炼核心情节** | ||
| 使用 /extract 筛选必须保留的核心情节 | ||
| **2️⃣ 传统剧本改编** | ||
| - 传统剧本格式 | ||
| - 下一步流程: | ||
| 1. /analyze - 深入分析小说结构 | ||
| 2. /extract - 提炼核心情节 | ||
| 3. /compress - 压缩到目标时长 | ||
| 4. /script - 生成剧本 | ||
| 你想选择哪种改编方式? | ||
| ``` | ||
| **根据用户选择给出具体指导**: | ||
| 如果选择漫剧: | ||
| ``` | ||
| 太好了!这部小说{适合/不太适合}改编为漫剧。 | ||
| 建议流程: | ||
| 1. 运行 /select-novel 进行漫剧选题检查 | ||
| 2. 通过检查后,运行 /adapt-comic --style [风格] --episodes [集数] | ||
| 3. 生成后运行 /quality-check-comic 检查质量 | ||
| 要现在开始检查吗? (运行 /select-novel) | ||
| ``` | ||
| 如果选择传统剧本: | ||
| ``` | ||
| 明白了。我们按传统流程进行改编。 | ||
| 建议流程: | ||
| 1. 运行 /analyze 分析小说结构 | ||
| 2. 运行 /extract 提炼核心情节 | ||
| 3. 运行 /compress 压缩到目标时长 | ||
| 4. 运行 /script 生成剧本 | ||
| 让我们从 /analyze 开始吧? | ||
@@ -260,0 +335,0 @@ ``` |
| --- | ||
| description: 剧本润色 - 最终精修优化 | ||
| argument-hint: --episode N [--focus dialogue|action|rhythm|all] [--project 项目名] | ||
| allowed-tools: Read(//projects/**), Write(//projects/*/episodes/*) | ||
| description: 剧本润色 - 最终精修优化(支持漫剧专项) | ||
| argument-hint: --episode N [--focus dialogue|action|rhythm|comic|all] [--project 项目名] | ||
| allowed-tools: Read(//projects/**), Write(//projects/*/episodes/*), Edit(//projects/*/comic-scripts/*) | ||
| scripts: | ||
@@ -598,6 +598,240 @@ sh: scripts/bash/polish.sh | ||
| ## 漫剧专项润色 (Focus: comic) | ||
| 当使用 `--focus comic` 时,执行漫剧专项优化,遵循《AI漫剧制作完整流程》文档的润色标准。 | ||
| ### 漫剧润色的4个重点 | ||
| #### 重点1: 加口语化语气词 | ||
| **目标**: 去掉AI味,让对话更真实 | ||
| **常见AI味及改法**: | ||
| | AI味 | 润色后 | | ||
| |------|--------| | ||
| | "完了" | "完犊子喽" | | ||
| | "你怎么敢" | "你特么怎么敢" | | ||
| | "真是令人震惊" | "我去,这也太离谱了吧" | | ||
| | "不可能" | "不可能吧" / "开玩笑吧" | | ||
| | "你好过分" | "你太过分了吧" | | ||
| | "我很生气" | "我气死了" | | ||
| **检查方法**: | ||
| - 找出所有"太正式"的对话 | ||
| - 加入语气词: "啊"/"吧"/"呢"/"嘛"/"呀" | ||
| - 加入口头禅: "我去"/"卧槽"/"哎呀"/"哇" | ||
| **润色示例**: | ||
| ```markdown | ||
| ❌ AI味: | ||
| **主角**: 这件事我不能接受。 | ||
| ✅ 润色后(沙雕风格): | ||
| **主角**: 这事儿我不能忍啊! | ||
| ✅ 润色后(热血风格): | ||
| **主角**: 老子不答应! | ||
| ✅ 润色后(甜宠风格): | ||
| **主角**: 这...这怎么行嘛... | ||
| ``` | ||
| #### 重点2: 补情绪细节 | ||
| **目标**: 用具体动作/表情代替抽象形容 | ||
| **常见问题及改法**: | ||
| | 抽象表达 | 具体细节 | | ||
| |---------|---------| | ||
| | "他很紧张" | "手指捏着围裙边,嘴角抽搐" | | ||
| | "她很生气" | "眼睛瞪得溜圆,拳头握到咯咯响" | | ||
| | "他很尴尬" | "额头冒汗,眼神飘忽" | | ||
| | "她很开心" | "嘴角上扬,眼睛弯成月牙" | | ||
| | "他很害怕" | "双腿发抖,后退半步" | | ||
| **润色示例**: | ||
| ```markdown | ||
| ❌ 原版(抽象): | ||
| *画面: 主角很紧张* | ||
| ✅ 润色后(具体): | ||
| *画面: 主角额头冒汗,手不停搓着衣角* | ||
| *动作: 咽了咽口水,眼神躲闪* | ||
| ``` | ||
| #### 重点3: 留画面空白 | ||
| **目标**: 不要"满打满算",留呼吸空间 | ||
| **技巧**: 在关键转折处,插入1-2秒的画面空白 | ||
| **润色前**: | ||
| ```markdown | ||
| ## 场景1 | ||
| **角色A**: [台词] | ||
| ## 场景2 | ||
| **角色B**: [台词] | ||
| ## 场景3 | ||
| **角色A**: [台词] | ||
| ``` | ||
| **润色后**: | ||
| ```markdown | ||
| ## 场景1 | ||
| **角色A**: [台词] | ||
| *画面空白 1秒: 角色B表情变化,由笑到凝重* | ||
| ## 场景2 | ||
| **角色B**: [台词] | ||
| *动作: 攥紧拳头* | ||
| *画面空白 0.5秒: 特写角色A的手,微微颤抖* | ||
| ## 场景3 | ||
| **角色A**: [台词] | ||
| ``` | ||
| **画面空白的作用**: | ||
| - 强调情绪转折 | ||
| - 给观众反应时间 | ||
| - 增加戏剧张力 | ||
| - 防止信息过载 | ||
| #### 重点4: 强化钩子 | ||
| **目标**: 让结尾更有吸引力,必须有动作/反转 | ||
| **钩子弱→钩子强的改法**: | ||
| **沙雕搞笑风格**: | ||
| ```markdown | ||
| ❌ 弱钩子: | ||
| **主角**: (尴尬地笑了) | ||
| *效果: 尴尬* | ||
| ✅ 强钩子: | ||
| *画面: 突然,老板拿出一套恐龙服* | ||
| **老板**: 既然你喜欢,就穿一周吧。 | ||
| **主角**: (石化)??? | ||
| *效果: 定格,黑屏* | ||
| ``` | ||
| **热血爽文风格**: | ||
| ```markdown | ||
| ❌ 弱钩子: | ||
| **主角**: (握紧拳头) | ||
| *效果: 决心的眼神* | ||
| ✅ 强钩子: | ||
| **主角**: (冲向敌人) | ||
| *画面: 拳头发光,即将击中敌人脸部 - 定格* | ||
| *效果: 白光闪烁* | ||
| **[旁白]**: 这一拳,改变了一切... | ||
| ``` | ||
| **甜宠言情风格**: | ||
| ```markdown | ||
| ❌ 弱钩子: | ||
| **女主**: (脸红) | ||
| ✅ 强钩子: | ||
| *画面: 女主鼓起勇气,拉住男主衣袖* | ||
| **女主**: (小声)别走... | ||
| *画面: 男主停下,回头,嘴角上扬* | ||
| **男主**: (心想)终于主动了... | ||
| ``` | ||
| **悬疑推理风格**: | ||
| ```markdown | ||
| ❌ 弱钩子: | ||
| **主角**: (陷入思考) | ||
| ✅ 强钩子: | ||
| *画面: 主角翻开笔记本,看到日期* | ||
| **主角**: (瞳孔放大)这是...一周后?! | ||
| *效果: 闪电音效,黑屏* | ||
| ``` | ||
| ### 漫剧润色检查清单 | ||
| 完成润色后,逐项检查: | ||
| ```markdown | ||
| ## 漫剧润色检查清单 | ||
| ### ✅ 口语化 | ||
| - [ ] 所有对话都加了语气词 | ||
| - [ ] 没有"AI味"词汇("令人"/"然而"/"倘若") | ||
| - [ ] 对话符合角色性格和场景 | ||
| ### ✅ 情绪细节 | ||
| - [ ] 所有抽象情绪都改为具体动作/表情 | ||
| - [ ] 没有"他很XX"的描写 | ||
| - [ ] 细节丰富但不啰嗦 | ||
| ### ✅ 画面空白 | ||
| - [ ] 关键转折处有画面空白(1-2秒) | ||
| - [ ] 没有"满打满算"的节奏 | ||
| - [ ] 留给观众反应时间 | ||
| ### ✅ 钩子强化 | ||
| - [ ] 结尾有明确动作(不是情绪) | ||
| - [ ] 结尾有反转/悬念/升级 | ||
| - [ ] 让人想看下一集 | ||
| ### ✅ 时长控制 | ||
| - [ ] 润色后时长仍在90-180秒(第1集可240秒) | ||
| - [ ] 如果超时,已删减冗余内容 | ||
| - [ ] 如果过短,已补充必要内容 | ||
| ``` | ||
| ### 漫剧润色报告 | ||
| ```markdown | ||
| ## 📝 漫剧润色报告 - 第X集 | ||
| ### 润色统计 | ||
| - 加语气词: {X}处 | ||
| - 补情绪细节: {X}处 | ||
| - 添加画面空白: {X}处 | ||
| - 强化钩子: 是/否 | ||
| ### 润色前后对比 | ||
| **口语化提升**: | ||
| - 润色前: [原对话示例] | ||
| - 润色后: [润色对话示例] | ||
| **细节丰富度**: | ||
| - 润色前: {X}个具体细节 | ||
| - 润色后: {X}个具体细节 (+{X}) | ||
| **钩子强度**: | ||
| - 润色前: [原钩子] (强度: 弱/中/强) | ||
| - 润色后: [新钩子] (强度: 弱/中/强) | ||
| ### 质量评分 | ||
| | 维度 | 润色前 | 润色后 | 提升 | | ||
| |------|-------|-------|------| | ||
| | 口语化 | {X}/10 | {X}/10 | +{X} | | ||
| | 细节感 | {X}/10 | {X}/10 | +{X} | | ||
| | 节奏感 | {X}/10 | {X}/10 | +{X} | | ||
| | 钩子强度 | {X}/10 | {X}/10 | +{X} | | ||
| ### 建议 | ||
| ✅ 润色完成,可以进入分镜阶段 | ||
| 💡 建议运行 /quality-check-comic 再次验证 | ||
| ``` | ||
| --- | ||
| ## 与其他命令配合 | ||
| - **前置**: `/review` (先评估,找问题) | ||
| - **前置**: `/quality-check-comic` (漫剧专项质量检查) | ||
| - **配合**: `/diff` (对比润色前后) | ||
| - **后续**: `/export` (导出最终版) |
455642
15.65%83
7.79%293
20.58%