版本:v1.0
日期:2026-03-28
状态:已批准
将短篇小说(1-2 万字)自动改写为短剧剧本,输出旁白为主(60%)+ 对白(40%)+ 分镜描述 + AI 绘画关键词,最终生成 40-50 分钟动漫素材。
| 价值点 | 描述 |
|---|---|
| 效率提升 | 人工改写需数天 → AI 改写需数分钟 |
| 质量稳定 | 多模型对比 + 质量评分确保输出达标 |
| 零人工干预 | 调试完成后全自动流水线 |
| 节奏优化 | 爆点前移,符合短视频传播规律 |
| 模块 | 功能 | 优先级 |
|---|---|---|
| 项目管理 | 上传小说/查看列表/删除项目 | P0 |
| 剧情分析 | 提取情节链/AI 识别爆点/爆点前移方案 | P0 |
| 角色提取 | NER 识别/性格分析/关系图/AI 绘画提示词 | P0 |
| 剧本改写 | 文学→旁白/场景→分镜/对话口语化 | P0 |
| 多模型对比 | 并行调用/差异对比/合并选择 | P0 |
| 版本管理 | Gitea 推送/Git 对比/分支管理 | P0 |
| 调试模式 | 逐步执行/中间结果查看/手动修正 | P0 |
| 质量评估 | 自动评分 + 人工评分/评分历史 | P1 |
| 模型配置 | OpenAI 兼容接口/多模型管理 | P0 |
输入:
处理:
data/storage/projects/{id}/输出:
输入:小说原文
处理:
爆点类型:
| 类型 | 说明 | 目标位置 |
|---|---|---|
| hook | 开篇钩子 | 前 10 秒 |
| twist | 剧情转折 | 前 1/3 |
| climax | 情绪高潮 | 中后段 |
| reveal | 真相揭示 | 结尾前 |
输出:
{
"plot_chain": ["起因", "发展", "转折", "高潮", "结局"],
"plot_points": [
{"type": "hook", "position": 150, "target_time": 10},
{"type": "twist", "position": 3200, "target_time": 180}
],
"hook_collection": "背叛、复仇、真相——他没想到,一切都是一场局"
}
调试模式:
输入:小说原文
处理:
输出:
{
"characters": [
{
"name": "林萧",
"personality": "冷硬、内敛、重情义",
"relationship": {"苏晴": "前女友", "陈峰": "宿敌"},
"catchphrase": "无所谓",
"image_prompt": "young man, black hair, cold expression, dark coat, cinematic lighting, anime style",
"style_profile": {"tone": "简短", "emotion": "克制", "vocabulary": "口语化"}
}
]
}
调试模式:
输入:小说原文 + 剧情分析结果 + 角色档案
处理:
输出格式:
## 场景 1:雨夜相遇
【分镜描述】
镜头:中景→特写,推镜
画面:雨夜街道,霓虹灯闪烁,女主撑伞站立
AI 关键词:rainy night, neon street, young woman, umbrella, cinematic lighting, anime style
【旁白】(60%)
"那场雨下了一整夜,也冲走了他最后的退路。"
【对白】(40%)
林萧:"你不该来这里"(声音沙哑,点烟)
苏晴:"但你还是来了"(转身,眼神复杂)
【角色检查】
✓ 林萧台词符合"冷硬"风格
✓ 苏晴台词符合"外柔内刚"设定
调试模式:
输入:小说原文 + 改写配置
处理:
输出:
对比维度:
| 维度 | 说明 |
|---|---|
| 剧情连贯性 | 情节是否流畅 |
| 角色一致性 | 台词是否符合人设 |
| 节奏控制 | 是否紧凑快速 |
| 旁白质量 | 是否流畅有感染力 |
| 画面可执行性 | 分镜描述是否清晰 |
输入:剧本草稿
处理:
project-{id}-version-{n})输出:
Git 操作:
| 操作 | 说明 |
|---|---|
| push | 推送版本到 Gitea |
| diff | 对比两个版本差异 |
| log | 查看版本历史 |
设计原则:
调试流程:
1. 上传小说 → [暂停] 确认原文
↓
2. 剧情分析 → [查看] 情节链/爆点位置
↓
3. 角色提取 → [查看/编辑] 角色档案
↓
4. 剧本改写 → [查看] 中间结果
↓
5. 输出版本 → [对比/评分]
调试界面:
自动评分:
| 指标 | 权重 | 评估方法 |
|---|---|---|
| 剧情连贯性 | 25% | AI 评估情节逻辑 |
| 角色一致性 | 25% | 台词风格匹配度 |
| 节奏控制 | 20% | 爆点分布分析 |
| 旁白质量 | 20% | 语言流畅度 |
| 画面可执行性 | 10% | 分镜描述完整度 |
人工评分:
评分历史:
支持接口:OpenAI 兼容格式
配置项:
| 字段 | 说明 | 示例 |
|---|---|---|
| name | 模型名称 | Gemini-Pro |
| base_url | API 地址 | https://api.gemini.com/v1 |
| api_key | API 密钥 | sk-xxx |
| model_name | 模型标识 | gemini-3.1-pro |
| is_active | 是否启用 | true |
操作:
| 层级 | 技术 |
|---|---|
| 前端 | Vue 3 + Element Plus + Axios |
| 后端 | Python 3.11 + FastAPI + SQLAlchemy |
| 数据库 | MySQL 8.0 |
| 缓存 | Redis 7.0 |
| 版本控制 | Gitea 1.20 |
| 文件存储 | 本地存储(data/storage/) |
| 部署 | Docker + Docker Compose |
┌─────────────────────────────────────────────────────────────────┐
│ Docker Compose │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Vue 前端 │ │ FastAPI │ │ MySQL │ │
│ │ :8080 │ │ :8000 │ │ :3306 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Gitea │ │ Redis │ │ MinIO │ │
│ │ :3000 │ │ :6379 │ │ :9000 │ │
│ │ (版本管理) │ │ (缓存) │ │ (可选) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────┐
│ 外部模型 API │
│ - Gemini │
│ - GPT │
│ - 其他兼容接口 │
└─────────────────┘
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INT | 主键 |
| name | VARCHAR(255) | 项目名称 |
| novel_text | TEXT | 小说原文 |
| word_count | INT | 字数 |
| status | ENUM | 状态 (draft/processing/review/completed) |
| created_at | TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | 更新时间 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INT | 主键 |
| project_id | INT | 项目 ID |
| name | VARCHAR(100) | 角色名 |
| personality | TEXT | 性格描述 |
| relationship | TEXT | 关系图 |
| catchphrase | VARCHAR(255) | 口头禅 |
| image_prompt | TEXT | AI 绘画提示词 |
| style_profile | JSON | 台词风格档案 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INT | 主键 |
| project_id | INT | 项目 ID |
| branch_name | VARCHAR(100) | Gitea 分支名 |
| model_name | VARCHAR(100) | 模型名称 |
| script_content | TEXT | 剧本内容 |
| storyboard | JSON | 分镜数据 |
| quality_score | DECIMAL(3,2) | 质量评分 |
| auto_score | JSON | 自动评分详情 |
| manual_score | JSON | 人工评分详情 |
| created_at | TIMESTAMP | 创建时间 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INT | 主键 |
| name | VARCHAR(100) | 模型名称 |
| base_url | VARCHAR(255) | API 地址 |
| api_key | VARCHAR(255) | API 密钥 |
| model_name | VARCHAR(100) | 模型标识 |
| is_active | BOOLEAN | 是否启用 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INT | 主键 |
| project_id | INT | 项目 ID |
| type | ENUM | 类型 (hook/twist/climax/reveal) |
| position | INT | 原文位置 |
| target_time | INT | 目标出现时间(秒) |
| description | TEXT | 描述 |
# 项目管理
POST /api/projects # 创建项目
GET /api/projects # 项目列表
GET /api/projects/{id} # 项目详情
DELETE /api/projects/{id} # 删除项目
PUT /api/projects/{id} # 更新项目
# 剧情分析
POST /api/projects/{id}/analyze # 执行分析
GET /api/projects/{id}/analysis # 查看分析结果
PUT /api/projects/{id}/analysis # 修改分析结果
# 角色管理
POST /api/projects/{id}/extract # 提取角色
GET /api/projects/{id}/characters # 角色列表
PUT /api/characters/{id} # 更新角色
# 剧本改写
POST /api/projects/{id}/rewrite # 执行改写
GET /api/projects/{id}/draft # 查看草稿
PUT /api/projects/{id}/draft # 修改草稿
# 版本管理
POST /api/projects/{id}/versions # 创建版本
GET /api/projects/{id}/versions # 版本列表
GET /api/compare # 版本对比
POST /api/projects/{id}/merge # 版本合并
# 模型管理
GET /api/models # 模型列表
POST /api/models # 添加模型
PUT /api/models/{id} # 更新模型
DELETE /api/models/{id} # 删除模型
POST /api/models/{id}/test # 测试连接
# 质量评估
POST /api/quality/auto-score # 自动评分
POST /api/quality/manual-score # 人工评分
GET /api/projects/{id}/scores # 评分历史
用户上传小说
↓
本地存储 (data/storage/projects/{id}/original.txt)
↓
MySQL 记录元数据 (projects 表)
↓
剧情分析 → 中间结果 (temp/) → 调试查看
↓
角色提取 → 中间结果 (temp/) → 调试查看
↓
剧本改写 → 草稿 (temp/) → 调试查看
↓
确认输出 → 推送到 Gitea → MySQL 记录版本
↓
多模型对比 → 选择最佳版本
↓
质量评分 → 反馈优化
~/novel-rewriter/
├── docker-compose.yml
├── .env # 环境变量
├── backend/
│ ├── app/
│ │ ├── main.py # FastAPI 入口
│ │ ├── config.py # 配置
│ │ ├── database.py # 数据库连接
│ │ ├── models/ # SQLAlchemy 模型
│ │ ├── schemas/ # Pydantic schema
│ │ ├── api/ # API 路由
│ │ ├── services/ # 业务逻辑
│ │ └── utils/
│ ├── requirements.txt
│ └── Dockerfile
├── frontend/
│ ├── src/
│ │ ├── views/
│ │ ├── components/
│ │ └── api/
│ ├── package.json
│ └── Dockerfile
├── data/
│ ├── mysql/ # MySQL 数据
│ ├── gitea/ # Gitea 数据
│ ├── redis/ # Redis 数据
│ └── storage/ # 本地文件存储
│ ├── projects/
│ ├── versions/
│ └── temp/
└── scripts/
├── init-db.sql
└── deploy.sh
| 任务 | 负责人 | 状态 |
|---|---|---|
| docker-compose.yml 配置 | - | ⏳ |
| MySQL 初始化脚本 | - | ⏳ |
| FastAPI 项目骨架 | - | ⏳ |
| Vue 项目骨架 | - | ⏳ |
| 模型调用模块 | - | ⏳ |
| 本地文件存储模块 | - | ⏳ |
| 任务 | 负责人 | 状态 |
|---|---|---|
| 剧情分析模块(爆点识别) | - | ⏳ |
| 角色提取模块 | - | ⏳ |
| 剧本改写模块 | - | ⏳ |
| Gitea 集成 | - | ⏳ |
| 调试模式 | - | ⏳ |
| 任务 | 负责人 | 状态 |
|---|---|---|
| 多模型并行调用 | - | ⏳ |
| 版本对比界面 | - | ⏳ |
| 自动评分系统 | - | ⏳ |
| 人工评分界面 | - | ⏳ |
| 任务 | 负责人 | 状态 |
|---|---|---|
| 质量反馈循环 | - | ⏳ |
| 性能优化 | - | ⏳ |
| 批量处理支持 | - | ⏳ |
| 功能 | 验收标准 |
|---|---|
| 项目管理 | 可上传/查看/删除项目 |
| 剧情分析 | 正确识别爆点位置,生成前移方案 |
| 角色提取 | 正确提取角色信息,生成 AI 提示词 |
| 剧本改写 | 输出符合格式,旁白 60%+ 对白 40% |
| 多模型对比 | 可并行调用,可对比差异 |
| 版本管理 | 可推送到 Gitea,可查看差异 |
| 调试模式 | 可逐步执行,可查看中间结果 |
| 质量评估 | 自动 + 人工评分正常工作 |
| 指标 | 目标 |
|---|---|
| 1-2 万字分析时间 | < 30 秒 |
| 1-2 万字改写时间 | < 2 分钟/模型 |
| 版本对比响应 | < 3 秒 |
| 并发支持 | ≥ 10 个并行项目 |
| 指标 | 目标 |
|---|---|
| 剧情连贯性评分 | ≥ 4.0/5.0 |
| 角色一致性评分 | ≥ 4.0/5.0 |
| 人工满意度 | ≥ 80% |
| 风险 | 影响 | 应对措施 |
|---|---|---|
| 模型 API 不稳定 | 改写失败 | 多模型备份,自动重试 |
| 爆点识别不准确 | 节奏问题 | 人工修正 + 反馈优化 |
| 角色一致性差 | 人设崩坏 | 台词风格检查 + 人工审核 |
| Gitea 推送失败 | 版本丢失 | 本地备份 + 重试机制 |
| 术语 | 说明 |
|---|---|
| 爆点 | 剧情转折点/高潮/悬念 |
| 爆点前移 | 将爆点提前到开篇吸引观众 |
| 钩子 (Hook) | 开篇 10 秒吸引观众的亮点 |
| 分镜 | 镜头描述 + 画面提示 |
| 版本 | 日期 | 修改内容 | 作者 |
|---|---|---|---|
| v1.0 | 2026-03-28 | 初始版本 | 聋瞎 |
文档状态: ✅ 已批准 - 可以开始开发