CookSleep/gpt_image_playground

★ 3,878⑂ 968

基于 OpenAI gpt-image-2.5 API 的图片生成与编辑工具

About CookSleep/gpt_image_playground

CookSleep/gpt_image_playground is an open-source project on GitHub, mainly written in TypeScript. 基于 OpenAI gpt-image-2.5 API 的图片生成与编辑工具 It currently holds 3,878 stars and 968 forks with 5 open issues, and was last pushed on 2026-10-11 (repository created 2026-04-23).

Project Overview

Git Homed tracks it on the Image Trending board and on the AI Image Trending list.

GitHub Repository Details

Repository CookSleep/gpt_image_playground · default branch main · size 21792 KB · watchers 6 · source: GitHub REST API and repository README

README

🎨 GPT Image Playground

GitHub Repo stars GitHub forks License React TypeScript

基于 OpenAI gpt-image-2.5 API 的图片生成与编辑工具

提供简洁精美的 Web UI,支持 OpenAI / OpenAI 兼容接口、sub2api(异步)、fal.ai 与可导入的自定义 HTTP 供应商。
支持文本生图、参考图、画板标注与遮罩编辑,数据纯本地化存储,带来流畅的历史记录与参数管理体验。


Vercel 在线体验     GitHub Pages 在线体验


💡 提示:Vercel 体验版使用 .dev 域名,受安全策略限制通常只能调用 HTTPS 接口。需要调用内网或本地 HTTP API 时,请使用 GitHub Pages 版本或自行部署。

---

❤️ 赞助商

https://github.com/CookSleep/gpt_image_playground/blob/HEAD/摸鱼 AI 摸鱼 AI ,让 AI API 接入更简单。明码标价,充值 1:1,支持 GPT、Claude、Gemini 等主流模型,重新定义「便宜 · 稳定 · 高速」
https://github.com/CookSleep/gpt_image_playground/blob/HEAD/JuCodex JuCodex 为企业级用户打造的高可用、低延迟、极致性价比的中转站,提供 Codex、Claude Code、Grok 等主流大模型中转服务,新用户注册送 3 元(QQ 邮箱),永久承诺 0 水 0 替、模型 100% 保真。生图工作台
https://github.com/CookSleep/gpt_image_playground/blob/HEAD/APIMart APIMart 是专注 AI 图片/视频生成的低价 API 平台,GPT-Image-2 低至 $0.006/张,1 美元可出图 160+ 张。图片、视频一套异步 API 通吃,提交任务拿 ID、回调取结果,跑批万张不超时、换模型不改代码。按量付费、无月费,通过此注册链接注册即可开用。
https://github.com/CookSleep/gpt_image_playground/blob/HEAD/MaruCode MaruCode 是一家偶尔做做慈善的小破站 API,自营号池,主要提供 OpenAI、Anthropic、GPT Image 等主流模型,支持 Websocket 协议,明码标价(OAI 0.3x, A÷ 1.7x),透明汇率(1:1),新用户注册送 1 刀。生图工作台🖼️
https://github.com/CookSleep/gpt_image_playground/blob/HEAD/Sublyx Sublyx 是一家稳定高效的 AI API 聚合网关,支持 OpenAI、Claude、Grok、Codex、gpt-image-2 等主流模型,兼容 OpenAI SDK、Claude Code、Codex、Cherry Studio 等常用工具。通过链接注册并使用优惠码 IMG2,可额外领取 10 刀额度。生图工作台

---

📸 界面预览

点击展开截图展示
桌面端主界面
https://github.com/CookSleep/gpt_image_playground/blob/HEAD/桌面端主界面


任务详情与实际参数
https://github.com/CookSleep/gpt_image_playground/blob/HEAD/任务详情与实际参数


桌面端批量选择
https://github.com/CookSleep/gpt_image_playground/blob/HEAD/桌面端批量选择


桌面端 Agent 模式
https://github.com/CookSleep/gpt_image_playground/blob/HEAD/桌面端 Agent 模式


移动端主界面
https://github.com/CookSleep/gpt_image_playground/blob/HEAD/移动端主界面


移动端侧滑多选
https://github.com/CookSleep/gpt_image_playground/blob/HEAD/移动端侧滑多选

---

✨ 核心特性

