展开本页目录
开始前准备什么
- Python 3.10 或以上;建议使用独立虚拟环境保存依赖版本。
- 准备自己的 apizt 令牌,在模型广场确认可用型号、Images 协议和价格。
- 编辑任务另备有权使用的原图;文本生图不能代替真实商品或人物参考图。
- 安装 SDK
- 检查输入
- 一次小样
- 保存图片
- 核对日志
默认 dry-run;一次请求、关闭重试、Base64 保存与独立元数据。
虚构马克杯概念图;编辑任务请另写保留条件。
固定 SDK 版本,解释参数、超时、结果与费用边界。
先固定环境,再看脚本准备发什么
2026-10-07 核对的官方 Python SDK 最新版本为 3.26.0,要求 Python 3.10+。下载脚本默认不发 API 请求,也不需要 Key;先检查提示词文件、输入图片和输出路径。
这份脚本按官方 SDK 接口编写并通过本地 dry-run,尚未用它进行 apizt 付费调用。gpt-image-2 是待你在模型广场核对的示例 ID,安装成功不代表当前令牌有权调用。
bash
python3 -m venv .venv
. .venv/bin/activate
python -m pip install openai==3.26.0
python -m pip show openai
python image-task.py --prompt-file prompt.txt文字生图用 JSON:保持请求小,先验收一张
client.images.generate 会向 /v1/images/generations 发送 JSON。这个起步任务只请求一张 PNG,先用 1024x1024 验证链路;具体型号是否接受 size 与 output_format,需按 apizt 当前渠道核对。
使用你自己的 tokenba_API_KEY 环境变量。示例特意设置 max_retries=0,避免网络异常时 SDK 自动发起额外尝试;timeout=180.0 是客户端等待设置,不代表后端停止生成。
python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["tokenba_API_KEY"],
base_url="https://api.apizt.com/v1",
max_retries=0,
timeout=180.0,
)
result = client.images.generate(
model="gpt-image-2",
prompt="奶油白马克杯的虚构商品概念图,不添加品牌或文字",
size="1024x1024",
output_format="png",
n=1,
)原图编辑用 multipart:打开文件,而不是传路径文字
images.edit 的 image 参数接收二进制文件。SDK 负责 multipart 编码,不要自行把 Content-Type 固定为 application/json,也不要把 original.png 路径当作图片内容。
明确“只改变背景,保持杯子轮廓和标签”。这个最小示例只有一张参考图,没有 Mask、多参考图或透明输出配置。需要这些功能时,先确认实际型号和渠道能正确接收;不要从通用 SDK 参数推断透传成功。
python
with open("original.png", "rb") as image:
result = client.images.edit(
model="gpt-image-2",
image=image,
prompt="只把背景换为浅米色;保留主体轮廓、颜色、标签和数量",
size="1024x1024",
output_format="png",
n=1,
)保存真实返回文件,并核对实际尺寸
GPT Image 官方 Images 接口返回 Base64 图片。完整下载脚本先检查 data[0].b64_json、解码大小与 PNG 签名,再使用新文件名保存;旁边的 JSON 记录实际宽高、SHA256、请求 ID 与 usage。
若渠道返回 URL 而没有 b64_json,脚本会停止,不自动下载。你应先核对返回协议、地址和有效期;手工保存时不要向图片地址转发 apizt Authorization。返回空 data、错误格式或保存失败,都不能通过再次生图来解决。
请求填写 1024x1024 并不能证明实际文件是该尺寸。既有 apizt 图片编辑记录就出现过请求尺寸与返回文件不同,因此以文件实际宽高验收。
python
import base64
encoded = result.data[0].b64_json if result.data else None
if not encoded:
raise ValueError("未返回 b64_json,先核对返回协议")
image_bytes = base64.b64decode(encoded, validate=True)
with open("new-result.png", "xb") as file:
file.write(image_bytes)准备完成后,再主动执行一次生成或编辑
下载完整脚本和提示词到同一目录。先运行不带 --run 的命令;确认模型、输入文件与输出文件名后,再加 --run。以下两个命令是不同的付费任务,只执行自己需要的一项。
错误处理只输出类型、状态码与请求 ID,不输出 Key、Base64 或完整响应。超时和连接断开时先查看控制台请求日志,确认有无结果和真实扣费,再决定是否重新提交。
bash
python image-task.py --prompt-file prompt.txt --run
# 编辑时使用自己的原图和编辑提示词
python image-task.py --mode edit --image original.png --prompt-file edit-prompt.txt --output edited.png --run一张小样通过后,再考虑批量任务
提示词工具的 CSV 是输入清单,不能直接作为 Images API 请求体。图片原图、型号参数、请求状态和费用仍需单独关联;本下载包不会自动执行 CSV,也没有并发或自动重试。
| 检查项 | 验收方式 |
|---|---|
| 素材与内容 | 商品结构、人物特征、文字与保留区域逐项对照 |
| 真实文件 | 格式、实际宽高、文件是否能正常打开 |
| 请求追踪 | 记录请求 ID、提示词版本、输入文件和实际参数 |
| 真实费用 | 控制台核对扣费;usage 本身不是货币金额 |
- 检查项
- 素材与内容
- 验收方式
- 商品结构、人物特征、文字与保留区域逐项对照
- 检查项
- 真实文件
- 验收方式
- 格式、实际宽高、文件是否能正常打开
- 检查项
- 请求追踪
- 验收方式
- 记录请求 ID、提示词版本、输入文件和实际参数
- 检查项
- 真实费用
- 验收方式
- 控制台核对扣费;usage 本身不是货币金额
怎样确认已经完成
- 把模型广场中自己令牌实际可用的模型 ID、Images 协议、价格和尺寸保存到任务记录。
- dry-run 只核对本地输入;只有主动添加 --run 才发送一次请求。
- 收到 HTTP 成功后仍检查 data、b64_json、实际图片宽高与内容;不能只检查请求状态。
- 记录请求 ID 和 usage;实际扣费去控制台请求日志核对,不把 usage 直接称为账单。
- 连接中断或超时后先查日志;本地没收到图片也可能已完成生成,不能直接重复发送。
常见问题
为什么 base_url 以 /v1 结尾?
SDK 会追加 images/generations 或 images/edits。这里提供的是 API 根地址,不要在 base_url 再写完整 endpoint;也不要把主站 www.apizt.com 当 API 域名。
需要设置 response_format=b64_json 吗?
本例按 GPT Image 的 Base64 返回方式保存,没有额外设置该字段。不同图片模型和渠道的返回协议不同,字段是否接受应核对对应文档;返回 URL 时不能直接用 Base64 解码。
timeout 后能马上重新执行吗?
先核对请求日志和费用。客户端超时只说明没有在等待时间内拿到完整结果,后端可能已生成或扣费。脚本不自动重发。
Python 示例已经在 apizt 实测了吗?
本批只完成官方接口核对和本地 dry-run,没有用本脚本发起付费请求。既有图片编辑结果是另一份历史证据,不能用来证明本脚本所有参数可用。