diff --git a/skills/le-gpt-image/README.md b/skills/le-gpt-image/README.md index b34b295..84e7c21 100644 --- a/skills/le-gpt-image/README.md +++ b/skills/le-gpt-image/README.md @@ -46,6 +46,7 @@ python3 scripts/gpt_image.py edit --image content.png --style-image ink.png --ou | edit 单图 low | 45.4s 成功,主体保持、背景按指令替换 | | 海报实测(约 1 小时后) | urllib 传输被 Cloudflare 质询(403 `cf-mitigated: challenge` / 连接被掐)——同网络下浏览器与 Codex App 正常,锁定 **TLS 指纹**风控 | | 装 curl_cffi 后重测 | Chrome 指纹 + 真 token 完整生图 200;「功夫女足」海报 61.5s 成功(1024x1536,书法标题渲染准确) | +| 「九鱼聚财」水墨画 | generate 72.2s 成功但只画了 8 条鱼(模型数数弱项,视觉复核抓出);edit 走 native 被 RST(过认证+大图上传触发深层风控),切 `--backend responses` + 显式 `--model gpt-5.5`(config 里的 gpt-6.1-sol 带 image 工具会 500)后 194.9s 成功补齐第 9 条 | ## 限制 diff --git a/skills/le-gpt-image/SKILL.md b/skills/le-gpt-image/SKILL.md index f582703..fb11aea 100644 --- a/skills/le-gpt-image/SKILL.md +++ b/skills/le-gpt-image/SKILL.md @@ -93,7 +93,9 @@ SKILL/scripts/gpt_image.py edit \ | HTTP 429 | 脚本自动退避重试;重试仍失败则告知用户订阅图像额度已到限,建议稍后再试或降 quality/尺寸 | | 尺寸不符警告 | 属正常(服务端建议值行为),按实际尺寸交付 | | 网络请求失败 | 先定位出口:`curl --noproxy '*' https://api.ipify.org` 与 `curl -x http://127.0.0.1:7890 ...` 对比出口 IP。macOS 上 Python urllib 会自动读系统代理设置(即使只开 TUN 模式也会被显式代理入口接管);TUN 与 7890 通常同核同出口 | -| `Remote end closed connection` / 403 含 `cf-mitigated: challenge` / curl 56 连接被掐 | **TLS 指纹被 Cloudflare 质询**:python-urllib/curl 的握手特征会被 chatgpt.com 域名级风控识别(浏览器与 Codex/ChatGPT.app 不受影响,所以「用户那边正常」)。解法:`pip install --user curl_cffi`(PEP 668 环境加 `--break-system-packages`),CLI 检测到即自动用 Chrome 指纹传输。装后仍被掐 → 检查是否覆盖了 Chrome UA(curl_cffi 路径下不要发 codex UA,矛盾组合会被掐)。换代理节点通常无效——同出口下浏览器指纹本来就能过 | +| native 通道被掐 / 403 含 `cf-mitigated: challenge` / curl 56 连接被掐 | **TLS 指纹被 Cloudflare 质询**:python-urllib/curl 的握手特征会被 chatgpt.com 域名级风控识别(浏览器与 Codex/ChatGPT.app 不受影响,所以「用户那边正常」)。解法:`pip install --user curl_cffi`(PEP 668 环境加 `--break-system-packages`),CLI 检测到即自动用 Chrome 指纹传输。装后仍被掐 → 检查是否覆盖了 Chrome UA(curl_cffi 路径下不要发 codex UA,矛盾组合会被掐)。换代理节点通常无效——同出口下浏览器指纹本来就能过 | +| **edit 走 native 被掐(generate 正常)** | 更深一层风控:「过认证 + 携带大 base64 图上传」打到 `/images/edits` 会被 RST(假 token 反而能穿到 401)。**解法:edit 改走 `--backend responses`**(不同端点,不吃这套;实测穿透)。responses 耗时更长(~3 分钟) | +| responses 通道报通用 500「An error occurred…」 | 大概率是推理模型名不可用:`_reasoning_model` 默认会读 `~/.codex/config.toml` 的 `model` 字段(本机是 `gpt-6.1-sol`,带图像工具会 500)。**解法:`--model gpt-5.5` 显式指定**。仍 500 可再加 `--input-max-edge 768` 缩小请求体 | | native 通道 404/失效 | 内部接口无稳定性契约;切 `--backend responses` 试试,并在交付时说明 | ## 安全边界 diff --git a/skills/le-gpt-image/scripts/gpt_image.py b/skills/le-gpt-image/scripts/gpt_image.py index 52d487b..4dc3dd1 100755 --- a/skills/le-gpt-image/scripts/gpt_image.py +++ b/skills/le-gpt-image/scripts/gpt_image.py @@ -37,11 +37,6 @@ try: except ImportError: # Windows:无 flock,退化为无锁刷新 fcntl = None # type: ignore[assignment] -try: - import tomllib -except ImportError: # Python < 3.11 - tomllib = None # type: ignore[assignment] - # 可选传输层:curl_cffi 以 Chrome TLS 指纹发请求。 # chatgpt.com 的 Cloudflare 会质询 python-urllib/curl 的握手指纹(403 cf-mitigated: challenge), # Chrome 指纹(及 Codex/ChatGPT.app 的网络栈)不受影响。未安装时回退 urllib。 @@ -447,15 +442,8 @@ def _reasoning_model(args: argparse.Namespace) -> str: return args.model if os.environ.get("CODEX_IMAGEGEN_MODEL"): return os.environ["CODEX_IMAGEGEN_MODEL"] - config_file = _codex_home(args) / "config.toml" - if tomllib is not None and config_file.exists(): - try: - config = tomllib.loads(config_file.read_text(encoding="utf-8")) - model = config.get("model") - if isinstance(model, str) and model.strip(): - return model - except (OSError, UnicodeError, Exception): - pass + # 注意:读 Codex config 的 model 字段曾踩坑——本机 config 里是 gpt-6.1-sol, + # 它在内部 responses 端点带图像工具会 500。没显式指定时用实测可用的默认值。 return DEFAULT_REASONING_MODEL