🎨 强大的图像生成与编辑

> - API 原生:直接请求模型返回透明通道,需接口和模型支持。接口返回“不支持透明背景”类错误时,应用会提示切换为本地后处理。 > - 本地后处理:要求模型使用纯绿或纯洋红背景,结果返回后在浏览器中去除背景色,按所选格式保存。适合图标、贴纸、单主体素材;主体有复杂发丝、半透明材质、强反光或颜色接近背景色时,边缘可能残留或误抠。

🤖 Agent 多轮对话模式

⚙️ 精细化参数追踪

📁 高效历史管理 (纯本地)

🔌 多配置与供应商增强

---

🚀 部署与使用

Windows 用户可以直接安装桌面客户端;网页版可以部署到 Vercel、GitHub Pages、Cloudflare Workers、Docker 或任意静态文件服务器。

部署时可以通过环境变量 VITE_DEFAULT_API_URL 提供预置配置:部署端预先加入用户配置列表的 API 配置,格式与用户自建的配置相同,用户打开页面通常只需补充 API Key。

完整写法见 预置配置,其余变量见 环境变量。

🖥️ 方式一:Windows 桌面客户端

客户端的数据保存在本机,不受浏览器存储配额和跨域限制影响,可直连任意中转 API。

安装

  • 在 Releases 中下载以 _x64-setup.exe 结尾的安装包。
  • 安装包没有代码签名,遇到 SmartScreen 提示时点击“更多信息 → 仍要运行”。
  • 安装到普通文件夹(如 D:\Apps\GPT Image Playground)。装到 C:\Program Files 等需要管理员权限写入的位置会导致无法保存数据。
  • 数据默认保存在 <安装目录>\data 中,可在“设置 → 数据管理”中更改。
自行构建

需要 Rust 和 Tauri 的 Windows 构建环境,见 Tauri 前置条件。

npm install
npm run tauri:dev
npm run tauri:build
  • 客户端构建读取 src-tauri/.env,不读取根目录的 .env;可在 src-tauri/.env.local 中覆盖。
  • 客户端专用变量 VITE_WEB_APP_URL:复制导入链接时使用的网页版地址,未设置时改用 gpt-image-playground:// 链接。
  • tauri:build 需设置 TAURI_SIGNING_PRIVATE_KEY(私钥内容或路径)和 TAURI_SIGNING_PRIVATE_KEY_PASSWORD,用于给更新包签名。
  • 自行分发时,用 npx tauri signer generate 生成自己的密钥,并替换 src-tauri/tauri.conf.json 中的 plugins.updater.pubkey 和更新地址。
▲ 方式二:Vercel 一键部署(网页版推荐)

初始部署

Deploy with Vercel

点击按钮导入仓库,Vercel 会自动构建并部署。

环境变量(可选)

在 Vercel 项目的 Settings → Environment Variables 中添加,添加或修改后需要重新部署:

VITE_DEFAULT_API_URL=https://api.openai.com/v1

绑定自定义域名(国内直连)

Vercel 分配的 .vercel.app 域名在国内通常无法直接访问,可在 Settings → Domains 中绑定自己的域名。

更新方式

vercel.json 关闭了默认的自动部署。Fork 本仓库后,建议配置 Deploy Hook:

1. 在 Vercel 项目的 Settings → Git → Deploy Hooks 中创建名为 Release 的 Hook(Branch 填 main),复制生成的 URL。 2. 在 Fork 仓库的 Settings → Secrets and variables → Actions 中新建 Secret VERCEL_DEPLOY_HOOK,填入该 URL。

配置完成后:

  • 自动更新:本仓库发布正式版本(版本号变动)后,在 Fork 页面点击 Sync fork 会触发 Vercel 部署;普通提交不会触发。
  • 手动触发:在 Actions 中选择 Deploy to Vercel,对 main 分支执行 Run workflow,可立即部署最新代码(包括未发布的提交)。

🌐 方式三:GitHub Pages 部署

通过 GitHub Actions 工作流构建并发布到 GitHub Pages。

环境变量(可选)

在仓库 Settings → Secrets and variables → Actions 中,将 VITE_DEFAULT_API_URL 添加到 Secrets:

VITE_DEFAULT_API_URL=https://api.openai.com/v1

