1 小时跑 16 张博客配图、总成本 $0.92:完整账本与可复制 spec
作者:CodeGateway 团队 · 实测于 2026-05
一句话:写完一批博客文稿,下一步通常是配图。手动找图慢、版权风险、风格不统一;外包贵且要排期。AI 图像 API 看起来是答案,但真正动手前大的疑问是——这玩意儿到底要花多少钱?流程会不会很麻烦? 本文给一份真实的账本。一次完整的 dogfood:4 篇博客 / 16 张配图 / 5 种上游模型 / 总成本 $0.92 / 全流程不到 1 小时。所有数据来自真实 prod API 调用,没有有利筛选。spec.yaml 与生图脚本都附在文末,可以直接复制改。
目录
- 起点:4 篇博客缺 16 张图
- 模型选择决策矩阵:什么图配什么模型
- Prompt 写法的三个非显然规律
- Spec 设计:一份 YAML 跑 16 张
- 真实账本:模型分布、单图成本、时长
- 踩过的坑:从 1:1 重生 16:9 的代价
- 可复制 spec 与脚本(直接抄)
- FAQ
- 相关资料
起点:4 篇博客缺 16 张图
故事从一个具体场景开始:写完 4 篇 SEO 长文(每篇 8000–12000 字),核对发布前清单时卡在"配图"这一栏。每篇至少需要:
- 1 张 hero(首屏大图,OG 抓图也用)
- 3 张文中插图(架构图 / 信息图 / 步骤图等)
合计 16 张。手动找图大致两条路:
- 免费图库(Unsplash、Pexels):搜词难、风格东一个西一个、热门词图都被人用过;
- 付费图库(Shutterstock、iStock):钱能解决但贵,单张 $10–30;
- 设计外包:风格能定但排期 2–3 天起、成本几百美元。
加上 4 篇都是技术博客,免费图库里"开发者面对终端报错"这种概念图基本没有。所以决定上 AI 图像 API。问题变成:用哪几个模型、怎么分配、总成本能压到多少。
模型选择决策矩阵:什么图配什么模型
CodeGateway 当前有 6 个图像生成模型可用,分两条上游通路:
模型 ID | 通路 | 计费 | 强项 |
|---|---|---|---|
| Vertex (Imagen) | $0.02/图 | 速度、性价比、写实/概念插画 |
| Vertex (Imagen) | $0.04/图 | 标准画质 |
| Vertex (Imagen) | $0.06/图 | 高画质 |
| Vertex (Gemini) | 按 token (~$0.04–0.08/图) | 中文文字渲染、信息图标注 |
| OpenAI | $0.005–$0.211/图(按质量×比例) | UI / 卡通、支持 16:9 横版 |
| OpenAI | $0.009–$0.200/图 | 同上略弱 |
按博客配图的几种典型用途,我用了一张矩阵决定模型分配:
图里有大段中文文字标注? → gemini-2.5-flash-image
是写实概念插画 / 抽象 hero? → imagen-4.0-fast-generate-001(首选)
hero 想要 16:9 横版? → gpt-image-2 medium 1536x1024
重要的旗舰单图? → imagen-4.0-generate-001(标准)
其他都不合适? → 上 ultra 或换思路实际分配到 16 张:
- 4 张 hero(首版用 imagen-4.0-generate-001 标准画质 $0.04 × 4 = $0.16)
- 3 张写实插画(imagen-4.0-fast-generate-001 $0.02 × 3 = $0.06)
- 9 张含中文标注的信息图 / 步骤图(gemini-2.5-flash-image ~$0.06 × 9 = $0.54)
预估总成本约 $0.76。最后实际跑完是 $0.76(精确)+ $0.16 hero 重生(后面会讲为什么重生)= $0.92。
Prompt 写法的三个非显然规律
写了 16 张后体感强项的三条规律:
1. 颜色用形容词,不写 hex
写 #8B5CF6 这种十六进制颜色码,模型有不低的概率会把字符直接渲染到图里——你会得到一张图,主体上漂着 #8B5CF6 几个字母数字。
正确写法:deep violet purple / lavender gradient / emerald green accent。颜色描述用形容词,模型理解的色感更接近设计师的描述习惯。
2. 拒绝 emoji 装饰
prompt 里写"with rocket emoji 🚀"或"festive ✨ vibe"会让模型试图渲染 emoji 字符,结果是模糊的字形或乱码。
替代:用具体视觉元素描述。"a small upward arrow"、"a subtle sparkle effect"、"warm celebratory tone"——把语义传给模型,让它自己出图。
3. 比例与"宽屏构图"要写两遍
Imagen 4 的 backend 写死 1024×1024,请求里加 aspect_ratio: "16:9" 不会被识别(被忽略)。即便走 gpt-image-2 + size: 1536x1024,prompt 里仍然建议写 wide cinematic horizontal composition,让模型在构图上预期横版,避免主体被挤在中间。
Spec 设计:一份 YAML 跑 16 张
我们写了一个小生图工具,输入是 YAML spec、输出是按 spec 跑完的 PNG + 成本账单。Spec 长这样:
- name: 297-hero
model: imagen-4.0-generate-001
prompt: |
A minimalist flat illustration showing a frustrated developer at a laptop,
the laptop screen displaying a terminal window with red Connection Timeout
error text, soft purple gradient background...
aspect: "16:9"
size: "1792x1024"
out: /tmp/sprint4b-images/297-hero.png
- name: 297-arch
model: gemini-2.5-flash-image
prompt: |
A clean three-layer architecture diagram, horizontally stacked panels:
top panel labeled "网络链路层" (purple stripe),
middle panel labeled "TLS 层" (lighter violet),
bottom panel labeled "模型推理层" (deep violet)...
aspect: "1:1"
out: /tmp/sprint4b-images/297-arch.png
# ... 共 16 条为什么用 YAML 而不是直接写代码:
- 可读。审稿和改 prompt 的时候,spec 是文字编辑而不是改 Python。
- 可版本控制。spec 进 git,和文章一起评审、一起回滚。
- 可二次跑。改一条 prompt 重跑那一条,其他不动。
- 可分批。dry-run 模式先看预算,OK 再实际跑。
跑 spec 的命令一行:
python3 generate.py --spec image-spec.yaml --api-key "$CODEGATEWAY_PROD_API_KEY"整个生图阶段不到 5 分钟(多 prompt 串行跑,单图快 7 秒慢 18 秒)。
真实账本:模型分布、单图成本、时长
第一批:16 张(首版)
模型 | 张数 | 单价 | 小计 | 平均时长 |
|---|---|---|---|---|
imagen-4.0-generate-001 | 4 | $0.040 | $0.160 | 10–12 s |
imagen-4.0-fast-generate-001 | 3 | $0.020 | $0.060 | 7–9 s |
gemini-2.5-flash-image | 9 | ~$0.060 | $0.540 | 8–17 s |
首版小计 | 16 | — | $0.760 | 平均 ~10 s |
时间维度:API 调用累计约 2 分 30 秒(串行)。如果改并发能压到 30 秒级,但博客配图这种轻量任务串行就够。
第二批:4 张 hero 16:9 重生
首版 hero 用 imagen-4.0-generate-001,固定 1024×1024。但博客模板的 hero 容器是 16:9,1:1 渲染时上下被裁,看起来有损。所以重生 4 张 16:9 横版,切到 gpt-image-2 medium:
模型 | 张数 | 单价 | 小计 | 平均时长 |
|---|---|---|---|---|
gpt-image-2 medium 1536×1024 | 4 | $0.041 | $0.164 | 56–71 s |
重生小计 | 4 | — | $0.164 | 平均 ~62 s |
gpt-image-2 比 Imagen 慢——大约 6 倍。但 16:9 横版只有 OpenAI 通路原生支持,权衡值得。
总账
首版 16 张: $0.760
hero 重生 4 张: $0.164
─────────────────────────
总计: $0.924 (向上取 $0.92)
人均 / 单图: ~$0.046外加从写 spec 到验收的人工时间 ~30–45 分钟(包含 prompt 调优、转 JPEG、上传 CMS、设 cover)。完整闭环不到 1 小时。
踩过的坑:从 1:1 重生 16:9 的代价
这次 dogfood 大的教训是 hero 的 aspect ratio 没在第一批就规划好。
具体踩坑过程:
- 首版 spec 写了
aspect: "16:9",但 Imagen 4 backend 把这个字段标记为 "accepted but ignored"——文档和实现都说接收但不处理(backend/src/proxy-vertex-image.ts注释里明确写了)。结果 4 张 hero 全部 1024×1024。 - 上传 CMS 后,前端 hero 容器按 16:9 渲染,1:1 源图上下被裁,主体被切。
- 重新选模型——切到 gpt-image-2 size=1536×1024。但 gpt-image-2 单图 60 秒级,4 张要 4 分钟,比 Imagen 慢一截。
- 多花 $0.16 + 4 分钟。
教训:
- 第一批 spec 前,先确认目标渲染容器的比例。Hero 容器 16:9 / 文中插图容器 1:1 / OG 抓图 1.91:1(接近 16:9)。
- 比例不被某个模型支持就第一批就换模型,不要等渲染验收发现再返工。
- 不同模型的 size 参数语义不一致(Imagen
aspect_ratio被忽略,gpt-image-2 用size字符串),spec 工具要在 dispatch 时分流,写工具的时候多花 5 分钟做这件事,省后面几小时。
可复制 spec 与脚本(直接抄)
小生图脚本(单文件,零依赖外部库)
#!/usr/bin/env python3
"""Minimal image gen runner. Reads YAML spec, calls /v1/images/generations,
saves PNG to disk, prints cost totals. Public domain."""
import argparse, base64, json, os, sys, time
import urllib.request
from pathlib import Path
def post(url, body, headers):
data = json.dumps(body, ensure_ascii=False).encode("utf-8")
req = urllib.request.Request(url, data=data, headers=headers, method="POST")
with urllib.request.urlopen(req, timeout=180) as resp:
return json.loads(resp.read().decode("utf-8"))
def build_body(entry):
body = {
"model": entry["model"],
"prompt": entry["prompt"],
"n": int(entry.get("n", 1)),
"response_format": "b64_json",
}
# OpenAI route: size; Vertex route: aspect_ratio
if entry["model"].startswith("gpt-image"):
if "size" in entry: body["size"] = entry["size"]
if "quality" in entry: body["quality"] = entry["quality"]
else:
if "aspect" in entry: body["aspect_ratio"] = entry["aspect"]
return body
def main():
ap = argparse.ArgumentParser()
ap.add_argument("--spec", required=True)
ap.add_argument("--api-key", default=os.environ.get("CODEGATEWAY_PROD_API_KEY"))
args = ap.parse_args()
# ... YAML parser + main loop, see full source in workspace完整版(含成本估算、dry-run、错误处理、模型自动 dispatch、~280 行)开源在 Whitedit/code-gateway-cookbook — 一份 generate.py + 一份 spec-example.yaml,MIT 许可证,复制即用。
Spec 模板(直接改 prompt 跑)
# Hero 横版 16:9(OpenAI 通路才支持原生横版)
- name: my-hero
model: gpt-image-2
quality: medium
size: "1536x1024"
prompt: |
A wide cinematic flat editorial illustration of <YOUR SCENE>,
soft purple gradient background, modern minimal tech aesthetic,
no chinese text, no logos, professional editorial composition.
out: /tmp/images/my-hero.png
# 文中写实插图 / 概念图(性价比高)
- name: my-concept
model: imagen-4.0-fast-generate-001
prompt: |
A minimal abstract <SUBJECT>, soft purple gradient,
clean editorial style, no text.
aspect: "1:1"
out: /tmp/images/my-concept.png
# 含中文标注的信息图(Gemini 强项)
- name: my-infographic
model: gemini-2.5-flash-image
prompt: |
A clean infographic on white background:
<STEP 1 标题>, <STEP 2 标题>, <STEP 3 标题>,
purple connecting lines, modern minimal flat design.
aspect: "1:1"
out: /tmp/images/my-infographic.png接入 API
export CODEGATEWAY_PROD_API_KEY="sk-cg-xxx" # https://www.codegateway.dev 注册即可拿
python3 generate.py --spec image-spec.yaml --api-key "$CODEGATEWAY_PROD_API_KEY"新账户送 $2 起步额度——按本文成本结构折算约两轮完整 dogfood(每轮 16 张)。够把流程跑顺、validate prompt 风格、再决定要不要充值跑生产规模。
FAQ
Q:能不能只用一个模型省心?
A:能,但代价是风格单一 + 部分场景出不了。Imagen 4 fast 适合写实概念,但中文文字渲染弱;gemini-2.5-flash-image 适合标注信息图,但纯审美写实不如 Imagen;gpt-image-2 适合 UI 卡通,速度慢且贵。多模型混搭是博客配图的推荐方案。
Q:成本能不能再压?
A:可以。把所有 hero 切到 imagen-4.0-fast($0.02 vs std $0.04),16 张全部 fast:$0.32。但 hero 是首屏首图,建议保留 std 画质——多出 $0.16 在 SEO 与社媒分享 CTR 上的回报值得。
Q:图像 API 是不是按 token 计费?
A:分两种。Imagen 系列按图固定计费($0.02 / $0.04 / $0.06),不管 prompt 多长、分辨率多大。Gemini 2.5 Flash Image 按 token(输入 + 文本输出 + 图像输出 modality 各一档),实际单图通常落在 $0.04–$0.08。GPT Image 按 quality × aspect 矩阵计价,同样固定。
Q:批量跑 100 张以上怎么办?
A:spec 文件不变,跑批多花点时间。或者改并发:generate.py 默认串行,加几行 asyncio 改并发后单批 100 张能压到 1–2 分钟。注意 RPM 限制(看你的 CodeGateway 阶梯)。
Q:风格如何保持一致?
A:两条路:
- 同一篇文章的图固定一个模型 + 固定 prompt 模板(颜色、构图、视觉风格描述每次都一样,只换主体)。
- 用同一张参考图(gemini-2.5-flash-image 支持多 5 张参考图)做风格锚点,后续生成全部以其为风格基准。
Q:版权风险?
A:看上游模型的服务条款。Anthropic / Google / OpenAI 的图像 API 商用条款大体允许商用(具体读各自最新 ToS)。CodeGateway 网关本身不主张图像版权——你生成的图归你。
Q:生成失败重跑会不会被收两次费?
A:不会。Failed request(4xx/5xx)不计费。只有成功返回 b64_json / url 的请求才扣余额。本文 16 张全部一次过,没遇到失败重跑。
Q:可以走 dry-run 不出图先看预算吗?
A:可以。generate.py --dry-run 模式只读 spec、按定价表算总成本,不发 API 请求。预算不对就改 spec。
相关资料
- 充值费用指南 —— 阶梯倍率、$2 起步额度、Stripe 充值
- 阶梯倍率详解 —— 90 天滚动累计、至少 1.2x
- 图像生成 API 使用指南(即将上线)—— 完整接口参考
- Anthropic Claude API 文档
- Google Imagen 4 模型卡
- OpenAI Image Generation 文档
- 本文用到的 generate.py 完整脚本:Whitedit/code-gateway-cookbook · image-gen/
写技术博客的人都明白:内容是 80%、配图是 10%、链接和 SEO 元数据是 10%。配图这 10%以前要么压榨设计组、要么自己折腾几小时手画,现在 1 小时 / $1 / 一份 spec 就能搞定。把工具流程跑顺,剩下的精力就能投回内容本身——这才是工具该干的事。
