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:
+144
@@ -0,0 +1,144 @@
|
||||
---
|
||||
collected: true
|
||||
collected_date: 2026-05-16
|
||||
---
|
||||
|
||||
# 角色一致性定妆照方案(参考图/多视角 Character Sheet/九宫格)
|
||||
|
||||
> 最后更新: 2026-05-15 | 来源: Kling 官方文档 + 社区实践 + 论文调研
|
||||
|
||||
---
|
||||
|
||||
## 一、核心原则
|
||||
|
||||
角色一致性的本质是**解耦身份与场景**(Asset-First 策略):先锁定角色长什么样,再把它放到不同场景中去生成。不是让 AI 同时理解"这人是谁"和"场景是什么",而是分步处理。
|
||||
|
||||
### 从"Lights, Camera, Consistency"论文中提取的核心结论
|
||||
|
||||
- **I2I 种子帧是角色一致性的架构支点**(ablation 证明:没有 I2I 种子帧,一致性评分从 7.99 暴跌至 0.55)
|
||||
- Asset-First(先出角色定妆照,再出场景)—— 把身份与上下文解耦
|
||||
- Temporal Bridge:上一场景的最后一帧作为下一场景第一帧的视觉条件
|
||||
- CLIPSeg+DINO 用于评估角色一致性的客观指标
|
||||
|
||||
---
|
||||
|
||||
## 二、主流定妆照方案
|
||||
|
||||
### 方案 A:单参考图锚定(Kling 官方推荐)
|
||||
|
||||
**适用场景**:角色不复杂、场景变化不大的快速生产
|
||||
|
||||
- 用 **同一张参考图** 锚定每一次生成
|
||||
- 每张图必须清晰展示角色的 **面部、发型、服装**
|
||||
- 参考图要求:**中性光照 + 干净背景**,让模型聚焦主体
|
||||
- 切忌在不同场景间切换参考图——哪怕姿态/光线的微小差异都会导致面部重构
|
||||
|
||||
**Prompt 结构化模板**:
|
||||
|
||||
```
|
||||
[角色描述块: 完全复制]
|
||||
[场景描述块: 每场景修改]
|
||||
[镜头指令块: 每场景修改]
|
||||
```
|
||||
|
||||
### 方案 B:多视角 Character Sheet(Grid Method)
|
||||
|
||||
**适用场景**:需要完整角色 IP、多场景多角度出镜
|
||||
|
||||
#### 2x3 网格(6格)标准布局
|
||||
|
||||
| 行 | 内容 |
|
||||
|:-:|------|
|
||||
| 上排 | 全身正面、侧面、3/4 转向 |
|
||||
| 下排 | 面部特写 - 中性、微笑、愤怒 |
|
||||
|
||||
#### 生成 Prompt
|
||||
|
||||
```
|
||||
A professional character design sheet for [角色描述].
|
||||
The layout is a 2x3 grid.
|
||||
Top row: Full body front view, side profile view, 3/4 turn view.
|
||||
Bottom row: Close-up of face - neutral expression, smiling, angry.
|
||||
Clean lines, flat shading, white background. Concept art style. --ar 3:2
|
||||
```
|
||||
|
||||
#### 利用方式
|
||||
|
||||
1. **Midjourney Omni Reference**:网格图作为 image prompt,`--iw 2` 强引用
|
||||
2. **IP-Adapter (FaceID)**:从网格图中裁剪最佳正脸,注入后续生成
|
||||
3. **ChatGPT/GPT Image**:先上传网格图,逐步编辑场景(环境→姿态→服装细节)
|
||||
4. **Gemini**:保持面部结构不变,修改服装/视角/环境
|
||||
|
||||
### 方案 C:LoRA 微调(Stable Diffusion 生态)
|
||||
|
||||
**适用场景**:极高一致性要求、需要大量出图的 IP 项目
|
||||
|
||||
- **IC-LoRA**:从单张参考图训练角色 LoRA
|
||||
- **CharForge**(GitHub: RishiDesai/CharForge):单图训练 LoRA,跨场景生成
|
||||
- 需要 6-12GB VRAM,训练约 10-30 分钟
|
||||
|
||||
### 方案 D:Kling Image O1(多参考图融合)
|
||||
|
||||
- 支持最多 **10 张参考图** 进行特征一致控制
|
||||
- 可用于精确细节编辑(增/删/改)、样式控制、系列内容创作
|
||||
- 适合 IP 角色设计、漫画分镜、品牌系列
|
||||
|
||||
---
|
||||
|
||||
## 三、跨场景生成的工作流程
|
||||
|
||||
### 推荐生产序列
|
||||
|
||||
1. **定妆照** → 生成角色 sheet(多视角/多表情)
|
||||
2. **主镜头** → 角色+场景 描述块分离生成
|
||||
3. **过渡镜** → 连接场景的中间镜头
|
||||
4. **合成** → 剪辑工具拼接
|
||||
|
||||
### 关键操作清单
|
||||
|
||||
| 步骤 | 操作 | 注意事项 |
|
||||
|------|------|----------|
|
||||
| 1 | 写角色描述块 | 包括:脸型、眼距、鼻梁、唇线、发际线、标志配饰 |
|
||||
| 2 | 生成参考图 | 中性光照 + 干净背景 |
|
||||
| 3 | 固定 seed | 每次生成用相同 seed |
|
||||
| 4 | 每场景贴角色块 | 完全复制,一个字不改 |
|
||||
| 5 | 仅改场景部分 | 环境、动作、镜头 |
|
||||
| 6 | 保持光照一致 | 极端光照变化会放大面部差异 |
|
||||
| 7 | 保持镜头距离 | 全景→极特写的切换会放大面部变化 |
|
||||
|
||||
---
|
||||
|
||||
## 四、角色锁定 Checklist
|
||||
|
||||
在进入场景生成前,必须明确以下 7 个属性。任何一个模糊都会导致角色漂移。
|
||||
|
||||
- [ ] 脸型(圆/方/长/心形)
|
||||
- [ ] 眼距 + 眼睑形状
|
||||
- [ ] 鼻梁 + 鼻尖轮廓
|
||||
- [ ] 唇线 + 嘴宽
|
||||
- [ ] 发际线 + 分发方向 + 发丝纹理
|
||||
- [ ] 标志性配饰/服装元素
|
||||
- [ ] 肤色 + 肤质
|
||||
|
||||
---
|
||||
|
||||
## 五、技术栈对照
|
||||
|
||||
| 工具 | 角色一致性能力 | 适用阶段 |
|
||||
|------|:-------------:|:--------:|
|
||||
| Kling 图生视频 | 参考图锚定 | 视频生成 |
|
||||
| Kling Image O1 | 多图融合 | 图片/角色设计 |
|
||||
| Midjourney Omni Ref | 强身份保持 | 角色 sheet |
|
||||
| IP-Adapter (FaceID) | 面部特征注入 | SD 生态生成 |
|
||||
| IC-LoRA / CharForge | 单图训练 LoRA | 极高一致性需求 |
|
||||
| HoloCine(CVPR 2026) | 全局一致性 + 稀疏注意力 | 多镜头长视频 |
|
||||
| Lights Camera Consistency | 蓝图驱动 + Temporal Bridge | 多场景故事 |
|
||||
|
||||
---
|
||||
|
||||
## 六、已知限制
|
||||
|
||||
- **Kling 3.0** 没有内置角色锁定或面部模型功能——一致性完全靠 prompt 工程 + 参考图管理
|
||||
- **所有方案都不能做到 100% 一致**(这是生成式模型的固有特性)
|
||||
- 非西方文化背景下,高运动场景的世界稳定性会下降(论文中发现的 bias)
|
||||
- 参考图切换 = 角色重塑(即使微小差异)
|
||||
Reference in New Issue
Block a user