其他变量添加到 Variables,变量名与 环境变量 表一致。

初始部署

1. 在仓库 Settings → Pages 中,将 Build and deployment → Source 设为 GitHub Actions。 2. 在 Actions 中选择 Deploy to GitHub Pages,对 main 分支执行 Run workflow,完成首次部署。

更新方式

  • 自动更新:本仓库发布正式版本(版本号变动)后,在 Fork 页面点击 Sync fork 会自动构建并部署;普通提交不会触发。
  • 手动触发:同样执行 Deploy to GitHub Pages 工作流,可立即部署最新代码(包括未发布的提交)。

☁️ 方式四:Cloudflare Workers 部署

通过内置的 Wrangler 配置,将构建产物作为静态资源部署到 Cloudflare Workers。

环境变量(可选)

Cloudflare Workers 不会在部署后改写静态文件,变量必须在构建前设置(如写入项目根目录的 .env.local):

VITE_DEFAULT_API_URL=https://api.openai.com/v1

部署

npx wrangler login
npm run deploy:cf

deploy:cf 会先执行 npm run build,再通过 wrangler deploy 上传 dist/ 目录。

🐳 方式五:Docker 部署

使用官方镜像在服务器或本地容器环境中运行。

Docker CLI

docker run -d -p 8080:80 \
  -e DEFAULT_API_URL=https://api.openai.com/v1 \
  ghcr.io/cooksleep/gpt_image_playground:latest

使用 host 网络时加 --network host,修改监听端口用 -e PORT=28080。

Docker Compose

services:
  gpt-image-playground:
    image: ghcr.io/cooksleep/gpt_image_playground:latest
    environment:
  • DEFAULT_API_URL=https://api.openai.com/v1
ports:
  • "8080:80"
restart: unless-stopped

挂载配置文件

DEFAULT_API_URL 指向容器内路径时,宿主机上的 JSON 配置文件需通过 volume 挂载:

docker run -d -p 8080:80 \
  -v ./gpt-image-config.json:/config/gpt-image-config.json:ro \
  -e DEFAULT_API_URL=/config/gpt-image-config.json \
  ghcr.io/cooksleep/gpt_image_playground:latest

Docker 专属变量

| 变量 | 说明 | |------|------| | ENABLE_API_PROXY=true | 开启 Nginx 同源代理,请求发往 /api-proxy/{路径} 再转发到 API_PROXY_URL | | API_PROXY_URL | 代理转发的完整 API 基础地址(不自动补 /v1) | | LOCK_API_PROXY=true | 强制开启代理,用户无法关闭;需同时设置 ENABLE_API_PROXY=true | | HOST / PORT | Nginx 监听地址和端口,默认 0.0.0.0:80 |

开启 API 代理后,任何人都能将你的服务器作为代理来请求目标 API。建议仅在有访问控制(如 IP 白名单)或本地网络中开启。
旧版 API_URL 已拆分为 DEFAULT_API_URL 和 API_PROXY_URL,容器启动时自动兼容,无需立即修改。

隐藏真实 API 地址

