feat(monitor): 抖音 Web 接口客户端 —— 绕开爬虫子进程,直接发 HTTP
移植自 mac-agent-os 的 mediacrawler_adapter:不起子进程、不开页面,用浏览器里那份
登录态直接调抖音 Web 接口。产物键名照抄 store/douyin,所以 ingest 那条链路一个字不用改。
**目前能用的(真环境实测,非推断)**:
profile/other : 200, 7075 字节 —— 博主主页指标(粉丝/获赞/作品数/昵称)
aweme/detail : 200, 45425 字节 —— 单条作品详情(含点赞/评论/收藏/分享)
**目前不能用的:作品列表 `aweme/post`。** 两个互相独立的原因:
1. 这个接口被抖音单独升级成了真校验:不带 x-tt-argus 回 403「Uifid Not Found」,
带上 dummy 值回 200 + **空 body**。也就是说「头在不在」骗得过,「真校验」过不了。
同一套头打 profile/other 和 aweme/detail 都是通的 —— 抖音是挑着接口加保护的,
挑中的恰好是「批量拉作品列表」这个最敏感的动作。
2. 改走页面截获也不行:CDP 浏览器打开博主主页会落到「验证码中间页」(当天大量探测的
代价,过几小时要重测)。
所以现在的边界是:**已知作品的指标刷新能做,自动发现新作品做不了**。
**排查中控住变量后得到的两条事实**(都写进注释了):
· `Accept` / `Accept-Language` / `Referer` 才是主页接口能返回真数据的原因 —— 只有
UA+client hints+Cookie 时是 200 但仅 121 字节的空壳,补上这三个头变 7074 字节。
(我先前猜的 sec-ch-ua 不是关键。)
· 因此 UA 与 client hints 必须**成套地取自同一个浏览器**,所以 BrowserIdentity 一次
从 CDP 取齐 cookie + UA + hints,而不是各自写死。
「200 + 空 body 必须当场报错」也是刻意写死的:放过去它会在下游变成「这个博主没作品」,
把一次失败伪装成一条正常结果 —— 爬虫那条路正是这么栽的,还被翻译成「账号被封」。
测试 +11:cookie 解析、请求头成套性(含 uifid 缺失/回退)、产物键名与 store 对齐、
以及 _get 的三条失败路径(空 body / 403 带网关原话 / 正常返回)。
This commit is contained in:
@@ -0,0 +1,179 @@
|
||||
# AVE 视频工厂 AI 生成 API 战略报告
|
||||
|
||||
> **版本**: v1.0
|
||||
> **创建**: 2026-05-15
|
||||
> **范围**: 文生视频、图生视频、文生图、图生图、AI漫剧全品类
|
||||
> **目标**: 为 AVE 视频工厂找到成本最低、可集成性最强的 AI 素材生成方案
|
||||
|
||||
---
|
||||
|
||||
## 一、核心结论
|
||||
|
||||
### 1.1 最佳推荐排序
|
||||
|
||||
| 排名 | 方案 | 成本(5s 1080p) | 适合场景 | 推荐理由 |
|
||||
|:----:|:-----|:--------------:|:---------|:---------|
|
||||
| 🥇 | **Kling 可灵 API** | **¥1.45** (≈$0.20) | 主力批量生产 | 性价比之王,质量分89.8,月送50次免费 |
|
||||
| 🥈 | **即梦网页版会员** | **¥0.22~0.37** | 日常高频使用 | 成本最低,VIP 1080p,Peekaboo 自动化中 |
|
||||
| 🥉 | **腾讯云混元(buddy-cloud)** | **¥1.80 (720p)** | 即时可用 | 已有集成,无需额外注册 |
|
||||
| 4 | **通义万相 Wan2.6** | **¥5.00** (¥1/s) | 阿里系生态 | 90天免费50s,文生图¥0.2/张 |
|
||||
| 5 | **Runway Gen-4.5** | **¥2.90** | 专业级稳定 | 支持4K,延迟最稳定 |
|
||||
| 6 | **Dreamina CLI** | **¥0.37 (720p)** | 轻量调用 | 已安装,但VIP模型不支持 |
|
||||
|
||||
### 1.2 成本对比全景 (5秒视频,折合人民币)
|
||||
|
||||
```
|
||||
Kling API(1.45) ||||||||
|
||||
Buddy-cloud 720p(1.80) |||||||||
|
||||
Runway(2.90) |||||||||||||||||
|
||||
Sora 2(3.63) ||||||||||||||||||||
|
||||
即梦API(4.00) ||||||||||||||||||||||
|
||||
通义万相1080p(5.00) |||||||||||||||||||||||||
|
||||
Sora 2 Pro(18.15) ||||||||||||||||||||||||||||||||||||||||||
|
||||
即梦网页版会员(0.22-0.37) |||
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 二、AI 视频生成 API 详细对比
|
||||
|
||||
### 2.1 国际平台 (USD)
|
||||
|
||||
| 平台 | 模型 | 计费方式 | 5s/1080p成本 | 最大时长 | 最高分辨率 | 性价比评分 |
|
||||
|:-----|:-----|:---------|:------------:|:--------:|:----------:|:---------:|
|
||||
| **Kling 2.1** | 可灵 | 按条 | **$0.20** | 10s | 1080p | ⭐⭐⭐⭐⭐ |
|
||||
| Runway Gen-4.5 | Gen-4.5 | Credit | $0.40 | 16s | 4K | ⭐⭐⭐⭐ |
|
||||
| Sora 2 Standard | Sora 2 | 按秒 $0.10/s | $0.50 | 20s | 1080p | ⭐⭐⭐ |
|
||||
| Sora 2 Pro | Sora 2 | 按秒 $0.50/s | $2.50 | 20s | 1080p | ⭐⭐ |
|
||||
| Seedance 2.0 (即梦) | 即梦 | 分辨率×时长矩阵 | $0.55 | **30s** | **4K** | ⭐⭐⭐ |
|
||||
|
||||
**免费额度**: Kling 每月50次免费;Runway 125 Credits;Sora 无
|
||||
|
||||
### 2.2 国内平台 (RMB)
|
||||
|
||||
| 平台 | 文生视频 | 图生视频 | 720p价格 | 1080p价格 | API接入方式 |
|
||||
|:-----|:--------:|:--------:|:--------:|:---------:|:-----------|
|
||||
| **阿里云通义万相 Wan2.6** | ✅ | ✅ | **¥0.6/s** | **¥1.0/s** | 百炼平台 |
|
||||
| **腾讯云混元 (buddy-cloud)** | ✅ | ✅ | **¥0.36/s** (¥1.8/5s) | **¥0.72/s** (¥3.6/5s) | ⭐ **WorkBuddy内置** |
|
||||
| **即梦 Seedance API** | ✅ | ✅ | $0.35/5s (≈¥2.5) | $0.55/5s (≈¥4.0) | 火山引擎 |
|
||||
| **Kling 可灵 API (国内)** | ✅ | ✅ | **$0.20/5s (≈¥1.45)** | 同左 | klingapi.com |
|
||||
| **Dreamina CLI** | ✅ | ✅ | 5积分/次 (≈¥0.37) | ❌ (VIP锁) | 命令行 |
|
||||
|
||||
**免费额度**:
|
||||
- 通义万相: 开通90天内,文生图50张+视频50秒
|
||||
- 腾讯云混元: 50积分 (首次开通)
|
||||
- Kling: 每月50次免费
|
||||
- 即梦网页版: 每日送积分
|
||||
|
||||
### 2.3 文生图 API
|
||||
|
||||
| 平台 | 价格 | 质量 | 接入 |
|
||||
|:-----|:----:|:----:|:----|
|
||||
| **阿里云通义万相 Wan2.6** | **¥0.2/张** | ⭐⭐⭐⭐ | 百炼 API |
|
||||
| **腾讯云混元 (buddy-cloud)** | 按积分 | ⭐⭐⭐⭐ | **WorkBuddy内置** |
|
||||
| **Dreamina CLI** | 1积分/张 ≈ ¥0.07 | ⭐⭐⭐⭐⭐ | CLI命令 |
|
||||
| **即梦网页版** | 0.25积分/张 ≈ ¥0.02 | ⭐⭐⭐⭐⭐ | Peekaboo自动化 |
|
||||
| **Midjourney** | $10-60/月 | ⭐⭐⭐⭐⭐ | Discord/API |
|
||||
| **Stable Diffusion** | 免费/自部署 | ⭐⭐⭐⭐ | 本地 |
|
||||
|
||||
---
|
||||
|
||||
## 三、AI 漫剧/动画工具
|
||||
|
||||
### 3.1 专业漫剧平台
|
||||
|
||||
| 工具 | 价格 | 特点 | API可用 | 集成难度 |
|
||||
|:-----|:----:|:------|:-------:|:--------:|
|
||||
| **Vidu** | ¥0.42/s | **AI漫剧行业标杆**,画面一致性好 | ❌ 网页端 | 中 |
|
||||
| **OiiOii** | ¥0.37/s | 剧本→角色→分镜→成片全流程 | ❌ 网页端 | 中 |
|
||||
| **Liblib (哩布哩布)** | **¥0.18/s** | **性价比最高**,集成多模型 | ⚠️ 有限 | 低 |
|
||||
| **可灵 3.0 Omni** | ¥0.43/s | 音画同出,口型同步 | ✅ API | **低** |
|
||||
| **PixVerse V6** | ¥0.48/s | 海外用户超千万 | ✅ API | 低 |
|
||||
|
||||
### 3.2 AVE 漫剧集成方案
|
||||
|
||||
```
|
||||
文案 → LLM分镜 → 角色一致性控制 → Kling/通义万相逐帧生成 →
|
||||
FFmpeg合成 → 配音(CosyVoice) → BGM → final.mp4
|
||||
```
|
||||
|
||||
关键点:**角色一致性** 是 AI 漫剧的难点,可灵和通义万相支持图生视频,可以用同一张角色图作为参考。
|
||||
|
||||
---
|
||||
|
||||
## 四、战略架构建议
|
||||
|
||||
### 4.1 三层管线 (Tiered Pipeline)
|
||||
|
||||
```
|
||||
用户文案
|
||||
│
|
||||
[01_director_parser] ← oMLX 本地解析
|
||||
│
|
||||
┌───────────────┼───────────────┐
|
||||
▼ ▼ ▼
|
||||
Tier 1: 免费 Tier 2: 批量 Tier 3: 高品质
|
||||
────────── ──────────── ─────────────
|
||||
Kling 50次/月 Kling API $0.20 通义万相1080p
|
||||
通义万相50s 即梦网页版会员 Runway 4K
|
||||
Dreamina积分 buddy-cloud Sora 2
|
||||
│ │ │
|
||||
└───────────────┼───────────────┘
|
||||
▼
|
||||
[material_producer]
|
||||
AI素材 → 下载 → 缓存
|
||||
│
|
||||
[composer] Ken Burns + 字幕
|
||||
│
|
||||
final.mp4
|
||||
```
|
||||
|
||||
### 4.2 推荐接入优先级
|
||||
|
||||
| 阶段 | 动作 | 成本 | 工作量 |
|
||||
|:-----|:-----|:----:|:------|
|
||||
| **P0 立即** | 集成 Kling API (性价比最高,有免费额度) | ¥1.45/段 | 1天 |
|
||||
| **P0 立即** | 完成即梦网页版 Peekaboo 自动化 | ¥0.22/段 | 进行中 |
|
||||
| **P1 本周** | 接入通义万相 Wan2.6 API (免费50s先跑通) | ¥0.6/s | 半天 |
|
||||
| **P2 本月** | 集成 AI漫剧管线 (Vidu/OiiOii 调研) | ¥0.37-0.42/s | 2-3天 |
|
||||
| **P3 储备** | 通义万相图生视频 + 角色一致性方案 | ¥0.6/s | 1天 |
|
||||
|
||||
### 4.3 AVE 现有能力 vs 待接入
|
||||
|
||||
```
|
||||
当前 AVE 已有:
|
||||
✅ CosyVoice TTS (人声)
|
||||
✅ Wan2.2-S2V (数字人)
|
||||
✅ Pexels (免费素材)
|
||||
✅ FFmpeg (合成)
|
||||
✅ oMLX (文案解析)
|
||||
✅ 火山引擎 OmniHuman (数字人备用)
|
||||
|
||||
下一步可接入:
|
||||
🔲 Kling API (文生视频主力)
|
||||
🔲 即梦网页版 (文生视频备用, VIP 1080p)
|
||||
🔲 通义万相 Wan2.6 (文生图+文生视频, 阿里生态)
|
||||
🔲 AI漫剧管线 (内容扩展)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 五、总结
|
||||
|
||||
### 最低成本方案
|
||||
|
||||
如果是**日常生产口播视频素材**,按成本排序:
|
||||
|
||||
| 方案 | 一期12段素材成本 | 年费估算 |
|
||||
|:-----|:---------------:|:--------:|
|
||||
| ① 即梦网页版会员 ¥239/月 | **3.6元** | ¥2,868 |
|
||||
| ② Kling API ($0.20/段) | **17.4元** (≈$2.4) | ¥6,960 (≈$960) |
|
||||
| ③ 通义万相 720p (¥0.6/s) | 36元 | ¥13,140 |
|
||||
| ④ 腾讯云混元 720p (¥1.8/段) | **21.6元** | ¥7,884 |
|
||||
|
||||
### 最终建议
|
||||
|
||||
1. **短期**: 即梦网页版 Peekaboo 自动化继续搞完,成本最低
|
||||
2. **中期**: 接入 **Kling API** — 国际性价比之王,每月50次免费额度
|
||||
3. **扩展**: 通义万相接入(文生图¥0.2/张,做封面和素材)
|
||||
4. **漫剧**: 调研 Vidu/OiiOii,作为内容形式的扩展方向
|
||||
@@ -0,0 +1,550 @@
|
||||
# AVE v2.0 落地实施计划
|
||||
|
||||
> AudioScore Video Engine — 智能体可调用的自动化视频编排引擎
|
||||
>
|
||||
> **版本**: v1.0 (规划)
|
||||
> **创建**: 2026-05-04
|
||||
> **负责人**: ghai / Claw
|
||||
> **状态**: 📋 规划阶段
|
||||
|
||||
---
|
||||
|
||||
## 一、项目概览
|
||||
|
||||
### 1.1 这是什么
|
||||
|
||||
AVE v2.0 是一个以**双轨音频锚点**为时间轴,通过**导演脚本**精确控制视听元素的自动化视频编排引擎。它接收结构化YAML指令,输出最终视频文件。
|
||||
|
||||
### 1.2 核心能力
|
||||
|
||||
| 能力 | 说明 | 技术方案 |
|
||||
|------|------|---------|
|
||||
| 情绪化人声合成 | 一个音色演绎多种情绪 | 豆包语音 2.0 (火山引擎) |
|
||||
| 背景音乐生成 | 氛围化配乐,风格可控 | ACE-Step 1.5 / MusicGen (云GPU) |
|
||||
| 数字人出镜 | 静态图→口播视频 | Wan2.2-S2V (通义万相 API) |
|
||||
| 素材搜索 | 根据语义搜索视频素材 | Pexels API (免费) |
|
||||
| 导演脚本 | 文案→结构化YAML→视频 | 本地大模型解析 |
|
||||
| 渲染合成 | 多轨合成最终视频 | Remotion + FFmpeg |
|
||||
|
||||
### 1.3 系统架构图
|
||||
|
||||
```
|
||||
用户文案
|
||||
│
|
||||
[01_director_parser]
|
||||
大模型解析 → director_script.yaml
|
||||
│
|
||||
┌─────────────┼─────────────┐
|
||||
│ │ │
|
||||
▼ ▼ ▼
|
||||
[02_voice] [03_bgm] [05_material]
|
||||
豆包语音2.0 ACE-Step Pexels + Wan2.2
|
||||
│ │ │
|
||||
└─────────────┼─────────────┘
|
||||
│
|
||||
[04_anchor_extractor]
|
||||
双轨锚点对齐
|
||||
│
|
||||
[06_composer]
|
||||
Remotion + FFmpeg
|
||||
│
|
||||
final.mp4
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 二、目录结构与文件清单
|
||||
|
||||
### 2.1 工具模块路径
|
||||
|
||||
参照 `05_tools/` 现有模块的 `TOOL.md + scripts/` 结构:
|
||||
|
||||
```
|
||||
~/workbuddy-agent-os/agent-sync/
|
||||
├── 05_tools/
|
||||
│ └── 09_ave/ ← 工具模块根目录
|
||||
│ ├── TOOL.md ← 工具说明文档 (必须)
|
||||
│ ├── install.sh ← 一键安装脚本 (可选)
|
||||
│ ├── requirements.txt.pip ← Python 依赖
|
||||
│ ├── config.yaml ← API 密钥/默认参数配置模板
|
||||
│ │
|
||||
│ ├── scripts/ ← 核心脚本目录
|
||||
│ │ ├── __init__.py
|
||||
│ │ ├── main.py ← 统一 CLI 入口
|
||||
│ │ │
|
||||
│ │ ├── 01_director_parser/
|
||||
│ │ │ ├── __init__.py
|
||||
│ │ │ ├── parser.py ← 文案 → director_script.yaml
|
||||
│ │ │ └── schemas.py ← YAML 结构校验
|
||||
│ │ │
|
||||
│ │ ├── 02_voice_synthesizer/
|
||||
│ │ │ ├── __init__.py
|
||||
│ │ │ ├── volcano.py ← 豆包语音 2.0 适配器
|
||||
│ │ │ └── aliyun.py ← CosyVoice 备用适配器
|
||||
│ │ │
|
||||
│ │ ├── 03_bgm_generator/
|
||||
│ │ │ ├── __init__.py
|
||||
│ │ │ ├── ace_step.py ← ACE-Step 1.5 适配器
|
||||
│ │ │ └── suno.py ← Suno API 备用适配器
|
||||
│ │ │
|
||||
│ │ ├── 04_anchor_extractor/
|
||||
│ │ │ ├── __init__.py
|
||||
│ │ │ └── extractor.py ← librosa 锚点提取
|
||||
│ │ │
|
||||
│ │ ├── 05_material_producer/
|
||||
│ │ │ ├── __init__.py
|
||||
│ │ │ ├── pexels.py ← Pexels 搜索
|
||||
│ │ │ ├── wan2_2.py ← Wan2.2-S2V 适配器
|
||||
│ │ │ └── fallback.py ← 本地素材回落
|
||||
│ │ │
|
||||
│ │ ├── 06_composer/
|
||||
│ │ │ ├── __init__.py
|
||||
│ │ │ ├── remotion.py ← Remotion 项目生成
|
||||
│ │ │ └── ffmpeg.py ← FFmpeg 后处理
|
||||
│ │ │
|
||||
│ │ ├── 07_service_layer/
|
||||
│ │ │ ├── __init__.py
|
||||
│ │ │ ├── api.py ← FastAPI 服务
|
||||
│ │ │ └── skill_bridge.py ← WorkBuddy 技能对接
|
||||
│ │ │
|
||||
│ │ └── lib/ ← 通用工具库
|
||||
│ │ ├── __init__.py
|
||||
│ │ ├── config.py ← 配置加载
|
||||
│ │ ├── cache.py ← 素材/结果缓存
|
||||
│ │ └── logger.py ← 日志
|
||||
│ │
|
||||
│ └── assets/ ← 模板/参考资源
|
||||
│ ├── director_template.yaml ← 导演脚本模板
|
||||
│ └── demo_scripts/ ← 测试脚本集
|
||||
│
|
||||
├── 02_skills/
|
||||
│ └── ave/ ← WorkBuddy 技能
|
||||
│ ├── SKILL.md ← 技能定义
|
||||
│ └── reference/ ← 技能参考文档
|
||||
│ └── director_schemas.md
|
||||
│
|
||||
└── agent-local/
|
||||
└── tools/
|
||||
└── ave/ ← 本机数据(不同步)
|
||||
├── config/
|
||||
│ └── local.yaml ← 本地 API 密钥等敏感配置
|
||||
├── cache/
|
||||
│ ├── materials/ ← 素材缓存
|
||||
│ └── outputs/ ← 渲染缓存
|
||||
└── templates/
|
||||
└── remotion/ ← Remotion 项目模板
|
||||
```
|
||||
|
||||
### 2.2 核心文件清单
|
||||
|
||||
| 编号 | 文件 | 功能 | 优先级 |
|
||||
|------|------|------|--------|
|
||||
| P0 | `09_ave/TOOL.md` | 工具说明文档 | ⭐ 必须 |
|
||||
| P0 | `09_ave/scripts/main.py` | CLI 入口 | ⭐ 必须 |
|
||||
| P0 | `09_ave/scripts/01_director_parser/parser.py` | 文案解析 | ⭐ 必须 |
|
||||
| P0 | `09_ave/scripts/02_voice_synthesizer/volcano.py` | 豆包语音 | ⭐ 必须 |
|
||||
| P0 | `09_ave/scripts/05_material_producer/pexels.py` | 素材搜索 | ⭐ 必须 |
|
||||
| P0 | `09_ave/scripts/06_composer/ffmpeg.py` | 合成 | ⭐ 必须 |
|
||||
| P1 | `09_ave/scripts/03_bgm_generator/ace_step.py` | 背景音乐 | 建议 |
|
||||
| P1 | `09_ave/scripts/04_anchor_extractor/extractor.py` | 锚点提取 | 建议 |
|
||||
| P2 | `09_ave/scripts/05_material_producer/wan2_2.py` | 数字人 | 可选 |
|
||||
| P2 | `09_ave/scripts/07_service_layer/api.py` | FastAPI 服务 | 可选 |
|
||||
| P2 | `02_skills/ave/SKILL.md` | WorkBuddy 技能 | 可选 |
|
||||
|
||||
---
|
||||
|
||||
## 三、实施阶段(分4阶段推进)
|
||||
|
||||
### 阶段 1:基础设施(1天)
|
||||
|
||||
**目标**:目录结构搭建 + API 注册 + 配置就绪
|
||||
|
||||
```
|
||||
任务清单:
|
||||
☐ 创建 09_ave/ 完整目录结构
|
||||
☐ 创建 agent-local/tools/ave/config/ 目录
|
||||
☐ 注册火山引擎豆包语音 2.0 → 获取 API Key + App ID + Access Token
|
||||
☐ 注册阿里云百炼 → 获取 API Key
|
||||
☐ 注册 Pexels → 获取 API Key
|
||||
☐ 编写 config.yaml 模板
|
||||
☐ 编写 local.yaml(本地敏感配置)
|
||||
☐ 编写 install.sh 安装脚本
|
||||
☐ 编写 TOOL.md 工具说明
|
||||
☐ 提交到 Git: git add, commit, push
|
||||
```
|
||||
|
||||
**产出**:
|
||||
- 可 `git clone` 后在目标机器 `bash install.sh` 一键就绪
|
||||
- agentos upgrade 能识别并检查 09_ave 模块
|
||||
|
||||
### 阶段 2:核心链路 MVP(2-3天)
|
||||
|
||||
**目标**:跑通 文案→人声→素材→合成 的可用闭环
|
||||
|
||||
**任务清单**:
|
||||
|
||||
**02_voice_synthesizer (半天)**
|
||||
```
|
||||
☐ 实现 volcano.py 基础 TTS 调用
|
||||
☐ 测试: python main.py voice --text "测试" --output test.wav
|
||||
☐ 上传音色样本 → 获取 speaker_id
|
||||
☐ 实现情感指令参数: emotion, speed, pitch
|
||||
☐ 实现 CosyVoice 备用适配器
|
||||
```
|
||||
|
||||
**05_material_producer (半天)**
|
||||
```
|
||||
☐ 实现 pexels.py 搜索+下载
|
||||
☐ 实现回退策略: search → fallback cache
|
||||
☐ 测试: python main.py material --search "sunset beach"
|
||||
```
|
||||
|
||||
**01_director_parser (半天)**
|
||||
```
|
||||
☐ 实现 schemas.py YAML 结构校验 (Pydantic)
|
||||
☐ 实现 parser.py 文案 → YAML
|
||||
☐ 编写 director_template.yaml
|
||||
☐ 测试: python main.py parse --script demo.txt
|
||||
```
|
||||
|
||||
**06_composer (半天)**
|
||||
```
|
||||
☐ 实现 ffmpeg.py 音视频合成
|
||||
☐ 实现字幕叠加 (ass/srt 字幕)
|
||||
☐ 测试: python main.py compose --voice voice.wav --material clips/
|
||||
```
|
||||
|
||||
**MVP 集成测试**
|
||||
```
|
||||
☐ 用一个小笑话脚本跑通完整链路
|
||||
☐ 产出第一个 final.mp4(纯人声+素材画面)
|
||||
```
|
||||
|
||||
### 阶段 3:品质提升(1-2天)
|
||||
|
||||
**目标**:加入背景音乐 + 锚点对齐 → 多轨精准编排
|
||||
|
||||
**任务清单**:
|
||||
|
||||
**03_bgm_generator**
|
||||
```
|
||||
☐ 调研 ACE-Step 1.5 部署方案 (云端 GPU)
|
||||
☐ 或实现 Suno API 备用适配器
|
||||
☐ 实现 ace_step.py → bgm.wav
|
||||
```
|
||||
|
||||
**04_anchor_extractor**
|
||||
```
|
||||
☐ 实现 extractor.py (librosa 节奏检测)
|
||||
☐ 实现人声字级锚点: word_timestamps → anchors.json
|
||||
☐ 实现 BGM 段落锚点: section_boundaries
|
||||
```
|
||||
|
||||
**01_director_parser 升级**
|
||||
```
|
||||
☐ 支持完整的导演脚本模板 (bgm_section, camera, avatar 等字段)
|
||||
```
|
||||
|
||||
**06_composer 升级**
|
||||
```
|
||||
☐ 双轨混音: voice.wav + bgm.wav → mixed_audio.wav
|
||||
☐ 基于锚点对齐画面切换
|
||||
☐ 支持分段渲染 (3分钟以上视频)
|
||||
```
|
||||
|
||||
### 阶段 4:数字人 + 技能封装(1天)
|
||||
|
||||
**目标**:数字人出镜 + 作为 WorkBuddy 技能可调用
|
||||
|
||||
**任务清单**:
|
||||
|
||||
**05_material_producer 升级**
|
||||
```
|
||||
☐ 实现 wan2_2.py (通义万相 S2V)
|
||||
☐ 实现 detect 图片合规检查
|
||||
☐ 实现异步任务轮询
|
||||
☐ 回落策略: detect失败 → 重试 → 跳过数字人
|
||||
```
|
||||
|
||||
**07_service_layer**
|
||||
```
|
||||
☐ FastAPI 服务: POST /ave/generate
|
||||
☐ 任务队列 + 进度轮询
|
||||
☐ 错误处理与重试逻辑
|
||||
```
|
||||
|
||||
**02_skills/ave/SKILL.md**
|
||||
```
|
||||
☐ 技能触发词: 视频、剪辑、生成视频
|
||||
☐ 输入: 文案文本 + 风格标签
|
||||
☐ 流程: 调用大模型 → 生成 YAML → 调用 AVE API
|
||||
☐ 输出: 返回 final.mp4 本地路径
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、API 注册清单与成本
|
||||
|
||||
### 4.1 必须注册的服务
|
||||
|
||||
| 服务 | 用途 | 注册步骤 | 预计耗时 |
|
||||
|------|------|---------|---------|
|
||||
| **火山引擎** | 豆包语音 2.0 | 注册→实名→ARK模型服务→创建API Key | 30min |
|
||||
| **阿里云百炼** | Wan2.2-S2V + CosyVoice | 注册→实名→开通服务→创建API Key | 20min |
|
||||
| **Pexels** | 素材搜索 | 注册→API Dashboard→创建Application | 10min |
|
||||
|
||||
### 4.2 各服务凭证清单
|
||||
|
||||
```
|
||||
agent-local/tools/ave/config/local.yaml:
|
||||
|
||||
# 火山引擎 (豆包语音 2.0)
|
||||
volcano:
|
||||
api_key: "sk-xxx" # ARK → API Key 管理
|
||||
app_id: "xxx" # 语音控制台 → App ID
|
||||
access_token: "xxx" # 语音控制台 → Access Token
|
||||
speaker_id: "xxx" # 声音复刻 → 训练后获取
|
||||
tts_model: "volcano_tts_2.0"
|
||||
|
||||
# 阿里云百炼
|
||||
aliyun:
|
||||
api_key: "sk-xxx" # 百炼 → API Key
|
||||
wan_model: "wan2.2-s2v"
|
||||
cosyvoice_model: "cosyvoice-v3.5-plus"
|
||||
|
||||
# Pexels
|
||||
pexels:
|
||||
api_key: "xxx" # Pexels API Dashboard
|
||||
rate_limit: 200 # 请求/小时
|
||||
```
|
||||
|
||||
### 4.3 月费预估 (日更一条3分钟视频)
|
||||
|
||||
| 模块 | 方案 | 月费 | 备注 |
|
||||
|------|------|------|------|
|
||||
| 人声合成 | 豆包语音 2.0 年付 | ~22元 | 首3月免费 |
|
||||
| 数字人 | HeyGen Creator | ~211元 | 或用 Wan2.2 API 按量计费 |
|
||||
| 背景音乐 | ACE-Step 云端GPU | ~2元 | 或 Suno API ~15-30元 |
|
||||
| 素材搜索 | Pexels | 0元 | 免费 |
|
||||
| 大模型调用 | DeepSeek / 通义千问 | ~1-10元 | 文案解析 |
|
||||
| **合计** | | **~25-250元/月** | 取决于数字人方案 |
|
||||
|
||||
---
|
||||
|
||||
## 五、本地硬件需求
|
||||
|
||||
| 环节 | 部署位置 | 需求 | Mac 16G 可行性 |
|
||||
|------|---------|------|---------------|
|
||||
| 文案解析 | 云端 API | 无 | ✅ 直接调 |
|
||||
| 人声合成 | 云端 API | 无 | ✅ 直接调 |
|
||||
| 背景音乐 | 云端 GPU | 6GB+ 显存 | ❌ 需云 GPU |
|
||||
| 数字人 | 云端 API | 无 | ✅ 直接调 |
|
||||
| 素材搜索 | 云端 API | 无 | ✅ 直接调 |
|
||||
| 锚点提取 | 本地 | CPU, librosa | ✅ |
|
||||
| Remotion | 本地 | 16GB RAM | ✅ 3-5min 以内 |
|
||||
| FFmpeg | 本地 | 无特殊要求 | ✅ 已装 |
|
||||
|
||||
> **结论**:Mac 16GB 内存足够处理 3 分钟内视频的本地环节。
|
||||
> 仅背景音乐生成(ACE-Step)和 Remotion 渲染长视频需要云端或分段。
|
||||
|
||||
---
|
||||
|
||||
## 六、可能遇到的问题与应对
|
||||
|
||||
### 6.1 API 层问题
|
||||
|
||||
| 问题 | 概率 | 影响 | 应对方案 |
|
||||
|------|------|------|---------|
|
||||
| 豆包语音 API 认证失败 | 中 | 人声不可用 | 实现 CosyVoice 备选;local.yaml 三重凭证逐一校验 |
|
||||
| Wan2.2-S2V 图片检测不通过 | 中 | 数字人无法生成 | 回落:跳过数字人片段,仅用素材画面+字幕 |
|
||||
| Pexels 搜索无结果 | 高 | 素材缺失 | 3层回落:search → AI生成 → fallback_mood_videos |
|
||||
| Pexels 速率限制 | 低 | 搜索被限 | 本地缓存层,已搜过的关键词不重复请求 |
|
||||
| ACE-Step API 响应慢 | 中 | BGM 生成延迟 | 异步队列,不影响主流程;或改用 Suno API |
|
||||
|
||||
### 6.2 本地渲染问题
|
||||
|
||||
| 问题 | 概率 | 影响 | 应对方案 |
|
||||
|------|------|------|---------|
|
||||
| Remotion 内存不足 | 中 | 长视频渲染失败 | 分段渲染(3分钟/段)→ FFmpeg concat |
|
||||
| FFmpeg 编码参数不合适 | 低 | 视频过大/质量差 | 预设多组编码参数,按场景切换 |
|
||||
| 中间文件撑满磁盘 | 中 | 渲染中断 | 自动清理策略:渲染成功后删除 wav/clips |
|
||||
| 中文字幕编码乱码 | 低 | 字幕显示异常 | 强制 UTF-8 + ASS 格式(非 SRT) |
|
||||
|
||||
### 6.3 编排逻辑问题
|
||||
|
||||
| 问题 | 概率 | 影响 | 应对方案 |
|
||||
|------|------|------|---------|
|
||||
| 语音与画面不同步 | 中 | 观感差 | 锚点容差机制:画面切换 ±0.2s |
|
||||
| BGM 段落与文案不匹配 | 中 | 情绪割裂 | 导演脚本中明确 bgm_section 映射 |
|
||||
| 多个素材时长与口播不匹配 | 高 | 画面空白/超长 | 自动拼接/裁剪素材到精确时长 |
|
||||
| 大模型解析 YAML 格式错误 | 中 | 链路中断 | schemas.py 严格校验 + 自动修复 |
|
||||
|
||||
---
|
||||
|
||||
## 七、落地检查清单
|
||||
|
||||
### 7.1 基础设施
|
||||
|
||||
```
|
||||
☐ 09_ave/ 目录创建完成
|
||||
☐ TOOL.md 编写完成
|
||||
☐ install.sh 编写完成
|
||||
☐ agent-local/tools/ave/config/local.yaml 配置完成
|
||||
☐ agentos upgrade 能识别 09_ave 模块
|
||||
☐ git commit + push 到远程
|
||||
```
|
||||
|
||||
### 7.2 MVP 链路
|
||||
|
||||
```
|
||||
☐ 豆包语音 2.0 TTS 调用成功 → test.wav
|
||||
☐ Pexels 搜索+下载成功 → material.mp4
|
||||
☐ 文案→导演脚本 YAML 解析成功
|
||||
☐ FFmpeg 音视频合成成功 → final.mp4
|
||||
☐ 小笑话脚本跑通全链路
|
||||
```
|
||||
|
||||
### 7.3 品质提升
|
||||
|
||||
```
|
||||
☐ 背景音乐生成 (ACE-Step/Suno) → bgm.wav
|
||||
☐ 双轨混音: voice + bgm
|
||||
☐ 锚点提取 + 画面同步切换
|
||||
☐ 分段渲染 + concat (长视频)
|
||||
```
|
||||
|
||||
### 7.4 技能封装
|
||||
|
||||
```
|
||||
☐ Wan2.2-S2V 数字人接入
|
||||
☐ FastAPI 服务运行
|
||||
☐ 02_skills/ave/SKILL.md 编写
|
||||
☐ agentos sync 注册技能
|
||||
☐ 技能调用测试: "帮我把这段文案做成视频"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 八、技能定义草案
|
||||
|
||||
### 8.1 技能触发
|
||||
|
||||
**技能名**:`ave_video_director`
|
||||
|
||||
**触发词**:
|
||||
- 视频、剪辑、生成视频、做视频
|
||||
- 把这段话做成视频、AI 视频、自动剪辑
|
||||
- director script、导演脚本
|
||||
|
||||
### 8.2 技能流程
|
||||
|
||||
```
|
||||
用户输入文案
|
||||
↓
|
||||
01_director_parser: 大模型解析文案 → director_script.yaml
|
||||
↓
|
||||
02_voice_synthesizer: 逐段合成情绪化人声 → voice_segments/
|
||||
↓
|
||||
03_bgm_generator: 生成背景音乐 → bgm.wav (可选)
|
||||
↓
|
||||
04_anchor_extractor: 双轨锚点提取 → anchors.json
|
||||
↓
|
||||
05_material_producer: 并行搜索素材 → material_clips/
|
||||
+ Wan2.2-S2V → avatar_clips/ (可选)
|
||||
↓
|
||||
06_composer: 编排渲染 + 编码 → final.mp4
|
||||
↓
|
||||
返回 final.mp4 路径给用户
|
||||
```
|
||||
|
||||
### 8.3 用户输入示例
|
||||
|
||||
```bash
|
||||
# 最简调用
|
||||
python main.py generate --script "今天我们来聊聊..."
|
||||
|
||||
# 指定风格
|
||||
python main.py generate --script demo.txt --style bedtime_story
|
||||
|
||||
# 高级:直接传导演脚本
|
||||
python main.py compose --director-script script.yaml
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 九、首次启动步骤
|
||||
|
||||
```bash
|
||||
# 1. 进入项目
|
||||
cd ~/workbuddy-agent-os/agent-sync
|
||||
|
||||
# 2. 创建目录结构
|
||||
mkdir -p 05_tools/09_ave/{scripts/{01_director_parser,02_voice_synthesizer,03_bgm_generator,04_anchor_extractor,05_material_producer/{pexels,wan2_2,fallback},06_composer,07_service_layer,lib},assets/demo_scripts}
|
||||
mkdir -p agent-local/tools/ave/{config,cache/{materials,outputs},templates/remotion}
|
||||
|
||||
# 3. 配置 API 密钥 (参考 4.2 节)
|
||||
# 编辑 agent-local/tools/ave/config/local.yaml
|
||||
|
||||
# 4. 安装 Python 依赖
|
||||
pip install -r 05_tools/09_ave/requirements.txt.pip
|
||||
|
||||
# 5. 测试人声合成
|
||||
python 05_tools/09_ave/scripts/main.py voice --text "你好,这是测试" --output test.wav
|
||||
|
||||
# 6. 跑通 MVP 闭环 (文案→人声→素材→合成)
|
||||
python 05_tools/09_ave/scripts/main.py generate --script assets/demo_scripts/test_story.txt
|
||||
|
||||
# 7. 注册技能到 WorkBuddy
|
||||
agentos sync
|
||||
|
||||
# 8. 提交到 Git
|
||||
git add -A && git commit -m "feat: AVE v2.0 工具模块初始化" && git push
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 十、文件生成顺序(按依赖关系)
|
||||
|
||||
```
|
||||
第1批 (并行,无依赖):
|
||||
├── TOOL.md
|
||||
├── config.yaml
|
||||
├── requirements.txt.pip
|
||||
├── lib/config.py
|
||||
├── lib/cache.py
|
||||
└── lib/logger.py
|
||||
|
||||
第2批 (无内部依赖):
|
||||
├── 02_voice_synthesizer/volcano.py
|
||||
├── 05_material_producer/pexels.py
|
||||
└── 06_composer/ffmpeg.py
|
||||
|
||||
第3批 (依赖第2批):
|
||||
├── 01_director_parser/parser.py
|
||||
├── 01_director_parser/schemas.py
|
||||
├── 02_voice_synthesizer/aliyun.py
|
||||
└── 05_material_producer/fallback.py
|
||||
|
||||
第4批 (依赖第2+3批):
|
||||
├── 03_bgm_generator/ace_step.py
|
||||
├── 03_bgm_generator/suno.py
|
||||
├── 04_anchor_extractor/extractor.py
|
||||
└── 06_composer/remotion.py
|
||||
|
||||
第5批 (依赖前面全部):
|
||||
├── main.py (CLI 入口)
|
||||
├── 05_material_producer/wan2_2.py
|
||||
├── 07_service_layer/api.py
|
||||
└── 07_service_layer/skill_bridge.py
|
||||
|
||||
第6批 (最后):
|
||||
├── 02_skills/ave/SKILL.md
|
||||
├── install.sh
|
||||
└── assets/director_template.yaml
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**文档版本**: v1.0
|
||||
**最后更新**: 2026-05-04
|
||||
**下一步**: 开始阶段1 → 目录创建 + API 注册
|
||||
@@ -0,0 +1,250 @@
|
||||
# AVE v2.0 架构重构方案
|
||||
|
||||
> **版本**: v2.0 (草案)
|
||||
> **创建**: 2026-05-15
|
||||
> **核心理念**: 结果推导 — 从目标视频反推创作链路
|
||||
> **知识基础**: AI视频提示词系统教科书(19章)+ 全网调研
|
||||
|
||||
---
|
||||
|
||||
## 一、核心差距分析
|
||||
|
||||
### 当前 AVE v1.x 的问题
|
||||
|
||||
| 维度 | 现状 | 目标 |
|
||||
|:-----|:-----|:-----|
|
||||
| **输入** | 仅支持 YAML 或 纯文本 | 支持小说/故事/RSS/链接等多种输入 |
|
||||
| **分镜** | 直接 LLM 解析,无结构化分镜 | 四步工作流:场景拆分→镜头分配→风格定调→prompt生成 |
|
||||
| **风格控制** | 无 | 统一的风格锚点 + 角色一致性 |
|
||||
| **素材来源** | Pexels(单一) | Kling API / 百炼 / 即梦网页版 / Pexels / 数字人 多引擎 |
|
||||
| **提示词** | 简单关键词搜索 | 五要素结构化提示词 + 正向/负向 + 权重控制 |
|
||||
| **输出** | 1080p mp4 仅口播类型 | 支持宣传片/故事片/TVC/漫剧等多类型 |
|
||||
|
||||
---
|
||||
|
||||
## 二、五层架构设计
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ Layer 1: 输入层 (文案/小说/RSS/链接 → 结构化内容) │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ Layer 2: 分镜引擎 (LLM拆分场景→分配镜头→风格定调→生prompt) │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ Layer 3: 素材生产 (Kling/百炼/即梦/Pexels/数字人 多引擎) │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ Layer 4: 合成引擎 (TTS + KenBurns + BGM + 字幕 → mp4) │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ Layer 5: 输出层 (1080x1920.mp4 → 抖音/快手/视频号) │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Layer 1: 输入层
|
||||
|
||||
```
|
||||
输入类型:
|
||||
├─ YAML脚本 → 直接解析(当前已有)
|
||||
├─ 纯文本文案 → LLM结构化(当前已有)
|
||||
├─ 小说/故事 → 四步工作流:规范→分镜→场景表→完整脚本
|
||||
├─ 网页链接/RSS → web_crawler采集 → 同上流程
|
||||
└─ 已有视频 → 逆向解构(video-to-prompt)
|
||||
```
|
||||
|
||||
### Layer 2: 分镜引擎(新增/重写)
|
||||
|
||||
替换当前的 `director_parser`,核心能力:
|
||||
|
||||
```
|
||||
① LLM场景拆分
|
||||
输入: 文案/故事
|
||||
输出: 场景列表 (每个场景有时间/地点/氛围)
|
||||
|
||||
② 镜头分配
|
||||
- 景别: 远景/全景/中景/特写/过肩
|
||||
- 运镜: 推/拉/摇/移/跟/升降/环绕
|
||||
- 时长: 3-15秒
|
||||
|
||||
③ 风格定调
|
||||
- 风格锚点: "超写实电影感" / "水墨国风" / "扁平化3D"
|
||||
- 色彩方案: 暖调/冷调/高饱和/低饱和
|
||||
- 光照方案: 晨光/逆光/霓虹/戏剧光
|
||||
|
||||
④ Prompt生成(五要素)
|
||||
= [风格] + [主体] + [环境] + [镜头运动] + [光线质感]
|
||||
+ 负向词 + 权重控制
|
||||
```
|
||||
|
||||
### Layer 3: 素材生产层(多引擎)
|
||||
|
||||
```
|
||||
素材引擎路由:
|
||||
├─ bailian_kling (主力) → ¥0.5-1/段, 45s, 已跑通
|
||||
├─ kling_official → ¥1/段, 5min, 100积分
|
||||
├─ jimeng_web (Peekaboo) → ¥0.3/段, 排队, 自动化中
|
||||
├─ pexels_free → ¥0/段, 静态, 兜底
|
||||
├─ wan2.2_digital_human → 数字人口播
|
||||
└─ buddy_cloud → ¥1.8/段, 备用
|
||||
```
|
||||
|
||||
### Layer 4: 合成引擎
|
||||
|
||||
```
|
||||
人声合成: CosyVoice TTS + 字级时间戳
|
||||
素材处理: Ken Burns (5种随机运镜)
|
||||
背景音乐: 和弦垫音 / mlx-audiocraft / 即梦BGM
|
||||
音量避让: duck_bgm (基于字级时间戳)
|
||||
字幕: ASS 精确字幕
|
||||
```
|
||||
|
||||
### Layer 5: 输出层
|
||||
|
||||
```
|
||||
参数: 1080x1920, 30fps, h264, 8Mbps
|
||||
格式: mp4
|
||||
分发: 抖音 / 快手 / 视频号
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 三、提示词引擎设计(核心升级)
|
||||
|
||||
### 3.1 YAML 脚本格式升级
|
||||
|
||||
```yaml
|
||||
meta:
|
||||
project_id: "daoist_002"
|
||||
style: "knowledge_lecture"
|
||||
global_style_anchor: "水墨国风,工笔山水画质感" # 新增:全局风格
|
||||
global_negative: "畸形、扭曲、面瘫、比例失调" # 新增:全局负向词
|
||||
fps: 24 # 新增:帧率
|
||||
voice:
|
||||
provider: aliyun
|
||||
emotion: 专业沉稳
|
||||
bgm:
|
||||
mood: calm
|
||||
output:
|
||||
resolution: 1080x1920
|
||||
fps: 24
|
||||
|
||||
segments:
|
||||
- id: 1
|
||||
text: "上善若水,水善利万物而不争。——《道德经》"
|
||||
duration_sec: 10
|
||||
# 新增:镜头语言
|
||||
camera: "镜头缓慢俯拍,从高空逐渐推进"
|
||||
shot_type: "全景" # 远景/全景/中景/特写
|
||||
# 新增:分镜描述(替代旧的 material.search)
|
||||
material:
|
||||
provider: bailian # 引擎选择
|
||||
prompt_subject: "清澈溪水流过圆石,水滴晶莹"
|
||||
prompt_environment: "云雾缭绕的深山幽谷"
|
||||
prompt_lighting: "晨雾中的柔光"
|
||||
subtitles: true
|
||||
```
|
||||
|
||||
### 3.2 Prompt 组装逻辑
|
||||
|
||||
```python
|
||||
def build_prompt(seg, global_style):
|
||||
"""五要素+ 权重 + 负向词 组装"""
|
||||
prompt = (
|
||||
f"({global_style}:1.3), "
|
||||
f"({seg['prompt_subject']}:1.5), "
|
||||
f"({seg['prompt_environment']}:1.2), "
|
||||
f"({seg['camera']}:1.1), "
|
||||
f"({seg['prompt_lighting']}:1.0)"
|
||||
)
|
||||
negative = f"({global_negative}:1.5)"
|
||||
return prompt, negative
|
||||
```
|
||||
|
||||
### 3.3 四步分镜工作流
|
||||
|
||||
```
|
||||
输入: "今天我要讲一个关于水的故事。上善若水..."
|
||||
|
||||
Step 1: LLM规范整理
|
||||
→ [场景描述]深山溪谷 [人物动作]无 [对话]旁白
|
||||
|
||||
Step 2: 镜头规划
|
||||
→ 需要 8 个镜头,分布: 全景(2) → 中景(3) → 特写(2) → 全景(1)
|
||||
|
||||
Step 3: 场景与角色表
|
||||
→ 场景1: 深山溪谷,清晨,薄雾
|
||||
→ 场景2: 水库大坝,午后,阳光强烈
|
||||
|
||||
Step 4: 生成完整分镜脚本
|
||||
→ 镜号 | 景别 | 画面描述 | 旁白 | 场景 | 提示词
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、多内容类型支持
|
||||
|
||||
### 4.1 口播知识类(当前)
|
||||
- 文案 → TTS → AI素材 → 合成
|
||||
- 适用:道家金句、知识分享、观点输出
|
||||
|
||||
### 4.2 故事叙事类(新增)
|
||||
- 小说/故事 → 四步分镜 → AI素材 → 合成
|
||||
- 适用:民间故事、寓言、历史小故事
|
||||
|
||||
### 4.3 漫剧动画类(新增)
|
||||
- 剧本 → 分镜 → 文生图(角色一致) → 图生视频 → 配音
|
||||
- 适用:短剧、条漫转视频、AI漫剧
|
||||
- 工具:Kling图生视频 + CosyVoice配音
|
||||
|
||||
### 4.4 宣传片类(新增)
|
||||
- 产品介绍 → 分镜 → 风格化素材 → 合成
|
||||
- 适用:品牌宣传、产品展示
|
||||
|
||||
---
|
||||
|
||||
## 五、实施路线图
|
||||
|
||||
| 阶段 | 内容 | 工作量 | 优先级 |
|
||||
|:-----|:-----|:------|:-------|
|
||||
| **P0 本周** | 分镜引擎: YAML升级 + prompt五要素组装 | 1天 | 🔴 |
|
||||
| **P0 本周** | 接入百炼Kling API替换Pexels | 0.5天 | 🔴 |
|
||||
| **P1 下周** | 四步分镜工作流(LLM驱动) + 场景/角色表 | 2天 | 🟡 |
|
||||
| **P1 下周** | 即梦网页版Peekaboo自动化收尾 | 1天 | 🟡 |
|
||||
| **P2 本月** | 故事输入 + 漫剧管线 | 3天 | 🟢 |
|
||||
| **P2 本月** | 风格库 + 模板库建设 | 2天 | 🟢 |
|
||||
| **P3 储备** | 宣传片类型 + 批量生产流水线 | 3天 | 🔵 |
|
||||
|
||||
---
|
||||
|
||||
## 六、知识体系关联
|
||||
|
||||
| AVE模块 | 关联教科书章节 | 知识点 |
|
||||
|:--------|:--------------|:-------|
|
||||
| director_parser | ch14 脚本转提示词 | 四步工作流 |
|
||||
| material_producer | ch12 模型对比, ch13 工具工作流 | Kling/即梦/百炼接入 |
|
||||
| composer | ch3 参数(ch4 分镜运镜), ch5 光影色彩 | 帧率/景别/光线设计 |
|
||||
| bgm_generator | ch6 音频设计 | 音景/情绪音乐 |
|
||||
| animate | ch7 微表情 | 动作拆解/表情控制 |
|
||||
| strategy planner | ch1 核心逻辑, ch2 结果驱动 | 逆向推导方法论 |
|
||||
| style library | ch8-11 多领域应用 | 电影/动漫/TVC/科幻风格 |
|
||||
|
||||
---
|
||||
|
||||
## 七、AVE 当前状态 vs 目标
|
||||
|
||||
```
|
||||
当前 AVE:
|
||||
输入 → 解析 → Pexels → TTS → 合成 → mp4
|
||||
│ │ │ │ │
|
||||
│ 仅YAML │ 无分镜 单一素材 │ CosyVoice 无BGM
|
||||
|
||||
目标 AVE v2.0:
|
||||
输入 → 分镜引擎 → 多引擎素材 → TTS→BGM→合成 → mp4
|
||||
│ │ │ │
|
||||
│ 多类型 │ 四步分镜 │ Kling/即梦 │ 风格统一
|
||||
│ 统一入口 │ 五要素prompt │ /Pexels/数字人 │ 全链路控制
|
||||
```
|
||||
|
||||
> **核心理念总结**:
|
||||
> 1. **结果推导** — 先想清楚最终画面,再反向拆解指令
|
||||
> 2. **分镜先行** — 不做文字到视频的直接跳转,先做好分镜
|
||||
> 3. **风格统一** — 全局风格锚点锁死一致性
|
||||
> 4. **多引擎** — 根据成本/速度/质量动态选择素材来源
|
||||
> 5. **持续迭代** — 每次只改5%进行AB测试
|
||||
@@ -0,0 +1,351 @@
|
||||
# AVE v3 全链路架构规划书
|
||||
|
||||
> 版本: v3.0-draft | 最后更新: 2026-05-15
|
||||
> 基于全域调研(Kling API / HoloCine / BeatSync-Engine / LatentSync / Lights-Camera-Consistency)
|
||||
|
||||
---
|
||||
|
||||
## 一、现状总览
|
||||
|
||||
### 1.1 已实现能力 ✅
|
||||
|
||||
| 模块 | 功能 | 依赖 |
|
||||
|:----|:----|:----:|
|
||||
| **口播策略** | 文案→TTS→素材搜索→混音→字幕→合成 | CosyVoice + Pexels + FFmpeg |
|
||||
| **卡点策略** | BGM→librosa节拍检测→素材→拍点切换→xfade | librosa + FFmpeg |
|
||||
| **数字人策略** | 图片+音频→Wan2.2 OmniHuman 对口型/M1动作模仿 | 火山引擎 DreamActor |
|
||||
| **Kling API 视频生成** | 文生视频/图生视频 (kling-v3) | 百炼 DashScope / Kling JWT |
|
||||
| **剧本解析** | 文案→LLM分镜→YAML脚本 | LLM (模板/在线) |
|
||||
| **锚点切换** | 静音检测驱动画面切换 | librosa |
|
||||
| **BGM 避让** | 说话时压低BGM / 间隙恢复 | 字级时间戳驱动 |
|
||||
| **字幕生成** | ASS字幕 (字级精确时间戳) | CosyVoice 时间戳 |
|
||||
| **长视频分段** | >180s 自动分段 + concat | FFmpeg |
|
||||
|
||||
### 1.2 待增强能力 🔧
|
||||
|
||||
| 模块 | 现状 | 目标 |
|
||||
|:----|:----|:-----|
|
||||
| **变速卡点** | 仅固定速度 xfade 切换 | setpts + atempo 动态速度曲线 |
|
||||
| **Kling LipSync** | 无集成 | 对接 fal.ai Kling LipSync API |
|
||||
| **角色一致性** | 仅手动 prompt 工程 | 定妆照→参考图→批量生成的自动化管线 |
|
||||
| **节拍检测** | 单层 beat_track | BeatSync-Engine 6阶段架构 (能量/结构/剪切策略) |
|
||||
| **素材复用** | 无缓存系统 | 索引+缓存+标签体系 |
|
||||
|
||||
### 1.3 调研中能力 🔍
|
||||
|
||||
| 模块 | 来源 | 预计投入 |
|
||||
|:----|:----|:--------:|
|
||||
| **角色叙事策略** | HoloCine + Lights-Camera-Consistency | 2-3天 |
|
||||
| **本地 Lip-Sync** | LatentSync v1.5 (字节跳动) | 0.5天部署 |
|
||||
| **多场景批量生成** | Kling Image O1 多图融合 | 0.5天 |
|
||||
| **数字资产索引** | 本地素材库 + 生成历史 | 1天 |
|
||||
|
||||
---
|
||||
|
||||
## 二、四策略管线详解
|
||||
|
||||
### 策略 A:口播(主路径,已成熟)
|
||||
|
||||
```
|
||||
输入: 文案(.txt/.yaml)
|
||||
流程:
|
||||
文案 → [剧本解析] → YAML分镜脚本
|
||||
→ [TTS: CosyVoice] → 带字级时间戳的人声 WAV
|
||||
→ [素材搜索: Pexels] → 每段 2 个视频素材
|
||||
→ [混音] → 人声 + BGM (可选避让)
|
||||
→ [字幕: ASS] → 字级精确时间戳
|
||||
→ [合成: FFmpeg] → 1080×1920 竖版视频
|
||||
输出: final.mp4
|
||||
```
|
||||
|
||||
**可直接执行的命令**: `python main.py video-factory --strategy 口播 --script script.yaml`
|
||||
|
||||
**增强方向**:
|
||||
- 🔧 Kling LipSync 后处理: 合成后加一步 LipSync 让口型匹配
|
||||
- 🧠 Kling AI 素材替代 Pexels: 图生视频生成更精准的场景素材
|
||||
|
||||
---
|
||||
|
||||
### 策略 B:卡点(已实现,需增强)
|
||||
|
||||
```
|
||||
输入: BGM + 素材 (提供/Pexels搜索)
|
||||
流程:
|
||||
BGM → [节拍检测: librosa beat_track] → BPM + 拍点列表
|
||||
→ [分组: N拍/组] → 每组时长 = N × (60/BPM)
|
||||
→ [素材分配] → 循环取素材, 精确裁剪到组时长
|
||||
→ [拼接: xfade] → 过渡拼接 (≤8组)
|
||||
输出: beat_sync.mp4
|
||||
```
|
||||
|
||||
**可直接执行的命令**: `python main.py video-factory --strategy 卡点 --bgm bgm.wav --search 风景`
|
||||
|
||||
**待增强**:
|
||||
| 功能 | 来源 | 实现方式 |
|
||||
|:----|:----|:--------|
|
||||
| **变速卡点 (speed ramp)** | FFmpeg setpts | `setpts=(1/v)*PTS` + `atempo=v` 滤波器链 |
|
||||
| **能量波切密度** | BeatSync-Engine | 高能段落更密集剪切, 低能段落保持 |
|
||||
| **歌曲结构检测** | BeatSync-Engine | Intro→Verse→Chorus→Bridge→Outro 分区 |
|
||||
| **视觉智能选素材** | BeatSync-Engine Qwen3-VL | 动作/美感/质量评分, 语义标签匹配 |
|
||||
|
||||
---
|
||||
|
||||
### 策略 C:数字人(已实现,分模式)
|
||||
|
||||
```
|
||||
输入: 角色头像 + 文案/参考视频
|
||||
流程 (对口型):
|
||||
头像 + 文案 → [TTS: CosyVoice] → 音频
|
||||
→ [Wan2.2 OmniHuman] → 带口型的数字人视频
|
||||
输出: /tmp/ave_digital_human.mp4
|
||||
|
||||
流程 (动作模仿):
|
||||
头像 + 参考视频 → [火山引擎 DreamActor M1] → 动作模仿视频
|
||||
```
|
||||
|
||||
**可直接执行的命令**: `python main.py video-factory --strategy 数字人 --image photo.jpg --text "文案"`
|
||||
|
||||
**增强方向**:
|
||||
- 🔧 Kling LipSync: 将 OmniHuman 换成 Kling LipSync (成本可控, 质量更高)
|
||||
- 🔧 LatentSync v1.5 本地部署: 零成本, 中文优化
|
||||
- 🧠 Wan2.2-S2V-14B: 远期替换, 音频→视频一步到位
|
||||
|
||||
---
|
||||
|
||||
### 策略 D:角色叙事(新策略,调研中)
|
||||
|
||||
```
|
||||
输入: 定妆照 + 剧本(.yaml) → 多场景故事
|
||||
流程:
|
||||
[定妆照生成] → 角色 sheet / 参考图
|
||||
→ [场景分解] → 剧本 → N个场景 + 每个场景的 Prompt
|
||||
→ [批量生成] → Kling 图生视频 (每场景固定seed + 角色描述块)
|
||||
→ [Temporal Bridge] → 上场景末帧 → 下场景首帧条件
|
||||
→ [卡点合成] → BGM + 节拍 + 变速过渡
|
||||
→ [LipSync] → 语音驱动口型
|
||||
输出: story_final.mp4
|
||||
```
|
||||
|
||||
**这个策略目前不存在**,需要从零构建。它吸收外部项目的核心思路:
|
||||
|
||||
| 来源 | 吸收点 | 实现方式 |
|
||||
|:----|:-------|:--------|
|
||||
| **HoloCine** (CVPR 2026) | 全局场景一致性, 稀疏注意力 | 用 Kling 的固定seed + 参考图模拟 |
|
||||
| **Lights-Camera-Consistency** | Asset-First, Temporal Bridge, JSON蓝图 | 设计 AVE 剧本 YAML 扩展格式 |
|
||||
| **Kling 3.0 参考图** | 单参考图锚定全片 | 定妆照→参考图→每场景生成 |
|
||||
| **Grid Method** | 2x3 多视角 Character Sheet | 先生成定妆照网格, 再逐一入场景 |
|
||||
|
||||
---
|
||||
|
||||
## 三、数字资产管理体系
|
||||
|
||||
### 3.1 资产分类
|
||||
|
||||
| 资产类型 | 来源 | 存储位置 | 复用方式 |
|
||||
|:---------|:----|:---------|:--------|
|
||||
| **角色定妆照** | AI生成/用户提供 | `assets/characters/` | Kling 参考图 / IP-Adapter |
|
||||
| **角色 LoRA** | CharForge 训练 | `assets/lora/` | ComfyUI / SD 生态 |
|
||||
| **生成视频片段** | Kling API | `cache/generations/` | 剪辑拼接 / 素材库 |
|
||||
| **Pexels 素材** | 网络搜索 | `cache/pexels/` | 各策略通用 |
|
||||
| **BGM 文件** | Pixabay/生成 | `assets/bgm/` | 卡点 / 口播策略 |
|
||||
| **剧本 YAML** | 用户编写/LLM生成 | `scripts/` | 版本管理 / 批量生产 |
|
||||
| **历史输出** | 各策略成品 | `output/` | 回放 / 二次剪辑 |
|
||||
| **LipSync 缓存** | LatentSync | `cache/lipsync/` | 重复使用 |
|
||||
|
||||
### 3.2 资产流转图(跨策略复用)
|
||||
|
||||
```
|
||||
定妆照 ────→ 口播 (片头数字人)
|
||||
│
|
||||
├──────→ 数字人 (恒等保持)
|
||||
│
|
||||
└──────→ 角色叙事 (场景批量生成)
|
||||
│
|
||||
├──────→ 卡点 (混剪素材)
|
||||
│
|
||||
└──────→ 口播 (最终合成)
|
||||
|
||||
生成片段 ───→ 口播 (Pexels 素材替代)
|
||||
│
|
||||
├──────→ 卡点 (素材复用)
|
||||
│
|
||||
└──────→ 素材缓存 → 下一次复用
|
||||
|
||||
BGM ─────→ 口播 / 卡点 / 角色叙事 (通用)
|
||||
```
|
||||
|
||||
### 3.3 资产索引建议
|
||||
|
||||
当前没有素材索引系统。建议新增 `scripts/asset_manager/` 模块:
|
||||
|
||||
```python
|
||||
# asset_manager/index.py — 素材索引
|
||||
class AssetIndex:
|
||||
def index_pexels_cache(self, cache_dir): ...
|
||||
def index_generations(self, gen_dir): ...
|
||||
def search(self, tags: list[str], type: str): ...
|
||||
def get_character_ref(self, char_id: str): ...
|
||||
def get_lipsync_cache(self, audio_hash: str): ...
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、外部项目集成点矩阵
|
||||
|
||||
| 外部项目 | 类型 | 集成方式 | 优先级 | 投入 |
|
||||
|:---------|:----|:---------|:-----:|:----:|
|
||||
| **BeatSync-Engine** | 开源 | 6阶段架构 → 升级 AVE beat_sync.py | P1 | 0.5天 |
|
||||
| **Kling LipSync (fal.ai)** | API | `scripts/composer/lipsync.py` 新增 | **P0** | 0.5天 |
|
||||
| **LatentSync v1.5** | 开源 | `scripts/latentsync/` 本地推理 | P2 | 0.5天 |
|
||||
| **HoloCine** | 论文 | 角色叙事策略的核心理论框架 | P2 | 2天 |
|
||||
| **Lights-Camera-Consistency** | 论文 | JSON蓝图+Temporal Bridge 设计模式 | P2 | 1天 |
|
||||
| **CharForge / IC-LoRA** | 开源 | LoRA 训练管线 | P3 | 1天 |
|
||||
| **Grid Method (Midjourney社区)** | 方法论 | 定妆照生成 prompt 模板 | P0 | 0.2天 |
|
||||
| **Wan2.2-S2V-14B** | 开源 | 远期替换数字人引擎 | P3 | 待定 |
|
||||
| **MoneyPrinterTurbo** | 开源 | 参考其全自动化架构设计 | P3 | 0.3天 |
|
||||
| **ComfyUI-vidflows** | 开源 | ComfyUI 内的多镜头叙事参考 | P3 | 0.3天 |
|
||||
|
||||
---
|
||||
|
||||
## 五、开发路线图(按优先级)
|
||||
|
||||
### Sprint 1 (P0, ~1天)
|
||||
|
||||
| 序号 | 任务 | 产出文件 | 来源 |
|
||||
|:---:|:----|:---------|:-----|
|
||||
| 1 | **定妆照生成** — 2x3 Grid Method Prompt 模板 + 自动化脚本 | `scripts/character_sheet.py` | Grid Method |
|
||||
| 2 | **Kling LipSync 集成** — 新增 lipsync.py 模块 + CLI 子命令 | `scripts/composer/lipsync.py` | fal.ai |
|
||||
| 3 | **角色描述块锁定** — Scene YAML 扩展 `character_ref` 字段 | `scripts/director_parser/schemas.py` | Lights-Camera |
|
||||
|
||||
### Sprint 2 (P1, ~1天)
|
||||
|
||||
| 序号 | 任务 | 产出文件 | 来源 |
|
||||
|:---:|:----|:---------|:-----|
|
||||
| 4 | **变速卡点引擎** — setpts + atempo 动态速度曲线 | `scripts/composer/speed_ramp.py` | BeatSync-Engine |
|
||||
| 5 | **节拍检测升级** — 能量曲线+歌曲结构+剪切策略 (6阶段) | 改写 `scripts/composer/beat_sync.py` | BeatSync-Engine |
|
||||
| 6 | **卡点+口播融合管线** — 口播场景中插入变速卡点过渡 | `scripts/composer/hybrid.py` | 新设计 |
|
||||
|
||||
### Sprint 3 (P2, ~2天)
|
||||
|
||||
| 序号 | 任务 | 产出文件 | 来源 |
|
||||
|:---:|:----|:---------|:-----|
|
||||
| 7 | **角色叙事策略** — 定妆照→场景批量生成→Temporal Bridge | `scripts/story_director/` | HoloCine + LCC |
|
||||
| 8 | **本地 LatentSync 部署** — Docker / venv 部署 + AVE 集成 | `scripts/latentsync/` | 字节跳动 |
|
||||
| 9 | **素材资产管理器** — 索引 + 缓存 + 标签 + 搜索 | `scripts/asset_manager/` | 新设计 |
|
||||
|
||||
### Sprint 4 (P3, 可选)
|
||||
|
||||
| 序号 | 任务 | 来源 |
|
||||
|:---:|:----|:-----|
|
||||
| 10 | LoRA 训练管线 (CharForge) | CharForge |
|
||||
| 11 | Wan2.2-S2V-14B 本地部署 | Wan-AI |
|
||||
| 12 | ComfyUI 工作流导出支持 | ComfyUI-vidflows |
|
||||
|
||||
---
|
||||
|
||||
## 六、关键决策记录
|
||||
|
||||
### 6.1 Kling LipSync vs. 本地 LatentSync
|
||||
|
||||
| 维度 | Kling LipSync (fal.ai) | LatentSync v1.5 (本地) |
|
||||
|:----|:---------------------:|:---------------------:|
|
||||
| 成本 | $0.014/5s (¥0.10/镜头) | 免费 |
|
||||
| 质量 | ⭐⭐⭐⭐ 商业级 | ⭐⭐⭐⭐⭐ 中文优化 |
|
||||
| 部署 | 零部署 (API调用) | 需 8GB VRAM + Docker |
|
||||
| 延迟 | ~12分钟/次 | ~数秒~数十秒 |
|
||||
| 适合 | **短期快速集成** | 中期大批量场景 |
|
||||
|
||||
**结论**:先上 Kling LipSync(P0,半天完成集成),LatentSync 作为 P2 储备。
|
||||
|
||||
### 6.2 角色叙事 vs. 增强现有策略
|
||||
|
||||
**不新建策略**,而是在现有策略上叠加 3 个增强层:
|
||||
1. **定妆照层** — 所有策略共享(P0)
|
||||
2. **角色锁定层** — 场景 YAML 加 character_ref 字段(P0)
|
||||
3. **LipSync 层** — 合成后后处理(P0)
|
||||
|
||||
角色叙事策略本质上是"口播 + 定妆照 + 批量场景 + 卡点的融合产物",不是独立的全新管线。
|
||||
|
||||
### 6.3 素材策略:Pexels vs. Kling AI vs. 即梦VIP
|
||||
|
||||
| 策略 | 成本 | 质量匹配度 | 可用性 |
|
||||
|:----|:----:|:---------:|:------:|
|
||||
| **Pexels** (当前) | 免费 (需API Key) | ⭐⭐ (通用素材, 不精确) | ✅ 稳定 |
|
||||
| **Kling AI 图生视频** | ¥1/5s | ⭐⭐⭐⭐ (精准匹配) | ✅ AVE已集成 |
|
||||
| **即梦VIP (网页版)** | ¥0.22-0.37/段 | ⭐⭐⭐⭐⭐ | 🚧 需Peekaboo |
|
||||
| **即梦API** | ¥1-3/段 | ⭐⭐⭐⭐⭐ | 🚧 高级会员 |
|
||||
|
||||
**结论**:维持 Pexels 为默认素材源(免费),Kling AI 素材为按需增强(高精度场景),即梦为长期优化方向。
|
||||
|
||||
---
|
||||
|
||||
## 七、自纠偏:架构辩论
|
||||
|
||||
### 辩论 1:要不要做统一的"剧本→多场景→角色叙事"管线?
|
||||
|
||||
**正方**:这是用户需要的最终形态——输入一个故事,输出一个完整的角色化视频
|
||||
**反方**:这会是一个很重的投入(2-3天),且依赖多个未成熟的外部模型
|
||||
**裁决**:先不做统一管线。改为在现有 3 个策略上加"角色一致性增强层"和"LipSync 层",角色叙事是"口播+定妆照+卡点"的组合产物。等 P0/P1 完成后,自然就知道统一的管线应该长什么样。
|
||||
|
||||
### 辩论 2:Kling LipSync API 还是本地模型?
|
||||
|
||||
**正方**:API 零部署、零维护、商业级质量、价格合理
|
||||
**反方**:12分钟推理时间太长、依赖服务商、文本模式仅120字
|
||||
**裁决**:API 先上(P0),本地模型作为中期增强(P2)。API 的 12 分钟可以通过并行提交缓冲。
|
||||
|
||||
### 辩论 3:变速卡点值不值得单独做一个模块?
|
||||
|
||||
**正方**:这是用户明确提到的核心需求,也是和竞品差异化的关键
|
||||
**反方**:FFmpeg setpts/atempo 实现简单,不需要单独模块
|
||||
**裁决**:值。但不是单独做"speed_ramp.py",而是把变速作为 beat_sync 管线的一个可选滤波器链。BeatSync-Engine 的能量波切密度策略才是真正的核心创新——变速只是具体实现手段。
|
||||
|
||||
---
|
||||
|
||||
## 八、项目文件结构建议
|
||||
|
||||
```
|
||||
scripts/
|
||||
├── main.py # CLI 入口
|
||||
├── video_factory.py # 工厂路由 (已有, 扩展)
|
||||
├── character_sheet.py # 🆕 定妆照生成 (Grid Method)
|
||||
├── asset_manager/ # 🆕 资产管理
|
||||
│ ├── index.py # 素材索引
|
||||
│ ├── cache.py # 缓存管理
|
||||
│ └── tags.py # 标签系统
|
||||
├── composer/
|
||||
│ ├── beat_sync.py # 🔧 节拍检测升级 (6阶段)
|
||||
│ ├── speed_ramp.py # 🆕 变速滤波器链
|
||||
│ ├── lipsync.py # 🆕 Kling LipSync 集成
|
||||
│ ├── ffmpeg.py # (已有)
|
||||
│ └── hybrid.py # 🆕 口播+卡点融合
|
||||
├── story_director/ # 🆕 角色叙事 (P2)
|
||||
│ ├── scene_planner.py # 场景分解
|
||||
│ ├── temporal_bridge.py # Temporal Bridge
|
||||
│ └── batch_generator.py # 批量 Kling 生成
|
||||
├── director_parser/
|
||||
│ ├── parser.py # 🔧 扩展 character_ref
|
||||
│ └── schemas.py # 🔧 YAML schema 扩展
|
||||
├── material_producer/
|
||||
│ ├── kling/kling.py # 🔧 增加 seed 参数
|
||||
│ └── pexels/search.py # (已有)
|
||||
├── voice_synthesizer/ # (已有)
|
||||
└── lib/
|
||||
└── config.py # (已有)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 九、下一步行动
|
||||
|
||||
**立即做 (P0)**:
|
||||
1. 定妆照 Grid Method Prompt 模板
|
||||
2. Kling LipSync 集成 (lipsync.py + CLI)
|
||||
3. YAML Schema 扩展 (character_ref 字段)
|
||||
|
||||
**明天做 (P1)**:
|
||||
4. 变速卡点引擎
|
||||
5. 节拍检测升级
|
||||
|
||||
**本周做 (P2)**:
|
||||
6. 角色叙事管线初版
|
||||
7. 素材资产管理器
|
||||
@@ -0,0 +1,197 @@
|
||||
# AVE BGM 素材库 v1.0
|
||||
|
||||
> 版本: 1.0 | 更新: 2026-05-13
|
||||
> 用途: 人工选曲参考 + AI 生成参考 (mlx-audiocraft prompt 模板)
|
||||
> 路径索引: 按情绪/场景/节奏三级分类
|
||||
|
||||
---
|
||||
|
||||
## 一、分类体系
|
||||
|
||||
### 按情绪 (Mood)
|
||||
|
||||
| 情绪 | 标签 | BPM 范围 | 适用场景 |
|
||||
|:-----|:-----|:--------:|:---------|
|
||||
| 激昂 | epic, triumphant, powerful | 100-130 | 科技突破、企业里程碑、颁奖 |
|
||||
| 大气 | cinematic, majestic, grand | 70-90 | 新闻联播、国家成就、纪录片 |
|
||||
| 紧张 | suspenseful, intense, urgent | 120-150 | 科技竞争、局势分析、倒计时 |
|
||||
| 温馨 | warm, gentle, cozy | 60-80 | 励志金句、生活记录、情感故事 |
|
||||
| 励志 | inspiring, uplifting, motivational | 80-110 | 金句合集、个人成长、正能量 |
|
||||
| 轻松 | happy, cheerful, light | 90-120 | Vlog、日常分享、旅游记录 |
|
||||
| 科技感 | futuristic, electronic, tech | 110-130 | 芯片、AI、数码产品、演示 |
|
||||
| 悬疑 | mysterious, dark, ambient | 50-70 | 深度分析、悬疑故事、揭秘 |
|
||||
| 悲伤 | sad, emotional, melancholic | 55-75 | 感人故事、离别、怀旧 |
|
||||
|
||||
### 按场景 (Scene)
|
||||
|
||||
| 场景 | 首选情绪 | 备选 | 典型时长 |
|
||||
|:-----|:--------:|:----:|:--------:|
|
||||
| 科技新闻/芯片突破 | 激昂 | 科技感、紧张 | 15-45s |
|
||||
| 励志金句/正能量 | 励志 | 温馨、轻松 | 30-60s |
|
||||
| 品牌宣传/企业视频 | 大气 | 激昂、科技感 | 30-90s |
|
||||
| 故事讲述/叙事 | 温馨 | 悬疑、悲伤 | 60-180s |
|
||||
| 卡点视频/节奏混剪 | 激昂 | 轻松、励志 | 15-30s |
|
||||
| 片头/片尾 | 大气 | 激昂、励志 | 3-8s |
|
||||
| 科普/知识分享 | 轻松 | 温馨、科技感 | 30-120s |
|
||||
|
||||
---
|
||||
|
||||
## 二、推荐曲库
|
||||
|
||||
### 🏆 激昂 · Epic (科技新闻/芯片突破)
|
||||
|
||||
| 曲名 | BPM | 时长 | 版权 | 获取 | AI Prompt |
|
||||
|:-----|:---:|:----:|:----:|:-----|:----------|
|
||||
| **Heroes Today** | 120 | 2:30 | CC0 | YouTube Audio Library | `epic orchestral, brass and strings, powerful drums, triumphant, building tension, 120 BPM, no vocals` |
|
||||
| **The Rising** | 115 | 3:00 | CC0 | Free Music Archive | `cinematic orchestral, rising strings, heroic brass, driving percussion, 115 BPM, no vocals` |
|
||||
| **Epic Cinematic** | 110 | 2:45 | CC0 | Pixabay Music | `epic cinematic, orchestral hits, powerful crescendo, 110 BPM, no vocals` |
|
||||
| **Beyond the Stars** | 105 | 3:30 | CC0 | YouTube Audio Library | `uplifting cinematic, building strings, triumphant brass, space ambient, 105 BPM, no vocals` |
|
||||
|
||||
### 🏆 大气 · Cinematic (品牌/新闻/纪录片)
|
||||
|
||||
| 曲名 | BPM | 时长 | 版权 | 获取 | AI Prompt |
|
||||
|:-----|:---:|:----:|:----:|:-----|:----------|
|
||||
| **Inspire** | 85 | 3:15 | CC0 | YouTube Audio Library | `cinematic ambient, gradual build, orchestral swells, inspiring, 85 BPM, no vocals` |
|
||||
| **Echoes of Truth** | 75 | 4:00 | CC0 | Free Music Archive | `cinematic ambient, serious tone, orchestra and choir, majestic, 75 BPM, no vocals` |
|
||||
| **Last Dawn** | 80 | 2:50 | CC0 | Pixabay Music | `cinematic slow build, atmospheric pads, emotional strings, 80 BPM, no vocals` |
|
||||
| **Documentary Background** | 90 | 3:00 | CC0 | Pixabay Music | `documentary style, soft piano, ambient strings, professional, 90 BPM, no vocals` |
|
||||
|
||||
### 🏆 励志 · Inspiring (金句/正能量/成长)
|
||||
|
||||
| 曲名 | BPM | 时长 | 版权 | 获取 | AI Prompt |
|
||||
|:-----|:---:|:----:|:----:|:-----|:----------|
|
||||
| **Uplifting Piano** | 95 | 2:30 | CC0 | Pixabay Music | `uplifting piano, soft strings, warm and emotional, inspirational, 95 BPM, no vocals` |
|
||||
| **Never Give Up** | 100 | 3:00 | CC0 | YouTube Audio Library | `motivational rock, driving beat, uplifting melody, 100 BPM, no vocals` |
|
||||
| **Warm Hope** | 85 | 2:40 | CC0 | Pixabay Music | `warm acoustic guitar, soft piano, hopeful, gentle rise, 85 BPM, no vocals` |
|
||||
| **Morning Motivation** | 105 | 2:20 | CC0 | YouTube Audio Library | `upbeat motivational, light percussion, cheerful piano, 105 BPM, no vocals` |
|
||||
|
||||
### 🏆 科技感 · Tech (数码/AI/产品演示)
|
||||
|
||||
| 曲名 | BPM | 时长 | 版权 | 获取 | AI Prompt |
|
||||
|:-----|:---:|:----:|:----:|:-----|:----------|
|
||||
| **Digital Horizon** | 120 | 3:00 | CC0 | Pixabay Music | `electronic futuristic, synth pads, glitch beats, tech, 120 BPM, no vocals` |
|
||||
| **Neon Lights** | 125 | 2:30 | CC0 | YouTube Audio Library | `electronic ambient, pulsing synth, modern tech feel, 125 BPM, no vocals` |
|
||||
| **Innovation** | 110 | 2:45 | CC0 | Free Music Archive | `corporate tech, clean synth, modern electronic, professional, 110 BPM, no vocals` |
|
||||
|
||||
### 🏆 温馨/轻松 · Warm (生活/Vlog/故事)
|
||||
|
||||
| 曲名 | BPM | 时长 | 版权 | 获取 | AI Prompt |
|
||||
|:-----|:---:|:----:|:----:|:-----|:----------|
|
||||
| **Gentle Breeze** | 70 | 3:00 | CC0 | Pixabay Music | `soft ambient, gentle piano, nature sounds, relaxing, 70 BPM, no vocals` |
|
||||
| **Sunny Day** | 95 | 2:15 | CC0 | YouTube Audio Library | `happy ukulele, cheerful melody, light percussion, 95 BPM, no vocals` |
|
||||
| **Cozy Morning** | 80 | 2:30 | CC0 | Pixabay Music | `warm acoustic, soft guitar, cozy atmosphere, 80 BPM, no vocals` |
|
||||
|
||||
---
|
||||
|
||||
## 三、AI 生成参考 (mlx-audiocraft Prompt 模板)
|
||||
|
||||
以下 prompt 与上述曲库风格对应, 可用于 `--use-mlx` 模式生成类似风格的 BGM:
|
||||
|
||||
```bash
|
||||
# 激昂 (对标 Heroes Today)
|
||||
python main.py bgm --mood epic --duration 60 --use-mlx
|
||||
# → prompt: epic orchestral, brass and strings, powerful drums, 120 BPM
|
||||
|
||||
# 大气 (对标 Inspire)
|
||||
python main.py bgm --mood inspiring --duration 60 --use-mlx
|
||||
# → prompt: uplifting cinematic, building strings, triumphant, 85 BPM
|
||||
|
||||
# 励志
|
||||
python main.py bgm --mood happy --duration 60 --use-mlx
|
||||
# → prompt: bright ukulele, cheerful melody, acoustic guitar, 90 BPM
|
||||
|
||||
# 科技感 (使用 custom prompt)
|
||||
HF_ENDPOINT=https://hf-mirror.com python main.py bgm --mood normal --duration 60 --use-mlx
|
||||
# → 用自定义 prompt 覆盖: electronic futuristic, synth pads, 120 BPM
|
||||
```
|
||||
|
||||
### Prompt 优化技巧
|
||||
|
||||
| 效果 | 关键词 |
|
||||
|:-----|:-------|
|
||||
| 更激昂 | `epic, triumphant, powerful crescendo, building tension` |
|
||||
| 更柔和 | `soft, gentle, warm, relaxing, smooth` |
|
||||
| 更快节奏 | `driving beat, fast tempo, energetic` |
|
||||
| 更有电影感 | `cinematic, orchestral, dramatic swells` |
|
||||
| 更科技感 | `electronic, synth, futuristic, digital` |
|
||||
| 更真实乐器 | `acoustic, piano, strings, live instruments` |
|
||||
| 不要打击乐 | `no percussion, no drums` |
|
||||
| 纯背景 | `ambient, background, subtle, pad` |
|
||||
|
||||
---
|
||||
|
||||
## 四、版权合规指南
|
||||
|
||||
| 来源 | 商用 | 需署名 | 费用 | 安全等级 |
|
||||
|:-----|:----:|:------:|:----:|:--------:|
|
||||
| **Pixabay Music** | ✅ 可 | ❌ 不强制 | 免费 | 🟢 安全 |
|
||||
| **YouTube Audio Library** | ✅ 可 | ⚠️ 部分需 | 免费 | 🟢 大部分安全 |
|
||||
| **Free Music Archive (CC0)** | ✅ 可 | ❌ 不强制 | 免费 | 🟢 安全 |
|
||||
| **Free Music Archive (CC BY)** | ✅ 可 | ⚠️ **必须** | 免费 | 🟡 需标注 |
|
||||
| **爱给网** | ✅ 可 | ❌ | ¥19-99/首 | 🟢 付费安全 |
|
||||
| **曲多多** | ✅ 可 | ❌ | ¥10-30/首 | 🟢 付费安全 |
|
||||
| **耳聆网** | ⚠️ 视具体 | ⚠️ 视具体 | 免费/付费 | 🟡 需逐首确认 |
|
||||
| **mlx-audiocraft AI 生成** | ⚠️ 见下 | ❌ | 免费 | 🟡 需确认 |
|
||||
|
||||
### mlx-audiocraft 商用说明
|
||||
- 模型权重: CC-BY-NC 4.0 (Meta 许可, 非商业)
|
||||
- 生成结果: 法律灰色地带, 建议非商用途
|
||||
- 替代: 如果用 Suno API 付费生成则无此顾虑
|
||||
|
||||
---
|
||||
|
||||
## 五、使用方式
|
||||
|
||||
### 人工选曲
|
||||
```bash
|
||||
# 查看此文档 → 按情绪/场景定位 → 按链接下载 → 放入对应目录
|
||||
python bgm_generator/bgm_download.py list
|
||||
```
|
||||
|
||||
### AI 生成 (替代选曲)
|
||||
```bash
|
||||
# 直接生成对应情绪的 BGM (如激昂类型)
|
||||
HF_ENDPOINT=https://hf-mirror.com python main.py bgm --mood epic --duration 60 --use-mlx
|
||||
|
||||
# 效果不满意可以加自定义 prompt
|
||||
python -c "
|
||||
from bgm_generator.suno import generate_bgm
|
||||
generate_bgm(
|
||||
mood='custom',
|
||||
duration=60,
|
||||
output='/tmp/custom_bgm.wav',
|
||||
use_mlx=True,
|
||||
)
|
||||
# 内部会使用自定义 mood 的 prompt
|
||||
"
|
||||
```
|
||||
|
||||
### 与视频工厂集成
|
||||
```bash
|
||||
# 口播 + BGM (选 AI 生成或已有曲目)
|
||||
python main.py video-factory --strategy 口播 --script script.yaml --bgm /path/to/bgm.wav --duck
|
||||
|
||||
# 卡点 + BGM (自动节拍检测)
|
||||
python main.py video-factory --strategy 卡点 --bgm /path/to/bgm.wav --search "nature"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、扩展曲库
|
||||
|
||||
如需扩充曲库, 推荐以下免费渠道:
|
||||
|
||||
| 渠道 | 数量 | 质量 | 获取方式 |
|
||||
|:-----|:----:|:----:|:---------|
|
||||
| **Pixabay Music** | 5万+ | ⭐⭐⭐⭐ | `search --mood happy` 打开浏览器下载 |
|
||||
| **YouTube Audio Library** | 2万+ | ⭐⭐⭐⭐⭐ | 需科学上网 |
|
||||
| **Free Music Archive** | 10万+ | ⭐⭐⭐⭐ | 需筛选 CC0 标签 |
|
||||
| **耳聆网** | 3万+ | ⭐⭐⭐ | 含音效+音乐 |
|
||||
| **爱给网** | 5万+ | ⭐⭐⭐⭐ | 付费商用 ¥19起 |
|
||||
|
||||
```bash
|
||||
# 快速添加新曲目:
|
||||
# 1. 下载 MP3 到 bgm_library/{mood}/ 目录
|
||||
# 2. 运行 scan 入库
|
||||
python bgm_generator/bgm_download.py scan
|
||||
```
|
||||
@@ -0,0 +1,237 @@
|
||||
# AVE Dashboard — 生产监控面板方案设计
|
||||
|
||||
> 版本: v1.0-draft | 2026-05-15
|
||||
> 状态: 概念设计
|
||||
|
||||
---
|
||||
|
||||
## 一、需求还原
|
||||
|
||||
你的诉求:
|
||||
|
||||
> "在一个页面里,能全方位看到生产线的进度和进展,追溯历史、查询资产(BGM、素材、定妆照、生成片段等),看到一条视频产线的全流程回溯,能复用、能修正、能定位问题,还能跟踪成本和付费历史。"
|
||||
|
||||
**一句话**:一个 AVE 的"生产管理后台",把 CLI 的黑盒操作变成可视化的透明产线。
|
||||
|
||||
---
|
||||
|
||||
## 二、价值评估
|
||||
|
||||
### 2.1 解决了什么核心问题
|
||||
|
||||
| 问题 | 现状 | Dashboard 解决 |
|
||||
|:----|:----|:--------------|
|
||||
| **产线不可视** | CLI 跑完才知道结果 | 实时看进度、每步状态 |
|
||||
| **无法追溯** | 不知道哪次用了哪个 BGM/素材 | 每条 production 关联所有输入输出 |
|
||||
| **无法复用** | 想重跑类似配置要手动记参数 | 一键 re-run / clone |
|
||||
| **费用失控** | 跑完才知道花了多少钱 | 实时累计 + 单步成本分解 |
|
||||
| **故障定位慢** | 出错了要翻终端日志 | 红点 + 错误详情 + 重试按钮 |
|
||||
| **素材管理散** | 文件散落在 cache、output、tmp 里 | 统一索引 + 标签 + 搜索 |
|
||||
|
||||
### 2.2 投入产出分析
|
||||
|
||||
| 维度 | 评估 |
|
||||
|:----|:-----|
|
||||
| **工程量** | 中等(~1.5天:0.5天数据层 + 0.5天后端 + 0.5天前端) |
|
||||
| **长期收益** | 极高——每次生产都自动记录,解决了"不可追溯、不可复用"的根本问题 |
|
||||
| **风险** | 低——数据层是增量添加,不影响现有 CLI 运行 |
|
||||
| **是否阻塞 P0** | 否——可以和 P0 平行开发 |
|
||||
|
||||
**结论:应该做,但不是立即做。建议在 P0/P1 核心功能完成后,作为 P2 的基石模块启动。**
|
||||
|
||||
---
|
||||
|
||||
## 三、架构设计
|
||||
|
||||
### 3.1 整体架构
|
||||
|
||||
```
|
||||
现有AVE CLI 新 Dashboard
|
||||
────────── ──────────
|
||||
main.py ave_dashboard/
|
||||
├── video-factory ├── app.py (FastAPI 后端)
|
||||
├── beat-sync ├── templates/
|
||||
├── digital-human │ └── dashboard.html (前端页面)
|
||||
└── ... └── static/
|
||||
│ └── app.js
|
||||
│ 自动写DB
|
||||
▼
|
||||
┌─────────────────────────┐
|
||||
│ SQLite: data/ave.db │ ◄──── FastAPI 读取 + API
|
||||
└─────────────────────────┘
|
||||
```
|
||||
|
||||
### 3.2 数据模型(SQLite)
|
||||
|
||||
```sql
|
||||
-- 生产记录(每次运行一条)
|
||||
CREATE TABLE productions (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
strategy TEXT NOT NULL, -- 'oral' | 'beat-sync' | 'digital-human' | 'story'
|
||||
status TEXT DEFAULT 'running', -- 'running' | 'completed' | 'failed'
|
||||
script_path TEXT,
|
||||
script_name TEXT,
|
||||
output_path TEXT,
|
||||
duration_sec REAL,
|
||||
total_cost REAL DEFAULT 0.0,
|
||||
config_json TEXT, -- 完整的 CLI 参数 JSON
|
||||
error_message TEXT,
|
||||
created_at TEXT DEFAULT (datetime('now')),
|
||||
completed_at TEXT
|
||||
);
|
||||
|
||||
-- 生产步骤(每个 production 的每一步)
|
||||
CREATE TABLE production_steps (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
production_id INTEGER REFERENCES productions(id),
|
||||
step_name TEXT NOT NULL, -- 'parse_script' | 'tts' | 'search_material' | ...
|
||||
status TEXT DEFAULT 'pending', -- 'pending' | 'running' | 'completed' | 'failed'
|
||||
started_at TEXT,
|
||||
ended_at TEXT,
|
||||
duration_sec REAL,
|
||||
cost REAL DEFAULT 0.0,
|
||||
detail TEXT, -- 步骤详情(如素材数、字数等)
|
||||
error_message TEXT
|
||||
);
|
||||
|
||||
-- 资产注册表(所有可复用的数字资产)
|
||||
CREATE TABLE assets (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
asset_type TEXT NOT NULL, -- 'character_sheet' | 'bgm' | 'generated_clip' | 'script' | 'lora' | 'pexels_cache'
|
||||
name TEXT,
|
||||
file_path TEXT,
|
||||
file_size INTEGER,
|
||||
hash TEXT, -- 文件哈希,用于去重
|
||||
source TEXT, -- 'pexels' | 'kling' | 'user_upload' | 'generated'
|
||||
meta_json TEXT, -- 元数据(BPM, mood, segment_count 等)
|
||||
production_id INTEGER, -- 从哪次 production 产生的
|
||||
created_at TEXT DEFAULT (datetime('now'))
|
||||
);
|
||||
|
||||
-- 资产标签
|
||||
CREATE TABLE asset_tags (
|
||||
asset_id INTEGER REFERENCES assets(id),
|
||||
tag TEXT NOT NULL,
|
||||
PRIMARY KEY (asset_id, tag)
|
||||
);
|
||||
|
||||
-- 资产-生产关联(一个 production 用了哪些资产)
|
||||
CREATE TABLE production_assets (
|
||||
production_id INTEGER REFERENCES productions(id),
|
||||
asset_id INTEGER REFERENCES assets(id),
|
||||
role TEXT, -- 'input' | 'output' | 'intermediate'
|
||||
PRIMARY KEY (production_id, asset_id)
|
||||
);
|
||||
```
|
||||
|
||||
### 3.3 集成方式(对现有 CLI 的改动)
|
||||
|
||||
**改动极小**——只需要在 `main.py` 和 `video_factory.py` 的每个关键节点加一行:
|
||||
|
||||
```python
|
||||
from lib.dashboard import log_production, log_step, log_asset
|
||||
|
||||
# 在 production 开始时
|
||||
prod_id = log_production(strategy="口播", config=args)
|
||||
|
||||
# 在每步结束时
|
||||
log_step(prod_id, step_name="tts", status="completed", cost=0.30, detail="85 字符")
|
||||
|
||||
# 在生成资产时
|
||||
log_asset(prod_id, type="generated_clip", path="/tmp/clip.mp4", tags=["hermit", "kling"])
|
||||
```
|
||||
|
||||
现有代码量 3000+ 行,新增约 **50 行埋点** 即可。不需要改现有逻辑。
|
||||
|
||||
### 3.4 Dashboard 功能清单
|
||||
|
||||
| 板块 | 功能 |
|
||||
|:----|:-----|
|
||||
| **总览卡片** | 总产量、本月产量、累计费用、资产总数 |
|
||||
| **生产列表** | 按时间倒叙、按策略/状态筛选、搜索 |
|
||||
| **生产详情** | 每步状态+耗时+费用、输入输出资产列表、输出视频预览 |
|
||||
| **资产浏览器** | 按类型/标签筛选、搜索、预览、查看被哪些 production 使用 |
|
||||
| **重复利用** | re-run(同配置)、clone as new(修改配置再跑) |
|
||||
| **费用分析** | 按策略/按时间/按单步的费用分解图 |
|
||||
| **失败追踪** | 失败 production 列表、错误详情、重试按钮 |
|
||||
|
||||
---
|
||||
|
||||
## 四、与现有规划的关系
|
||||
|
||||
### 4.1 优先级定位
|
||||
|
||||
```
|
||||
P0 (Sprint 1) ─── 定妆照 + Kling LipSync + Schema 扩展
|
||||
│
|
||||
P1 (Sprint 2) ─── 变速卡点 + 节拍升级
|
||||
│
|
||||
P2 (Sprint 3) ─── 角色叙事 + LatentSync + 资产管理
|
||||
│ ↑
|
||||
└── Dashboard ───────┘ ← 建议和 Sprint 3 一起做
|
||||
```
|
||||
|
||||
**理由**:
|
||||
- P0 和 P1 是核心功能增强,应该优先
|
||||
- Dashboard 的**数据层**可以和 P0 并行搭(半天)
|
||||
- Dashboard 的**前端**等到 Sprint 3 再做,那时资产管理和角色叙事也需要界面,一次性写完整
|
||||
|
||||
### 4.2 依赖关系
|
||||
|
||||
| 依赖 | 说明 | 是否阻塞 |
|
||||
|:----|:-----|:--------:|
|
||||
| P0 完成 | Dashboard 不依赖任何 P0 功能 | ❌ 不阻塞 |
|
||||
| 资产索引 | Dashboard 的资产浏览器依赖 asset_manager 模块 | ⚠️ 建议 asset_manager 先搭 |
|
||||
| CLI 埋点 | 需要在 main.py 加 ~50 行 log 调用 | ✅ 半天可完成 |
|
||||
|
||||
### 4.3 分步交付
|
||||
|
||||
| 阶段 | 内容 | 交付物 | 时间 |
|
||||
|:----|:-----|:------|:----:|
|
||||
| **Phase 1** (和P0平行) | DB schema + 埋点 + 后端 API | `data/ave.db`, `lib/dashboard.py`, `app.py` | 0.5天 |
|
||||
| **Phase 2** (P2开始时) | 前端页面 V1: 生产列表+详情+费用 | `dashboard.html` | 0.5天 |
|
||||
| **Phase 3** (资产管理器完成) | 资产浏览器 + 搜索 + 复用 | 前端更新 | 0.5天 |
|
||||
|
||||
---
|
||||
|
||||
## 五、我自问自答的几个问题
|
||||
|
||||
### 这会不会变成一个沉重的 Web 项目?
|
||||
|
||||
**不会。** 设计原则是"轻量 + 可摘除":
|
||||
- 后端用 FastAPI(Python 自带,AVE 不需要新依赖)
|
||||
- 前端用单 HTML 页面(Vue.js CDN 或原生 JS,不构建)
|
||||
- 数据用 SQLite(零运维)
|
||||
- 所有新增代码放在 `scripts/lib/dashboard.py` 一个文件
|
||||
- 如果以后不需要,删掉这个文件 + 前端目录即可
|
||||
|
||||
### CLI 用户会不会受影响?
|
||||
|
||||
**不会。** Dashboard 是增量添加。所有埋点都是 `try/except` 包起来的——如果 DB 写失败,CLI 继续运行,不报错。
|
||||
|
||||
### 值不值得在开发核心功能之前做?
|
||||
|
||||
**不值得先做。** 但值得在核心功能开发的同时**搭好数据层**。数据层(DB schema + 埋点)只需要半天,埋完后 CLI 自动积累数据。前端可以在任何时候再写——数据已经在那里了。
|
||||
|
||||
---
|
||||
|
||||
## 六、建议方案
|
||||
|
||||
> **做。但分步做。**
|
||||
|
||||
| 时机 | 做什么 | 原因 |
|
||||
|:----|:------|:-----|
|
||||
| **现在** (和定妆照+P0平行) | 搭 DB schema + CLI 埋点 | 半天工作量, 数据开始积累 |
|
||||
| **P1 完成后** (也就是1-2天内) | 写后端 API + 前端 V1 | 那时已经有几十条 production 数据了, 面板直接有内容 |
|
||||
| **资产管理器完成后** | 前端 V2 加上资产浏览器 | 资产管理器的索引+Dashboard 的展示天然互补 |
|
||||
|
||||
**要不要**这个功能?——**要**。
|
||||
|
||||
**什么时候做?**——建议从明天开始搭数据层(0.5天),前端等有数据了再写。这样既不影响 P0/P1 的开发节奏,又能在 1-2 天内看到 Dashboard 的效果。
|
||||
|
||||
如果确认要做,我可以:
|
||||
1. 先创 SQLite schema 文件
|
||||
2. 在 `main.py` 和 `video_factory.py` 加埋点
|
||||
3. 搭好 FastAPI 后端骨架
|
||||
|
||||
等你决定 P0 从哪步开始后,Dashboard 数据层可以同步启动。
|
||||
@@ -0,0 +1,408 @@
|
||||
# Dashboard 数据层 · 多智能体协同设计
|
||||
|
||||
> 版本: v1.0 | 2026-05-15
|
||||
> 定位: AgentOS 多智能体系统 · 共享观测层
|
||||
|
||||
---
|
||||
|
||||
## 一、定位:不是 AVE 的面板,是 AgentOS 的观测层
|
||||
|
||||
Dashboard 不是 AVE 的附属工具。它应该是一套**跨智能体的共享数据服务**,任何 Agent(Claw、AVE、Matrix、Trae 等)都可以通过统一接口写入和查询。
|
||||
|
||||
### 现存 Agent 一览
|
||||
|
||||
| Agent | 目录 | 适合 Dashboard 跟踪什么 |
|
||||
|:------|:-----|:------------------------|
|
||||
| **09_ave** | `05_tools/09_ave/` | 视频生产任务、素材生成、API 调用 |
|
||||
| **07_matrix** | `05_tools/07_matrix/` | 抖音养号任务、蓝�运行、账号切换 |
|
||||
| **claw assistant** | `~/.workbuddy/` | 各种自动化任务、CLI 执行的历史 |
|
||||
| **02_browser / 05_crawl** | `05_tools/` | 爬虫任务、页面采集记录 |
|
||||
|
||||
---
|
||||
|
||||
## 二、存储位置
|
||||
|
||||
根据 AgentOS 的目录结构约定:
|
||||
|
||||
| 类别 | 路径 | 说明 |
|
||||
|:----|:-----|:------|
|
||||
| **代码(可同步)** | `~/workbuddy-agent-os/agent-sync/05_tools/10_dashboard/` | 多机共享,坚果云同步 |
|
||||
| **数据(本地)** | `~/workbuddy-agent-os/agent-local/runtime/dashboard/` | 本地 SQLite + 缓存,不同步 |
|
||||
| **客户端库** | `~/workbuddy-agent-os/agent-sync/05_tools/10_dashboard/client.py` | Agent 导入用,写数据入口 |
|
||||
| **后端服务** | `~/workbuddy-agent-os/agent-sync/05_tools/10_dashboard/server.py` | FastAPI 应用 |
|
||||
| **前端页面** | `~/workbuddy-agent-os/agent-sync/05_tools/10_dashboard/templates/` | HTML 单页应用 |
|
||||
|
||||
**为什么数据放 `agent-local` 而不是 `agent-sync`?**
|
||||
- SQLite 不适合坚果云同步(并发写会导致 DB 损坏)
|
||||
- 每台机器的生产数据天然不同,不应该同步
|
||||
- `agent-local/runtime/` 已经是 AgentOS 为"运行时数据"预设的位置
|
||||
|
||||
---
|
||||
|
||||
## 三、多智能体数据模型
|
||||
|
||||
### 3.1 agents — 智能体注册表
|
||||
|
||||
```sql
|
||||
CREATE TABLE agents (
|
||||
id TEXT PRIMARY KEY, -- 'ave', 'matrix', 'claw', 'trae'
|
||||
name TEXT NOT NULL, -- 'audio score video engine'
|
||||
type TEXT DEFAULT 'tool', -- 'tool' | 'skill' | 'pipeline' | 'assistant'
|
||||
version TEXT, -- 当前版本号
|
||||
status TEXT DEFAULT 'active',
|
||||
last_seen_at TEXT, -- 最后心跳时间
|
||||
meta_json TEXT -- 扩展元数据
|
||||
);
|
||||
```
|
||||
|
||||
预注册的 Agent:
|
||||
|
||||
| id | name | type |
|
||||
|:---|:-----|:-----|
|
||||
| `ave` | AudioScore Video Engine | tool |
|
||||
| `matrix` | Matrix Account Manager | tool |
|
||||
| `claw` | Claw AI Assistant | assistant |
|
||||
| `memory` | Memory Manager | skill |
|
||||
|
||||
### 3.2 productions — 生产任务(跨 agent 通用)
|
||||
|
||||
这是核心表。**不限于视频生产**——任何 agent 的"一次任务执行"都是一条 production。
|
||||
|
||||
```sql
|
||||
CREATE TABLE productions (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
agent_id TEXT NOT NULL REFERENCES agents(id),
|
||||
pipeline TEXT NOT NULL, -- 'ave:oral' | 'ave:beat-sync' | 'matrix:browse' | 'claw:research'
|
||||
status TEXT DEFAULT 'running', -- 'running' | 'completed' | 'failed' | 'cancelled'
|
||||
title TEXT, -- 人类可读名称
|
||||
input_summary TEXT, -- JSON: 输入概览
|
||||
output_summary TEXT, -- JSON: 输出概览
|
||||
config_json TEXT, -- JSON: 完整参数快照
|
||||
duration_sec REAL,
|
||||
total_cost REAL DEFAULT 0.0,
|
||||
currency TEXT DEFAULT 'CNY',
|
||||
error_message TEXT,
|
||||
tags TEXT, -- 逗号分隔,跨 agent 搜索用
|
||||
created_at TEXT DEFAULT (datetime('now')),
|
||||
completed_at TEXT
|
||||
);
|
||||
|
||||
CREATE INDEX idx_productions_agent ON productions(agent_id);
|
||||
CREATE INDEX idx_productions_status ON productions(status);
|
||||
CREATE INDEX idx_productions_created ON productions(created_at);
|
||||
```
|
||||
|
||||
### 3.3 production_steps — 步骤级跟踪
|
||||
|
||||
```sql
|
||||
CREATE TABLE production_steps (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
production_id INTEGER REFERENCES productions(id) ON DELETE CASCADE,
|
||||
agent_id TEXT NOT NULL,
|
||||
step_name TEXT NOT NULL, -- 'parse_script' | 'tts' | 'kling_generate' | ...
|
||||
step_type TEXT DEFAULT 'process', -- 'process' | 'api_call' | 'human_review' | 'decision' | 'wait'
|
||||
status TEXT DEFAULT 'pending',
|
||||
input_ref TEXT, -- 输入引用(文件路径 / URL)
|
||||
output_ref TEXT, -- 输出引用
|
||||
started_at TEXT,
|
||||
ended_at TEXT,
|
||||
duration_sec REAL,
|
||||
cost REAL DEFAULT 0.0,
|
||||
detail TEXT, -- 步骤详情 JSON
|
||||
error_message TEXT,
|
||||
metadata_json TEXT -- 扩展字段
|
||||
);
|
||||
|
||||
CREATE INDEX idx_steps_production ON production_steps(production_id);
|
||||
```
|
||||
|
||||
### 3.4 assets — 跨 agent 共享资产
|
||||
|
||||
所有 agent 生成的、可复用的数字资产统一注册在这里。**关键设计**:资产一旦注册,就属于全局资产池,任何 agent 都可以引用。
|
||||
|
||||
```sql
|
||||
CREATE TABLE assets (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
asset_type TEXT NOT NULL, -- 'character_sheet' | 'bgm' | 'generated_clip' | 'script' | 'lora' | 'screenshot' | 'dataset'
|
||||
name TEXT,
|
||||
description TEXT,
|
||||
file_path TEXT, -- 本地绝对路径
|
||||
file_size INTEGER,
|
||||
file_hash TEXT, -- SHA256,用于去重
|
||||
source_agent TEXT REFERENCES agents(id),
|
||||
source TEXT, -- 'generated' | 'imported' | 'downloaded' | 'user_provided' | 'pexels'
|
||||
license TEXT, -- 版权信息
|
||||
meta_json TEXT, -- JSON: 资产元数据
|
||||
tags TEXT, -- 逗号分隔
|
||||
created_at TEXT DEFAULT (datetime('now')),
|
||||
UNIQUE(file_hash)
|
||||
);
|
||||
|
||||
CREATE INDEX idx_assets_type ON assets(asset_type);
|
||||
CREATE INDEX idx_assets_source ON assets(source_agent);
|
||||
```
|
||||
|
||||
### 3.5 production_assets — 资产使用记录
|
||||
|
||||
```sql
|
||||
CREATE TABLE production_assets (
|
||||
production_id INTEGER REFERENCES productions(id) ON DELETE CASCADE,
|
||||
asset_id INTEGER REFERENCES assets(id) ON DELETE CASCADE,
|
||||
role TEXT DEFAULT 'input', -- 'input' | 'output' | 'intermediate' | 'reference'
|
||||
PRIMARY KEY (production_id, asset_id)
|
||||
);
|
||||
```
|
||||
|
||||
### 3.6 agent_events — 智能体间事件总线
|
||||
|
||||
这是**跨智能体通信**的关键设计。一个 agent 完成某项任务后,可以通过事件通知其他 agent。
|
||||
|
||||
```sql
|
||||
CREATE TABLE agent_events (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
source_agent TEXT REFERENCES agents(id),
|
||||
target_agent TEXT, -- null = broadcast 给所有 agent
|
||||
event_type TEXT NOT NULL, -- 'production.completed' | 'asset.created' | 'pipeline.ready' | 'error.occurred'
|
||||
severity TEXT DEFAULT 'info', -- 'info' | 'warning' | 'error' | 'critical'
|
||||
title TEXT,
|
||||
payload_json TEXT, -- 事件负载 JSON
|
||||
status TEXT DEFAULT 'pending', -- 'pending' | 'read' | 'acknowledged'
|
||||
created_at TEXT DEFAULT (datetime('now')),
|
||||
read_at TEXT
|
||||
);
|
||||
|
||||
CREATE INDEX idx_events_target ON agent_events(target_agent);
|
||||
CREATE INDEX idx_events_status ON agent_events(status);
|
||||
CREATE INDEX idx_events_created ON agent_events(created_at);
|
||||
```
|
||||
|
||||
### 3.7 ER 关系
|
||||
|
||||
```
|
||||
agents ──1:N── productions ──1:N── production_steps
|
||||
│ │
|
||||
│ └── M:N ── assets (via production_assets)
|
||||
│
|
||||
└──1:N── agent_events (source)
|
||||
└──?:1── agent_events (target)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、客户端库设计
|
||||
|
||||
每个 Agent 通过 `client.py` 写入,不需要直接操作 SQLite。这是**唯一**的写入口。
|
||||
|
||||
```python
|
||||
# ~/workbuddy-agent-os/agent-sync/05_tools/10_dashboard/client.py
|
||||
|
||||
"""
|
||||
Dashboard Client — 供所有 Agent 调用
|
||||
|
||||
用法:
|
||||
from dashboard_client import DashboardClient
|
||||
db = DashboardClient() # 自动连接 agent-local/runtime/dashboard/ave.db
|
||||
|
||||
# 注册自己
|
||||
db.register_agent("ave", "AudioScore Video Engine", "tool")
|
||||
|
||||
# 开始一个 production
|
||||
prod_id = db.start_production(
|
||||
agent_id="ave",
|
||||
pipeline="ave:oral",
|
||||
title="知识讲座视频 #047",
|
||||
config={"script": "lecture.yaml", "style": "knowledge_lecture"}
|
||||
)
|
||||
|
||||
# 记录步骤
|
||||
db.log_step(prod_id, "tts", "completed", cost=0.30, detail={"chars": 85})
|
||||
db.log_step(prod_id, "render", "completed", cost=0.0)
|
||||
|
||||
# 注册资产
|
||||
asset_id = db.register_asset(
|
||||
asset_type="generated_clip",
|
||||
name="clip_hermit_01.mp4",
|
||||
file_path="/tmp/kling_hermit.mp4",
|
||||
source_agent="ave",
|
||||
tags=["kling", "hermit", "cinematic"]
|
||||
)
|
||||
|
||||
# 关联资产到 production
|
||||
db.link_asset(prod_id, asset_id, role="output")
|
||||
|
||||
# 完成 production
|
||||
db.complete_production(prod_id, status="completed", total_cost=1.20)
|
||||
|
||||
# 发送事件通知
|
||||
db.send_event("ave", "claw", "production.completed",
|
||||
title="视频 #047 生成完成", payload={"prod_id": prod_id})
|
||||
```
|
||||
|
||||
### 核心 API
|
||||
|
||||
| 方法 | 功能 | 被调用频率 |
|
||||
|:-----|:-----|:----------|
|
||||
| `register_agent(id, name, type)` | 注册/更新 agent | 安装时一次 |
|
||||
| `start_production(...)` | 开始任务 | 每次 CLI 执行 |
|
||||
| `log_step(...)` | 记录步骤 | 每个步骤 |
|
||||
| `update_step(...)` | 更新步骤状态 | 异步步骤 |
|
||||
| `complete_production(...)` | 完成任务 | 每次完成/失败 |
|
||||
| `register_asset(...)` | 注册资产 | 每个新文件 |
|
||||
| `link_asset(prod, asset, role)` | 关联资产 | 每次资产使用 |
|
||||
| `send_event(source, target, type, ...)` | 发送事件 | 按需 |
|
||||
|
||||
---
|
||||
|
||||
## 五、后端 API 设计
|
||||
|
||||
FastAPI 服务,运行在 `http://localhost:9132`。
|
||||
|
||||
### 核心端点
|
||||
|
||||
```
|
||||
GET /api/status # 服务健康检查
|
||||
GET /api/summary # 总览指标(总数、本月、总成本、资产数)
|
||||
|
||||
GET /api/productions # 生产列表(支持 filter: ?agent=&status=&pipeline=&tags=)
|
||||
GET /api/productions/{id} # 生产详情 + 步骤列表
|
||||
GET /api/productions/{id}/assets # 生产关联的资产
|
||||
|
||||
GET /api/assets # 资产列表(支持 filter: ?type=&agent=&tags=&q=)
|
||||
GET /api/assets/{id} # 资产详情 + 使用记录
|
||||
GET /api/assets/{id}/productions # 该资产被哪些 production 用过
|
||||
|
||||
GET /api/agents # agent 列表
|
||||
GET /api/agents/{id}/productions # 某个 agent 的所有 production
|
||||
|
||||
GET /api/events # 事件列表
|
||||
GET /api/events?target={agent_id} # 发给某个 agent 的事件
|
||||
|
||||
GET /api/costs # 费用汇总(按 agent/策略/时间分组)
|
||||
```
|
||||
|
||||
### 查询示例
|
||||
|
||||
```
|
||||
# 查看 AVE 最近失败的 production
|
||||
GET /api/productions?agent=ave&status=failed
|
||||
|
||||
# 搜索资产
|
||||
GET /api/assets?q=定妆照&type=character_sheet
|
||||
|
||||
# 查看 matrix 本周的全部任务
|
||||
GET /api/productions?agent=matrix&from=2026-05-08&to=2026-05-15
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、集成方式
|
||||
|
||||
### 6.1 AVE 集成(Sprint 1 要做)
|
||||
|
||||
在 `main.py` 的每个关键节点加 ~50 行调用。改动量极小:
|
||||
|
||||
```python
|
||||
# 在 video_factory.py 的入口
|
||||
from dashboard_client import DashboardClient
|
||||
db = DashboardClient()
|
||||
|
||||
# run_oral() 开始
|
||||
prod_id = db.start_production("ave", "ave:oral", title, config=args)
|
||||
|
||||
# TTS 步骤完成
|
||||
db.log_step(prod_id, "tts", "completed", cost=0.30)
|
||||
|
||||
# 素材搜索完成
|
||||
db.log_step(prod_id, "search_material", "completed", detail={"count": 6})
|
||||
|
||||
# 合成完成
|
||||
db.complete_production(prod_id, status="completed", total_cost=tracker.total)
|
||||
```
|
||||
|
||||
### 6.2 Matrix 集成(Sprint 3 可选)
|
||||
|
||||
```python
|
||||
# 在 task_engine.py 的入口
|
||||
prod_id = db.start_production("matrix", "matrix:browse", "抖音浏览 #102")
|
||||
db.log_step(prod_id, "switch_account", "completed")
|
||||
db.log_step(prod_id, "open_douyin", "completed")
|
||||
db.log_step(prod_id, "browse_videos", "completed", detail={"count": 15})
|
||||
db.complete_production(prod_id, status="completed")
|
||||
```
|
||||
|
||||
### 6.3 Claw Assistant 集成(Sprint 3 可选)
|
||||
|
||||
通过 WorkBuddy 的 CLI 埋点,每次执行自动化任务自动记录。
|
||||
|
||||
---
|
||||
|
||||
## 七、数据生命周期
|
||||
|
||||
| 阶段 | 操作 | 位置 |
|
||||
|:-----|:-----|:------|
|
||||
| **创建** | `client.py` 写入 | `agent-local/runtime/dashboard/ave.db` |
|
||||
| **读取** | HTTP API → 前端 Dashboard | FastAPI + HTML |
|
||||
| **备份** | 随 agent-local 整体备份策略 | 暂不单独处理 |
|
||||
| **清理** | >90 天的 production 自动归档 (可配置) | 归档到 `agent-local/runtime/dashboard/archive/` |
|
||||
| **跨机迁移** | 不同步。每台机器独立数据 | `agent-local` 不同步的设计 |
|
||||
|
||||
---
|
||||
|
||||
## 八、文件结构
|
||||
|
||||
```
|
||||
agent-sync/05_tools/10_dashboard/
|
||||
├── __init__.py
|
||||
├── client.py # Agent 客户端库(唯一写入口)
|
||||
├── models.py # SQLAlchemy ORM 或 raw SQL schema
|
||||
├── server.py # FastAPI 应用
|
||||
├── templates/
|
||||
│ ├── index.html # 总览页
|
||||
│ ├── productions.html # 生产列表
|
||||
│ ├── detail.html # 生产详情
|
||||
│ └── assets.html # 资产浏览器
|
||||
├── static/
|
||||
│ └── app.js # 前端交互逻辑
|
||||
└── README.md # 使用说明
|
||||
|
||||
agent-local/runtime/dashboard/
|
||||
├── ave.db # SQLite 主数据库
|
||||
├── cache/ # 文件缓存
|
||||
└── archive/ # 历史归档
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 九、为什么这样设计
|
||||
|
||||
### 9.1 为什么用 SQLite 而不是其他 DB?
|
||||
|
||||
| 数据库 | 适用性 | |
|
||||
|:-------|:-------|:-|
|
||||
| SQLite | ✅ 单机多进程读、零运维、AgentOS 已有使用 | **选这个** |
|
||||
| PostgreSQL | ❌ 太重,单机不需要 |
|
||||
| JSON 文件 | ❌ 不支持并发写、不支持查询 |
|
||||
| LevelDB/RocksDB | ❌ 没 SQL 查询,不支持关联 |
|
||||
|
||||
### 9.2 为什么用 HTTP API 而不是直接写 SQLite?
|
||||
|
||||
| 方式 | 问题 |
|
||||
|:-----|:-----|
|
||||
| 直接写 SQLite | 每个 agent 都要 import sqlite3 + 写 SQL,产生代码耦合 |
|
||||
| 通过 API | agent 只需 import client.py + 调方法,后端封装所有 DB 逻辑 |
|
||||
|
||||
### 9.3 为什么 events 表放在这里而不是单独的消息队列?
|
||||
|
||||
轻量。当前多智能体在同一台机器上,SQLite 轮询足够。如果以后需要跨机器,可以从 events 表迁移到真正的消息队列(如 Redis pub/sub)。
|
||||
|
||||
---
|
||||
|
||||
## 十、开发量估算
|
||||
|
||||
| 模块 | 估计 | 说明 |
|
||||
|:-----|:----:|:------|
|
||||
| `models.py` (schema) | 0.2h | SQL 建表语句 |
|
||||
| `client.py` (核心 6 个方法) | 1h | ~150 行 Python |
|
||||
| `server.py` (API 端点) | 1h | ~200 行 FastAPI |
|
||||
| AVE 埋点接入 | 0.5h | main.py + video_factory.py 加 ~50 行 |
|
||||
| **合计** | **~2.7h** | 一个下午可完成 |
|
||||
@@ -0,0 +1,209 @@
|
||||
# 即梦(Dreamina) 网页版自动化方案
|
||||
|
||||
> **版本**: v0.1 (规划阶段)
|
||||
> **创建**: 2026-05-14
|
||||
> **状态**: ⏸️ 暂停(操作路径记录中,生成任务卡在排队)
|
||||
> **下次目标**: 完成下载步骤的记录,编写 jimeng_ops.py
|
||||
|
||||
---
|
||||
|
||||
## 一、项目背景
|
||||
|
||||
### 1.1 目标
|
||||
|
||||
为 AVE 视频工厂提供高质量的 AI 生成视频素材,替代 Pexels 免费素材。
|
||||
每期口播视频需要 12 段素材,每段 5-10 秒竖屏视频。
|
||||
|
||||
### 1.2 为什么选即梦网页版
|
||||
|
||||
| 方案 | 每段5秒成本 | 一期12段 | 备注 |
|
||||
|:-----|:----------:|:--------:|:-----|
|
||||
| Pexels 免费素材 | 0元 | 0元 | 画面静态,观感差 |
|
||||
| 腾讯云混元 API | 1.8-3.6元 | 21.6-43.2元 | 后付费,贵 |
|
||||
| **即梦网页版会员** | **0.22-0.37元** | **2.6-4.4元** | **VIP 可用 1080p,便宜** |
|
||||
| 即梦 CLI | 同会员积分 | 同左 | **VIP 模型 CLI 不支持,720p 限制** |
|
||||
|
||||
**结论**:即梦网页版会员(¥79-649/月)性价比最高,但需通过 Peekaboo 自动化操作网页。
|
||||
|
||||
### 1.3 备选方案对比
|
||||
|
||||
| 方案 | 结果 | 原因 |
|
||||
|:-----|:----:|:-----|
|
||||
| Dreamina CLI 直接调用 | ❌ 放弃 | CLI 免费版锁 720p,VIP 模型不支持 |
|
||||
| Buddy-cloud.py (腾讯云) | ✅ 可用 | 1080p 可用,但成本是即梦网页版的 5-10x |
|
||||
| CloakBrowser Playwright 自动化 | 🔧 备用 | 需处理反爬/登录态,不如 Peekaboo 直接 |
|
||||
| Peekaboo GUI 自动化 | ✅ **主方案** | 基于视觉识别,即梦不管怎么改UI都能用 |
|
||||
|
||||
---
|
||||
|
||||
## 二、当前进度
|
||||
|
||||
### 2.1 已完成
|
||||
|
||||
- [x] Dreamina CLI 安装到 `~/.local/bin/dreamina`
|
||||
- [x] CLI OAuth 登录成功(积分余额: 80)
|
||||
- [x] 验证 CLI 命令集(`text2video`, `text2image`, `user_credit` 等)
|
||||
- [x] 确认 CLI VIP 模型不可用(网页端会员 ≠ CLI 会员)
|
||||
- [x] Peekaboo 截图测试成功(可捕获 Chromium 窗口)
|
||||
- [x] 即梦首页页面结构记录完成
|
||||
- [x] 文生视频操作路径第 1-5 步记录完成
|
||||
|
||||
### 2.2 待完成
|
||||
|
||||
- [ ] **步骤 ⑥:下载视频** — 生成完成后下载按钮在哪?如何触发下载?
|
||||
- [ ] 编写 `jimeng_ops.py`(Peekaboo 原子操作脚本)
|
||||
- [ ] 编写 blueprint 蓝图(批量生成多段素材)
|
||||
- [ ] 集成到 AVE pipeline(生成 → 下载到 cache → Ken Burns → 合成)
|
||||
- [ ] 处理异常情况(积分不足、模型降级、生成失败)
|
||||
|
||||
---
|
||||
|
||||
## 三、即梦首页页面结构
|
||||
|
||||
### 3.1 侧边栏(左)
|
||||
|
||||
| 图标按钮 | 文字 | 功能 |
|
||||
|:--------|:----|:-----|
|
||||
| 💡 | 灵感 | 默认首页,直接输入 prompt |
|
||||
| ⚡ | 生成 | 各类生成任务入口 |
|
||||
| 📦 | 资产 | 历史作品 |
|
||||
| 🎨 | 画布 | 编辑/合成 |
|
||||
| ❓ | OCTO | 未知功能 |
|
||||
|
||||
底部:开通会员 | 积分(80) | 头像(登录后显示) | 通知🔔 | CLI 介绍
|
||||
|
||||
### 3.2 主输入区(中)
|
||||
|
||||
大输入框(类智能体对话框),包含:
|
||||
|
||||
| 元素 | 位置 | 说明 |
|
||||
|:-----|:----|:-----|
|
||||
| + 添加文件 | 输入框左上角 | 图生图/图生视频等 |
|
||||
| 智能体模式(Agent) | 输入框下方左 | 默认模式,自动判断输出类型 |
|
||||
| 自动/生成偏好 | 模式按钮旁 | 可设图片/视频、比例、模型版本 |
|
||||
| [使用技能] | 模式按钮区 | 剧情短片、电商套图、海报设计等 |
|
||||
| [@] | 模式按钮区 | 指定主体/人物 |
|
||||
| 🎤 麦克风 | 输入框右下角 | 语音输入 |
|
||||
| ↑ 发送箭头 | 输入框右下角 | 灰色→变亮(输入内容后) |
|
||||
|
||||
### 3.3 模式切换弹窗
|
||||
|
||||
点"智能体模式"可切换:
|
||||
|
||||
| 模式 | 用途 |
|
||||
|:-----|:-----|
|
||||
| 图片生成 | 文生图 |
|
||||
| 视频生成 | 文生视频(本方案目标模式) |
|
||||
| 数字人 | 数字人出镜 |
|
||||
| 配音 | 语音合成 |
|
||||
| 动作模仿 | 动作驱动 |
|
||||
|
||||
### 3.4 自动/生成偏好设置
|
||||
|
||||
| 设置项 | 可选值 |
|
||||
|:-------|:-------|
|
||||
| 输出类型 | 图片 / 视频 |
|
||||
| 比例 | 21:9 / 16:9 / 9:16(竖屏) / 等 |
|
||||
| 模型版本 | 图片4.0 / 3.0 / 等 |
|
||||
|
||||
---
|
||||
|
||||
## 四、完整操作路径(已记录 5/7 步)
|
||||
|
||||
```
|
||||
① 首页(灵感Tab,Agent模式)
|
||||
状态: 输入框空,发送按钮灰色
|
||||
操作: 输入 prompt
|
||||
↓
|
||||
② 输入 prompt 后
|
||||
状态: 发送按钮由灰变亮,其他无变化
|
||||
操作: 按回车 或 点发送箭头
|
||||
↓
|
||||
③ 进入对话模式
|
||||
状态: AI 开始分析 prompt
|
||||
↓
|
||||
④ ⚠️ 模型不可用降级(每次都会触发)
|
||||
状态: 弹出积分确认框
|
||||
├─ "消耗 X 积分,确认继续生成"
|
||||
├─ ⭐ "本次对话不再确认"(鼠标悬浮出现小按钮,可勾选)
|
||||
└─ 点确认 → 扣积分
|
||||
↓
|
||||
⑤ 生成排队
|
||||
状态: 输入框右上方出现生成状态条
|
||||
内容区: "排队中" → "生成中"
|
||||
结果区: 图片占位框 + "以上内容由AI生成本次消耗X积分"
|
||||
+ [重新生成] 按钮 + [引用作品] 按钮(双引号)
|
||||
↓
|
||||
⑥ 生成完成
|
||||
状态: ?(待下次记录)
|
||||
下载方式: ?(待下次记录)
|
||||
↓
|
||||
⑦ 保存到 AVE cache
|
||||
⏳ 待实现
|
||||
```
|
||||
|
||||
### 4.1 关键交互细节
|
||||
|
||||
- **积分确认**: 每次生成都会弹出,可勾选"本次对话不再确认"
|
||||
- **模型降级**: Agent 模式自动选 VIP 模型 → VIP 不可用 → 降级普通模型 → 重新确认积分
|
||||
- **排队等待**: 生成任务进入队列,排队时间不定(上次卡住未完成)
|
||||
- **发送方式**: 回车键 或 点发送箭头
|
||||
|
||||
---
|
||||
|
||||
## 五、技术方案
|
||||
|
||||
### 5.1 核心工具
|
||||
|
||||
- **Peekaboo v3.1.2**:macOS GUI 自动化(视觉识别 + 点击 + 输入)
|
||||
- **CloakBrowser**:备用浏览器(需持久化 profile 保持登录态)
|
||||
- **AVE pipeline**:接收生成素材 → Ken Burns → 合成
|
||||
|
||||
### 5.2 原子操作设计(待实现)
|
||||
|
||||
```python
|
||||
# jimeng_ops.py 初步设计
|
||||
def input_prompt(text): # 输入 prompt
|
||||
def click_send(): # 点发送
|
||||
def confirm_credit(): # 确认积分消耗
|
||||
def disable_credit_confirm(): # 勾选"不再确认"
|
||||
def wait_generation(): # 轮询检测生成完成
|
||||
def click_download(): # 点下载
|
||||
def save_to_ave_cache(): # 保存到 AVE cache
|
||||
```
|
||||
|
||||
### 5.3 Peekaboo 命令映射
|
||||
|
||||
| 操作 | Peekaboo 命令 | 锚点策略 |
|
||||
|:-----|:-------------|:---------|
|
||||
| 输入 prompt | `peekaboo type "..."` | 当前焦点(先点输入框) |
|
||||
| 点发送 | `peekaboo click "↑"` 或回车 | OCR 识别箭头图标或键盘发送 |
|
||||
| 确认积分 | `peekaboo click "确认继续"` | OCR 识别按钮文字 |
|
||||
| 勾选不再确认 | `peekaboo click "不再确认"` | OCR 识别悬浮按钮文字 |
|
||||
| 等生成完成 | 轮询 `peekaboo image` 检测下载按钮 | 截图 OCR |
|
||||
| 下载 | `peekaboo click "下载"` | OCR 识别按钮文字 |
|
||||
|
||||
---
|
||||
|
||||
## 六、相关文件
|
||||
|
||||
| 文件 | 路径 |
|
||||
|:-----|:-----|
|
||||
| 本计划文档 | `05_tools/09_ave/PLANS/JIMENG_AUTOMATION_PLAN.md` |
|
||||
| AVE 实施计划 | `05_tools/09_ave/PLANS/AVE_IMPLEMENTATION_PLAN.md` |
|
||||
| AVE 策略体系 | `05_tools/09_ave/PLANS/STRATEGY.md` |
|
||||
| Dreamina CLI | `~/.local/bin/dreamina` |
|
||||
| Dreamina CLI 说明 | `~/.dreamina_cli/dreamina/SKILL.md` |
|
||||
| AVE 主脚本 | `05_tools/09_ave/scripts/main.py` |
|
||||
| 视频合成 | `05_tools/09_ave/scripts/composer/ffmpeg.py` |
|
||||
| 测试道家 YAML | `05_tools/09_ave/scripts/daoist_quotes.yaml` |
|
||||
|
||||
---
|
||||
|
||||
## 七、下次启动检查清单
|
||||
|
||||
- [ ] 确认 CloakBrowser/Chromium 是否还在运行
|
||||
- [ ] 确认即梦网页登录态是否过期
|
||||
- [ ] 确认 Dreamina CLI 登录态(`dreamina user_credit`)
|
||||
- [ ] 继续步骤 ⑥:生成完成后探索下载方式
|
||||
- [ ] 完整走通一次后开始写 `jimeng_ops.py`
|
||||
@@ -0,0 +1,196 @@
|
||||
# 体育角色一致性图片生成方案 v1
|
||||
|
||||
> 版本: 1.0 | 日期: 2026-05-18
|
||||
> 用途: ghai 审核 → 确认后再执行
|
||||
|
||||
---
|
||||
|
||||
## 一、背景
|
||||
|
||||
前次会话完成 AudioLine→AVE Phase 1 四路集成(T169-T172)后,转向**体育主题角色一致性图片生成**。此前 AVE 的角色管线以漫剧/日常场景为主,缺少体育/运动场景的专项能力。
|
||||
|
||||
---
|
||||
|
||||
## 二、问题定义
|
||||
|
||||
| 维度 | 说明 |
|
||||
|:----|:-----|
|
||||
| 目标 | 生成带角色一致性的体育/运动主题图片,男女角色各一 |
|
||||
| 渠道 | Kling 文生图 + Kling I2I 变体(现有 AVE 基础设施) |
|
||||
| 场景 | 跑步、篮球、足球、健身等多运动姿态 |
|
||||
| 核心挑战 | 高动态姿态下保持面部/体型/服装一致性 |
|
||||
| 输出形式 | 定妆照 + 多姿态参考图 → 可用于 AVE 视频生成 |
|
||||
|
||||
---
|
||||
|
||||
## 三、三层工作流策略(全网调研结论)
|
||||
|
||||
AI 角色一致性主流方案分为三个层级,底层性价比最高:
|
||||
|
||||
| 层级 | 方法 | 一致性 | 成本 | 学习曲线 | 推荐场景 |
|
||||
|:----|:-----|:------|:----|:--------|:--------|
|
||||
| **轻量层** | 单图引用 + 提示词纪律 | 60-70% | 低 | 低 | 快速试错/概念探索 |
|
||||
| **受控层** | Grid Method + I2I 变体 | 75-85% | 中 | 中 | **体育角色首选 ← 我们在这里** |
|
||||
| **训练层** | LoRA 微调 | 90-96% | 高 | 高 | 长期 IP / 商业级项目 |
|
||||
|
||||
**体育角色推荐路径**:先走受控层(我们已有 character_sheet.py 的 Grid Method + Kling I2I),待角色确认为长期资产后再升级 LoRA。
|
||||
|
||||
---
|
||||
|
||||
## 四、现有 AVE 基础设施可用性
|
||||
|
||||
| 模块 | 当前能力 | 体育场景适配 |
|
||||
|:----|:---------|:------------|
|
||||
| `character_sheet.py` | 2x3 Grid Method + Kling 文生图 + I2I 变体 | **核心引擎,直接可用** |
|
||||
| `character_registry` | 角色注册/切换/参考图管理 | **支持扩展**,需增加运动服/装备字段 |
|
||||
| `character_locker` | 全片 Prompt 注入角色描述块 | **无需改动** |
|
||||
| `character_adapter` | 中文→英文映射 + Kling 格式 | **无需改动** |
|
||||
| `prompts/character_sheet_prompts.md` | 标准角色描述块模板 | **需新增体育专用模板** |
|
||||
|
||||
---
|
||||
|
||||
## 五、体育角色提示词模板
|
||||
|
||||
基于全网调研的"身份锚点 + 可换场景"原则设计:
|
||||
|
||||
### 5.1 角色描述块规范 (Identity Anchor)
|
||||
|
||||
所有体育角色描述块遵循固定结构,**全片不变**:
|
||||
|
||||
```
|
||||
[姓名],[性别] [年龄],[身高] [体型],
|
||||
[发型][发色],[面部特征],[肤色],
|
||||
[运动装备描述],
|
||||
[标志性特征/纹身/饰品]。
|
||||
```
|
||||
|
||||
### 5.2 男性角色:锋哥 (Feng) — 街头篮球
|
||||
|
||||
**角色描述块**(固定锚点,全片复用):
|
||||
|
||||
```
|
||||
锋哥,中国男性 26岁,身高183cm 精壮偏瘦体型,
|
||||
黑色寸头修剪整齐,单眼皮眼神锐利,小麦色健康皮肤,
|
||||
身穿宽松白色无袖篮球背心配黑色运动短裤,
|
||||
左小臂有一条简约的黑色几何纹身,右手腕戴着红色运动腕带。
|
||||
```
|
||||
|
||||
**运动场景 Prompt 示例**:
|
||||
|
||||
| 场景 | Prompt |
|
||||
|:----|:-------|
|
||||
| 运球突破 | `锋哥,中国男性26岁,...(完整描述块)... 在室外水泥篮球场上运球突破,身体低伏重心压低,左手运球右手护球,篮球在手掌和地面之间弹跳,动态抓拍,下午的暖色斜阳,背景是老旧的城市居民楼,体育摄影风格,高速快门凝固动作瞬间` |
|
||||
| 急停跳投 | `锋哥,...(同一描述块)... 在烈日下的街头篮球场急停跳投,身体腾空后仰,右手托球左手辅助,短裤因动作飘起,双腿打开呈剪刀腿式,汗水在空气中飞溅,广角镜头从低角度拍摄,强烈的阳光穿过篮筐形成光晕` |
|
||||
| 防守姿态 | `锋哥,...(同一描述块)... 在篮球场上弯腰防守,双脚打开与肩同宽,双臂张开,眼神紧盯对手,额头上布满汗水,嘴巴微张喘气,全身肌肉紧绷,中景拍摄,下午暖色调光线,背景有模糊的球场铁丝网` |
|
||||
|
||||
### 5.3 女性角色:小雨 (Xiaoyu) — 户外运动
|
||||
|
||||
**角色描述块**(固定锚点,全片复用):
|
||||
|
||||
```
|
||||
小雨,中国女性 24岁,身高168cm 匀称健美的运动体型,
|
||||
乌黑长发扎成高马尾露出额头,鹅蛋脸型五官精致,白皙肤色透着健康红润,
|
||||
身穿浅蓝色速干运动背心配黑色紧身瑜伽裤,
|
||||
脖子上挂着一副白色运动耳机,手上戴着运动手套。
|
||||
```
|
||||
|
||||
**运动场景 Prompt 示例**:
|
||||
|
||||
| 场景 | Prompt |
|
||||
|:----|:-------|
|
||||
| 户外跑步 | `小雨,中国女性24岁,...(完整描述块)... 在清晨的滨海步道上跑步,身体前倾摆臂有力,高马尾在身后甩动,阳光从海面反射到脸上形成温暖的侧光,背景是大海和远处的城市天际线,运动摄影风格,中景跟拍视角` |
|
||||
| 力量训练 | `小雨,...(同一描述块)... 在户外健身区的单杠区做引体向上,双手抓杠身体悬空,核心收紧双腿微屈,背部和手臂肌肉线条明显,额头渗出汗珠,阳光透过树叶打在脸上形成斑驳光影,低角度仰拍展现力量感` |
|
||||
| 拉伸放松 | `小雨,...(同一描述块)... 在公园草地上做跑后拉伸,单腿站立另一条腿向后弯曲用手握住脚踝,身体微微前倾保持平衡,表情放松面带微笑,夕阳的金色光线从侧面打过来勾勒出身体轮廓,温暖柔和的色彩` |
|
||||
|
||||
---
|
||||
|
||||
## 六、角色一致性图库方案
|
||||
|
||||
### 6.1 方案架构
|
||||
|
||||
基于现有 Grid Method 改造:
|
||||
|
||||
```
|
||||
第一阶段:定妆照(2x3 → 3x3 升级)
|
||||
┌─────────────┬─────────────┬─────────────┐
|
||||
│ 全身正面 │ 全身侧面 │ 全身 3/4 │
|
||||
│ (标准站姿) │ (侧身) │ (斜45度) │
|
||||
├─────────────┼─────────────┼─────────────┤
|
||||
│ 面部中性 │ 面部微笑 │ 面部发力 │
|
||||
│ (标准表情) │ (亲和) │ (运动表情) │
|
||||
├─────────────┼─────────────┼─────────────┤
|
||||
│ 运动姿态 A │ 运动姿态 B │ 运动姿态 C │
|
||||
│ (如运球) │ (如投篮) │ (如防守) │
|
||||
└─────────────┴─────────────┴─────────────┘
|
||||
|
||||
第二阶段:Kling I2I 变体生成
|
||||
各单格 → 3 变体 → 总计 18+ 参考图
|
||||
|
||||
第三阶段:注册到 CharacterRegistry
|
||||
定妆照 + 裁剪图 → 注册 → character_locker 全片注入
|
||||
```
|
||||
|
||||
### 6.2 生成流程
|
||||
|
||||
```
|
||||
1. 用 character_sheet.py(改造后)生成 3x3 网格定妆照
|
||||
├── Kling 文生图 (kling-v1, 3:2 比例)
|
||||
├── 裁剪 9 张单格(extract_cells 升级版)
|
||||
└── 存入角色库
|
||||
|
||||
2. 对"运动姿态"和"面部-运动表情"格执行 Kling I2I 变体
|
||||
├── 每个 source → 3 变体
|
||||
└── 增加场景多样性(室内/室外/不同光线)
|
||||
|
||||
3. 注册到 CharacterRegistry
|
||||
├── 网格图 → reference_images.grid
|
||||
├── 面部中性 → reference_images.portrait
|
||||
├── 表情 → reference_images.expressions
|
||||
└── 运动姿态 → reference_images.sport_poses (新字段)
|
||||
```
|
||||
|
||||
### 6.3 所需改动
|
||||
|
||||
| 改动点 | 文件 | 工作量 | 说明 |
|
||||
|:------|:----|:------|:-----|
|
||||
| Grid Method 升级 3x3 | `character_sheet.py` | 中 | 裁剪行列数、CELL_NAMES、GRID_PROMPT 模板 |
|
||||
| 新增体育 prompt 模板 | `prompts/character_sheet_prompts.md` | 小 | 追加 3x3 模板 + 运动场景示例 |
|
||||
| Registry 新字段 | `character_registry/registry.yaml` | 小 | 角色 schema 增加 sport_poses 字段 |
|
||||
| 多姿态变体批量生成 | `character_sheet.py` | 中 | 对多个 cell 批量跑 I2I |
|
||||
|
||||
---
|
||||
|
||||
## 七、执行计划(审核后)
|
||||
|
||||
| 步骤 | 内容 | 预估耗时 |
|
||||
|:----|:-----|:--------|
|
||||
| 1 | 方案审核(你就是这里) | — |
|
||||
| 2 | 升级 character_sheet.py:3x3 网格 + 体育模板 | ~30min |
|
||||
| 3 | 生成男性角色(锋哥)定妆照 | ~5min(API 调用) |
|
||||
| 4 | 生成女性角色(小雨)定妆照 | ~5min |
|
||||
| 5 | Kling I2I 运动姿态变体批量生成 | ~10min × N |
|
||||
| 6 | 注册到 CharacterRegistry | ~2min |
|
||||
| 7 | 验证 Prompt 注入效果 | ~5min |
|
||||
|
||||
---
|
||||
|
||||
## 八、风险与备选
|
||||
|
||||
| 风险 | 概率 | 缓解方案 |
|
||||
|:----|:----|:--------|
|
||||
| Kling 文生图 3x3 网格排版不准 | 中 | 备选:先出 2x3 再手动补运动姿态格 |
|
||||
| I2I 变体人脸偏离 | 中 | 重复调用强制 seed / 人工筛选最佳变体 |
|
||||
| 运动姿态下服装细节丢失 | 低 | 描述块中强调颜色/logo/纹理细节 |
|
||||
| API 调用费用 | 低 | 每张定妆照 ~¥0.3,总成本可控 <¥10 |
|
||||
|
||||
---
|
||||
|
||||
## 九、后续升级方向
|
||||
|
||||
- **LoRA 微调**:角色确认为长期 IP 后,用 15-20 张参考图训练 LoRA,一致性可提升至 90%+
|
||||
- **Kling Image O1**:利用 Kling 的 Image O1 模式做更精细的角色控制(待评估)
|
||||
- **即梦文生图备选**:Peekaboo 自动化方案可降低成本,质量略低
|
||||
|
||||
---
|
||||
|
||||
**请审核以上方案,确认后进入执行阶段。**
|
||||
@@ -0,0 +1,92 @@
|
||||
# AVE 视频工厂 — 策略体系 v1.0
|
||||
|
||||
> 最后更新: 2026-05-09 | 版本: v1.0
|
||||
|
||||
## 概述
|
||||
|
||||
将视频生产按策略分类, 每种策略有独立的输入/处理/输出管线。
|
||||
生成时只需选择策略 + 提供内容素材, 系统自动路由到对应管线。
|
||||
|
||||
---
|
||||
|
||||
## 策略一览
|
||||
|
||||
### ① 口播策略 (当前可用 ✅)
|
||||
|
||||
| 项目 | 内容 |
|
||||
|:-----|------|
|
||||
| **输入** | 文案脚本 (YAML/TXT) |
|
||||
| **核心流程** | 文案→CosyVoice TTS→Pexels素材搜索→mlx-audiocraft BGM→BGM避让→锚点画面切换→精确字幕→(可选)数字人片头片尾 |
|
||||
| **CLI** | `python main.py generate --script xxx.yaml --bgm xxx.wav --duck --anchor-transitions` |
|
||||
| **适用场景** | 知识分享、励志金句、故事讲述、教程讲解 |
|
||||
| **输出** | 40-60s 竖屏视频, 1080p |
|
||||
| **依赖** | 阿里云百炼(CosyVoice), Pexels, 火山引擎(OmniHuman 可选) |
|
||||
|
||||
### ② 卡点策略 (待开发 🔧)
|
||||
|
||||
| 项目 | 内容 |
|
||||
|:-----|------|
|
||||
| **输入** | BGM + 图片/视频素材列表 |
|
||||
| **核心流程** | BGM→librosa节拍检测→按4拍/8拍分组→素材分配→拍点切换→xfade过渡→文字叠加 |
|
||||
| **CLI** | `python main.py beat-sync --bgm xxx.wav --images img1.jpg img2.jpg` |
|
||||
| **适用场景** | 卡点视频、节奏混剪、照片 Slideshow |
|
||||
| **关键能力** | librosa beat_track 检测拍点; FFmpeg xfade ≤8段过渡 |
|
||||
| **已知限制** | xfade 链 >10段 FFmpeg 崩溃, 需分组 ≤8段 |
|
||||
|
||||
### ③ 数字人策略 (部分可用 🔧)
|
||||
|
||||
| 子策略 | 能力 | API | 状态 |
|
||||
|:-------|:-----|:----|:----:|
|
||||
| **OmniHuman** | 头像图片 + 音频 → 对口型视频 | 火山引擎 CV API | ✅ 可用 |
|
||||
| **DreamActor M1** | 照片 + 参考视频 → 动作模仿 | 火山引擎/即梦 API | 🔧 待接入 |
|
||||
| **动作模仿流程** | 找参考视频 → 上传照片 → 提交 DreamActor → 下载结果 | — | 🔧 |
|
||||
|
||||
### ④ 模板策略 (调研中 🔍)
|
||||
|
||||
| 项目 | 内容 |
|
||||
|:-----|------|
|
||||
| **目标** | 程序化生成剪映草稿, 利用剪映模板/渲染能力 |
|
||||
| **候选工具** | • pyJianYingDraft (Python 生成剪映草稿)<br>• cutcli (剪映草稿 CLI)<br>• CapCutAPI (完整剪映编程接口) |
|
||||
| **思路** | AVE 生成草稿文件 → 剪映打开/CLI渲染 → 得到最终视频 |
|
||||
| **优势** | 可复用剪映的丰富模板和特效 |
|
||||
| **风险** | 剪映版本更新可能导致草稿格式变更 |
|
||||
|
||||
---
|
||||
|
||||
## 实施路线
|
||||
|
||||
```
|
||||
P1: 卡点策略 (beat-sync) ✅ 已完成
|
||||
├─ BGM 节拍检测器 (librosa)
|
||||
├─ 拍点→素材调度器
|
||||
├─ xfade 拍点过渡
|
||||
└─ CLI 子命令
|
||||
|
||||
P2: DreamActor M1 接入 ✅ 已完成
|
||||
├─ 参考视频上传 (Gitee中转仓库)
|
||||
├─ 动作模仿 API 封装
|
||||
├─ 结果下载 + 缓存
|
||||
└─ 集成到数字人策略
|
||||
|
||||
P3: 视频工厂 CLI ⏳ 待开始
|
||||
├─ 策略路由: video-factory --strategy 口播/卡点/数字人/模板
|
||||
├─ 统一输入接口
|
||||
└─ 进度报告
|
||||
|
||||
P4: 剪映模板集成 🔍 调研中
|
||||
├─ pyJianYingDraft 调研
|
||||
├─ 草稿生成器
|
||||
├─ CLI 渲染
|
||||
└─ 模板市场
|
||||
```
|
||||
|
||||
## API 依赖汇总
|
||||
|
||||
| 服务 | 用途 | 费用 | 状态 |
|
||||
|:-----|:-----|:----|:----:|
|
||||
| 阿里云百炼 CosyVoice | TTS 人声合成 | 按量 | ✅ |
|
||||
| Pexels | 视频素材搜索 | 免费(200次/h) | ✅ |
|
||||
| 火山引擎 CV/即梦 | OmniHuman 数字人 | 按量 | ✅ |
|
||||
| 火山引擎 即梦 | DreamActor M1 动作模仿 | 按量 | 🔧 |
|
||||
| mlx-audiocraft | 本地 AI BGM 生成 | 免费 | ✅ |
|
||||
| 剪映 (本地) | 模板渲染 | 免费 | 🔍 |
|
||||
@@ -0,0 +1,225 @@
|
||||
# AVE 项目落地任务清单 · 跟踪看板
|
||||
|
||||
> 版本: v3.2-tracker | 最后更新: 2026-05-16
|
||||
> 状态: ⬜ 待办 · 🔄 进行中 · ✅ 已完成 · 🚧 阻塞
|
||||
|
||||
---
|
||||
|
||||
## 使用方式
|
||||
|
||||
```diff
|
||||
+ 每完成一项,把 ⬜ 改成 ✅
|
||||
+ 每开始一项,把 ⬜ 改成 🔄
|
||||
+ 遇到阻塞,把 ⬜ 改成 🚧 并在备注写原因
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Sprint 0 — 已完成的基建(不需要再做)
|
||||
|
||||
| # | 任务 | 状态 | 产出 |
|
||||
|:-:|:----|:----:|:-----|
|
||||
| 0.1 | Kling API 图生视频集成 | ✅ | `material_producer/kling/kling.py` |
|
||||
| 0.2 | TTS (CosyVoice + 字级时间戳) | ✅ | `voice_synthesizer/aliyun.py` |
|
||||
| 0.3 | Pexels 素材搜索 | ✅ | `material_producer/pexels/search.py` |
|
||||
| 0.4 | BGM 混音 + 避让 | ✅ | `composer/ffmpeg.py` |
|
||||
| 0.5 | ASS 字级字幕生成 | ✅ | `composer/ffmpeg.py` |
|
||||
| 0.6 | 长视频自动分段 + concat | ✅ | `composer/ffmpeg.py` |
|
||||
| 0.7 | 剧本解析 (LLM/模板) | ✅ | `director_parser/parser.py` |
|
||||
| 0.8 | 口播策略 (video-factory) | ✅ | `video_factory.py` |
|
||||
| 0.9 | 数字人策略 (Wan2.2 + DreamActor) | ✅ | `material_producer/wan2_2/` |
|
||||
| 0.10 | 节拍检测 + xfade 卡点 | ✅ | `composer/beat_sync.py` |
|
||||
| 0.11 | 成本跟踪器 | ✅ | `lib/cost_tracker.py` |
|
||||
| 0.12 | 全域调研(角色一致性 + LipSync + 外部项目) | ✅ | 入库知识库 + `PLANS/AVE_V3_ARCHITECTURE.md` |
|
||||
| 0.13 | AVE v3 全链路架构规划 | ✅ | `PLANS/AVE_V3_ARCHITECTURE.md` |
|
||||
| 0.14 | Dashboard 生产监控面板方案设计 | ✅ | `PLANS/DASHBOARD_DESIGN.md` |
|
||||
|
||||
---
|
||||
|
||||
## Sprint 1 — P0 (核心增强,~1天)
|
||||
|
||||
### 1.1 角色一致性:定妆照 Grid Method
|
||||
|
||||
| # | 子任务 | 状态 | 产出文件 |
|
||||
|:-:|:-------|:----:|:---------|
|
||||
| 1.1.1 | 编写 Grid Method Prompt 模板(2x3多视角 + 多表情) | ✅ | `prompts/character_sheet_prompts.md` |
|
||||
| 1.1.2 | 创建 `scripts/character_sheet.py`(定妆照自动生成模块) | ✅ | `scripts/character_sheet.py` |
|
||||
| 1.1.3 | CLI 子命令 `python main.py character-sheet --desc "..." --output sheet.png` | ✅ | `main.py` 扩展 |
|
||||
| 1.1.4 | YAML Schema 扩展:剧本增加 `character_ref` 字段 | ✅ | `director_parser/schemas.py` |
|
||||
| 1.1.5 | 角色描述块锁定:全片自动注入固定角色描述 | ✅ | `composer/character_locker.py` |
|
||||
|
||||
**依赖**: 无(独立模块)
|
||||
**验收标准**: 跑一个命令输出 2x3 网格定妆照 + 一个剧本能用 `character_ref` 引用角色
|
||||
|
||||
---
|
||||
|
||||
### 1.2 唇形同步:Kling LipSync 集成
|
||||
|
||||
| # | 子任务 | 状态 | 产出文件 |
|
||||
|:-:|:-------|:----:|:---------|
|
||||
| 1.2.1 | 创建 `scripts/composer/lipsync.py`(Kling LipSync API 封装) | ✅ | `scripts/composer/lipsync.py` |
|
||||
| 1.2.2 | CLI 子命令 `python main.py lipsync --video clip.mp4 --audio voice.wav` | ✅ | `main.py` 扩展 |
|
||||
| 1.2.3 | 口播策略后处理钩子:合成后自动跑 LipSync | ✅ | `video_factory.py` 扩展 |
|
||||
| 1.2.4 | 成本跟踪对接 | ✅ | `lib/cost_tracker.py` 扩展 |
|
||||
|
||||
**依赖**: 需要 fal.ai API Key($0.014/5s)
|
||||
**验收标准**: 跑一个口播 production,输出视频带口型匹配
|
||||
|
||||
---
|
||||
|
||||
### 1.3 Dashboard 数据层(和 1.1/1.2 平行)
|
||||
|
||||
| # | 子任务 | 状态 | 产出文件 |
|
||||
|:-:|:-------|:----:|:---------|
|
||||
| 1.3.1 | SQLite schema 定义(6 表) | ✅ | `data/ave.db` (自动创建) |
|
||||
| 1.3.2 | 创建 `scripts/lib/dashboard.py`(埋点封装) | ✅ | `scripts/lib/dashboard.py` |
|
||||
| 1.3.3 | main.py 埋点:每次 production 自动写 DB(~50行) | ✅ | `main.py` + `video_factory.py` 扩展 |
|
||||
| 1.3.4 | cost_tracker 埋点:自动记录费用 | ✅ | `lib/cost_tracker.py` 扩展 |
|
||||
| 1.3.5 | FastAPI 后端骨架 + DB 读取 API | ✅ | `scripts/dashboard/app.py` |
|
||||
|
||||
**依赖**: 无(纯增量,和 P0 功能平行)
|
||||
**验收标准**: 跑一条 production 后,SQLite 里有对应的 production + steps + cost 记录
|
||||
|
||||
---
|
||||
|
||||
## Sprint 2 — P1 (体验增强,~1天)
|
||||
|
||||
### 2.1 变速卡点引擎
|
||||
|
||||
| # | 子任务 | 状态 | 产出文件 |
|
||||
|:-:|:-------|:----:|:---------|
|
||||
| 2.1.1 | 创建 `scripts/composer/speed_ramp.py`(setpts + atempo 滤波器链) | ✅ | `scripts/composer/speed_ramp.py` |
|
||||
| 2.1.2 | 支持缓变速度曲线(0.7→1.0→1.3) | ✅ | `speed_ramp.py` |
|
||||
| 2.1.3 | CLI 子命令 `python main.py speed-ramp --input clip.mp4 --curve 0.5,1.0,1.5` | ✅ | `main.py` 扩展 |
|
||||
| 2.1.4 | 卡点策略集成:高能段落自动变速 | ✅ | `video_factory.py` + `beat_sync.py` 扩展 |
|
||||
|
||||
**依赖**: 无
|
||||
**验收标准**: ✅ 输入一段视频 + 速度曲线,输出变速后的视频(音频同步)
|
||||
|
||||
---
|
||||
|
||||
### 2.2 节拍检测升级(BeatSync-Engine 架构)
|
||||
|
||||
| # | 子任务 | 状态 | 产出文件 |
|
||||
|:-:|:-------|:----:|:---------|
|
||||
| 2.2.1 | 能量曲线 + 频谱特征提取(RMS/Flux) | ✅ | `composer/beat_sync.py` 增强 |
|
||||
| 2.2.2 | 歌曲结构检测(Intro→Verse→Chorus→Bridge→Outro) | ✅ | `composer/beat_sync.py` 增强 |
|
||||
| 2.2.3 | 能量波切密度(高能→加速,低能→减速) | ✅ | `composer/beat_sync.py` 增强 + `speed_ramp.py` |
|
||||
| 2.2.4 | Frame-locked 时间线(消除 xfade 漂移) | ✅ | `composer/beat_sync.py` 增强 |
|
||||
|
||||
**依赖**: 无
|
||||
**验收标准**: ✅ 对比升级前后的节拍匹配精确度
|
||||
|
||||
---
|
||||
|
||||
### 2.3 口播+卡点融合管线
|
||||
|
||||
| # | 子任务 | 状态 | 产出文件 |
|
||||
|:-:|:-------|:----:|:---------|
|
||||
| 2.3.1 | 创建 `scripts/composer/hybrid.py`(口播场景间插入变速卡点过渡) | ✅ | `scripts/composer/hybrid.py` |
|
||||
| 2.3.2 | 过渡段自动匹配 BGM 节拍 | ✅ | `hybrid.py` |
|
||||
| 2.3.3 | CLI 子命令 / video-factory 扩展 | ✅ | `main.py` + `video_factory.py` 扩展 |
|
||||
|
||||
**依赖**: 2.1.1 + 2.2.1
|
||||
**验收标准**: ✅ 一个口播视频在高潮段落自动插入变速卡点过渡
|
||||
|
||||
---
|
||||
|
||||
## Sprint 3 — P2 (系统完善,~2天)
|
||||
|
||||
### 3.1 角色叙事策略
|
||||
|
||||
| # | 子任务 | 状态 | 产出文件 |
|
||||
|:-:|:-------|:----:|:---------|
|
||||
| 3.1.1 | 场景分解模块(剧本→N个场景 + 每场景Prompt) | ✅ | `scripts/story_director/scene_planner.py` |
|
||||
| 3.1.2 | Temporal Bridge(上场景末帧→下场景首帧条件) | ✅ | `scripts/story_director/temporal_bridge.py` |
|
||||
| 3.1.3 | 批量 Kling 生成(固定 seed + 角色描述块) | ✅ | `scripts/story_director/batch_generator.py` |
|
||||
| 3.1.4 | story 策略 CLI + video-factory 入口 | ✅ | `main.py` + `video_factory.py` 扩展 |
|
||||
| 3.1.5 | HoloCine 全局一致性策略参考实现 | ✅ | `scripts/story_director/HOLOCINE_REFERENCE.md` |
|
||||
|
||||
**依赖**: 1.1.1, 1.1.2, 1.1.3
|
||||
**验收标准**: 输入一个多场景剧本 + 定妆照,输出一个带角色一致性的多场景视频
|
||||
|
||||
---
|
||||
|
||||
### 3.2 本地 Lip-Sync(LatentSync v1.5)
|
||||
|
||||
| # | 子任务 | 状态 | 产出文件 |
|
||||
|:-:|:-------|:----:|:---------|
|
||||
| 3.2.1 | 本地部署 LatentSync(Docker 或 venv) | ⬜ | `scripts/latentsync/` |
|
||||
| 3.2.2 | AVE 集成接口(与 lipsync.py 统一接口) | ⬜ | `composer/lipsync.py` 扩展 |
|
||||
| 3.2.3 | 自动切换:API 不可用时降级到本地 | ⬜ | `composer/lipsync.py` 扩展 |
|
||||
|
||||
**依赖**: 无,但需要 8GB VRAM
|
||||
**验收标准**: 在本地 GPU 上跑通 LipSync
|
||||
|
||||
---
|
||||
|
||||
### 3.3 素材资产管理器
|
||||
|
||||
| # | 子任务 | 状态 | 产出文件 |
|
||||
|:-:|:-------|:----:|:---------|
|
||||
| 3.3.1 | 创建 `scripts/asset_manager/index.py`(素材索引) | ✅ | `scripts/asset_manager/index.py` |
|
||||
| 3.3.2 | 缓存管理(Pexels/Kling 生成片段自动入索引) | ✅ | `scripts/asset_manager/cache.py` |
|
||||
| 3.3.3 | 标签系统 + 搜索 | ✅ | `scripts/asset_manager/tags.py` |
|
||||
|
||||
**依赖**: 1.3.2(Dashboard 数据层)
|
||||
**验收标准**: ✅ 搜索关键词能找到对应的历史素材(83 个素材已入库,21 个标签)
|
||||
|
||||
---
|
||||
|
||||
### 3.4 Dashboard 前端页面
|
||||
|
||||
| # | 子任务 | 状态 | 产出文件 |
|
||||
|:-:|:-------|:----:|:---------|
|
||||
| 3.4.1 | 生产列表页(筛/搜/排序) | ✅ | `dashboard/static/index.html` |
|
||||
| 3.4.2 | 生产详情页(每步状态 + 资产 + 费用) | ✅ | `dashboard/static/index.html` (弹窗视图) |
|
||||
| 3.4.3 | 资产浏览器(类型/标签筛选 + 搜索) | ✅ | `dashboard/static/index.html` |
|
||||
| 3.4.4 | 费用分析(按策略 + 汇总) | ✅ | `dashboard/static/index.html` + `/api/costs/breakdown` |
|
||||
| 3.4.5 | **系统级迁移**:Dashboard 从 AVE 迁至 `05_tools/10_dashboard/` | ✅ | 2026-05-16 插件框架落地 |
|
||||
|
||||
**依赖**: 1.3.5(后端 API)✅ 已完成
|
||||
**验收标准**: ✅ 打开浏览器能看到所有 production 和数据
|
||||
**⚠️ 架构变更**: Dashboard 已从 AVE 解耦为系统级模块
|
||||
- 新路径: `05_tools/10_dashboard/` (插件式数据源架构)
|
||||
- AVE 是第一个数据源插件 (`plugins/ave.py`)
|
||||
- 兼容: `main.py dashboard` 命令自动重定向
|
||||
|
||||
---
|
||||
|
||||
## Sprint 4 — P3 (可选增强)
|
||||
|
||||
| # | 任务 | 状态 | 备注 |
|
||||
|:-:|:----|:----:|:-----|
|
||||
| 4.1 | LoRA 训练管线(CharForge / IC-LoRA) | ⬜ | 极高一致性需求时启用 |
|
||||
| 4.2 | Wan2.2-S2V-14B 本地部署 | ⬜ | 需要 24-40GB VRAM,消费级显卡暂不支持 |
|
||||
| 4.3 | ComfyUI 工作流导出支持 | ⬜ | 从 AVE 导出到 ComfyUI 编辑 |
|
||||
| 4.4 | 即梦 VIP 自动化接入(Peekaboo) | ⬜ | 复用 Matrix 养号框架 |
|
||||
| 4.5 | 多音色 TTS 库管理 | ⬜ | 管理多个 CosyVoice 音色 + 配音切换 |
|
||||
|
||||
---
|
||||
|
||||
## 快速参考:分策略状态总览
|
||||
|
||||
| 策略 | 当前状态 | Sprint 1 后 | Sprint 2 后 | Sprint 3 后 |
|
||||
|:----|:--------:|:----------:|:----------:|:----------:|
|
||||
| **口播** | ✅ 可用 | ✅ + 定妆照 + LipSync | ✅ + 变速过渡 | ✅ + 资产索引 + Dashboard |
|
||||
| **卡点** | ✅ 可用 | ✅🔧 | ✅ 节拍升级 + 变速 + 帧锁定 | ✅ |
|
||||
| **数字人** | ✅ 可用 | ✅ + LipSync 增强 | ✅ | ✅ |
|
||||
| **口播+卡点** | ✅ 新增 | — | ✅ 融合管线 | ✅ |
|
||||
| **角色叙事** | ❌ 不存在 | ❌ | ❌ | ✅ 初版可用 |
|
||||
| **Dashboard** | ✅ 可用 | ✅ 数据层 + 前端 | ✅ 中文界面 | ✅ |
|
||||
|
||||
---
|
||||
|
||||
## 进度标记说明
|
||||
|
||||
```diff
|
||||
+ ✅ 已完成 — 无需再关注
|
||||
+ 🔄 进行中 — 正在开发
|
||||
+ ⬜ 待办 — 计划内但未开始
|
||||
+ 🚧 阻塞 — 等待前置条件
|
||||
```
|
||||
|
||||
> 建议把这个文件放在 AVE 项目根目录,每次完成一项就更新状态。
|
||||
> 或者你告诉我完成了哪项,我来帮你更新。
|
||||
Reference in New Issue
Block a user