批量生成与产物管理
"出十张图"听起来像一个动作,实则是两个完全不同的问题:是同一句话的十个变体,还是十个不同资产的十张不同的图?分清这一点,再加上一套稳妥的命名与落地纪律,你就能把规模化出图从一团乱麻变成一条流水线。
规模化出图的第一道坎,不在工具,而在用词。当你说"给我来一套"时,技能必须先替你拆清楚:你要的是变体,还是多个资产?这两个词指向两条截然不同的执行路线,一旦混淆,要么浪费调用,要么交出一堆"长得一样却都不对"的图。
n 与"不同 prompt"的根本区别
技能里有一个参数叫 n——同一句提示词要画几张。它的语义只有一个:n 是"同一句话的多个变体",不是"多个不同的资产"。
换句话说,n=4 给你的是同一个主体、同一种风格、同一套构图意图下的四次掷骰子:四张近似的图,供你挑一张最顺眼的。而"封面 + 头像 + 配图 + Banner"是四个不同的资产,各自有各自的画面——它们需要四句不同的提示词,而不是 n=4。
需要 10 个不同的资产时,绝不要用 n=10 去凑。n 只会给你同一句话的 10 个变体——主体雷同、用途单一。不同资产 = 不同提示词:内置模式下逐个发调用,CLI 模式下用 generate-batch 喂多句 prompt。
判别只问一句:"这些图彼此是替换关系,还是并列关系?" 替换关系(我只要其中一张)→ 用 n 出变体;并列关系(每一张都要交付)→ 写多句不同 prompt,每个资产一份。
内置批量:一个资产一次调用
这里要破除一个常见误解:"批量"这个词本身,不等于要切到 CLI。你想要很多张图,但没有点名命令行、API 或模型路径——那就留在内置 image_gen。内置模式下的批量法则只有一条:
一个资产,一次 image_gen 调用。 要 10 张不同的图,就是 10 次内置调用,每次配一句为这个资产量身写的提示词。这不是低效,而是正确——因为每个资产本就该有自己的画面。
把"一套小红书 9 图"拆开
假设要为一篇笔记做成组 9 图。它们共享同一套视觉语言(同配色、同字体气质、同 3:4 竖版),但每一张承载的内容不同:首图最抓人、留白最多,后面 8 张分别讲一个点。正确的拆法是——1 句"共享风格基底" × 9 句"逐图内容":
小红书成组 9 图 · 内置批量拆解
你只需把这句模板里的占位逐图替换,发 9 次内置调用即可。共享基底那段一字不动地重复出现在每一句里——这正是让 9 张图"看起来是一套"的关键。下面是把这个循环交给智能体的样子:
CLI generate-batch 与 JSONL 批文件
什么时候才动用 CLI 的批量?只有两个条件同时成立:用户明确点名要走 CLI / API / 模型路径,并且确实要一次性跑很多句不同的 prompt。这时 generate-batch 才登场——它需要 OPENAI_API_KEY,并吃一个 JSONL 批文件:每行一个 JSON,描述一个独立任务。
再强调一次:用户说"批量"不构成切到 CLI 的理由。没点名命令行就留在内置,一个资产发一次内置调用。只有当用户主动要 scripts/image_gen.py、API 或精确路径/尺寸控制,generate-batch 才是对的工具。另外注意:内置或 CLI gpt-image-2 都绝不静默降级到 gpt-image-1.5——要换模型先问。
JSONL 批文件属于中间产物,放进 tmp/imagegen/,用完即删;终稿图写到 output/imagegen/。文件名要稳定、有描述性。一个最小批文件长这样:
内置批量
无需 Key。一个资产一次内置调用,循环 N 次。共享风格写进每句、逐图替换变量。默认就走这条。
CLI generate-batch
需 OPENAI_API_KEY。用户明确点名 CLI、且要很多句不同 prompt 时才用。JSONL 进 tmp/imagegen,终稿进 output/imagegen。
命名与产物管理
批量一多,文件名就是你唯一的导航。几条原则贯穿始终:
- 稳定且具描述性。 文件名要能让人一眼读懂"这是哪个资产、第几版"。用 xhs-cover.png / xhs-page-03.png,别用 image_final_final2.png 这种。
- 不覆盖已有资产(除非用户明确要替换)。要新版就另存兄弟名:hero-v2.png / item-icon-edited.png。
- 每个交付物都要落地。 批量产物若不逐一移进工作区,等于没交付。
- 舍弃的变体不必留。 用 n 挑剩下的那些近似图、跑废的中间稿,删掉即可——别让它们污染目录。
| 场景 | 怎么命名 | 放哪里 |
|---|---|---|
| 成组 9 图的某一张 | xhs-page-04.png(补零对齐,可排序) | output/…/ 工作区 |
| 同一资产改了一版 | hero-v2.png(版本化兄弟名) | 与原图同目录 |
| 编辑后的成品 | item-icon-edited.png | 工作区,不覆盖原图 |
| CLI 的 JSONL 批文件 | xhs-set.jsonl(描述性) | tmp/imagegen/,用完删 |
| n 挑剩的变体 | — | 删除,不必保留 |
落地铁律:每个交付物进工作区
内置工具默认把图存到 $CODEX_HOME/generated_images/...。这对"只是预览"足够,但对项目要用的资产是致命的——它不在你的工作区里,发布时就会"找不到图"。批量场景下这条尤其要命:一组 9 张,只要漏移一张,整套就残缺。
生成在默认路径
内置调用先把每张图落在 $CODEX_HOME/generated_images/。
逐一 move / copy 进工作区
收尾前把每一个交付物移进项目目录,并按命名规范改成稳定描述性文件名。
校验数量与覆盖
9 张就该有 9 个文件;确认没覆盖已有资产、没漏移、没把成品只留在默认路径。
任何"项目要用"的产物,都必须落地进工作区。批量交付时,每一个交付物都要单独 move/copy 过去——而不是只搬"代表性的那一张"。预览图可以留在默认路径,但交付物不行。
最后,无论走内置还是 CLI,收尾时都汇报三件事:每个文件的最终保存路径、用到的最终提示词、以及用了哪种模式。批量场景下,把这三件事按资产列成清单,对方一眼就能核对"该有的都在、都对"。
n 是变体,不是资产。 同一句话要几张相似图用 n;要多个不同资产就写多句不同 prompt。"批量"一词不等于 CLI:默认留在内置,一个资产一次调用、循环 N 次。只有用户明确点名 CLI 且要很多句 prompt 时,才用 generate-batch(JSONL 进 tmp/imagegen,终稿进 output/imagegen)。命名要稳定且具描述性、不覆盖已有资产、舍弃的变体不留;铁律是每个交付物都落地进工作区,收尾汇报路径、提示词与模式。