同时开启 ENABLE_API_PROXY 和 LOCK_API_PROXY,真实地址只写在 API_PROXY_URL 中:

  • OpenAI 兼容接口:DEFAULT_API_URL 留空或填占位地址(如 https://proxy)。
  • 自定义供应商:预置 JSON 中的 baseUrl 留空并设置 apiProxy: true(仅支持同步配置)。
docker run -d -p 8080:80 \
  -e DEFAULT_API_URL= \
  -e API_PROXY_URL=https://real-api.example.com/v1 \
  -e ENABLE_API_PROXY=true \
  -e LOCK_API_PROXY=true \
  ghcr.io/cooksleep/gpt_image_playground:latest

更新方式

使用 latest 标签时,重新拉取镜像并重启即可(如 docker compose pull && docker compose up -d)。需要固定版本时使用版本号标签(如 0.2.x)。

💻 方式六:本地开发与静态构建

1. 环境变量(可选)

在项目根目录新建 .env.local:

VITE_DEFAULT_API_URL=https://api.openai.com/v1

2. 安装依赖并启动

npm install
npm run dev

3. 本地开发跨域代理(可选)

本地开发遇到浏览器 CORS 限制时,可开启开发服务器代理:

cp dev-proxy.config.example.json dev-proxy.config.json
  • 将 dev-proxy.config.json 中的 target 设为完整的 API 基础地址。代理不会自动补 /v1,OpenAI 兼容接口通常要写到版本前缀,如 https://api.example.com/v1。
  • 重启开发服务器,在设置中开启 API 代理,请求会按 http://localhost:5173/api-proxy/... -> target/... 转发。
  • 仅在 npm run dev 时生效,不影响构建产物。
4. 本地故障模拟 API(可选)

复现图片 URL 跨域、接口返回结构异常、原始响应查看等问题时,可启动内置模拟服务:

npm run mock:api

用法见 本地故障模拟 API。

5. 构建静态产物

npm run build

产物位于 dist/,可部署到任意静态文件服务器(如 Nginx、Netlify)。

---

⚙️ 环境变量

以下变量适用于所有部署方式。使用时注意:

| 构建时变量 | Docker 变量 | 说明 | |------|------|------| | VITE_DEFAULT_API_URL | DEFAULT_API_URL | 预置配置,见下文 | | VITE_LOCK_PRESET_CONFIG_PARAMS=true | LOCK_PRESET_CONFIG_PARAMS=true | 锁定预置配置中除 API Key 外的参数,禁止编辑随预置引入的自定义供应商;当前锁定配置引用的供应商解除引用后才能删除 | | VITE_PREVENT_PRESET_CONFIG_DELETION=true | PREVENT_PRESET_CONFIG_DELETION=true | 禁止删除预置配置及随预置引入的自定义供应商,不锁定参数,普通配置不受影响 | | VITE_SHOW_PRESET_CONFIG_ONLY=true | SHOW_PRESET_CONFIG_ONLY=true | 只允许使用当前预置配置,禁止创建、复制、删除、拖动配置,禁止切换供应商和管理自定义供应商;未开启锁定时参数仍可编辑,API Key 始终可编辑 | | VITE_DEFAULT_UI_FONT | DEFAULT_UI_FONT | 默认界面字体:builtin(内置,默认)、system(系统字体)或本机已安装的字体名称 | | VITE_DEFAULT_MONO_FONT | DEFAULT_MONO_FONT | 默认代码字体,取值规则同 VITE_DEFAULT_UI_FONT | | VITE_BUILTIN_FONT_SOURCE | BUILTIN_FONT_SOURCE | 内置字体来源:cdn(默认,公共 CDN)或 local(fonts/ 目录中的文件) |

旧变量 VITE_SHOW_DEFAULT_CONFIG_ONLY/SHOW_DEFAULT_CONFIG_ONLY 仍可使用,等同于对应的 SHOW_PRESET_CONFIG_ONLY。

---

📋 预置配置

VITE_DEFAULT_API_URL 支持三种写法。

1. API 地址

VITE_DEFAULT_API_URL=https://api.openai.com/v1

适合只提供一个配置的部署:

2. API 地址 + 查询参数

VITE_DEFAULT_API_URL=https://api.openai.com/v1?model=gpt-image-2.5-sunburst&apiMode=images

在地址后追加参数,预填 Key、模型等字段。可用参数与下文 URL 传参快速填充 相同(profileId 除外)。

3. 完整 JSON

需要预置多个配置、自定义供应商或 Agent 时,按下文 JSON 格式编写,再用以下任一方式提供:

VITE_DEFAULT_API_URL=./gpt-image-config.example.json
VITE_DEFAULT_API_URL=https://example.com/gpt-image-config.json
VITE_DEFAULT_API_URL=https://你的域名?settings=%7B%22profiles%22%3A%5B...%5D%7D

文件路径和远程地址会在构建、开发服务器启动或容器启动时读取,并内嵌到页面中。

重新部署时

JSON 格式

顶层字段:

profiles 中每项的字段:

| 字段 | 必填 | 说明 | |------|------|------| | id | 定向更新时填写 | 配置标识,见表下说明。 | | name | 是 | 配置名称。 | | description | 否 | 配置说明,支持 Markdown,显示在“当前配置”下方的说明卡片中。 | | provider | 是 | "openai"(OpenAI 兼容)、"sb2api-async"(sub2api 异步)、"fal"(fal.ai),或 customProviders 中的供应商 ID。 | | baseUrl | 是 | API 基础地址,末尾 / 的规则见表下说明;fal.ai 可留空。 | | apiKey | 否 | API Key。建议省略,由用户自行填写。 | | model | 是 | 模型 ID。多个模型以逗号分隔,默认使用第一个,用户可在首页切换。 | | imageGenerationModel | 否 | Responses API 的 image_generation 工具模型,默认 gpt-image-2.5-sunburst,也可用 gpt-image-2.5-flare;留空时不发送,使用 API 默认值。 | | apiMode | 否 | "images" 或 "responses",默认 "images"。 | | isDefault | 否 | 有多个配置时为默认项设置 true(只能有一个),首次使用时自动选中;只有一个配置时不填。 | | timeout | 否 | 请求超时秒数,默认 600。 | | apiProxy | 否 | 是否走部署端 API 代理,默认 false。 | | transparentBackgroundMethod | 否 | 透明背景实现方式:"api"(API 原生)或 "local"(本地后处理),默认值见表下说明。 |

补充说明:

示例:仅 OpenAI 兼容

{
  "profiles": 
    {
      "id": "my-openai",
      "name": "我的 OpenAI 配置",
      "description": "使用前请阅读 [接口说明。",
      "provider": "openai",
      "baseUrl": "https://api.openai.com/v1",
      "model": "gpt-image-2.5-sunburst"
    }
  ]
}

