通过 codex CLI 生成图像
codex exec 没有 "将图像写入此路径" 的选项:它生成的内容保存在
$CODEX_HOME/generated_images/<session id>/ 下。scripts/codex_image.py 运行一次非交互式轮次,仅收集
同一会话中的图像,并将其写入您指定的位置。如果没有返回图像,则不会写入任何内容。
始终使用此脚本。 手动执行 codex exec "draw a cat" 通常返回文本或使用 ImageMagick 绘制的图像,
而您还需要费力寻找输出文件。
切勿回退到计费 API。 即使 codex 失败或配额不足,也不得使用 OpenAI SDK 或 OPENAI_API_KEY。
报告失败并停止。对于 Google 的计费 API,仅在用户要求时才使用 google-image-gen。
用法
在技能目录下运行,或使用脚本的绝对路径。一次运行大约需要 30-60 秒。
python3 scripts/codex_image.py -p "黄昏时分,一辆孤独的红色自行车靠在潮湿的石墙上,电影级照片" -o bike.png
| 目标 | 命令 |
|---|---|
| 宽高比(向模型提供提示) | -p "..." -o out.png --aspect 9:16 |
| 参考图像 | -p "..." -o out.png -r ref.png [-r ref2.png] |
| 编辑图像 | --edit v1.png -p "把天空变成紫色" -o v2.png |
| 多个版本 | -p "..." -o opt.png -n 3 (保存 opt.png、opt-2.png、opt-3.png) |
| 精确像素尺寸 | -p "..." -o cover.png --aspect 9:16 --fit 1080x1920 |
| 长提示词 | --prompt-file prompt.md -o out.png |
| 查看提示词,不消耗配额 | 添加 --print-prompt |
- 输出扩展名与实际格式一致:请求的
bike.jpg会以 PNG 字节流保存为bike.png。脚本会打印每个写入的路径。 --aspect仅塑造结果形状。--fit WxH保证最终尺寸:默认使用黑边填充 (--fit-mode pad,默认),或中心裁剪 (--fit-mode crop),并且始终保存为 PNG。请确保--aspect与目标匹配,以减少填充或裁剪。--fit需要 Pillow,将在 codex 运行前检查。-n在一次运行中请求 N 个版本;模型可能返回更少,脚本会保存实际获得的内容。--edit将图像作为目标附加,并告知模型仅更改提示词中要求的部分。
编写提示词
脚本会自动添加强制调用实际图像工具的措辞,因此 --prompt 仅需描述图像本身。简短且带有标签的说明效果很好:
主体:一辆孤独的红色自行车,边缘的油漆磨损至裸露金属
场景:靠在潮湿的石砌码头墙上,远处是城镇的灯光
风格:电影级照片,浅景深
光照:黄昏,低角度暖阳,湿石上的反光
文字(逐字):".NO SPARE."
避免:人物、水印、额外自行车
- 必须出现的文字请加引号,并保持简短;长字符串容易出现拼写错误。
- 明确说明不能出现的内容。对于透明裁剪图,要求透明背景并保存为
.png。 - 对于
--edit,描述要做的修改(例如 "移走路灯柱"),并说明必须保留的内容(例如 "保留自行车、构图和光照")。每次只修改一项。 - 编辑操作本质上是重新生成,而非像素修补:构图和细节会漂移,每次操作都会累积偏差。请保持修改链条简短,并将必须保持不变的部分合成回去。
生成后
在交付结果前,请使用任意可用的图像查看方式检查结果:模型有时会在文字、数量或要求的细节上出错。如果有误,建议使用更精确的提示词重新运行,或使用 --edit 进行修正。
故障处理
脚本会以非零退出码退出,并输出一条明确的消息,不写入任何内容。
- 未找到 codex CLI 或未登录:请安装 codex 并运行
codex login;CODEX_BIN指向其他二进制文件。 - 配额不足:等待 codex 报告的配额重置时间,或使用其他账户。请勿循环重试。
- 未生成图像:模型以文本形式回复。会显示其回复内容;请使用更简单的图像请求重新运行。
- 超时:仅在运行确实缓慢时才增加
--timeout(默认 900 秒)。 - 使用
--fit时缺少 Pillow:执行pip install Pillow,或移除--fit。