小马的 AI 工具集 给 Agent 学习

订阅生图

用 ChatGPT 订阅在命令行生成图片,无需 API Key,免费账号也能用

订阅生图
类型 CLI 190 星标 更新 2026-06-12 许可 MIT 原仓库

English | 中文

使用你的 ChatGPT 订阅生成图像 — 不需要 OPENAI_API_KEY

一个极小的、零依赖的 Python 命令行工具(也是 AI 智能体技能)——仅一个文件,仅使用标准库——使用你的 ChatGPT 账户生成图像,可在命令行中使用,也适用于任何 AI 智能体。

✨ 也适用于免费的 ChatGPT 账户。 默认的 web 后端仅驱动正常的 ChatGPT 网页聊天,其中即使是免费套餐用户也能生成图像——所以无需付费计划、无需 API 密钥,也无需 Codex(受免费套餐每日图像限制)。付费计划则享有更高的限制。

chatgpt-imagegen "a watercolor cat sitting on a windowsill" -o cat.png
# -> saved: cat.png  (812,344 bytes)  size=1024x1024  quality=medium
image

为什么存在这个工具

OpenAI 通过两种完全不同的方式提供图像生成:

方式你需要支付如何使用
Direct API (/v1/images/generations)按图像付费,基于 OPENAI_API_KEYcurl / OpenAI SDK / 等
ChatGPT 订阅 (Plus / Pro / Team)固定的月费ChatGPT 网页/桌面应用,或 Codex CLI 内置的 image_gen

对于不使用 Codex CLI 的人来说,订阅路径是不可见的。它作为 Responses-API 工具运行在 ChatGPT 的内部 backend-api/codex/responses 端点上,通过运行 codex login 时写入 ~/.codex/auth.json 的 OAuth 令牌进行身份验证。

chatgpt-imagegen 在命令行上以及为任何 AI 智能体暴露了这一能力——使用两个后端来消耗你订阅的不同部分。

后端

chatgpt-imagegen — web vs codex 后端流程

同一个订阅计量两个独立的配额,具体消耗哪个取决于图像生成的位置:

后端如何生成消耗的配额需要
web驱动你已经登录的 ChatGPT 浏览器(通过 chrome-use,原名 agent-browser-stealth),并在普通对话中生成——与在应用中输入的效果相同。它通过真实的 Chrome 连接来绕过纯/无头客户端无法处理的 Cloudflare + 计算证明挑战。每次运行的对话会被归档到 ChatGPT Project(默认 imagegen,首次使用时创建),避免弄乱你的历史记录。ChatGPT 对话——不会触及你的计量Codex 使用限制。任何已登录 chatgpt.com 的浏览器(免费套餐也可用)+ chrome-use
codex无头 POST 到 backend-api/codex/responses,复用 ~/.codex/auth.jsonCodex 使用(计量配额)。codex login

默认 auto 会优先尝试 web(以节省 Codex 使用配额),当无法访问已登录浏览器时回退到 codex。可通过 --backend web / --backend codex(或 CHATGPT_IMAGEGEN_BACKEND)强制指定后端。

  • 笔记本电脑/台式机(Chrome 打开并已登录)→ web —— 不消耗 Codex 使用配额。
  • 服务器/无头智能体主机codex —— 因为没有浏览器可用,auto 会自动回退。

web该浏览器当前登录的账户下生成图像,该账户可能与 ~/.codex/auth.json 不同——请将浏览器登录到你想消耗配额的账户。

安装

你需要 Python 3.10+、一个 ChatGPT 订阅,以及至少一个后端auto 会根据已配置的后端自动选择,优先使用 web):

codex 后端npm i -g @openai/codex 然后 codex login(会创建 ~/.codex/auth.json)。

web 后端chrome-use(原名 agent-browser-stealth;它通过扩展驱动你真实的、已登录的 Chrome,从而通过 Cloudflare 和 ChatGPT 的反机器人检查)连接到一个已登录 chatgpt.com 的 Chrome:

curl -fsSL https://raw.githubusercontent.com/leeguooooo/chrome-use/main/install.sh | sh
chrome-use extension install
# 然后:添加 Chrome 扩展 → 重启 Chrome → 登录 chatgpt.com

