feat(monitor): 抖音 Web 接口客户端 —— 绕开爬虫子进程,直接发 HTTP
Deploy VitePress site to Pages / build (push) Canceled after 0s
Deploy VitePress site to Pages / Deploy (push) Canceled after 0s

移植自 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:
2026-10-10 17:12:25 +08:00
parent 21ff01b894
commit 2112c1a870
1601 changed files with 367425 additions and 0 deletions
@@ -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 项目根目录,每次完成一项就更新状态。
> 或者你告诉我完成了哪项,我来帮你更新。