示例:OpenAI 兼容 + sub2api + fal.ai 多配置

{
  "profiles": [
    {
      "id": "openai-main",
      "name": "OpenAI",
      "provider": "openai",
      "baseUrl": "https://api.openai.com/v1",
      "model": "gpt-image-2.5-sunburst",
      "isDefault": true
    },
    {
      "id": "sub2api-profile",
      "name": "sub2api 异步",
      "provider": "sb2api-async",
      "baseUrl": "https://api.example.com/v1",
      "model": "gpt-image-2.5-sunburst"
    },
    {
      "id": "fal-profile",
      "name": "fal.ai",
      "provider": "fal",
      "baseUrl": "",
      "model": "openai/gpt-image-2"
    }
  ]
}

示例:预置 Agent 配置

agent.apiConfigMode 决定 Agent 是否使用独立的 API 配置:

{
  "profiles": [
    {
      "id": "default-openai",
      "name": "图像配置",
      "provider": "openai",
      "baseUrl": "https://api.example.com/v1",
      "model": "image-model",
      "apiMode": "images",
      "isDefault": true
    },
    {
      "id": "default-openai-agent",
      "name": "文本配置",
      "provider": "openai",
      "baseUrl": "https://api.example.com/v1",
      "model": "text-model",
      "apiMode": "responses"
    }
  ],
  "agent": {
    "apiConfigMode": "hybrid",
    "textProfileId": "default-openai-agent",
    "imageProfileId": "default-openai"
  }
}
完整示例见 gpt-image-config.agent.example.json。

---

🔌 自定义供应商

API 不是标准 OpenAI 格式时,在预置 JSON 的 customProviders 中定义请求和响应结构。每个供应商需有唯一的 id,由 profiles 中的 provider 字段引用。

接口不在 /v1 路径下时,将 baseUrl 设为以 / 结尾。例如 baseUrl 为 https://api.example.com/、submit.path 为 api/image-tasks 时,实际请求地址为 https://api.example.com/api/image-tasks。

获取供应商定义

完整 JSON 示例(异步任务供应商)

{
  "customProviders": [
    {
      "id": "custom-example-task",
      "name": "示例异步任务供应商",
      "submit": {
        "path": "images/generations",
        "method": "POST",
        "contentType": "json",
        "body": {
          "model": "$profile.model",
          "prompt": "$prompt",
          "size": "$params.size",
          "quality": "$params.quality",
          "output_format": "$params.output_format",
          "output_compression": "$params.output_compression",
          "n": "$params.n",
          "image_urls": "$inputImages.dataUrls"
        },
        "taskIdPath": "data.0.task_id"
      },
      "poll": {
        "path": "tasks/{task_id}",
        "method": "GET",
        "intervalSeconds": 5,
        "statusPath": "data.status",
        "successValues": ["completed"],
        "failureValues": ["failed", "cancelled"],
        "errorPath": "data.error.message",
        "result": {
          "imageUrlPaths": ["data.result.images..url."],
          "b64JsonPaths": []
        }
      }
    }
  ],
  "profiles": [
    {
      "id": "example-profile",
      "name": "示例异步任务供应商",
      "provider": "custom-example-task",
      "baseUrl": "https://api.example.com/v1",
      "model": "gpt-image-2.5-sunburst",
      "apiMode": "images"
    }
  ]
}