扩展:Chrome 网上应用店。旧安装将二进制暴露为 agent-browser / abs 的也能继续使用——CLI 两种名称都接受。

没有 chrome-use?不会有任何问题,也不会在后台安装任何东西:auto 模式会回退到 codex 并打印一行提示,告知安装 chrome-use 可以使生成不消耗 Codex 使用配额。

方式 A —— 适用于 AI 智能体(推荐)

通过 skills.sh 安装——与 Claude Code、Codex Agent、Cursor、OpenClaw 等兼容:

npx skills add leeguooooo/chatgpt-imagegen -g

这会将智能体指令(SKILL.md)和 CLI 本身一起放入你的智能体技能目录。只需向任何兼容的智能体提出请求:“画一张 xxx” / “generate a hero banner for the README”

方式 B —— 独立 CLI

git clone https://github.com/leeguooooo/chatgpt-imagegen
cd chatgpt-imagegen
chmod +x chatgpt-imagegen
./chatgpt-imagegen "a tiny pixel-art mushroom"

或者将其放在你的 $PATH 中:

sudo install chatgpt-imagegen /usr/local/bin/chatgpt-imagegen

这就是全部设置。无需 pip install,无需 virtualenv,无需守护进程。

用法

chatgpt-imagegen "<prompt>" [options]
选项默认值备注
--backendautoauto | web | codexauto 优先使用 web(节省 Codex 使用配额),当无法访问已登录浏览器时回退到 codex。参见后端。也可使用环境变量 CHATGPT_IMAGEGEN_BACKEND
--profileauto(web) 驱动哪个 Chrome 配置文件。auto:如果打开的 Chrome 已登录则使用它,否则自动切换到已登录的配置文件(离线检测)。relay:仅使用你打开的 Chrome。或者指定一个名称,如 "Profile 3"
--sessionimagegen-<pid>(web) 跨次运行复用命名的 chrome-use Chrome 标签组。
--projectimagegen(web) 将对话归档到哪个 ChatGPT Project——按精确名称匹配,首次使用时创建,之后复用。传入 --project "" 将使用普通的顶级对话。也可使用环境变量 CHATGPT_IMAGEGEN_PROJECT。如果失败,会降级为普通对话并给出警告,绝不会阻塞运行。
--keep-tab关闭(web) 生成后保持 ChatGPT 标签页打开(默认关闭)。
-o, --out PATHassets/generated/<slug>.<ext>输出文件;父目录会自动创建。当后缀与 --format 不一致时会打印警告(例如 -o foo.jpg --format png)。
--sizeautoauto 或任意 WIDTHxHEIGHT。已验证可用的:1024x10241024x15361536x1024。更大尺寸会原样传递。
--formatpngpng | jpeg | webp
--modelgpt-5.5托管 image_generation 工具的聊天模型
--timeout300整个请求的总挂钟时间预算(秒)。大尺寸/细节丰富的图像可能需要 2-3 分钟。
--stall-timeout120从后端接收数据的最长静默时间(秒),超过则判定为停滞——会在总预算之前触发。上限为 --timeout
--quiet关闭仅在标准输出打印保存的路径(完美适用于智能体管道)。进度信息仍会输出到 stderr——使用 --no-progress 可静音。
--no-progress关闭抑制 stderr 的进度时间线(错误仍会打印)。
-V, --version打印 CLI 版本号(chatgpt-imagegen 0.7.0)并退出。

示例:

# 默认 → assets/generated/<slug化的提示>.png
chatgpt-imagegen "watercolor cat"

# 指定路径
chatgpt-imagegen "logo for a coffee shop, vector style" -o brand/logo.png --size 1024x1024

# 横向英雄横幅
chatgpt-imagegen "moody mountain sunset" -o web/hero.png --size 1536x1024

# 在 Shell 管道中使用
OUT=$(chatgpt-imagegen "icon" --quiet)
echo "saved to $OUT"

上述示例命令的实际输出——本 README 中的每一张图片均由该工具生成:

watercolor cat sitting on a windowsilllogo for a coffee shop, vector stylemoody mountain sunset (1536×1024)
watercolor catcoffee shop logomountain sunset

example output
它还能做到这件事——要求它画出自己的双后端架构,画成一张刻意粗劣的、鼠标绘制的 MS-Paint 涂鸦。

