Install
npx skillscat add onewaymyway/mini-agent/comic-4panel Install via the SkillsCat registry.
四格漫画生成 (4-Panel Comic Generator)
概述
本 skill 用于生成完整的四格漫画(2×2 网格布局)。流程包括:主题构思 → 分镜脚本 → 一次性生成完整漫画图(图文一体)→ 用户选择交付。
核心理念:对白文字直接由图片生成模型画入画面,无需后处理叠加。只需调用一次 gen_image_with_text 即可得到最终成品。
依赖:
gen_image_with_textskill(必须,通过 bash 调用gen_image.py gen生成图片)AGNES_API_KEY环境变量(必须)
输入规范
必需
- theme:漫画主题/关键词,如 "程序员日常"
可选
| 参数 | 默认值 | 说明 |
|---|---|---|
| style | anime |
画风:anime / manga-bw / chibi / realistic / watercolor / custom |
| style_suffix | "" |
自定义风格后缀(style=custom 时使用) |
| characters | "" |
角色描述 |
| source_work | "" |
来源作品(如"《Re:从零开始的异世界生活》"),直接影响模型对角色服装、发型、气质的理解,对生成效果至关重要 |
| output_dir | ./comic_output |
输出目录 |
| filename | comic_4panel_{timestamp} |
输出文件名(不含扩展名) |
| language | zh |
对白语言:zh / ja / en |
| humor_type | 日常 |
幽默类型:日常 / 荒诞 / 吐槽 / 温馨 |
| num_candidates | 2 |
每次生成的候选图数量 |
| auto_mode | false |
快速模式,跳过中间确认 |
| prompt_lang | zh |
prompt 语言:zh(优先中文)/ en(强制英文) |
⚠️ 产物文件强制保存规范(最高优先级)
每个步骤完成后,必须立即将产物写入文件,不得仅停留在对话输出中。
这是本 skill 的铁律:
- 先生成内容,立刻写文件 — 不要等用户确认后再写,确认前就要写入
- 文件写入是步骤完成的标志 — 没写入文件 = 步骤未完成,不能进入下一步
- 每次重新生成都要覆盖/追加文件 — 确保产物文件始终是最新状态
- 如果写入失败,必须报告错误并停止 — 不能跳过产物保存
检查清单:每完成一个步骤,在脑中过一遍:"产物文件写了吗?" → 如果没写,立刻补上。
流程规范
Step 1: 主题构思
将用户主题扩展为完整的漫画创作概念,输出格式:
theme_concept:
core_idea: "一句话核心创意"
tone: "风格基调"
setting: "场景设定"
source_work: "来源作品(如《Re:从零开始的异世界生活》)"
characters:
- name: "角色名"
visual_desc_zh: "中文视觉描述"
visual_desc_en: "English visual description"
personality: "性格特点"
narrative_arc: "起:... → 承:... → 转:... → 合:..."要求:
- 角色必须同时包含
visual_desc_zh和visual_desc_en - 叙事弧线必须遵循起承转合结构
- 必须包含
source_work字段(来源作品),即使为空也要显式设置为空字符串 - 展示给用户确认后再进入 Step 2
产物输出(强制):Step 1 完成后,立即写入 output_dir/theme_concept.yaml,然后才能展示给用户确认。
Step 2: 分镜脚本
基于主题概念生成4格详细分镜,输出格式:
panels:
- id: 1
title: "起 - 标题"
scene_zh: "中文场景描述"
scene_en: "English scene description"
characters:
- name: "角色名"
expression_zh: "中文表情"
expression_en: "English expression"
action_zh: "中文动作"
action_en: "English action"
position: "画面位置"
dialogue: "对白内容"(使用 language 指定的语言)
narration: "旁白"(可选)
composition_zh: "中文构图指示"
composition_en: "English composition"要求:
- 每格必须包含中英文版本的场景、表情、动作、构图
- 对白简短有力,符合角色性格
- 对白长度控制在 10-20 字以内(方便模型画入画面)
- 旁白控制在 5-10 字以内
- 展示给用户确认后再进入 Step 3
产物输出:Step 2 完成后,立即写入 output_dir/storyboard.yaml
Step 3: 生成漫画(图文一体)
Step 3a: 构建并保存 Prompt
基于 storyboard.yaml 中的分镜数据和 theme_concept.yaml 中的 source_work,按照以下模板构建完整 prompt,先保存到文件,再展示给用户确认。
核心原则:
- prompt 开头先放角色设定信息(来源作品 + 角色外观描述),确保模型理解角色身份
- 每格用完整段落描述,不再用占位符拼接
- 每格包含:画面场景 + 角色状态 + 屏幕/道具内容 + 对白气泡文字
- 屏幕上的文字(代码、报错信息等)也要在 prompt 中写明,让模型画入画面
- 对话框必须明确指明是哪个角色的,格式为:
[角色名]的对话框文字:"[对白内容]",这样模型能准确将文字画在对应角色的气泡中
中文 prompt 模板(prompt_lang=zh,默认):
【角色设定】
来自《[来源作品]》的[角色名],[服装描述],[外貌特征描述]。
一幅2×2网格布局的四格漫画,格间有白色边框,所有格角色设计一致。
【第1格 · 左上】
[场景描述]。[角色名]穿着[服装],[表情描述],[动作描述]。[屏幕/道具内容描述,含文字]。[角色名]的对话框文字:"[对白]"。
【第2格 · 右上】
[场景描述]。[角色名]穿着[服装],[表情描述],[动作描述]。[屏幕/道具内容描述,含文字]。[角色名]的对话框文字:"[对白]"。
【第3格 · 左下】
[场景描述]。[角色名]穿着[服装],[表情描述],[动作描述]。[屏幕/道具内容描述,含文字]。[角色名]的对话框文字:"[对白]"。
【第4格 · 右下】
[场景描述]。[角色名]穿着[服装],[表情描述],[动作描述]。[屏幕/道具内容描述,含文字]。[角色名]的对话框文字:"[对白]"。
[风格后缀]英文 prompt 模板(prompt_lang=en):
[CHARACTER SETTING]
[Character Name] from "[SOURCE_WORK]", wearing [outfit], [appearance description].
A 4-panel comic strip in 2x2 grid layout with clean white borders between panels, consistent character design across all panels.
[Panel 1 · Top-left]
[Scene description]. [Character Name] wearing [outfit], [expression], [action]. [Screen/prop description with text]. [Character Name]'s speech bubble text: "[DIALOGUE]".
[Panel 2 · Top-right]
[Scene description]. [Character Name] wearing [outfit], [expression], [action]. [Screen/prop description with text]. [Character Name]'s speech bubble text: "[DIALOGUE]".
[Panel 3 · Bottom-left]
[Scene description]. [Character Name] wearing [outfit], [expression], [action]. [Screen/prop description with text]. [Character Name]'s speech bubble text: "[DIALOGUE]".
[Panel 4 · Bottom-right]
[Scene description]. [Character Name] wearing [outfit], [expression], [action]. [Screen/prop description with text]. [Character Name]'s speech bubble text: "[DIALOGUE]".
[STYLE_SUFFIX]实际示例(基于程序员笑话 × 异世界女仆 × 太空船脚本,来源作品:《Re:从零开始的异世界生活》):
【角色设定】
来自《Re:从零开始的异世界生活》的蕾姆,蓝白色女仆装,蓝色长发,头发遮住右眼,认真负责的性格。
一幅2×2网格布局的四格漫画,格间有白色边框,所有格角色设计一致。
【第1格 · 左上】
未来太空飞船的控制室,红色警报灯疯狂闪烁,多个屏幕显示错误信息。蕾姆穿着蓝白色女仆装,蓝色长发,一脸认真地盯着控制台屏幕。屏幕上显示红色警告文字:"Critical Error: Life Support System Failure!"。蕾姆的对话框文字:"又崩了……是哪个魔法回路写的代码?"
【第2格 · 右上】
蕾姆站在控制台前,打开系统日志界面。屏幕上满是乱码和程序员注释,可见文字:"// TODO: fix this later (100年前的程序员写的)"、"// it works, don't touch it"、"// I have no idea why this works"。蕾姆面无表情,眼神死寂。蕾姆的对话框文字:"……这是'祖传代码'吗?"
【第3格 · 左下】
蕾姆坐在控制台前认真敲代码,女仆围裙飘起,身后有冰系魔法的光效。屏幕上显示代码:"# remove legacy curse"、"system.reboot(force=True)"。飞船剧烈抖动,背景有震动线条。蕾姆的对话框文字:"冰系魔法(注释掉旧代码)发动!"
【第4格 · 右下】
太空船控制室灯光全部变成粉色,背景音乐自动播放的氛围。屏幕显示:"System stable. Personality module activated: Maid Mode."。蕾姆愣在原地,一脸无语。蕾姆的对话框文字:"……我只是想修bug,不是重写世界观啊。"
动漫风格,四格漫画,所有格角色设计一致,漫画画风,格间白色边框,鲜艳色彩,高质量,清晰的文字产物输出:构建完成后,立即写入 output_dir/prompt_used.txt
Step 3b: 用户确认 Prompt
展示 prompt_used.txt 的内容给用户,询问是否满意。用户可以说:
- "可以" / "生成" → 进入 Step 3c
- "修改" → 回到 Step 2 调整分镜,或直接在 Step 3a 调整 prompt
Step 3c: 调用模型生成
用户确认后,读取 prompt_used.txt 的内容,调用图片生成模型。
风格后缀表
| style | 中文后缀 | 英文后缀 |
|---|---|---|
| anime | 动漫风格,四格漫画,所有格角色设计一致,漫画画风,格间白色边框,鲜艳色彩,高质量,清晰的文字 | anime style, 4koma comic strip, consistent character design across all panels, manga art style, clean white borders between panels, vibrant colors, high quality, clear text |
| manga-bw | 黑白漫画风格,四格漫画,所有格角色设计一致,墨线画,网点纸,格间白色边框,高质量,清晰的文字 | black and white manga style, 4koma comic strip, consistent character design across all panels, ink pen drawing, screentone, clean white borders between panels, high quality, clear text |
| chibi | Q版风格,四格漫画,超变形,可爱,大头小身,所有格角色设计一致,格间白色边框,高质量,清晰的文字 | chibi style, 4koma comic strip, super deformed, cute, big head small body, consistent character design across all panels, clean white borders between panels, high quality, clear text |
| realistic | 半写实动漫风格,四格漫画,所有格角色设计一致,精细阴影,格间白色边框,高质量,清晰的文字 | semi-realistic anime style, 4koma comic strip, consistent character design across all panels, detailed shading, clean white borders between panels, high quality, clear text |
| watercolor | 水彩插画风格,四格漫画,所有格角色设计一致,柔和色彩,颜料质感,格间白色边框,高质量,清晰的文字 | watercolor illustration style, 4koma comic strip, consistent character design across all panels, soft colors, paint texture, clean white borders between panels, high quality, clear text |
| custom | 用户通过 style_suffix 参数提供 | 用户通过 style_suffix 参数提供 |
多候选生成
- 默认生成
num_candidates=2张候选图 - 每张使用相同 prompt,利用模型随机性产生不同结果
- 候选图命名:
{filename}_v1.png,{filename}_v2.png, ... - 串行生成,失败重试1次
调用方式
使用 prompt 文件模式(推荐,避免命令行参数过长):
python .claude/skills/gen_image_with_text/gen_image.py gen --prompt-file <output_dir>/prompt_used.txt --size 1024x1024 --save-path <output_dir>/<filename>_v{i}.png说明:
--prompt-file参数读取prompt_used.txt中的完整 prompt 内容,无需在命令行中转义引号或换行符。
产物输出:每张图生成后,追加写入 output_dir/generation_log.json
Step 4: 用户选择与交付
展示所有候选图路径,让用户选择:
🎬 四格漫画生成完成!共 N 张候选图:
📷 候选1: <path>_v1.png
📷 候选2: <path>_v2.png
请选择满意的版本(输入编号),或说"重新生成"获取更多候选图。重新生成:用户说"重新生成"、"再来几张"、"更多"时,生成新候选图,编号递增(_v3, _v4...),旧候选保留。
产物输出:全部完成后,生成 output_dir/README.md 交付说明
产物文件规范
每个流程完成后,必须在 output_dir 下输出对应的产物文件,便于用户查看、追溯和重新生成。
产物文件清单
| 流程 | 产物文件 | 格式 | 说明 |
|---|---|---|---|
| Step 1 主题构思 | theme_concept.yaml |
YAML | 主题概念完整数据 |
| Step 2 分镜脚本 | storyboard.yaml |
YAML | 四格分镜详细脚本 |
| Step 3 漫画生成 | prompt_used.txt |
TXT | 实际用于调用图片生成模型的完整 prompt 内容 |
| Step 3 漫画生成 | {filename}_v{i}.png |
PNG | 图文一体候选图(含对白文字) |
| Step 3 漫画生成 | generation_log.json |
JSON | 生成日志(含 prompt、参数、时间) |
| 全部完成 | README.md |
Markdown | 最终交付说明,汇总所有产物 |
产物文件内容规范
theme_concept.yaml
# 主题构思产物
generated_at: "2026-06-19T10:30:00+08:00"
input_theme: "程序员日常"
source_work: "《Re:从零开始的异世界生活》"
theme_concept:
core_idea: "一句话核心创意"
tone: "风格基调"
setting: "场景设定"
characters:
- name: "角色名"
visual_desc_zh: "中文视觉描述"
visual_desc_en: "English visual description"
personality: "性格特点"
narrative_arc: "起:... → 承:... → 转:... → 合:..."storyboard.yaml
# 分镜脚本产物
generated_at: "2026-06-19T10:35:00+08:00"
theme_concept_ref: "theme_concept.yaml"
panels:
- id: 1
title: "起 - 标题"
scene_zh: "中文场景描述"
scene_en: "English scene description"
characters:
- name: "角色名"
expression_zh: "中文表情"
expression_en: "English expression"
action_zh: "中文动作"
action_en: "English action"
position: "画面位置"
dialogue: "对白内容"
narration: "旁白"
composition_zh: "中文构图指示"
composition_en: "English composition"
# ... 共4格generation_log.json
{
"generated_at": "2026-06-19T10:40:00+08:00",
"style": "anime",
"language": "zh",
"prompt_used": "一幅2×2网格布局的四格漫画...",
"candidates": [
{
"version": 1,
"file": "comic_4panel_v1.png",
"prompt_lang": "zh",
"size": "1024x1024",
"generated_at": "2026-06-19T10:40:30+08:00"
}
]
}README.md(最终交付)
# 四格漫画交付
- **主题**:{input_theme}
- **来源作品**:{source_work}
- **风格**:{style}
- **生成时间**:{generated_at}
## 产物清单
| 文件 | 说明 |
|---|---|
| `theme_concept.yaml` | 主题构思 |
| `storyboard.yaml` | 分镜脚本 |
| `{filename}_v1.png` | 候选图1(图文一体) |
| `generation_log.json` | 生成日志 |
## 使用说明
- 查看分镜脚本:打开 `storyboard.yaml`
- 重新生成:告知 AI 需要调整的主题或分镜产物输出时机
- Step 1 完成后:立即写入
theme_concept.yaml - Step 2 完成后:立即写入
storyboard.yaml - Step 3 每张图生成后:追加写入
generation_log.json - 全部完成后:生成
README.md交付说明
用户交互规范
分步确认模式(默认)
- Step 1 完成后暂停,等用户确认主题构思
- Step 2 完成后暂停,等用户确认分镜脚本
- Step 3-4 连续执行,展示候选图供选择
快速模式
- 用户说"直接生成"、"不用确认"、auto_mode=true 时启用
- 跳过 Step 1/2 的确认,直接生成
重新生成
- 用户说"重新生成"、"再来几张"、"更多"时,生成新候选图
- 编号递增,旧候选保留
- 可指定重新生成某一步(如"换个分镜"回到 Step 2)
常见问题与陷阱
- 模型不理解2×2布局:prompt 中必须明确声明网格布局 + 每格标注位置;多候选生成提高成功率
- 角色跨格不一致:prompt 开头统一角色设定 + 风格后缀中强调
所有格角色设计一致/consistent character design across all panels - 来源作品缺失导致角色形象偏差:务必在 theme_concept.yaml 中填写
source_work,prompt 开头会引用此信息 - 对话框未指明角色导致文字错位:prompt 中必须使用
[角色名]的对话框文字:"[对白]"格式,明确指定每个气泡属于哪个角色 - 文字渲染效果差:模型对文字渲染能力有限,对白尽量简短(10字以内);支持 prompt_lang=en 切换英文 prompt
- API 限流:串行调用 + 失败重试1次
- Pillow 不再需要:文字由模型直接生成,无需后处理叠加