6.5 KiB
6.5 KiB
图片生成脚本与后端选择
需要实际生成配图文件、使用 API/CLI fallback、批量生成 assets,或排查图片接口配置时,先读本文件。
后端选择
优先顺序:
- Codex / 当前 agent 的内置图片生成工具。适合大多数配图任务。
scripts/maomomo_image_gen.pyAPI/CLI fallback。适合用户明确要求 API/CLI、内置工具不可用、需要批量 manifest、或希望把生成过程记录到文件时。
不要因为脚本存在就强制使用脚本。若内置图片工具可用,仍优先使用内置工具生成独立 PNG,再保存到 assets/。
生成第一张图前,必须向用户确认:
- 已检查哪种内置图片生成工具是否可用。
- 准备使用的生图后端。
- 是否需要
scripts/maomomo_image_gen.pyfallback,以及原因。 - 当前会沿用环境变量或配置文件中的 baseURL、model、quality,不会擅自改成
low。
确认后,整篇文章所有图片保持同一个生图后端和质量配置。只有用户明确要求切换,或当前后端无法完成必需能力时,才重新确认后端。
配置来源
脚本按以下顺序读取配置:
MAOMOMO_IMAGE_API_KEY/OPENAI_API_KEYMAOMOMO_IMAGE_BASE_URL/OPENAI_BASE_URLMAOMOMO_IMAGE_MODEL/CODEX_PPT_IMAGE_MODEL~/.codex/config.toml中的base_url~/.codex/auth.json中可识别的 API key
不要在日志、回答、Markdown 或 manifest 中写入完整 API key。
单张生成
python3 scripts/maomomo_image_gen.py generate \
--out article/origin_image/hsbc-mastercard-alipay-campaign-01-cover.png \
--style warm-fintech-guide \
--title "汇丰 Mastercard 支付宝活动" \
--image-type "封面图" \
--core-text "先看报名、门槛和封顶,避免白刷"
先只看 prompt:
python3 scripts/maomomo_image_gen.py generate \
--out article/origin_image/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 示例:
{
"images": [
{
"file_name": "origin_image/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": "origin_image/hsbc-mastercard-alipay-campaign-02-calculation.png",
"type": "计算图",
"title": "怎么刷到刚刚好",
"core_text": "HK$190 ÷ 9% ≈ HK$2112,超过部分没有额外收益",
"style": "data-card-dashboard"
}
]
}
运行:
python3 scripts/maomomo_image_gen.py batch \
--manifest article/image_manifest.json \
--base-dir article
file_name 必须与本次生成目录一致,且最终文件必须真实存在。发布用 Markdown 默认引用 assets/,因此输出到 origin_image/ 后要在 QA 通过时同步到同名 assets/ 文件。
重要限制:
- 不要在样张确认前运行批量生成。
- 默认用
generate单张生成;batch只用于用户明确授权的全量生成或 dry-run prompt 输出。 - 即使使用
batch,脚本也是逐项请求图片接口;生成后仍要逐张 QA,并把通过的图片同步到assets/。 - 发布用 Markdown 默认引用
assets/,因此如果 manifest 输出到origin_image/,必须在 QA 后复制到对应assets/路径。
内置风格名
可用:
warm-fintech-guideclean-professionalclean-editorialdata-card-dashboardhanddrawn-notecreative-magazineretro-flat-illustratione-ink-editorialscientific-defensemckinsey-briefxiaohongshu-vertical
查看完整描述:
python3 scripts/maomomo_image_gen.py styles
失败处理
- API key 缺失:提示用户配置环境变量或检查 Codex 配置,不要编造图片文件。
- 接口失败:保留已生成图片,说明失败项,必要时用
--dry-run交付 prompt 清单作为临时排查材料。 - 图片文字乱码或金额错误:重新生成该单张图片;不要手工覆盖文字伪装成模型输出。
- 图片不符合风格:先更新 manifest 的
style/core_text/extra,再重跑对应项。 - 图片生成超时:可以对同一张图重试较长超时;不要为了快擅自降低
quality。 - Playwright 只用于已有 HTML / SVG / 网页截图检查,不能替代 GPT Image2 / 图片 API 生成海报、OG 图、卡片图或文章配图。
状态记录
每张图片 job 的 dispatch、result 和 blocker 都要写入项目状态文件。推荐状态文件:
{article_dir}/slide_jobs.json
{article_dir}/slide_run_state.json
记录字段至少包括:
- job id,例如
hsbc-mastercard-alipay-campaign_01 - prompt 文件,例如
prompts/hsbc-mastercard-alipay-campaign_01.json - 输出原图,例如
origin_image/hsbc-mastercard-alipay-campaign-01-cover.png - 发布图,例如
assets/hsbc-mastercard-alipay-campaign-01-cover.png - 状态:
pending、dispatched、recorded、blocked - 生图后端、agent id、QA note、失败原因
使用 scripts/maomomo_job_state.py 更新状态,不要手工改 JSON 后声称完成。
初始化状态:
python3 scripts/maomomo_job_state.py init article \
--selected-backend "built-in image tool"
查看状态:
python3 scripts/maomomo_job_state.py status article
记录 dispatch:
python3 scripts/maomomo_job_state.py dispatch article \
--job hsbc-mastercard-alipay-campaign_02 \
--agent-id "<agent id>" \
--prompt-file prompts/hsbc-mastercard-alipay-campaign_02.json
记录结果并同步到 origin_image/ 和 assets/:
python3 scripts/maomomo_job_state.py result article \
--job hsbc-mastercard-alipay-campaign_02 \
--agent-id "<agent id>" \
--backend-used "built-in image tool" \
--selected-source /absolute/path/to/generated.png \
--qa-note "文字清楚,风格与样张一致。"
记录 blocker:
python3 scripts/maomomo_job_state.py blocker article \
--job hsbc-mastercard-alipay-campaign_02 \
--agent-id "<agent id>" \
--reason "选定图片后端在 worker 中不可用"
如果状态脚本失败,最终报告必须说明原因,并附上状态文件当前路径和未完成 job。