哪些参数可用 / 哪些不可用

参数订阅路径备注
--size✅ 生效auto 或任意 宽x高;后端会拒绝不支持的尺寸。已验证可用的尺寸:auto1024x10241024x15361536x1024。更大尺寸(2048x*3840x*)会原样转发——后端可能根据订阅等级接受或拒绝。
--format✅ 生效png / jpeg / webp
质量⚠️ 由模型自行选择脚本未暴露 --quality 参数,因为订阅路径无法提供可靠的质量控制——后端曾被观察到自行选择 lowmedium,并忽略或降低任何 high 请求。如果需要明确的质量控制,请使用带有 OPENAI_API_KEY 的官方 /v1/images/generations API。
background: transparent❌ 订阅路径不支持需要 API 密钥路径配合 gpt-image-1.5
图像编辑(/v1/images/edits❌ 尚未公开如有需要,请提交 issue
速度通常 15–60 秒,大型/细节丰富的图像偶尔需要 2–3 分钟端到端流式传输;每个阶段的耗时会打印到 stderr,供您观察进度

并发

每个后端都有各自的跨进程并发上限,因为它们触及不同的限制:

后端默认上限原因覆盖
web1(串行)驱动一个共享的已登录 Chrome,且 chatgpt.com 页面界面会激进地限制速率(“请求过多……您的对话访问暂时受限”)。CHATGPT_IMAGEGEN_WEB_CONCURRENCY
codex4独立 HTTP POST;在 Plus 账户上实测 4 个并发没有问题(无 429 错误,墙钟时间 ≈ 最慢的单个请求时间)。设置上限是为了防止大型代理扇出时触发账户级限制器。CHATGPT_IMAGEGEN_CODEX_CONCURRENCY0 = 无限制)

超出上限运行多个进程是安全的——多余的运行会在一个 flock 槽位池中排队(等待者会打印一行”等待中……”,--timeout 预算只在获得槽位后开始计时,因此排队时间不计入)。

# 从 Shell 并行启动 4 个进程(注意:使用 --backend codex):
for p in apple sky tree sun; do
  chatgpt-imagegen "a tiny $p icon, flat vector, white background" \
    -o "icons/$p.png" --backend codex --quiet &
done
wait

