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
- GitHub: github.com/239573049/WebImage
- Homepage: https://routin.ai/
- Releases · Issues · Hacker News mentions
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