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

196 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 图片生成脚本与后端选择
需要实际生成配图文件、使用 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。
## 单张生成
```bash
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
```bash
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 示例:
```json
{
"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"
}
]
}
```
运行:
```bash
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`
查看完整描述:
```bash
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 都要写入项目状态文件。推荐状态文件:
```text
{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 后声称完成。
初始化状态:
```bash
python3 scripts/maomomo_job_state.py init article \
--selected-backend "built-in image tool"
```
查看状态:
```bash
python3 scripts/maomomo_job_state.py status article
```
记录 dispatch
```bash
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/`
```bash
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
```bash
python3 scripts/maomomo_job_state.py blocker article \
--job hsbc-mastercard-alipay-campaign_02 \
--agent-id "<agent id>" \
--reason "选定图片后端在 worker 中不可用"
```
如果状态脚本失败,最终报告必须说明原因,并附上状态文件当前路径和未完成 job。