---

🛠️ URL 传参快速填充

通过 URL 查询参数快速填入 OpenAI 兼容配置,适合创建书签或集成分享。

| 参数 | 说明 | 示例 | |------|------|------| | apiUrl | API Base URL | ?apiUrl=https://api.example.com/v1 | | apiKey | API Key | ?apiKey=sk-xxxx | | model | 模型 ID,多个模型以逗号分隔,可在首页切换 | ?model=gpt-image-2.5-sunburst,gpt-image-2 | | imageGenerationModel | Responses API 的图像生成工具模型,留空使用 API 默认值 | ?imageGenerationModel=gpt-image-2.5-sunburst | | apiMode | images 或 responses,默认 images | ?apiMode=responses | | profileName | 配置名称,默认“URL 参数配置” | ?profileName=我的配置 | | reasoningEffort | Responses API 推理强度 | ?reasoningEffort=high | | codexCli | Codex CLI 兼容模式 | ?codexCli=true | | streamImages | 流式传输 | ?streamImages=true | | streamPartialImages | 中间步骤图像数(需配合 streamImages) | ?streamPartialImages=2 | | profileId | 目标配置 ID;匹配到同 ID 配置时直接更新 | ?profileId=my-service | | transparentBackgroundMethod | 透明背景实现方式:api(原生)或 local(本地后处理) | ?transparentBackgroundMethod=local |

在客户端中,复制带 apiUrl 或 settings 参数的导入链接后切回客户端,即会提示导入。

集成示例(New API 聊天系统):

https://gpt-image-playground.cooksleep.dev?apiUrl={address}&apiKey={key}&model={model}
https://cooksleep.github.io/gpt_image_playground?apiUrl={address}&apiKey={key}&model={model}

---

📢 公告卡片

public/announcements.json 定义启动时显示的公告卡片,随应用一起打包。

| 字段 | 说明 | |------|------| | id | 必填,唯一标识;已读记录按 id 保存,换 id 才会再次提示 | | title | 必填,标题 | | content | 必填,Markdown 正文 | | note | 可选,正文下方的次要说明(纯文本) | | when | 可选,显示条件,缺省时总是显示 | | action | 可选,主按钮 { "label": "下载客户端", "url": "https://..." } | | media | 可选,卡片顶部的媒体 { "type": "html" \| "image", "src": "announcements/xxx.html", "aspectRatio": "16/9" } |

media.src 为不以 / 开头的相对路径;html 页面需引用同目录下的外部 .css、.js 文件。

when 是一个对象,每个键都要满足:

| 变量 | 取值 | |------|------| | platform | "web" 或 "client" | | os | "windows"、"macos"、"linux"、"android"、"ios" 或 "other" | | language | 浏览器语言,如 `"zh-CN

GitHub Stars & Activity

3,878Stars
968Forks
5Open issues
TypeScriptLanguage

GitHub Popularity

GitHub stars3,878
Forks968
Open issues5
Primary languageTypeScript
LicenseMIT
Stars gained today0
Created2026-04-23
Last pushed2026-10-11

Trending History

Trending statusnot on today's boards

Related GitHub Projects

1

invoke-ai / InvokeAI

TypeScript★ 28,564⑂ 0
→
2

HBAI-Ltd / Toonflow-app

TypeScript★ 17,229⑂ 0
→
3

krillinai / OpenCreator

TypeScript★ 12,695⑂ 0
→
4

voxel51 / fiftyone

TypeScript★ 11,170⑂ 0
→
5

EutropicAI / Final2x

TypeScript★ 7,366⑂ 0
→
6
→
7
→
8

Comfy-Org / ComfyUI

Python★ 136,922⑂ 0
→

More Trending Repositories