[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-1220":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":8,"htmlUrl":8,"language":9,"languages":8,"totalLinesOfCode":8,"stars":10,"forks":11,"watchers":12,"openIssues":13,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":15,"stars7d":16,"stars30d":17,"stars90d":14,"forks30d":14,"starsTrendScore":16,"compositeScore":18,"rankGlobal":8,"rankLanguage":8,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":22,"hasPages":20,"topics":23,"createdAt":8,"pushedAt":8,"updatedAt":24,"readmeContent":25,"aiSummary":26,"trendingCount":14,"starSnapshotCount":14,"syncStatus":15,"lastSyncTime":27,"discoverSource":28},1220,"ChatGpt-Image-Studio","peiyizhi0724\u002FChatGpt-Image-Studio","peiyizhi0724",null,"Go",441,104,1,7,0,2,6,103,6.06,"MIT License",false,"main",true,[],"2026-06-12 02:00:24","# ChatGpt Image Studio\n\nChatGpt Image Studio 是一个单服务交付的图片工作流项目：\n\n- `backend\u002F`：Go 后端，负责图片接口、账号池、配置管理和静态资源托管\n- `web\u002F`：Vite + React 前端，构建后输出到 `web\u002Fdist`\n- `scripts\u002F`：本地开发、检查、构建脚本\n\n项目当前交付方式是“一个二进制 + 一份静态前端 + 本地配置目录”：\n\n- 前端不需要单独部署\n- 后端运行时直接托管 `static\u002F`\n- 首次启动时自动生成 `data\u002Fconfig.toml`\n- 首次生成配置后即可本地运行\n\n## 核心功能\n\n- 基于 `gpt-image-2` 的文本生图\n- 参考图生成与连续编辑\n- 选区涂抹式局部重绘\n- 图片工作台支持会话历史、新建会话、失败重试、提示词复制与结果图下载\n- 支持按比例选择分辨率与质量档位，并区分 `Free` \u002F `Paid` 可用输出档\n- 兼容图片场景的 `\u002Fv1\u002Fchat\u002Fcompletions` 与 `\u002Fv1\u002Fresponses`\n- 本地认证文件导入与账号池管理\n- `Studio` 模式支持直接导入 `access_token`，并将 `Token` 账号与认证文件账号分开管理\n- 支持单账号刷新、一键批量刷新额度与刷新进度展示\n- 支持 `CPA \u002F NewAPI \u002F Sub2API` 多来源账号同步与推送\n- 请求记录页可区分官方与 CPA 链路，并记录 `size \u002F quality \u002F promptLength`\n- 配置管理页，可直接修改 `data\u002Fconfig.toml`\n\n## 图片工作台\n\n- 支持 `生成 \u002F 编辑 \u002F 选区编辑` 三种主流程\n- 支持移动端单页工作流：会话历史与工作台可分别进入，历史记录支持回到指定会话\n- 结果图支持：\n  - 下载\n  - 作为后续编辑源图继续改图\n  - 打开选区编辑器进行局部重绘\n- 用户消息支持一键复制，失败任务支持原位重试\n- 历史记录支持浏览器本地存储或服务端持久化\n\n## 数据存储\n\n当前项目支持把不同类型的数据拆分存储：\n\n- 账号池存储：`current \u002F sqlite \u002F redis`\n- 配置文件存储：`file \u002F redis`\n- 图片会话记录：`browser \u002F server`\n- 图片数据：`browser \u002F server`\n\n说明：\n\n- `current` 表示沿用当前本地文件目录方案\n- `server` 表示由后端统一保存并对外提供图片 \u002F 会话读取\n- 设置页支持迁移账号池、配置文件与图片会话历史\n- 无盘容器场景可配合 `redis` 保存配置与账号池\n\n## 账号池与同步\n\n- 支持导入本地认证文件\n- 支持在 `Studio` 模式下直接导入 `access_token`\n- `Token` 账号不会参与 `CPA \u002F NewAPI \u002F Sub2API` 的同步和推送\n- 支持单账号额度刷新与一键批量刷新全部额度\n- 批量刷新会限制并发，并在页面显示实时进度\n- 支持：\n  - 从 `CPA \u002F NewAPI \u002F Sub2API` 同步账号到本地\n  - 推送本地账号到 `CPA \u002F NewAPI \u002F Sub2API`\n\n## 界面预览\n\n| 预览 1 | 预览 2 |\n| --- | --- |\n| ![界面预览 1](asset\u002F21994c2f6f7ccdc2f5c6f5c472c1e7a7af4f1063.png) | ![界面预览 2](asset\u002F665a23c2fc38a6c49d127f454b651854fcfa8e84.png) |\n| ![界面预览 3](asset\u002F9c47ac91270469513b769c30748f6d48f421ba9f.png) | ![界面预览 4](asset\u002Fa4f2e51c873e3066fb71fcab84fee8dee8ff9ea9.png) |\n| ![界面预览 5](asset\u002Fbb2f570badfb194f8b16b07221df40bfac94ee05.png) | ![界面预览 6](asset\u002Fbf84c0b8a48d8cc28afec8a1980834887f8dd211.png) |\n\n## 仓库结构\n\n```text\n.\n├── backend\u002F                  Go 后端\n│   ├── api\u002F                  HTTP 路由与处理器\n│   ├── internal\u002F             配置、账号、同步、中间件、版本信息\n│   ├── data\u002F                 默认模板与本地运行数据目录\n│   ├── static\u002F               本地开发时同步的前端静态资源（构建产物，不入库）\n│   └── main.go\n├── web\u002F                      Vite 前端\n│   ├── src\u002F                  React 页面与组件\n│   └── dist\u002F                 构建产物（不入库）\n├── scripts\u002F                  build \u002F dev \u002F check 脚本\n└── README.md\n```\n\n## 环境要求\n\n- Go `1.25+`\n- Node.js `24+`\n- npm `10+`\n\n## 获取项目\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fpeiyizhi0724\u002FChatGpt-Image-Studio.git\ncd ChatGpt-Image-Studio\n```\n\n## 本地开发\n\n### 启动开发环境\n\nWindows：\n\n```powershell\n.\u002Fscripts\u002Fdev.ps1\n```\n\nmacOS \u002F Linux：\n\n```bash\nchmod +x .\u002Fscripts\u002F*.sh\n.\u002Fscripts\u002Fdev.sh\n```\n\n开发脚本会自动完成：\n\n1. 安装前端依赖\n2. 构建 `web\u002Fdist`\n3. 同步前端资源到 `backend\u002Fstatic`\n4. 启动 Go 后端\n\n默认地址：\n\n- `http:\u002F\u002F127.0.0.1:7000`\n\n健康检查：\n\n- `GET \u002Fhealth`\n\n## Docker 部署\n\n当前仓库支持通过 GitHub Container Registry 直接拉取镜像部署。\n\n镜像发布规则：\n\n- 推送到 `main` 分支后，GitHub Actions 会自动更新 `ghcr.io\u002Fpeiyizhi0724\u002Fchatgpt-image-studio:latest`\n- 推送版本标签 `v1.2.x` 后，会额外发布同名版本镜像标签\n- Docker 镜像同时提供 `linux\u002Famd64` 与 `linux\u002Farm64`\n\n### 首次启动\n\n```bash\ndocker compose pull\ndocker compose up -d\n```\n\n默认会：\n\n- 使用 `ghcr.io\u002Fpeiyizhi0724\u002Fchatgpt-image-studio:latest`，也就是 `main` 分支当前最新镜像\n- 将宿主机的 `.\u002Fbackend\u002Fdata` 挂载到容器内 `\u002Fapp\u002Fdata`\n- 对外暴露 `7000` 端口\n- 额外注入 `host.docker.internal`，方便容器访问宿主机服务（如本机代理）\n\n如需固定到某个版本，可先设置：\n\n```bash\nexport IMAGE_TAG=v1.2.10\ndocker compose pull\ndocker compose up -d\n```\n\nWindows PowerShell：\n\n```powershell\n$env:IMAGE_TAG = \"v1.2.10\"\ndocker compose pull\ndocker compose up -d\n```\n\n### 无状态云部署（Redis 引导启动示例）\n\n如果你的云平台是无状态容器，重启后不会保留本地磁盘，可以把：\n\n- 账号池存到 Redis\n- 配置存到 Redis\n- 图片会话记录保留在浏览器\n- 图片数据保留在浏览器\n\n推荐启动方式：\n\n```bash\ndocker run -d \\\n  --name chatgpt-image-studio \\\n  -p 7000:7000 \\\n  -e SERVER_HOST=0.0.0.0 \\\n  -e SERVER_PORT=7000 \\\n  -e STORAGE_BACKEND=redis \\\n  -e STORAGE_CONFIG_BACKEND=redis \\\n  -e REDIS_ADDR=your-redis-host:6379 \\\n  -e REDIS_PASSWORD=your-redis-password \\\n  -e REDIS_DB=0 \\\n  -e REDIS_PREFIX=chatgpt2api:studio \\\n  -e STORAGE_IMAGE_CONVERSATION_STORAGE=browser \\\n  -e STORAGE_IMAGE_DATA_STORAGE=browser \\\n  -e TZ=Asia\u002FShanghai \\\n  ghcr.io\u002Fpeiyizhi0724\u002Fchatgpt-image-studio:latest\n```\n\n说明：\n\n- 这组环境变量的作用是让程序每次启动时都能先从 Redis 读取配置引导。\n- 启动成功后，其他配置仍可在页面“配置管理”中继续修改，并持久化到 Redis。\n- 如果没有持久化磁盘，不建议把 `image_conversation_storage` 或 `image_data_storage` 设为 `server`，否则服务端图片历史和图片文件在容器重建后仍会丢失。\n\n### 一键更新\n\nWindows：\n\n```powershell\n.\u002Fscripts\u002Fdocker-update.ps1\n```\n\nmacOS \u002F Linux：\n\n```bash\nchmod +x .\u002Fscripts\u002Fdocker-update.sh\n.\u002Fscripts\u002Fdocker-update.sh\n```\n\n更新脚本会自动执行：\n\n1. 检查 Docker \u002F Docker Compose\n2. 如果当前目录是 Git 仓库，则先 `git pull --ff-only origin main`\n3. 从 GitHub Container Registry 拉取 `latest` 镜像\n4. 重新创建并启动容器\n\n### 配置文件\n\n程序启动时会确保以下文件存在：\n\n- `data\u002Fconfig.example.toml`\n- `data\u002Fconfig.toml`\n\n在仓库开发模式下，上述路径实际对应：\n\n- `backend\u002Fdata\u002Fconfig.example.toml`\n- `backend\u002Fdata\u002Fconfig.toml`\n\n如果 `config.toml` 不存在，程序会自动按内置模板生成，无需手动复制。\n\n最小配置示例：\n\n```toml\n[app]\nauth_key = \"chatgpt2api\"\n```\n\n默认进入后台页面时使用的登录密码也是：\n\n- `chatgpt2api`\n\n如果你没有修改 `[app].auth_key`，首次进入时直接输入上面的默认密码即可。\n\n如果需要接入 CPA 同步：\n\n```toml\n[sync]\nenabled = true\nbase_url = \"http:\u002F\u002F127.0.0.1:8317\"\nmanagement_key = \"your-cliproxy-management-key\"\nprovider_type = \"codex\"\n```\n\n如果需要通过固定代理访问 ChatGPT，可追加：\n\n```toml\n[proxy]\nenabled = true\nurl = \"socks5h:\u002F\u002F127.0.0.1:10808\"\nmode = \"fixed\"\nsync_enabled = false\n```\n\n如果你是 `Docker Compose` 部署，并且代理程序跑在宿主机上，需要注意：\n\n- 容器里的 `127.0.0.1` 指向容器自己，不是宿主机\n- 更推荐把代理写成 `socks5h:\u002F\u002Fhost.docker.internal:7890` 或可被容器访问到的实际地址\n- 如果报 `connect: connection refused`，通常不是项目不支持 SOCKS5，而是你的代理程序只监听了宿主机回环地址\n- 对 `Clash \u002F mihomo \u002F sing-box \u002F v2rayN` 这类本机代理，通常需要开启 `Allow LAN`，或者把监听地址改为 `0.0.0.0`\n- 如果代理本身也在 Docker 里，优先直接填写代理容器的服务名和端口，而不是宿主机 IP\n\n补充说明：\n\n- `CPA` 模式很多请求是发往你配置的 `CPA base_url`，不等于官方 `Studio` 直连链路已经验证过宿主机 SOCKS 代理可达\n- `Studio` 官方链路会真实从容器内访问 `chatgpt.com`，所以宿主机代理是否对容器开放，会直接影响 `\u002Fbackend-api\u002Fme` 和图片请求\n\n如果需要调整 `Free` \u002F `Plus \u002F Pro \u002F Team` 账号的图片链路，可在 `[chatgpt]` 下补充：\n\n```toml\n[chatgpt]\nfree_image_route = \"legacy\"\nfree_image_model = \"auto\"\npaid_image_route = \"responses\"\npaid_image_model = \"gpt-5.4-mini\"\n```\n\n说明：\n\n- `free_image_route`\n  控制 `Free` 账号图片请求走哪条链路。\n- `free_image_model`\n  控制 `Free` 账号真正发给上游的模型名。\n- `paid_image_route`\n  控制 `Plus \u002F Pro \u002F Team` 账号图片请求走哪条链路。\n- `paid_image_model`\n  控制 `Plus \u002F Pro \u002F Team` 账号真正发给上游的模型名。\n\n如果需要把账号池与图片历史迁移到数据库或服务端模式，可在 `[storage]` 下补充：\n\n```toml\n[storage]\nbackend = \"sqlite\"\nconfig_backend = \"file\"\nimage_conversation_storage = \"server\"\nimage_data_storage = \"server\"\nsqlite_path = \"data\u002Fchatgpt-image-studio.db\"\n```\n\n如果需要改用 Redis 保存账号池与配置，可继续补充：\n\n```toml\n[storage]\nbackend = \"redis\"\nconfig_backend = \"redis\"\nredis_addr = \"127.0.0.1:6379\"\nredis_password = \"\"\nredis_db = 0\nredis_prefix = \"chatgpt2api:studio\"\n```\n\n对于无状态云容器，通常建议同时配合：\n\n```toml\n[storage]\nimage_conversation_storage = \"browser\"\nimage_data_storage = \"browser\"\n```\n\n## 构建\n\nWindows：\n\n```powershell\n.\u002Fscripts\u002Fbuild.ps1\n```\n\nmacOS \u002F Linux：\n\n```bash\n.\u002Fscripts\u002Fbuild.sh\n```\n\n构建脚本会执行：\n\n1. 构建前端 `web\u002Fdist`\n2. 同步前端资源到 `backend\u002Fstatic`\n3. 构建后端二进制\n4. 生成本地发布目录 `dist\u002Fpackage`\n\n构建输出目录结构：\n\n```text\ndist\u002Fpackage\u002F\n├── chatgpt-image-studio.exe \u002F chatgpt-image-studio\n├── data\u002F\n│   └── config.example.toml\n├── static\u002F\n│   ├── index.html\n│   └── assets\u002F...\n└── README.txt\n```\n\n## 检查\n\nWindows：\n\n```powershell\n.\u002Fscripts\u002Fcheck.ps1\n```\n\nmacOS \u002F Linux：\n\n```bash\n.\u002Fscripts\u002Fcheck.sh\n```\n\n当前检查项：\n\n- `go test .\u002F...`\n- `npx tsc --noEmit`\n- `npm run lint`\n- `npm run build`\n\n如需额外验证 `Studio \u002F CPA` 以及旧版 `mix -> studio` 兼容迁移的图片路由，可打开可选黑盒测试：\n\nmacOS \u002F Linux：\n\n```bash\nRUN_IMAGE_MODE_COMPAT_TESTS=1 .\u002Fscripts\u002Fcheck.sh\n```\n\nWindows PowerShell：\n\n```powershell\n$env:RUN_IMAGE_MODE_COMPAT_TESTS = \"1\"\n.\u002Fscripts\u002Fcheck.ps1\n```\n\n这组测试默认不会在普通检查里执行，只在显式设置环境变量后追加运行：\n\n- `go test .\u002Fapi -run TestImageModeCompatibilityBlackBox -count=1`\n\n## 启动失败兜底\n\n如果启动失败，程序会：\n\n- 在命令行输出中文错误信息\n- 将详细信息写入 `data\u002Flast-startup-error.txt`\n\n当前重点处理的失败场景：\n\n- 端口占用\n- 配置文件损坏\n- 静态资源缺失\n- 首次生成配置文件失败\n\n## 主要接口\n\n### 应用基础\n\n- `POST \u002Fauth\u002Flogin`\n- `GET \u002Fversion`\n- `GET \u002Fhealth`\n\n### 账号管理\n\n- `GET \u002Fapi\u002Faccounts`\n- `POST \u002Fapi\u002Faccounts`\n- `POST \u002Fapi\u002Faccounts\u002Fimport`\n- `DELETE \u002Fapi\u002Faccounts`\n- `POST \u002Fapi\u002Faccounts\u002Frefresh`\n- `POST \u002Fapi\u002Faccounts\u002Frefresh-all`\n- `GET \u002Fapi\u002Faccounts\u002Frefresh-progress`\n- `POST \u002Fapi\u002Faccounts\u002Fupdate`\n- `GET \u002Fapi\u002Faccounts\u002F{id}\u002Fquota`\n\n### 配置与请求记录\n\n- `GET \u002Fapi\u002Fconfig`\n- `GET \u002Fapi\u002Fconfig\u002Fdefaults`\n- `PUT \u002Fapi\u002Fconfig`\n- `GET \u002Fapi\u002Frequests`\n- `POST \u002Fapi\u002Fproxy\u002Ftest`\n- `POST \u002Fapi\u002Fintegration\u002Ftest`\n- `POST \u002Fapi\u002Fintegration\u002Fnewapi\u002Ftoken`\n- `POST \u002Fapi\u002Fintegration\u002Fsub2api\u002Fgroups`\n\n### 同步\n\n- `GET \u002Fapi\u002Fsync\u002Fstatus`\n- `POST \u002Fapi\u002Fsync\u002Frun`\n\n### 图片历史\n\n- `GET \u002Fapi\u002Fimage\u002Fconversations`\n- `DELETE \u002Fapi\u002Fimage\u002Fconversations`\n- `POST \u002Fapi\u002Fimage\u002Fconversations\u002Fimport`\n- `GET \u002Fapi\u002Fimage\u002Fconversations\u002F{id}`\n- `PUT \u002Fapi\u002Fimage\u002Fconversations\u002F{id}`\n- `DELETE \u002Fapi\u002Fimage\u002Fconversations\u002F{id}`\n\n### 图片接口\n\n- `POST \u002Fv1\u002Fimages\u002Fgenerations`\n- `POST \u002Fv1\u002Fimages\u002Fedits`\n- `POST \u002Fv1\u002Fchat\u002Fcompletions`\n- `POST \u002Fv1\u002Fresponses`\n- `GET \u002Fv1\u002Fmodels`\n- `GET \u002Fv1\u002Ffiles\u002Fimage\u002F{filename}`\n\n## 本地数据与敏感信息\n\n以下内容默认不会提交到 Git：\n\n- `backend\u002Fdata\u002Fconfig.toml`\n- `backend\u002Fdata\u002Fconfig.example.toml`\n- `backend\u002Fdata\u002Faccounts_state.json`\n- `backend\u002Fdata\u002Fauths\u002F*.json`\n- `backend\u002Fdata\u002Fsync_state\u002F*.json`\n- `backend\u002Fdata\u002Ftmp\u002F`\n- `backend\u002Fdata\u002Flast-startup-error.txt`\n- `backend\u002Fstatic\u002F`\n- `web\u002Fdist\u002F`\n- 发布产物、日志、临时文件、本地二进制\n\n不要提交认证文件、管理密钥、运行状态或日志中的敏感内容。\n\n## 社区支持\n\n- Linux.do 社区：\u003Chttps:\u002F\u002Flinux.do\u002F>\n\n## 许可证\n\n本仓库使用 MIT 许可证，详见 [LICENSE](LICENSE)。\n\n> [!WARNING]\n> 免责声明：\n>\n> 本项目涉及对 ChatGPT 官网相关图片能力的研究与封装，仅供个人学习、技术研究与非商业性技术交流使用。\n>\n> - 严禁将本项目用于任何商业用途、盈利性使用、批量操作、自动化滥用或规模化调用。\n> - 严禁将本项目用于生成、传播或协助生成违法、暴力、色情、未成年人相关内容，或用于诈骗、欺诈、骚扰等非法或不当用途。\n> - 严禁将本项目用于任何违反 OpenAI 服务条款、当地法律法规或平台规则的行为。\n> - 使用者应自行承担全部风险，包括但不限于账号被限制、临时封禁、永久封禁以及因违规使用等导致的法律责任。\n> - 使用本项目即视为你已充分理解并同意本免责声明全部内容；如因滥用、违规或违法使用造成任何后果，均由使用者自行承担。\n\n> [!IMPORTANT]\n> 本项目基于对 ChatGPT 官网相关能力的研究实现，存在账号受限、临时封禁或永久封禁的风险。请勿使用自己的重要账号、常用账号或高价值账号进行测试。\n","ChatGpt Image Studio 是一个基于 Go 语言开发的图片工作流项目，提供文本生图、参考图生成与编辑、选区涂抹式局部重绘等功能。该项目采用单服务交付模式，前端基于 Vite + React 构建，并直接由后端托管静态资源，简化了部署流程。核心功能包括基于 gpt-image-2 的图像生成、会话历史管理以及多种账号同步机制等。适合需要高效处理图片创作与编辑的应用场景，如创意设计、内容生成等。此外，项目支持多种数据存储方式（如 SQLite、Redis）和无盘容器环境下的配置管理，增强了其灵活性与可扩展性。","2026-06-11 02:42:22","CREATED_QUERY"]