# 图片生成脚本与后端选择 需要实际生成配图文件、使用 API/CLI fallback、批量生成 assets,或排查图片接口配置时,先读本文件。 ## 后端选择 优先顺序: 1. Codex / 当前 agent 的内置图片生成工具。适合大多数配图任务。 2. `scripts/maomomo_image_gen.py` API/CLI fallback。适合用户明确要求 API/CLI、内置工具不可用、需要批量 manifest、或希望把生成过程记录到文件时。 不要因为脚本存在就强制使用脚本。若内置图片工具可用,仍优先使用内置工具生成独立 PNG,再保存到 `assets/`。 ## 配置来源 脚本按以下顺序读取配置: - `MAOMOMO_IMAGE_API_KEY` / `OPENAI_API_KEY` - `MAOMOMO_IMAGE_BASE_URL` / `OPENAI_BASE_URL` - `MAOMOMO_IMAGE_MODEL` / `CODEX_PPT_IMAGE_MODEL` - `~/.codex/config.toml` 中的 `base_url` - `~/.codex/auth.json` 中可识别的 API key 不要在日志、回答、Markdown 或 manifest 中写入完整 API key。 ## 单张生成 ```bash python3 scripts/maomomo_image_gen.py generate \ --out article/assets/hsbc-mastercard-alipay-campaign-01-cover.png \ --style warm-fintech-guide \ --title "汇丰 Mastercard 支付宝活动" \ --image-type "封面图" \ --core-text "先看报名、门槛和封顶,避免白刷" ``` 先只看 prompt: ```bash python3 scripts/maomomo_image_gen.py generate \ --out article/assets/hsbc-mastercard-alipay-campaign-01-cover.png \ --style data-card-dashboard \ --title "返现计算图" \ --image-type "计算图" \ --core-text "HK$190 ÷ 9% ≈ HK$2112,超过部分没有额外收益" \ --dry-run ``` ## 批量 manifest manifest 示例: ```json { "images": [ { "file_name": "assets/hsbc-mastercard-alipay-campaign-01-cover.png", "type": "封面图", "title": "汇丰 Mastercard 支付宝活动", "core_text": "先报名,再看门槛和封顶", "alt_text": "MAOMOMO 汇丰 Mastercard 支付宝返现活动封面图", "style": "warm-fintech-guide", "aspect_ratio": "16:9" }, { "file_name": "assets/hsbc-mastercard-alipay-campaign-02-calculation.png", "type": "计算图", "title": "怎么刷到刚刚好", "core_text": "HK$190 ÷ 9% ≈ HK$2112,超过部分没有额外收益", "style": "data-card-dashboard" } ] } ``` 运行: ```bash python3 scripts/maomomo_image_gen.py batch \ --manifest article/image_manifest.json \ --base-dir article ``` `file_name` 必须与 Markdown 中的相对路径一致,且最终文件必须真实存在。 ## 内置风格名 可用: - `warm-fintech-guide` - `clean-editorial` - `data-card-dashboard` - `handdrawn-note` - `xiaohongshu-vertical` 查看完整描述: ```bash python3 scripts/maomomo_image_gen.py styles ``` ## 失败处理 - API key 缺失:提示用户配置环境变量或检查 Codex 配置,不要编造图片文件。 - 接口失败:保留已生成图片,说明失败项,必要时用 `--dry-run` 交付 prompt 清单作为临时排查材料。 - 图片文字乱码或金额错误:重新生成该单张图片;不要手工覆盖文字伪装成模型输出。 - 图片不符合风格:先更新 manifest 的 `style` / `core_text` / `extra`,再重跑对应项。