为什么 web 后端保持 1 个并发:在共享的 Chrome 上并发运行曾经导致彼此的图像交叉污染(#7,在 v0.6.0 中修复),而且页面界面无论如何都会遏制快速爆发。如果 chatgpt.com 对账户进行速率限制,web 后端会检测到”请求过多”对话框并快速失败并给出明确信息——在提示词提交之前,auto 模式会回退到 codex;提交之后则会干净地停止,而不是重复消耗额度。

注意事项:订阅配额与 ChatGPT Web 应用和 Codex CLI 共享。不要运行持续的批量任务(>10 张图片/分钟),否则最终会触及每日速率限制。对于批量任务,请使用带有 OPENAI_API_KEY 的官方 /v1/images/generations API。

何时不应使用此工具——改用 API

如果以下任何情况适用,则该工具不合适:

  • 您需要真正的 quality=high原生透明背景——两者都需要使用带有 OPENAI_API_KEY 的官方 /v1/images/generations API。
  • 您正在构建一个生产级服务,向最终用户提供图像——将您的个人 ChatGPT 订阅用于此目的违反了 OpenAI 的 ToS,并且会消耗您实际使用 ChatGPT 时应用的配额。
  • 您需要每次调用的确定性计费,并可向客户转嫁——API 支持这一点,订阅不支持。
  • 您需要每分钟持续超过 10 张图片——订阅速率限制比 API 更严格。

对于这些情况,只需调用 OpenAI 的官方端点:

curl https://api.openai.com/v1/images/generations \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{"model":"gpt-image-2","prompt":"...","size":"1024x1024"}'

相关项目

  • 需要一个 HTTP API? agent-cli-to-api 将同一工具暴露为兼容 OpenAI 的 /v1/chat/completions 服务器——适用于网络可调用、多客户端或团队共享的场景。本仓库用于本地/代理驱动的使用。
  • 深入解读(博客): 存在原因 + OAuth/SSE 解析 · 可视化指南(中文;英文/日文在 /en//ja/ 下)。

工作原理(技术细节)

web 后端(默认)

通过 chrome-use 驱动您已登录的浏览器,使生成在消费者 ChatGPT 界面上运行——而无头客户端无法访问该界面,因为它位于 Cloudflare 机器人检测以及一个哨兵验证工作(backend-api/sentinel/chat-requirements + 计算令牌的页面内 sentinel/sdk.js)之后。真实浏览器可以透明地通过两者。流程如下:

chatgpt-imagegen --backend web

   ├── chrome-use 打开 https://chatgpt.com/      (一个*普通*聊天——临时聊天会禁用图像工具)
   ├── 解析 ChatGPT Project(--project)           (页面内 fetch:通过 gizmos/snorlax/sidebar 列出,
   │   如果不存在则通过 POST /backend-api/projects 创建并打开 chatgpt.com/g/<g-p-id>/project)
   ├── 使用真实按键输入提示词                        (ProseMirror/React 编辑器忽略仅 DOM 的 `fill`)
   ├── 轮询页面:等待流式传输停止**并且**新的 <img> 资产稳定
   └── 在页面内获取资产字节(credentials:'include') → base64 → 保存
       (签名的 estuary/content URL 由浏览器自身的 cookie 授权)

没有令牌离开浏览器。每次运行的聊天内容会存放进自动创建的 imagegen 项目(Project),而非顶级历史记录;如果希望退出该行为,请传入 --project ""

codex 后端

Codex CLI 内置的 image_gen 技能通过原生 Responses-API 工具实现:

// Codex CLI 向 chatgpt.com/backend-api/codex/responses 发出的请求:
{
  "model": "gpt-5.5",
  "tools": [{"type": "image_generation"}],
  "input": [{"role": "user", "content": [{"type":"input_text","text":"draw a cat"}]}],
  // ...
}

服务器会回复一条 SSE 流,其中的 response.output_item.done 事件携带一个 item.type === "image_generation_call" 的有效载荷,其中 item.result 是 base64 编码的 PNG 图片。chatgpt-imagegen 所做的正是这些:

chatgpt-imagegen

   ├── 读取 ~/.codex/auth.json     (OAuth access_token, account_id, refresh_token)
   ├── 读取 ~/.codex/version.json  (codex CLI 版本 → 与服务器预期匹配)

   └── POST https://chatgpt.com/backend-api/codex/responses
       请求头: Authorization, version, originator, session_id, …
       请求体: tools: [image_generation]

       └── SSE 流
           ├── response.image_generation_call.in_progress    → "queued"
           ├── response.image_generation_call.generating      → "generating"
           ├── response.image_generation_call.partial_image   → "receiving image (partial N)"
           ├── response.output_item.done  ← item.result = base64 PNG
           └── response.completed

如果 OAuth 令牌已过期,脚本会通过 https://auth.openai.com/oauth/token 自动刷新(使用 codex login 已存储的 refresh_token),并将新令牌持久化回 ~/.codex/auth.json

许可证

MIT — 参见 LICENSE

免责声明

本工具调用的是 ChatGPT 内部的 backend-api/codex 端点,这也是官方 Codex CLI 所使用的端点。它并非公开文档化的 API。OpenAI 随时可能更改或限制该端点。使用者需自行承担风险,并遵守 OpenAI 使用条款 —— 特别地,请勿利用您的 ChatGPT 订阅来构建面向公众的图片生成服务


关键词

ChatGPT subscription image generation, free ChatGPT account image generation, use ChatGPT Plus for image API, gpt-image-2 without OPENAI_API_KEY, gpt-image-2 ChatGPT subscription, image_generation tool Responses API, ChatGPT image CLI, Codex CLI image_gen as standalone tool, DALL-E via ChatGPT Plus, OAuth-backed OpenAI image generation, no-API-key image generation, AI agent image generation skill, Claude Code image skill, OpenAI image generation without billing.

中文: 用 ChatGPT 订阅生成图片、免费 ChatGPT 账号生图、ChatGPT Plus 生图工具、不用 API key 生图、gpt-image-2 用订阅、ChatGPT 订阅生图 CLI、Codex CLI 生图能力独立工具、给 AI agent 用的生图 skill、本地生图脚本、零依赖 Python 生图工具。

在 GitHub 查看完整项目