设为首页
收藏本站
切换到宽版
首页
BBS
最新文章
项目推荐(站长实测)
获取网赚项目&精品源码
登录
立即注册
52线报网
»
首页
›
我爱线报
›
源码分享
›
【Python】Custom Image API Skill,让Codex支持第三方G ...
返回列表
发布新帖
查看:
16
|
回复:
0
【Python】Custom Image API Skill,让Codex支持第三方GPT-IMAGE-2模型调用
小K
小K
当前离线
积分
13946
4294
主题
0
回帖
1万
积分
论坛元老
论坛元老, 积分 13946, 距离下一级还需 9986053 积分
论坛元老, 积分 13946, 距离下一级还需 9986053 积分
积分
13946
发消息
发表于
昨天 00:38
|
查看全部
|
阅读模式
Custom Image API Skill: CodeX调用skill ,让只有 Chat 接口的工具间接调用图片模型,该工具由AI生成,在CodeX做过测试完整可用。其他工具需要做一定的配置,根据相关工具的skill扩展来针对处理。最后有下载链接
一、背景:Chat 接口和图片接口不在同一条调用链上
很多 AI 工具的模型调用链默认面向对话模型,通常只会调用兼容 OpenAI 风格的:
[code]
POST /chat/completions
[i]复制代码[/i]
复制代码
[/code]
例如:中转平台提供了当前顶流图片生成模型,
gpt-image-2
模型。但CodeX等工具无法直接使用。因为gpt-image-2 往往提供的是另一组 OpenAI 兼容接口:
[code]POST /images/generations
POST /images/edits
[i]复制代码[/i]
复制代码
[/code]
这就导致:即使底层 provider 支持图片模型,上层工具也可能没有原生的图片请求入口,不能直接把一次对话调用转换为图片生成调用,更不能稳定地处理图片 URL、Base64 或图片二进制响应。
custom-image-api
的核心作用,就是在这两套协议之间提供一个轻量的桥接层:
[code]上层工具的自然语言请求
-> 工具识别到图片生成指令
-> Skill 或本地脚本
-> OpenAI 兼容的 /images/generations 或 /images/edits
-> 图片 URL/Base64/二进制响应
-> 本地图片文件
-> 返回给上层工具展示或继续处理
[i]复制代码[/i]
复制代码
[/code]
因此,它不是把图片模型“伪装成 Chat 模型”,而是让原本只有 Chat 调用能力的工具,通过 Skill/插件或本地脚本间接调用图片专用接口。
二、它解决了什么问题
图片接口接入时,除了请求路径不同,还存在一组重复工作:
根据 Codex profile 找到模型和 provider;
拼接 /images/generations 或 /images/edits 接口地址;
从环境变量或 Codex 的 auth.json 读取认证信息;
生成请求使用 JSON,图片编辑请求使用 multipart/form-data;
兼容 URL、Base64、Data URI 和直接图片响应;
把返回的图片下载、解码、识别格式并保存到本地;
避免 API Key 出现在命令输出、错误信息和共享技能目录中。
custom-image-api 集中处理了这些协议细节。它是一套可被工具调用的适配 Skill。对于 Codex,它表现为 custom-image-api Skill;对于其他工具,也可以直接复用其中的 Python 脚本和配置约定。
从能力边界看,它把“上层只支持 Chat”与“底层支持图片接口”解耦了:
[code]
上层工具:负责理解用户意图、触发 Skill、展示结果
|
v
桥接层:负责配置、认证、请求编码、响应解析、文件保存
|
v
图片 provider:负责真正的 image2 或其他图片模型推理
[i]复制代码[/i]
复制代码
[/code]
这里的 image2 可以理解为图片模型的具体名称,例如某个 provider 上配置的 gpt-image-2;真正决定能否使用的,是 provider 是否暴露兼容的图片接口。
[code]
custom-image-api/
├── SKILL.md # Skill 的行为说明和调用约定
├── agents/
│ └── openai.yaml # 在 Codex 中显示的名称、描述和默认提示词
├── references/
│ └── setup.md # 可移植安装和配置说明
└── scripts/
├── generate_image.py # 实际执行生成、编辑、下载和保存
└── self_test.py # 不访问网络的协议和兼容性测试
[i]复制代码[/i]
复制代码
[/code]
其中最重要的是 generate_image.py。它使用 Python 标准库完成 HTTP 请求、TOML 配置读取、multipart 编码、Base64 解码和图片文件保存,因此没有额外的第三方 Python 依赖。
四、运行前提
需要满足以下条件:
已安装并启用支持个人 Skill 的 Codex。
Python 3.11 或更高版本。脚本使用标准库 tomllib 读取 config.toml。
一个支持以下接口的 OpenAI 兼容图片服务:
POST /images/generations
POST /images/edits
图片服务返回 URL、Base64、Data URI,或直接返回 image/* 响应。
五、CodeX安装 Skill
将完整的 custom-image-api 目录复制到个人 Skill 目录:
Windows:
[code]
%USERPROFILE%\\.codex\\skills\\custom-image-api\\
[i]复制代码[/i]
复制代码
[/code]
macOS/Linux:
[code]
~/.codex/skills/custom-image-api/
[i]复制代码[/i]
复制代码
[/code]
复制完成后,重新启动一个 Codex task,使 Skill 元数据重新加载。不要把 API Key、auth.json、个人 config.toml、生成图片或机器相关的绝对路径复制到 Skill 目录中。
六、配置 Codex
在 Codex 的 config.toml 中配置一个图片 provider 和 custom-image profile。示例:
[code]
[model_providers.team-image]
name = “team-image“
base_url = “https://image-api.example.com/v1“
env_key = “TEAM_IMAGE_API_KEY“
[profiles.custom-image]
model_provider = “team-image“
model = “gpt-image-2“
[i]复制代码[/i]
复制代码
[/code]
然后在本机设置 TEAM_IMAGE_API_KEY 环境变量。密钥不应写入 Skill、提示词或团队共享配置。
如果 provider 使用 Codex 已有的 OpenAI 认证,也可以配置:
[code]
[model_providers.openai-image]
name = “openai-image“
base_url = “https://api.openai.com/v1“
requires_openai_auth = true
[profiles.custom-image]
model_provider = “openai-image“
model = “gpt-image-2“
[i]复制代码[/i]
复制代码
[/code]
此时脚本会从 Codex 的 auth.json 读取已经保存的 OPENAI_API_KEY。脚本还兼容 experimental_bearer_token,但不建议在共享模板中使用,因为它会把凭据直接放进 config.toml。
Endpoint 地址如何解析
脚本会根据 base_url 自动得到最终接口:
base_url
生成接口
编辑接口
https://hosthttps://host/v1/images/generationshttps://host/v1/images/edits
https://host/v1https://host/v1/images/generationshttps://host/v1/images/edits
已包含 /images/generations 或 /images/edits按资源替换按资源替换
因此 provider 的 URL 可以配置在 host 根路径,也可以配置在 /v1 路径。
七、安装验证
先运行离线自测:
[code]
python scripts\\self_test.py
[i]复制代码[/i]
复制代码
[/code]
预期输出包含:
[code]
{“ok“: true}
[i]复制代码[/i]
复制代码
[/code]
再运行配置检查。这个命令不会请求图片,但会读取 profile、provider、模型、认证来源并计算两个 endpoint:
[code]
python scripts\\generate_image.py --check
[i]复制代码[/i]
复制代码
[/code]
示例输出结构如下,认证信息只显示来源,不显示密钥:
[code]
{
“ok“: true,
“profile“: “custom-image“,
“provider“: “team-image“,
“model“: “gpt-image-2“,
“auth_source“: “environment:TEAM_IMAGE_API_KEY“,
“generation_endpoint“: “https://image-api.example.com/v1/images/generations“,
“edit_endpoint“: “https://image-api.example.com/v1/images/edits“
}
[i]复制代码[/i]
复制代码
[/code]
八、生成图片
没有输入图片时,脚本自动选择生成流程,向 /images/generations 发送 JSON:
[code]
python scripts\\generate_image.py `
--prompt “a red circle on a clean white background“ `
--output-dir “C:\\Users\\me\\Pictures\\generated“
[i]复制代码[/i]
复制代码
[/code]
对应的请求主体大致是:
[code]{
“model“: “gpt-image-2“,
“prompt“: “a red circle on a clean white background“,
“n“: 1,
“size“: “auto“
}
[i]复制代码[/i]
复制代码
[/code]
常用参数:
[code]
python scripts\\generate_image.py `
--prompt “editorial product photo of a glass bottle“ `
--output-dir “C:\\Users\\me\\Pictures\\generated“ `
--size “1024x1024“ `
--count 2 `
--quality high `
--response-format b64_json `
--filename-prefix bottle
[i]复制代码[/i]
复制代码
[/code]
支持的主要参数包括:
--size:图片尺寸,默认 auto;
--count:数量,范围为 1 到 10;
--quality、--style:按 provider 能力传递;
--response-format:auto、url 或 b64_json;
--filename-prefix:输出文件名前缀。
九、编辑图片
传入 --image 后,脚本自动选择编辑流程,并使用 multipart/form-data 请求 /images/edits:
[code]
python scripts\\generate_image.py `
--prompt “replace only the background with a quiet beach at sunset; keep the product unchanged“ `
--image “C:\\Users\\me\\Pictures\\product.png“ `
--output-dir “C:\\Users\\me\\Pictures\\edited“ `
--input-fidelity high
[i]复制代码[/i]
复制代码
[/code]
编辑提示词最好明确写出不变量,例如“只修改背景,保留主体的形状、文字、颜色和细节”。这样可以降低模型误改主体的概率。--input-fidelity high 适合身份、产品细节或版式敏感的编辑,但是否真正生效取决于 provider。
多张输入图和 mask
可以重复使用 --image:
[code]
python scripts\\generate_image.py `
--prompt “combine the subject from the first image with the lighting reference from the second image“ `
--image “C:\\images\\subject.png“ `
--image “C:\\images\\lighting-reference.png“ `
--mask “C:\\images\\mask.png“ `
--output-dir “C:\\images\\output“
[i]复制代码[/i]
复制代码
[/code]
单张输入使用 multipart 字段 image;多张输入会重复使用 image[];mask 使用 mask 字段。mask 的黑白区域语义由具体图片服务定义,使用前应参考 provider 文档。
十、响应处理和文件保存
脚本会识别以下响应形式:
{ “data“: [...] }
{ “images“: [...] }
{ “output“: [...] }
条目中的 url、b64_json、base64、b64、image_base64 或 image 字段;
直接返回的 image/png、image/jpeg 等图片响应。
如果返回 URL,脚本会单独下载图片,且不会把 API Key 转发给图片 URL 所在的主机。如果返回 Base64,脚本会解码 Data URI 或普通 Base64 数据。
输出目录不存在时会自动创建。文件名默认类似:
[code]
generated-image-01.png
[i]复制代码[/i]
复制代码
[/code]
如果文件已存在,脚本会追加数字后缀,避免覆盖原文件。程序最后输出 JSON,例如:
[code]
{
“operation“: “generate“,
“files“: [“C:\\images\\output\\generated-image-01.png“]
}
[i]复制代码[/i]
复制代码
[/code]
脚本还会根据图片文件签名识别 PNG、JPEG、GIF、BMP、TIFF、WebP 和 AVIF,无法判断格式时会报错,而不是写出一个扩展名错误的文件。单次 API 响应上限为 100 MB。
十一、在 Codex 中如何使用
安装和配置完成后,可以直接用自然语言提出图片任务,例如:
[code]
使用 custom-image-api 生成一张极简风格的产品海报,主色为黑白,输出到当前任务目录。
[i]复制代码[/i]
复制代码
[/code]
也可以显式指定 Skill:
[code]
$custom-image-api 将这张图片的背景替换成纯白,保持主体、文字和比例不变,并检查生成文件是否可以正常打开。
[i]复制代码[/i]
复制代码
[/code]
Skill 的默认行为包括:判断是生成还是编辑、组织完整提示词、调用脚本、验证输出文件,并在 Codex 对话中显示结果图片。
十二、其他工具理论上也能使用
这个方案的关键逻辑位于 scripts/generate_image.py,并不依赖 Codex 的 Chat 模型推理接口。脚本只需要以下输入:
一个 prompt;
一个符合约定的 Codex 配置或等价 provider 配置;
可选的输入图片、mask 和图片参数;
一个可写的输出目录。
它最终执行的是普通 HTTP 请求,并把图片保存为本地文件。因此,理论上 WorkBuddy、Qorder、其他 Agent 框架、IDE 插件或自动化任务系统,只要具备以下任一能力,就可以复用这个方案:
能加载类似 Skill 或插件;
能执行 Python 脚本;
能直接调用 OpenAI 兼容的 /images/generations 和 /images/edits 接口。
不同工具只需要替换“如何触发”和“如何展示结果”这两部分,图片接口调用、认证、响应解析和文件落盘逻辑可以保持不变。这也是它比只在某个客户端内部增加图片按钮更容易迁移的原因。
需要注意的是,“理论上可复用”不代表所有工具可以直接复制目录即用。目标工具仍需要提供自己的 Skill/插件加载机制、配置位置、凭据管理方式以及本地文件展示能力。
十三、常见问题排查
1. 找不到 tomllib
说明 Python 版本低于 3.11。升级 Python,或在 Codex Desktop 中使用 load_workspace_dependencies 返回的 bundled Python 3.11+ 路径。
2. Codex configuration not found
检查 CODEX_HOME 是否指向正确的 Codex 配置目录,以及该目录下是否存在 config.toml。通常不需要设置 CODEX_HOME,脚本会使用默认的用户目录。
3. Missing Codex configuration value
检查 [profiles.custom-image] 是否存在 model_provider 和 model,并确认对应的 [model_providers.<provider>] 中有 base_url。
4. 认证变量未设置
如果配置了 env_key = “TEAM_IMAGE_API_KEY“,必须在当前进程环境中设置同名变量。不要把变量名误写成 API Key 本身。
5. HTTP 404 或接口路径错误
确认 provider 是否真的兼容 /images/generations 和 /images/edits,并用 --check 查看脚本计算出的 endpoint。若服务商只实现了其中一个接口,另一种操作无法使用。
6. 返回结果无法解析
检查服务是否返回了支持的 JSON 字段或 image/* Content-Type。只有文本 URL、Base64 字段和直接图片响应会被识别;其他自定义响应格式需要修改 image_candidates 或在 provider 侧增加兼容层。
十四、安全和工程注意事项
API Key 只放在环境变量或 Codex 的认证文件中,不放进提示词、Skill 文件和共享仓库。
脚本对 HTTP 错误输出做了密钥脱敏,但仍应避免把完整响应日志上传到公共渠道。
返回的远程图片会被下载,生产环境应限制 provider 返回的 URL 来源,并设置合理的网络超时。
--filename-prefix 会过滤危险字符,输出文件采用独占创建,不会覆盖已有文件。
当前实现是命令行适配器,不包含任务队列、重试、并发控制、图片内容审核或持久化存储。这些能力应由上层系统补充。
skill 下载链接
下载:
https://wwapk.lanzouq.com/ivYWS42inzeh
密码:d6dx
回复
举报
返回列表
发布新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2001-2026
52线报网
版权所有
All Rights Reserved.
|
网站地图
闽ICP备19006036号-4
关灯
在本版发帖
扫一扫添加微信客服
返回顶部
快速回复
返回顶部
返回列表