📈 GH Trending Explorer 🎲 Surprise me

← all repos

239573049 / WebImage

git clone https://github.com/239573049/WebImage.git

—

—
stars, 24h
+39
stars, 7 days · #1,094
+39
stars, 30 days · #7,397
39
★ total · +39% this week
14
forks · 0 open issues

Star history starts 2026-10-20; the chart appears after the second daily snapshot.

LanguagePython
LicenseMIT
Created2026-10-15 (5d ago)
Last push5d ago
Watchers0
OwnerUser

Links

README excerpt
WebImage 
 WebImage 主要是对 ChatGPT 官网相关能力进行逆向整理与封装,提供面向 ChatGPT 图片生成、图片编辑、多图组图编辑场景的 OpenAI 兼容图片 API / 代理,并集成在线画图、号池管理、多种账号导入方式与 Docker 自托管部署能力。 
> [!WARNING]
> 免责声明:
>
> 本项目涉及对 ChatGPT 官网文本生成、图片生成与图片编辑等相关接口的逆向研究,仅供个人学习、技术研究与非商业性技术交流使用。
>
> - 严禁将本项目用于任何商业用途、盈利性使用、批量操作、自动化滥用或规模化调用。
> - 严禁将本项目用于破坏市场秩序、恶意竞争、套利倒卖、二次售卖相关服务,以及任何违反 OpenAI 服务条款或当地法律法规的行为。
> - 严禁将本项目用于生成、传播或协助生成违法、暴力、色情、未成年人相关内容,或用于诈骗、欺诈、骚扰等非法或不当用途。
> - 使用者应自行承担全部风险,包括但不限于账号被限制、临时封禁或永久封禁以及因违规使用等所导致的法律责任。
> - 使用本项目即视为你已充分理解并同意本免责声明全部内容;如因滥用、违规或违法使用造成任何后果,均由使用者自行承担。
> - 本项目基于对 ChatGPT 官网相关能力的逆向研究实现,存在账号受限、临时封禁或永久封禁的风险。请勿使用你自己的重要账号、常用账号或高价值账号进行测试。
## 快速开始
### Docker 运行(推荐)
 [code] 
该 compose 会启动两个容器:
- `app`:主服务(对外 3000)
- `sentinel-solver`:自带 Chromium 的 turnstile 求解服务(仅内网 8788,主服务通过 `CHATGPT2API_SENTINEL_SOLVER_*` 接入)
需要图片直链时,可以单独起一个 Means 对象存储(默认 compose 不含它):
- Web 面板:`http://localhost:3000`
- API 地址:`http://localhost:3000/v1`
- 数据目录:`./data`
上游经常被 Cloudflare 拦截时,可在 `.env` 里把稳定代理运行时的出口指向宿主机上的 WARP / Privoxy / 其他 HTTP 代理:
 [code] 
代理生效范围与优先级:
- 稳定代理运行时只接管上游 OpenAI / ChatGPT 请求(对话、生图、codex、Token 刷新、OAuth / 密码登录)。
- 设置页的全局代理(HTTP / HTTPS / SOCKS5 / SOCKS5H)覆盖其余出站请求:CPA / `sub2api` 服务器、图片链接拉取、AI 审核、WebDAV、R2 备份、Means 图片存储和 Git 存储;指向 `127.0.0.1` / `localhost` / `::1` 的自配置服务保持直连。数据库连接不经过代理。
- 优先级:代理池(开启时,仅上游请求)> 账号自身代理 > 稳定代理运行时(仅上游请求)> 显式代理 > 全局代理。
也可在后台设置页的「稳定代理运行时」面板手动保存、测试代理。
### 代理池(多出口 + 账号粘性绑定)
后台「资源管理 → 代理池」可录入多个上游代理(每行一个,支持 `scheme://user:pass@host:port`、`host:port`、`host:port:user:pass`),开启后:
- 每个账号均分到当前绑定数最少的代理,并**永久绑定**;新增代理不会挪动已有账号,只有删除代理时,它名下的账号才会逐个改绑到其他代理。建议先批量录入全部代理再开启。
- 绑定的代理被禁用或连续出错被判定异常时,账号临时借用另一个代理(同一账号固定借同一个),绑定本身不变,代理恢复后自动回到原代理;全部代理都异常时仍走原代理,不会退回直连。
- 无账号的请求在池内轮询;OAuth 登录在开始时就预分配代理,换 token 走它,新账号直接绑到这个代理。
- 首次开启时,账号上手填的代理会自动迁进池(按地址去重)并绑定,原字段清空。
- Sentinel 求解服务会收到账号所用的池代理,在对应代理的浏览器上下文里求解,turnstile 与业务请求同一出口 IP。每个代理占一个通道(独立浏览器上下文,约 150-250MB 内存),上限由 `SENTINEL_SOLVER_MAX_LANES`(默认 8)控制,建议不小于池里的代理数;通道全忙时新请求最多排队 60 秒。
- 代理池只作用于上游 OpenAI / ChatGPT 请求;池数据保存在 `data/proxy_pool.json`,随「配置」一起备份。
#### 订阅导入(Clash / V2Ray)
代理池页面可以添加 Clash(mihomo)YAML 订阅或 V2Ray 订阅(base64 / 明文分享链接),从节点列表里勾选要导入的节点:
- HTTP / SOCKS5 节点直接作为池代理,不需要额外组件。
- ss / vmess / vless / trojan / hysteria2 / tuic 等节点需要**可选的 mihomo 内核**:每个节点在内核里占一个固定端口(默认从 20000 起,仅 compose 内网可达),池代理地址是 `http://proxy-core: `。启用方式:
 [code] 
 然后 `docker compose --profile proxy-core up -d`,也可以在代理池页面的「mihomo 内核」卡片里开关和修改地址。
- 订阅默认每 6 小时自动刷新(可改为手动):节点参数变化只更新地址,账号绑定不变;节点从订阅里消失(或内核被关闭)时自动禁用,名下账号临时借用其他代理,节点回来后自动恢复。拉取失败或拉到空订阅时不改动任何代理。
- 删除订阅会同时删除它导入的代理,名下账号改绑到其他代理。
- 单个节点也可以直接粘贴:「批量添加」里除了普通代理地址,还接受 `vmess://` / `vless://` / `trojan://` / `ss://` / `hysteria2://` / `tuic://` / `socks://` 分享链接和整段 base64 订阅内容。这些节点存放在内置的「手动添加的节点」订阅里;内核未启用时先保存,启用后可在其节点列表里补导入。
- 机场节点常常多个共用同一个出口 IP,代理池会标出出口重复的代理;这类机房 IP 在 OpenAI 那边的信誉也通常不如住宅 IP。
### Sentinel 求解服务(网页 turnstile)
网页端的 turnstile 挑战已改为随机化 opcode 的 VM,纯 Python 复刻无法跟上版本,需要真实 Chromium 执行。项目附带一个常驻浏览器的求解服务,默认的 `docker compose up -d` 已经包含它;下面是单独部署 / 本地调试的做法。
solver 已单独打成镜像:
 [code] 
本地直接跑(需自备 Chromium):
 [code] 
然后在 `c