MangaFlow 六阶段方法论
流水线总览
flowchart TB subgraph 输入 X[故事文本 x] end subgraph 阶段1[阶段1: 故事规划] P1[故事规划智能体] S[故事单元 S = s1..sK] end subgraph 阶段2[阶段2: 故事单元记忆] P2[记忆构建] M[单元记忆 Mk] end subgraph 阶段3[阶段3: 版面控制] P3A[手动规格] P3B[参考提取] P3C[智能体生成] L0[初始布局 L_i] REFLECT[布局自我反思] PI[确定性投影 Π] L[修正后布局] end subgraph 阶段4[阶段4: 面板渲染] REF[构建引用 Ri,j] RENDER[渲染器 R] I[面板图像 Ii,j] end subgraph 阶段5[阶段5: 页面合成] COMPOSE[合成智能体] PAGE[完整页面] end subgraph 阶段6[阶段6: 文字植入] TEXT[文字智能体] FINAL[最终漫画页面] end X --> P1 P1 --> S S --> P2 P2 --> M M --> REF P3A --> L0 P3B --> L0 P3C --> L0 L0 --> REFLECT REFLECT --> PI PI --> L L --> COMPOSE REF --> RENDER RENDER --> I I --> COMPOSE L --> COMPOSE COMPOSE --> PAGE PAGE --> TEXT TEXT --> FINAL
阶段1: 故事规划(Story Planning)
目标
将故事文本 分解为结构化的故事单元序列。
数学形式
其中每个故事单元 是一个四元组:
| 字段 | 含义 | 示例 |
|---|---|---|
| 单元描述 | ”主角在校园天台与对手对峙” | |
| 场景标识 | ”校园天台——黄昏” | |
| 出场角色集合 | {主角, 对手} | |
| 关键物品集合 | {栏杆, 书包} |
智能体职责
故事规划智能体通过 LLM 理解故事结构,识别场景切换点(scene boundaries),决定每个单元的语义边界。关键决策包括:
- 场景切换时创建新单元
- 角色进入/退出场景时更新角色集合
- 叙事节奏变化时调整单元粒度
阶段2: 故事单元记忆(Story Section Memory)
目标
为每个故事单元构建独立的视觉引用记忆,保证跨面板一致性。
数学形式
其中:
| 组件 | 类型 | 说明 |
|---|---|---|
| 文本 | 单元描述(复用阶段1) | |
| 图像 | 场景参考图像(通过 T2I 生成或检索) | |
| 图像集合 | 每个出场角色的参考图像(角色表) | |
| 图像集合 | 关键物品的参考图像 | |
| 结构化文本 | 角色档案(外貌、服装、姿态等结构化描述) |
关键设计决策
作用域限定:面板 (第 页第 面板)仅访问其所属单元的记忆 ,而非全部故事上下文。这带来两个好处:
- 注意力集中:渲染时只参考当前场景相关的视觉元素
- 一致性保证:同一角色在同一单元内的多次出现共享同一 图像
记忆构建流程
故事单元 s_k
├── 场景描述 → T2I 生成 → R_scene
├── 角色列表 → 角色图像检索/生成 → R_char
├── 物品列表 → 物品图像检索/生成 → R_obj
└── 角色描述 → 结构化提取 → profiles_k
阶段3: 版面控制(Layout Control)
目标
为每一页生成显式的面板布局几何变量。
数学形式
版面 定义第 页的面板区域集合:
每个面板区域表示为边界框:
其中 为左上角坐标, 为宽高(归一化到 )。
三种布局来源
| 来源 | 符号 | 描述 |
|---|---|---|
| 手动规格 | 用户直接指定面板坐标和尺寸 | |
| 参考提取 | 从现有漫画页面提取布局结构 | |
| 智能体生成 | LLM 根据故事内容自动生成布局 |
布局自我反思
智能体生成布局后进入反思循环:
批评维度包括:
- 面板比例是否合理(避免极端长宽比)
- 阅读流是否自然(左→右,上→下)
- 大面板是否对应关键情节
- 整体视觉平衡
确定性投影 Π
反思后的布局 进入确定性修正:
Π 执行以下检查(全部为确定性规则):
-
面板数量检查: 是否等于故事规划指定的面板数
- 若不足:插入默认尺寸面板
- 若超出:裁剪多余面板
-
重叠检查:
- 若存在重叠:等比例收缩或平移至不重叠
-
边界检查:
- 若越界:裁剪至有效区域
-
空白检查: 的覆盖率不低于阈值
- 若有大面积空白:均匀扩展面板填充
Π 的设计哲学:不追求”最优”布局,只保证”可行”布局。类似编译器中的类型检查——不通过则拒绝进入渲染。
阶段4: 引用条件面板渲染(Reference-Conditioned Panel Rendering)
目标
使用单元记忆中的视觉引用,渲染每个面板。
数学形式
首先为面板 (第 页、第 面板)构建引用:
从单元记忆 中选取与当前面板相关的引用。例如:
- 面板描述提到角色A → 引入
- 面板场景为”天台” → 引入
- 面板涉及物品”书包” → 引入
然后渲染:
其中 是渲染器(如 FLUX.2 或 Gemini 2.5 Flash Image), 为面板尺寸。
渲染器无关性
是可替换的模块:
同一流水线、同一引用输入,不同 产生不同视觉风格。
阶段5: 页面合成(Page Composition)
目标
将渲染好的面板按布局合成到完整页面。
数学形式
其中:
- 为第 页的所有面板图像
- 为第 页的布局(定义每个面板的位置和尺寸)
执行:
- 根据 中的 将 放置到页面画布的对应位置
- 添加面板间隔线(gutter)
- 调整面板边缘(可选的效果处理)
阶段6: 文字植入(Lettering)
目标
在合成的页面上添加对话气泡、旁白框和思考气泡。
智能体职责
文字智能体接收:
- 页面图像
- 该页各面板的对话内容(对话文本、说话者身份)
- 面板布局信息
执行操作:
-
气泡类型选择:
- 对话 → 椭圆形气泡 + 尖角指向说话者
- 内心独白/思考 → 云朵形气泡
- 旁白 → 矩形叙述框
-
气泡定位:
- 根据面板内空白区域自动选择位置
- 避免遮挡关键视觉元素(角色面部、重要物品)
- 遵循阅读顺序排列多气泡
-
文字排版:
- 日式漫画:竖排(上→下,右→左)
- 其他:根据语言选择横排/竖排
- 字号和间距根据气泡大小自适应
最终输出
完整流水线汇总
输入故事文本 ,输出漫画页面序列 :