# 智能多幅四格漫画生成系统 - 完整介绍
## 一、系统架构概览
这个工作流是一个**基于LangGraph的多智能体协作系统**,通过将长文案智能拆分,为每个情节部分独立生成四格漫画,从而实现更全面的主题表达。
### 核心架构图
```
输入文案
↓
【文案拆分智能体】→ 拆分成多个自然情节部分
↓
【漫画生成循环】→ 为每个部分生成四格漫画
├── 编剧智能体(LLM)
├── 人物设计(简化)
├── 分镜设计(从剧本提取)
├── 插画师智能体(Image Generation)
└── 图片拼接(PIL)
↓
【输出格式化】→ 显示多幅漫画结果
↓
输出多幅四格漫画
```
---
## 二、使用的配置文件详解
### 1. 文案拆分配置文件
**文件路径**: `config/content_splitter_cfg.json`
#### 模型配置
```json
{
"model": "doubao-seed-1-8-251228", // 豆包大模型
"temperature": 0.5, // 较低温度,确保拆分准确
"top_p": 0.95,
"max_completion_tokens": 2000,
"thinking": "disabled"
}
```
#### 系统提示词(System Prompt)
核心职责:
- 将长文案拆分成自然的、独立的情节部分
- 每个部分是一个完整的小故事
- 每个部分能独立生成一幅四格漫画
拆分规则:
- **短文案**(50字以内):1-2个部分
- **中等长度**(50-150字):2-4个部分
- **长文案**(150字以上):4-6个部分
拆分原则:
1. 每个部分是一个完整的情节片段
2. 有明确的时间、地点、人物、事件
3. 避免将连续动作拆分
4. 按照自然时间顺序
#### 用户提示词(User Prompt)
```jinja2
请将以下文案拆分成几个自然的情节部分:
原文案:{{ original_content }}
请输出JSON格式:
{
"parts": ["部分1", "部分2", "部分3"]
}
```
---
### 2. 编剧智能体配置(硬编码在子图中)
**文件位置**: `src/graphs/loop_graph.py`
#### 模型配置
```python
model="doubao-seed-1-8-251228", // 豆包大模型
temperature=0.7, // 中等温度,平衡创意和准确性
max_completion_tokens=3000
```
#### 系统提示词
```
你是一位专业的四格漫画编剧。你的任务是分析用户提供的文案,
创作一个完整的四格漫画剧本。
编剧职责:
1. 分析文案的核心主题和情感基调
2. 提取关键词和关键信息
3. 创作一个4格漫画的完整故事
4. 每个格子包含:场景、人物、情节、对话、旁白
5. 故事要有:开场→发展→高潮→结局的完整结构
6. 对话要简洁有力,旁白要点题
```
#### 输出格式
```json
{
"script_content": {
"title": "漫画标题",
"theme": "核心主题",
"panels": [
{
"panel": 1,
"scene": "场景描述",
"characters": "人物描述",
"plot": "情节描述",
"dialogue": "对话内容",
"narration": "旁白内容"
},
... (共4格)
]
},
"theme_analysis": {
"core_theme": "核心主题",
"emotion": "情感基调",
"keywords": ["关键词1", "关键词2", "关键词3"]
}
}
```
---
### 3. 插画师智能体配置(硬编码在子图中)
**文件位置**: `src/graphs/loop_graph.py`
#### 图片生成配置
```python
img_client.generate(
prompt=prompt,
size="2048x1536", // 4:3 比例
watermark=False, // 无水印
response_format="url" // 返回URL
)
```
#### 提示词构建
```python
prompt = f"""
Anime manga style panel. {scene}. {description}.
Japanese manga style, anime characters, clean black outlines,
cel-shaded coloring.
NO photorealistic humans, only anime/manga characters.
Professional manga art style.
Add speech bubbles and text boxes for dialogue and narration.
"""
```
**关键要求**:
- 日系动漫风格
- 黑色轮廓线
- 平涂着色
- **禁止真人照片**
- 专业漫画艺术风格
- 包含对话气泡和文字框
---
## 三、核心技术配置
### 1. 图片生成比例
- **独立图片**: `2048x1536`(4:3 比例)
- **最终合成**: 精确3:4比例(宽度:高度 = 3:4)
### 2. 标题区域配置
```python
title_height = 250 # 标题区域高度 250px
font_title_size = 56 # 标题字体 56号
font_theme_size = 36 # 主题字体 36号
title_background = (240, 240, 240) # 灰色背景
```
### 3. 对话气泡配置
```python
bubble_background = (255, 255, 255) # 白色背景
bubble_border = (0, 0, 0) # 黑色边框
bubble_border_width = 3 # 边框宽度 3px
dialogue_font_size = 28 # 对话字体 28号
```
### 4. 旁白配置
```python
narration_bg = (0, 0, 255, 180) # 蓝色半透明背景
narration_text_color = (255, 255, 255) # 白色文字
narration_font_size = 28 # 旁白字体 28号
narration_height = 60 # 旁白区域高度
```
---
## 四、工作流程详解
### 阶段1:文案拆分
```
输入:长文案
↓
LLM分析文案结构和语义
↓
按自然情节拆分
↓
输出:文案部分列表
```
**示例**:
- **输入**: "小明起床上班迟到了,路上遇到大堵车,到了公司被老板训话,最后加班到深夜"
- **输出**: ["小明起床上班迟到了", "路上遇到大堵车", "到了公司被老板训话", "最后加班到深夜"]
### 阶段2:漫画生成循环
```
对于每个文案部分:
↓
编剧智能体创作剧本(标题、主题、4格分镜)
↓
人物设计(简化为日系动漫风格)
↓
分镜设计(从剧本提取)
↓
插画师生成4张图片(带对话气泡和旁白)
↓
图片拼接(2x2布局 + 标题区域)
↓
保存到 multiple_comics 列表
```
### 阶段3:输出格式化
```
对于每幅漫画:
↓
显示文案内容
↓
显示标题和主题
↓
显示文件路径
↓
输出最终结果
```
---
## 五、关键技术点
### 1. 循环处理机制
使用LangGraph的 **looparray** 节点类型:
```python
builder.add_node("comic_generator", comic_generator_wrapper,
metadata={"type": "looparray"})
```
**工作原理**:
- 自动遍历 `content_parts` 列表
- 每次循环处理一个部分
- 将生成的漫画添加到 `multiple_comics` 列表
- 循环直到所有部分处理完成
### 2. 子图架构
创建独立的子图 `comic_subgraph`:
```python
comic_subgraph = StateGraph(GlobalState)
comic_subgraph.add_node("single_comic_generator", single_comic_generator)
comic_subgraph.set_entry_point("single_comic_generator")
comic_subgraph.add_edge("single_comic_generator", END)
subgraph = comic_subgraph.compile()
```
**优势**:
- 封装漫画生成逻辑
- 便于复用和维护
- 主图逻辑清晰简洁
### 3. 状态管理
使用 **GlobalState** 管理全局状态:
```python
class GlobalState(BaseModel):
original_content: str = Field(..., description="原始文案")
content_parts: List[str] = Field(default=[], description="文案部分列表")
multiple_comics: List[dict] = Field(default=[], description="多幅漫画")
# ... 其他字段
```
### 4. 字体加载策略
```python
font_paths = [
"/usr/share/fonts/truetype/wqy/wqy-microhei.ttc",
"/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc",
"/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"
]
```
支持中文字体优先,英文作为备选。
---
## 六、技能集成
### 1. 大语言模型技能
- **用途**: 文案拆分、剧本创作
- **集成方式**: `LLMClient`
- **模型**: `doubao-seed-1-8-251228`
### 2. 图片生成技能
- **用途**: 生成动漫风格插画
- **集成方式**: `ImageGenerationClient`
- **参数**: `size="2048x1536"`, `watermark=False`
---
## 七、输出示例
```
【第 1 幅四格漫画】
文案内容: 小明起床上班迟到了
标题: 迟到的清晨
主题: 展现起床迟到的紧迫感
File: [assets/四格漫画_第1幅.png]
【第 2 幅四格漫画】
文案内容: 路上遇到大堵车
标题: 堵车记
主题: 早高峰的无奈
File: [assets/四格漫画_第2幅.png]
【第 3 幅四格漫画】
文案内容: 到了公司被老板训话
标题: 老板的怒火
主题: 职场压力
File: [assets/四格漫画_第3幅.png]
【第 4 幅四格漫画】
文案内容: 最后加班到深夜
标题: 深夜加班
主题: 奋斗与坚持
File: [assets/四格漫画_第4幅.png]
```
---
## 八、系统优势
1. **智能拆分**: 使用LLM理解语义,按自然情节拆分
2. **循环处理**: 自动处理多个部分,无需手动迭代
3. **子图封装**: 漫画生成逻辑独立,便于维护
4. **完整工作流**: 从输入到输出全流程自动化
5. **多主题表达**: 每幅漫画聚焦一个情节,更全面表达主题
这个系统通过多智能体协作和循环处理,实现了长文案到多幅四格漫画的智能转换,让故事表达更加生动和完整!
