garden-skills 的 gpt-image-2 漫画跨页模板实战:用结构化 JSON 生成单页多分镜 / 跨页 spread 漫画
garden-skills 的 gpt-image-2 漫画跨页模板实战:用结构化 JSON 生成单页多分镜 / 跨页 spread 漫画
导读
本文面向使用 garden-skills 仓库中 gpt-image-2 技能生成漫画类图像的开发者与创作者,系统讲解「漫画跨页 / 多分镜页」模板的完整用法。你将从 manga-spread-page.md 出发,掌握单页 5-7 格不规则分镜、左右跨页 spread、彩色商业页、自动补全模式的提示词写法,并结合 SKILL.md 的三模式运行机制与 generate.js 的命令行参数,理解一套 JSON 模板如何真正落到一次可复现的图像生成中。读完后,你可以直接照模板产出"漫画书质感"的分镜页,也能按仓库案例自行扩展变体。
模板定位:什么场景该用漫画跨页模板
manga-spread-page.md 用于"一页内多个不规则分镜叙事"的漫画视觉,覆盖以下场景:
- 单页 5-7 个分镜的漫画
- 跨页 spread(左右两页连贯)
- 心理 / 悬疑 / 战斗 / 日常多分镜
- 同人漫画 / 商业漫画
- 故事板 storyboard
它的核心特征决定了它与简单的 4 格段子截然不同:
- 不规则格子:大格、小格交错,形成阅读节奏
- 大格 + 小格组合:避免全页等大导致节奏单调
- 有阅读顺序:通常右上 → 左下
- 含对话框 + 心声 + 旁白:三层文字层级
- 风格更"漫画书":不是 4 格段子
何时使用 / 何时不要使用
当用户提到"漫画分镜 / spread / 多格漫画 / 故事板",或希望叙事更复杂、节奏更动感、要"漫画书"质感时使用本模板。
不要使用本模板的相邻场景,仓库通过模板互斥关系明确定界:
- 4 格段子 → 使用 four-panel-comic.md(等大 2×2 或 1×4,起承转合,对话 ≤12 字/格)
- 单图 KV → 使用 anime-key-visual.md
- 角色设定稿 → 使用 character-sheet.md
缺失信息优先提问顺序
模板在设计时就把"缺什么先问什么"写死了,对话中按以下顺序收集信息,避免漫无目的地发问:
- 故事概要 / 这一页要讲什么
- 分镜数量(5-9 格)
- 主角描述
- 风格:日漫 / 韩漫 / 美漫 / 同人
- 阅读方向(日式右往左 / 美式左往右)
- 是否含色彩或纯黑白
这一顺序与 prompt-writing.md 的字段设计规则一脉相承:主体来源优先、图像用途其次、核心对象与主题再次,最后才是可默认的风格类字段。
主模板:单页多分镜漫画
主模板面向"整体一页漫画,包含 5-7 个不规则分镜,按阅读顺序展开一段叙事"。以下 JSON 是仓库中可直接复制的完整模板,{argument ...} 为可替换参数槽,default 为可直接工作的默认值:
{
"type": "单页多分镜漫画",
"goal": "生成一张完整的单页漫画,含多个分镜,叙事节奏紧凑",
"story": {
"summary": "{argument name=\"story summary\" default=\"主角接到神秘电话,决定独自前往\"}",
"main_character": "{argument name=\"main character\" default=\"年轻女性侦探,短发,黑色风衣\"}",
"supporting": "{argument name=\"supporting\" default=\"无\"}"
},
"style": {
"art_style": "{argument name=\"art style\" default=\"日式黑白漫画 + 网点 + 强阴影\"}",
"tone": "{argument name=\"tone\" default=\"悬疑 + 紧张\"}",
"color": "{argument name=\"color\" default=\"黑白 + 灰阶\"}"
},
"page_layout": {
"panel_count": "{argument name=\"panel count\" default=\"6\"}",
"reading_direction": "{argument name=\"reading direction\" default=\"日式:从右到左、从上到下\"}",
"panels": [
{
"id": 1,
"size": "大格 跨上半部分",
"scene": "{argument name=\"panel 1\" default=\"主角侧脸特写,电话靠耳边\"}",
"text": "{argument name=\"text 1\" default=\"旁白:那通电话,改变了一切\"}"
},
{
"id": 2,
"size": "中格 右下",
"scene": "{argument name=\"panel 2\" default=\"特写电话听筒里的杂音\"}",
"text": "{argument name=\"text 2\" default=\"对方:今晚十点,老地方\"}"
},
{
"id": 3,
"size": "小格 左下",
"scene": "{argument name=\"panel 3\" default=\"主角眼神特写,瞳孔放大\"}",
"text": "{argument name=\"text 3\" default=\"心声:又是他\"}"
},
{
"id": 4,
"size": "中格 右",
"scene": "{argument name=\"panel 4\" default=\"主角穿上风衣的动作分镜\"}",
"text": ""
},
{
"id": 5,
"size": "中格 中",
"scene": "{argument name=\"panel 5\" default=\"主角推开门,雨夜街道\"}",
"text": ""
},
{
"id": 6,
"size": "大格 跨下半部分",
"scene": "{argument name=\"panel 6\" default=\"主角背影远去,路灯昏黄\"}",
"text": "{argument name=\"text 6\" default=\"旁白:这是赴约,还是赴死\"}"
}
]
},
"dialogue_design": {
"balloon_style": "白底 + 黑描边 + 尖角指向",
"narration_box": "矩形 + 灰底 + 黑边",
"thought_balloon": "云形 + 虚线尾巴",
"font_style": "无衬线漫画体"
},
"aspect_ratio": "{argument name=\"aspect ratio\" default=\"3:4\"}",
"constraints": {
"must_keep": [
"分镜大小有节奏(大 + 小 + 大)",
"阅读顺序清晰",
"主角在多格中保持一致",
"对话框不挡关键人物动作"
],
"avoid": [
"分镜全部一样大(节奏单调)",
"阅读顺序混乱",
"主角形象漂移",
"色调突变(黑白页里突然有彩色)"
]
}
}
模板字段解读
type+goal:定义模板类型与最终用途,是 prompt-writing.md 规定的 JSON 骨架(type / goal / subject / scene / layout / style / details / constraints)在漫画场景下的具体化。story:summary 提供一句话故事,main_character 是跨格一致性的锚点——主角描述越具体(发型、服装、道具),模型越不容易在不同分镜里"画成另一个人"。page_layout:panel_count 控制格数,reading_direction 决定分镜排布逻辑,panels数组严格按id顺序给出每格的size(大/中/小 + 版面位置)、scene(画面内容)与text(对话 / 心声 / 旁白)。text为空字符串表示该格无文字,靠纯画面叙事。dialogue_design:独立定义对话框(白底黑描边尖角)、旁白框(矩形灰底黑边)、心声气泡(云形虚线尾巴)与字体(无衬线漫画体)——这是"漫画书质感"区别于普通插画的关键字段。constraints.must_keep / avoid:把最容易翻车的点写成显式约束交给图像模型。
参数策略
模板明确规定了三类参数的对待方式:
- 必问:故事概要、分镜数、主角
- 可默认:风格、阅读方向、对话框样式
- 可随机:背景细节
自动补全策略
- 用户只给故事时:自动决定 5-7 格分镜节奏
- 默认日式黑白漫画 + 网点
- 默认日式阅读方向
这套策略与 prompt-writing.md 的"核心参数优先提问 / 可默认参数用默认值 / 可随机参数合理生成"三级分类完全一致:缺失信息只影响结果走向时才问,否则尽量自己补全。
仓库案例佐证:单页模板的真实落盘形态
仓库的案例库中保留了两份该模板的已渲染结果,可以直接对照理解"模板 → 成品"的映射关系:
1.json 是"跨页 spread 漫画"的完整渲染:8 个分镜、横向 spread、左右两页连贯,panels 数组把每个分镜的 size 明确标注到"右页大格 占上半 / 左页上中格 / 左页下左大格"这种版面级粒度,reading_direction 写成"日式:从右到左、从上到下,跨页先右页后左页",并且 constraints.must_keep 里显式写了"跨页中轴线不切脸不切剑刃主干"。
2.json 则是"单页多分镜漫画"的 6 格校园题材渲染,size 字段出现"大格 右上到跨中 / 小格 中左 / 大格 最下全宽"等不规则排版,text 字段混合了对话("你刚才举手机了?")、心声("不对,他在狡辩!")与旁白("风太大,人也会想太多。")三种层级。
这两份 JSON 证实:模板中的 {argument ...} 槽位在真实使用中会被具体故事内容替换,而 page_layout、dialogue_design、constraints 等结构字段会原样保留、精确约束出图。
变体 1:跨页 spread(左右两页)
适用于"左右两页连贯"的横向大图,模板为:
{
"type": "跨页 spread 漫画",
"page_layout": {
"panel_count": "8-12(左右两页加起来)",
"format": "横向 spread,画面分左右两页"
},
"aspect_ratio": "16:11",
"constraints": {
"must_feel": "左右两页连贯,中央 gutter 不要切到关键元素"
}
}
关键约束是中央 gutter(装订线)安全区:跨页时关键元素(主角面部、剑刃主干等)不得落在中轴线上,否则装订后会断裂。案例 1.json 中"跨页中轴线不切脸不切剑刃主干"正是这条约束的具体执行。
变体 2:彩色商业漫画页
适用于可作商业连载的彩色页,模板为:
{
"type": "彩色商业漫画页",
"style": {
"color": "全彩 + 平涂 + 数字漫画质感",
"art_style": "美漫 / 韩漫 风"
},
"constraints": {
"must_feel": "可作为商业漫画连载页"
}
}
注意主模板默认是黑白 + 网点,此变体显式切换到"全彩平涂 + 数字漫画质感",并在 constraints 中以"可作为商业漫画连载页"作为成稿标准。
变体 3:自动补全模式
当用户只给一段故事、要求直接出成品时使用:
{
"type": "漫画跨页自动补全",
"mode": "auto-fill",
"rule": "用户给一段故事,自动切分镜、排版、对话",
"constraints": {
"must_feel": "出版社编辑可直接放入排版"
}
}
此模式下 mode: "auto-fill" 告知模型自行完成分镜切分、版面排版与对话撰写,成稿标准是"出版社编辑可直接放入排版"。
把渲染好的模板跑成图:gpt-image-2 的三模式机制
模板文件中的 JSON 是提示词结构模板,不是 API 请求体。最终交给图像模型的是"渲染后的 prompt 字符串"——可以是拍平的 JSON,也可以是结构化自然语言段落(SKILL.md 明确要求按模板原样使用)。
根据 SKILL.md,任何任务的第一步都是运行模式探测脚本:
node skills/gpt-image-2/scripts/check-mode.js
# 想拿结构化结果给上层程序用:
node skills/gpt-image-2/scripts/check-mode.js --json
脚本逻辑见 check-mode.js:当 ENABLE_GARDEN_IMAGEGEN 为真(1 / true / yes / on / y)且存在 OPENAI_API_KEY 时为 Mode A;开了开关但缺 key 时为 A?(提示先要 key 或降级);未启用则进入 B-or-C(宿主有图像工具走 B,否则走 C)。三个模式的出图路径差异如下:
| 条件 | 模式 | 调用脚本? | 落盘 prompt? | 落盘图片? |
|---|---|---|---|---|
ENABLE_GARDEN_IMAGEGEN=1 + 有 KEY |
A | ✅ generate.js / edit.js |
✅ 自动 | ✅ 自动 |
ENABLE_GARDEN_IMAGEGEN=1 但没 KEY |
A? | ❌(先要 KEY) | — | — |
| 未启用 + 宿主有图像工具 | B | ❌(用宿主工具) | 可选 | 由宿主决定 |
| 未启用 + 宿主无图像工具 | C | ❌ | ✅ 必须 | ❌(无法) |
环境变量按 CLI 参数 → process.env → <cwd>/.env → <cwd>/.gateway.env → ~/.gateway.env 顺序读取(实现见 shared.js 的 loadAmbientEnv):
| 变量 | 必需性 | 说明 |
|---|---|---|
ENABLE_GARDEN_IMAGEGEN |
Mode A 必需 | 模式开关:1 / true / yes / on 启用 Mode A |
OPENAI_API_KEY |
Mode A 必需 | 真正调图像 API 用 |
OPENAI_BASE_URL |
可选 | 默认 https://api.openai.com/v1,可指向任意 OpenAI 兼容网关 |
OPENAI_IMAGE_MODEL |
可选 | 默认 gpt-image-2,也可换成 gpt-image-1 / dall-e-3 等 |
Mode A 命令行实操(以漫画跨页为例)
在 Mode A 下,把上面渲染好的 JSON prompt 保存为文件后直接生图:
node skills/gpt-image-2/scripts/generate.js \
--promptfile garden-gpt-image-2/prompt/manga-spread-20260424-153045.md \
--size 1024x1536 \
--quality high
generate.js 支持的完整 CLI 参数:
--prompt <text>:直接传 prompt 文本--promptfile <path>:从文件读 prompt--prompt-output <path>:把最终 prompt 另存到指定文件--image <path>:输出图片路径(默认garden-gpt-image-2/image/<slug>-<timestamp>.png)--model <name>:模型覆盖(默认gpt-image-2)--size <WxH>:输出尺寸--n <count>:生成张数--quality <level>:auto/high/medium/low--background <mode>:transparent/opaque/auto--moderation <level>:low/auto--output-format <format>:png/jpeg/webp--output-compression <0-100>:jpeg / webp 压缩比--json:结构化输出-h, --help:帮助
脚本内部流程(generate.js 的 run()):加载环境变量 → 读取 prompt(readPromptInput)→ 生成语义化文件名(slugify,取 prompt 前 8 个词转小写连字符、截断 48 字符)→ 保存 prompt 到 garden-gpt-image-2/prompt/ → 构造 payload 调 POST {base}/images/generations → 解析 data[0].b64_json(兼容 data[0].url 下载)→ 落盘 PNG 到 garden-gpt-image-2/image/。
Mode B / C:无 CLI 入口的用法
- Mode B:渲染好最终 prompt → 调用宿主自带的
image_generation类工具(参数中传入 prompt)→ 拿图。 - Mode C:渲染好最终 prompt → 保存到
garden-gpt-image-2/prompt/<task-slug>-<timestamp>.md→ 把内容直接展示给用户,提示可在 ChatGPT / Midjourney / DALL·E / Sora / Nano Banana / 第三方 GPT Image 2 网关中复用。
命名规则统一为 garden-gpt-image-2/prompt/<task-slug>-<timestamp>.md 与 garden-gpt-image-2/image/<task-slug>-<timestamp>.png,其中 <timestamp> 是 YYYYMMDD-HHMMSS(由 makeTimestamp() 生成,见 shared.js)。
避免事项:漫画分镜最容易翻车的地方
模板把高失败率场景全部写成了负面清单:
- 不要让分镜全部等大
- 不要让阅读顺序难以辨认
- 不要让对话框挡脸 / 挡动作
- 不要在黑白漫画页里突然出现强彩色
- 不要让主角形象在不同格里像不同人
- 跨页时不要让关键元素正好在中央装订线
对照案例 2.json 的 avoid 字段("分镜全等大 / 全页无网点层次 / 阅读顺序难辨认"),可以看到负面约束在真实渲染中同样被严格执行。与 4 格模板(four-panel-comic.md)相比,本模板额外关注"大 + 小格节奏"与"跨页 gutter",这是复杂叙事的特有风险点。
工作流小结:从故事到成图的一条龙路径
- 判定场景:确认是"单页多分镜 / 跨页 spread"而非 4 格段子或单图 KV。
- 按提问顺序收集信息:故事概要 → 分镜数 → 主角 → 风格 → 阅读方向 → 色彩。
- 套用主模板或变体:填充
{argument ...}槽位,缺失信息用默认值或自动补全。 - 跑
check-mode.js判定模式(check-mode.js)。 - 按模式出图:Mode A 调 generate.js 直接落盘;Mode B 交给宿主图像工具;Mode C 只产出并保存 prompt。
- 对照避免清单验收:分镜节奏、阅读顺序、主角一致性、对话框遮挡、色彩统一、跨页 gutter。
以上每一步都能在当前仓库中找到对应的模板文件、脚本实现与真实案例,可放心照此流程在生产中使用。