分析日期: 2026-05-07 目标:
https://chatgpt.com/images工具: jshook MCP (Chrome CDP + JS Hook + Network Interception) 工具链接: https://github.com/vmoranv/jshookmcp
本目录是 ChatGPT Web 图片生成链路的逆向资料索引,覆盖前端函数映射、请求体构造、认证/PoW/Sentinel、SSE 事件结构、资产下载、验证脚本和脱敏响应样本。上游行为变化较快,修改后端协议实现前应优先用 jshook 或 jshook/scripts/ 重新验证。
| 目的 | 首选文档 | 适用场景 |
|---|---|---|
| 看完整技术结论 | docs/ChatGPT-gpt-image-2-generation-pipeline-analysis.md | 端到端理解 gpt-image-2 / ChatGPT Images 2.0 链路 |
| 查端点和请求头 | docs/api-endpoints.md | 添加或修正后端 HTTP 调用、请求头、路由 |
| 查认证生图 Schema | docs/authenticated-api-schema.md | 实抓链路、PoW、Sentinel、Prepare、Generate、Download |
| 查请求完成链路 | docs/request-completion-flow.md | 前端 OV/mp 调用链、callsite_id、SSE 差异 |
| 查 SSE 协议 | docs/upstream-sse-conversation.md | 解析 /conversation 和 /f/conversation 流式响应 |
| 查 content_type / recipient | docs/content-type-enum.md | 区分前端 zo 枚举和 API content_type |
| 查混淆函数名 | docs/function-mapping.md | 从 JS bundle 定位上传、生图、渲染、埋点函数 |
| 查内部暗语 | docs/internal-codenames.md | 理解模型、工具、资产、channel、缓存 key 代号 |
zo、API content_type、生图 recipient、判断函数和 author 名称枚举。| 脚本 | 用途 | 产物 |
|---|---|---|
| scripts/image_gen_full_flow.py | 完整认证生图链路验证:Bootstrap -> Chat Requirements -> PoW -> Prepare -> Generate SSE -> Download | responses/image-gen-sse-response.json、下载图片 |
| scripts/verify_text_chat.py | 验证 /backend-api/conversation 文本聊天端点,并与生图端点对比 | responses/text-chat-sse-response.json |
| scripts/curl_cffi_request.py | 早期 curl-cffi 请求实验脚本,用于验证 TLS/浏览器指纹和基础请求体 | 调试输出或临时响应 |
脚本通常需要本地有效认证状态、网络访问和 curl-cffi 等 Python 依赖。不要把真实 OAuth token、cookie、账号信息、代理凭据或可复用下载 URL 写入脚本或响应样本。
| 文件 | 内容 |
|---|---|
| responses/images-styles.json | 匿名风格列表,包含 32 种图片风格预设 |
| responses/conversation-init.json | 匿名或会话初始化响应,含限额和能力相关信息 |
| responses/image-gen-sse-response.json | 完整生图 SSE 响应样本,包含 image_asset_pointer 和图片资产事件 |
| responses/text-chat-sse-response.json | 文本聊天 SSE 响应样本,用于对比 /conversation 与 /f/conversation |
| responses/refreshed-tokens.json | token 刷新响应样本;提交前必须确认已脱敏 |
| responses/file_00000000bc987209adba1c148413e076.png | 实测生成图片样本 |
jshook/
├── README.md
├── docs/
│ ├── ChatGPT-gpt-image-2-generation-pipeline-analysis.md
│ ├── api-endpoints.md
│ ├── authenticated-api-schema.md
│ ├── content-type-enum.md
│ ├── function-mapping.md
│ ├── internal-codenames.md
│ ├── request-completion-flow.md
│ └── upstream-sse-conversation.md
├── scripts/
│ ├── curl_cffi_request.py
│ ├── image_gen_full_flow.py
│ └── verify_text_chat.py
└── responses/
├── conversation-init.json
├── file_00000000bc987209adba1c148413e076.png
├── image-gen-sse-response.json
├── images-styles.json
├── refreshed-tokens.json
└── text-chat-sse-response.json
default_model_slug: "auto": 后端自动路由,前端不指定具体模型名。gpt-image-2。gpt-5-5,文本回复可出现 i-5-mini-m。t2uay3k.sj1i4kz,实抓确认。n7jupd_m,当前实抓为 t2uay3k.sj1i4kz。text;响应图片消息中出现 multimodal_text 和 image_asset_pointer part。user_visible_token、final_channel_token、last_token。GET /backend-anon/images/styles,匿名。POST /backend-anon/conversation/init,匿名。POST /backend-api/sentinel/chat-requirements,需认证和 PoW。POST /backend-api/f/conversation/prepare,需认证和 Sentinel,返回 conduit_token。POST /backend-api/f/conversation,需认证、Sentinel 和 Conduit,SSE 流式返回。POST /backend-api/conversation,无需 prepare/conduit,SSE 格式不同。GET /backend-api/conversation/{cid}/attachment/{sid}/download,返回 estuary CDN URL。生图链路 (/backend-api/f/conversation):
Bootstrap (GET / -> 提取 PoW 脚本)
-> Chat Requirements (POST /sentinel/chat-requirements -> sentinel token + PoW 难度)
-> Solve PoW (SHA3-512 brute force)
-> Prepare (POST /f/conversation/prepare -> conduit_token)
-> Generate (POST /f/conversation + SSE -> asset_pointer: sediment://...)
-> Download (GET /attachment/{sid}/download -> CDN URL -> 图片)
文本聊天链路 (/backend-api/conversation):
Bootstrap
-> Chat Requirements
-> Solve PoW
-> POST /conversation (SSE -> 文本回复)
image_gen 功能限额为 0,需要登录认证。scribble、anime、comic、icon、tarot 等。image_gen_async。image_gen_multi_stream。watermarked_asset_pointer。curl-cffi + edge101 指纹 + PoW 可通过当时的 Cloudflare WAF 验证。arkose.required = false。POST /backend-api/f/conversation/prepare -> conduit_token。POST /backend-api/f/conversation,不是 /backend-api/conversation。gpt-image-2 -> gpt-5-5。content_type: "text"。image_asset_pointer,资产指针使用 sediment://。/backend-api/conversation/{cid}/attachment/{sid}/download 获取 estuary CDN URL。/backend-api/conversation 是文本聊天,/backend-api/f/conversation 是图片生成。{"p":"","o":"add","v":{...}}。conduit_token 再发起请求。parts 是字符串数组: ["prompt text"],不是对象数组。sediment:// 用于图片资产指针,不同于 file-service://。asset_pointer 会直接出现在 SSE 事件中,无需额外轮询。ces/v1/t。docs/*.md,再同步更新本索引。responses/ 前必须脱敏,尤其是 token、cookie、账号标识、conversation id、私密 prompt、代理信息和可复用下载 URL。jshook/scripts/。只有修改逆向脚本、响应 fixture 或协议实现时,才按任务需要运行对应脚本或手动验证。