maomomo-article-writer/references/image-generation.md

6.5 KiB
Raw Blame History

图片生成脚本与后端选择

需要实际生成配图文件、使用 API/CLI fallback、批量生成 assets或排查图片接口配置时先读本文件。

后端选择

优先顺序:

  1. Codex / 当前 agent 的内置图片生成工具。适合大多数配图任务。
  2. scripts/maomomo_image_gen.py API/CLI fallback。适合用户明确要求 API/CLI、内置工具不可用、需要批量 manifest、或希望把生成过程记录到文件时。

不要因为脚本存在就强制使用脚本。若内置图片工具可用,仍优先使用内置工具生成独立 PNG再保存到 assets/

生成第一张图前,必须向用户确认:

  • 已检查哪种内置图片生成工具是否可用。
  • 准备使用的生图后端。
  • 是否需要 scripts/maomomo_image_gen.py fallback以及原因。
  • 当前会沿用环境变量或配置文件中的 baseURL、model、quality不会擅自改成 low

确认后,整篇文章所有图片保持同一个生图后端和质量配置。只有用户明确要求切换,或当前后端无法完成必需能力时,才重新确认后端。

配置来源

脚本按以下顺序读取配置:

  • 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。

单张生成

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-guide
  • clean-professional
  • clean-editorial
  • data-card-dashboard
  • handdrawn-note
  • creative-magazine
  • retro-flat-illustration
  • e-ink-editorial
  • scientific-defense
  • mckinsey-brief
  • xiaohongshu-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
  • 状态:pendingdispatchedrecordedblocked
  • 生图后端、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。