网页版 GPT
使用 gpt-image-2 生成或编辑图片。模型别名、尺寸与超分能力由 Key 所在分组决定。
1 快速开始
使用 75 或 77 分组的 API Key。示例生成一张 1024x1024 图片,保存并打开;按分组价格计费。 选下面一种方式运行即可,切换示例并重新发送会产生新的调用。
1.1 Python 3:完整流程
适用于 Windows、macOS 和 Linux。只使用 Python 标准库,无需安装 SDK。
将下面的代码保存为 gpt-image-quickstart.py,在终端运行 python3 gpt-image-quickstart.py(Windows 可用 py -3 gpt-image-quickstart.py),按提示输入 API Key。程序会打印文件路径,并尝试用浏览器打开本地结果。
import base64
import getpass
import json
from pathlib import Path
from urllib.error import HTTPError
from urllib.request import Request, urlopen
import uuid
import webbrowser
URL = 'https://yyds.seqnode.com/v1/images/generations'
PAYLOAD = {
"model": "gpt-image-2",
"prompt": "一只戴蓝色围巾的白色小狐狸,浅灰背景,柔和光线,无文字。",
"size": "1024x1024",
"n": 1,
"response_format": "b64_json"
}
def main():
api_key = getpass.getpass("输入 API Key:").strip()
if not api_key:
raise ValueError("请输入有效的 API Key。")
headers = {"Authorization": "Bearer " + api_key}
headers["Content-Type"] = "application/json; charset=utf-8"
headers["User-Agent"] = "YM2API-Quickstart/1.0"
request = Request(URL, data=json.dumps(PAYLOAD, ensure_ascii=False).encode("utf-8"), headers=headers)
with urlopen(request, timeout=300) as response:
result = json.load(response)
encoded = next((item["b64_json"] for item in result.get("data", []) if item.get("b64_json")), None)
if not encoded:
raise ValueError("响应没有最终图片。请检查响应和使用记录,再决定是否重试。")
data = base64.b64decode(encoded, validate=True)
if data.startswith(b"\x89PNG\r\n\x1a\n"):
extension = ".png"
elif data.startswith(b"\xff\xd8\xff"):
extension = ".jpg"
elif len(data) >= 12 and data[:4] == b"RIFF" and data[8:12] == b"WEBP":
extension = ".webp"
else:
raise ValueError("返回数据不是可识别的 PNG、JPEG 或 WebP。")
path = Path.cwd() / ("gpt-image-" + uuid.uuid4().hex + extension)
with path.open("xb") as output:
output.write(data)
print(f"图片已保存:{path}")
if not webbrowser.open(path.as_uri()):
print("请到以上路径手动打开图片。")
if __name__ == "__main__":
try:
main()
except HTTPError as error:
print(f"HTTP {error.code}:{error.read(2000).decode('utf-8', errors='replace')}")
raise SystemExit(1)
except Exception as error:
print(f"运行失败:{error}")
raise SystemExit(1)下载 Python 示例。如未自动打开结果,按输出路径手动打开。
1.2 PowerShell 7:完整流程
适合已有 PowerShell 7 的 Windows 用户。复制整段代码到终端,只按提示输入 API Key。
$apiKey = Read-Host "输入 API Key" -MaskInput
if ([string]::IsNullOrWhiteSpace($apiKey)) { throw "请输入有效的 API Key。" }
$payload = @{
model = "gpt-image-2"
prompt = "一只戴蓝色围巾的白色小狐狸,浅灰背景,柔和光线,无文字。"
size = "1024x1024"
n = 1
response_format = "b64_json"
}
$request = @{
Uri = "https://yyds.seqnode.com/v1/images/generations"
Method = "Post"
Headers = @{ Authorization = "Bearer $apiKey"; "User-Agent" = "YM2API-Quickstart/1.0" }
ContentType = "application/json; charset=utf-8"
Body = [Text.Encoding]::UTF8.GetBytes(($payload | ConvertTo-Json -Depth 12))
TimeoutSec = 300
ErrorAction = "Stop"
}
$result = Invoke-RestMethod @request
$image = $result.data | Where-Object { $_.b64_json } | Select-Object -First 1
if (-not $image) { throw "响应中没有 b64_json 图片。请保留响应和使用记录排查。" }
$bytes = [Convert]::FromBase64String($image.b64_json)
# 根据文件头识别格式,避免把 JPEG 保存为 PNG。
if ($bytes.Length -lt 12) { throw "返回的图片数据过短。请保留响应排查。" }
$hex = [BitConverter]::ToString($bytes, 0, 12).Replace("-", "")
$extension = if ($hex.StartsWith("89504E470D0A1A0A")) { ".png" }
elseif ($hex.StartsWith("FFD8FF")) { ".jpg" }
elseif ($bytes.Length -ge 12 -and [Text.Encoding]::ASCII.GetString($bytes, 0, 4) -eq "RIFF" -and
[Text.Encoding]::ASCII.GetString($bytes, 8, 4) -eq "WEBP") { ".webp" }
else { throw "返回数据不是可识别的 PNG、JPEG 或 WebP。请保留响应排查。" }
$file = Join-Path $PWD ("gpt-image-" + [guid]::NewGuid().ToString("N") + $extension)
$stream = [IO.File]::Open($file, [IO.FileMode]::CreateNew)
try { $stream.Write($bytes, 0, $bytes.Length) } finally { $stream.Dispose() }
Write-Host "图片已保存:$file"
Invoke-Item -LiteralPath $file -ErrorAction Continue1.3 cURL / JSON:检查原始请求
JSON 是请求体,需要由 cURL、Postman 或 Apifox 发送。先将下面内容保存为 UTF-8 的 gpt-image-request.json,也可下载请求 JSON。
{
"model": "gpt-image-2",
"prompt": "一只戴蓝色围巾的白色小狐狸,浅灰背景,柔和光线,无文字。",
"size": "1024x1024",
"n": 1,
"response_format": "b64_json"
}在该文件所在目录,用 Bash(Linux、macOS 或 Git Bash)运行下面的命令,只输入 API Key。响应保存到 response.json,已有同名文件会被覆盖;终端显示 HTTP 状态码。
read -rsp 'API Key: ' API_KEY; printf '\n'
curl --silent --show-error --fail-with-body --max-time 300 "https://yyds.seqnode.com/v1/images/generations" \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
--data-binary '@gpt-image-request.json' \
--output response.json --write-out 'HTTP %{http_code}\n'
unset API_KEYPostman / Apifox:新建 POST 请求,URL 填 https://yyds.seqnode.com/v1/images/generations,Body 选择 raw → JSON 并粘贴上面的 JSON;请求头设置 Content-Type: application/json 和 Authorization: Bearer YOUR_API_KEY,将 YOUR_API_KEY 替换为自己的 Key。
HTTP 200 后,还需确认响应包含图片数据。cURL 保存的是 JSON;Python 和 PowerShell 示例会自动解码并保存图片。
2 接入信息与模型选择
请求地址: POST https://yyds.seqnode.com/v1/images/generations。
鉴权: Authorization: Bearer YOUR_API_KEY。JSON 请求使用 Content-Type: application/json;上传表单时让客户端自动设置请求头。
本页快速开始已经包含完整地址。客户端自动拼接路径时,核对最终 URL,避免重复添加 /v1 或 /v1beta。分组由 API Key 决定,不在请求体中填写 group_id。
文生图使用 /v1/images/generations;图生图使用 /v1/images/edits。先调通快速开始,再按场景选择请求方式。
| 分组 | 可用模型 | 能力说明 |
|---|---|---|
| #75:支持超分 | gpt-image-2、gpt-image-2.5、gpt-image-2.5-flare、gpt-image-2.5-sunburst |
支持常规出图与超分;四个模型名均映射到 gpt-image-2 |
| #77:无超分 | gpt-image-2、gpt-image-2.5、gpt-image-2.5-flare、gpt-image-2.5-sunburst |
按生成结果返回;四个模型名均映射到 gpt-image-2 |
| #127:Image 2 / flare / sunburst | gpt-image-2、gpt-image-2.5-flare、gpt-image-2.5-sunburst |
三个模型保留各自的上游模型名;不提供 gpt-image-2.5 |
注意:#75、#77 的 flare / sunburst 是别名,与 #127 的同名模型不同。
2.1 选择模型与 Key
以下命令适用于 Bash / WSL。任选所需分组,每次只执行需要的请求。
| 分组 | 示例模型 MODEL |
示例尺寸 SIZE |
QUALITY |
|---|---|---|---|
| #75 | gpt-image-2 |
2048x1152 |
留空 |
| #77 | gpt-image-2.5-sunburst |
1536x864 |
留空 |
| #127 | gpt-image-2 |
3840x2160 |
medium |
同组其他模型使用相同请求结构,只需替换 MODEL。#127 的 flare / sunburst 可以先省略 quality;该字段不保证切换它们的质量档。
3 按场景调用
3.1 文生图:JSON
接口: POST /v1/images/generations。只输入提示词,不上传参考图;请求体为 JSON。
| 参数 | 填写要求 | 说明 |
|---|---|---|
model |
填写 | 使用当前 Key 可用的模型名 |
prompt |
填写 | 画面主体、场景和风格 |
size |
可选 | 需要固定目标像素时填精确宽高,如 2048x1152 |
n |
示例填写 1 |
输出张数,不是参考图数量 |
response_format |
示例填写 b64_json |
返回图片 Base64;URL 支持情况按返回结果确认 |
下面以 #75 为例。换组时,同时替换 Key、model 和 size;#127 的 gpt-image-2 再添加 "quality":"medium"。
export YM2API_KEY="YOUR_GROUP_75_API_KEY"
curl --max-time 300 "https://yyds.seqnode.com/v1/images/generations" \
-H "Authorization: Bearer $YM2API_KEY" \
-H "Content-Type: application/json" \
--data-binary '{
"model": "gpt-image-2",
"prompt": "白色陶瓷杯放在木桌上,柔和自然光,无文字",
"size": "2048x1152",
"n": 1,
"response_format": "b64_json"
}' \
-o response.json响应: data[].b64_json,见读取响应与保存图片。
3.2 图生图:上传文件
接口: POST /v1/images/edits。使用 multipart/form-data,其余生成参数沿用文生图。
| 参数 | 填写要求 | 说明 |
|---|---|---|
image |
至少一张参考图 | 每张文件使用一个同名字段 |
prompt |
填写编辑要求 | 例如保留第一张主体,采用第二张配色 |
model、size、n |
按场景填写 | 与文生图含义相同 |
下面以 #127 的 gpt-image-2 为例。单图时删除第二个 image 字段;其他组按上表替换参数。
export YM2API_KEY="YOUR_GROUP_127_API_KEY"
curl --max-time 300 "https://yyds.seqnode.com/v1/images/edits" \
-H "Authorization: Bearer $YM2API_KEY" \
-F "model=gpt-image-2" \
-F "prompt=保留图1的主体,采用图2的配色,白色背景,无文字" \
-F "image=@reference-1.png" \
-F "image=@reference-2.png" \
-F "size=3840x2160" \
-F "quality=medium" \
-F "n=1" \
-F "response_format=b64_json" \
-o response.json让 cURL 自动生成 multipart 请求头,不要手动设置 Content-Type。
3.3 图生图:图片 URL / Base64
接口: POST /v1/images/edits。使用 JSON,参考图写入 images[].image_url;支持图片 URL 或完整 Data URL。这与香蕉接口的纯 Base64 字段不同。
以 #77 为例,把下面内容保存为 edit.json,替换真实图片地址或 Base64。
{
"model": "gpt-image-2.5-sunburst",
"prompt": "保留图1的主体,采用图2的配色,白色背景,无文字",
"images": [
{"image_url": "https://YOUR_IMAGE_HOST/reference-1.png"},
{"image_url": "data:image/png;base64,YOUR_REFERENCE_2_BASE64"}
],
"size": "1536x864",
"n": 1,
"response_format": "b64_json"
}export YM2API_KEY="YOUR_GROUP_77_API_KEY"
curl --max-time 300 "https://yyds.seqnode.com/v1/images/edits" \
-H "Authorization: Bearer $YM2API_KEY" \
-H "Content-Type: application/json" \
--data-binary @edit.json \
-o response.json响应: 两种图生图格式都按图片响应读取。
4 读取响应、保存与查看图片
{
"created": 1789380000,
"data": [{"b64_json": "BASE64_IMAGE_BYTES"}]
}解码 data[].b64_json 后保存图片。若使用 response_format=url,实际支持情况及链接有效期取决于上游,应及时下载。
当前 Key 的完整模型列表可通过 GET https://yyds.seqnode.com/v1/models 查询,使用同一鉴权头。
快速开始的 Python / PowerShell 会自动保存并打开图片。使用 cURL 时,先读取响应 JSON,再解码 Base64;把 JSON 改名为 .png 不会得到图片。下载后检查文件格式、实际宽高和编辑结果。
5 参考图、比例与尺寸
5.1 参考图数量
网页版 GPT 的参考图最多 15 张。 文生图无需参考图;图生图可上传 1–15 张。
- 文件上传:重复使用
image字段,每张图片建议小于 20 MiB。 - JSON:使用
images数组,支持图片 URL 或 Base64 Data URL。 n表示输出图片数量,与参考图数量无关;本文示例使用n=1。
5.2 只选比例,不指定分辨率
这里的“网页版 GPT”指本站的网页版 Image 2.0 / 2.5。只指定比例、不指定像素尺寸时,默认按 1K 档路由,返回生成的原始图片;没有统一固定的输出宽高。
例如,只要求“16:9”不会自动变成 2K 或 4K,也不保证固定为 1536x864。1K 是路由档位,实际像素以下载图片的属性为准。
下面是常见比例的常规出图尺寸,可作为填写 size 的起点,不是省略尺寸时的固定返回值:
| 比例 | 常规尺寸参考 |
|---|---|
| 1:1 | 1024x1024、1280x1280 |
| 16:9 / 9:16 | 1536x864 / 864x1536,或 1600x900 / 900x1600 |
| 4:3 / 3:4 | 1536x1152 / 1152x1536 |
| 3:2 / 2:3 | 1536x1024 / 1024x1536 |
需要指定像素时,直接填写精确 size;仅在提示词中写“比例 16:9”或“4K”属于画面要求,不等于传入了尺寸参数。
5.3 指定分辨率后,图片如何返回
优先使用精确宽高,例如 "size": "2048x1152"。它同时指定了 16:9 和目标像素,不需要再填写 aspect_ratio。
图示说明当前支持超分线路的尺寸处理规则。常规尺寸直接生成;其他尺寸进入超分处理。进入超分处理后:
- 尺寸已匹配: 原样返回。
- 比例一致、尺寸不同: 等比调整到目标尺寸,允许整数像素的微小比例误差。
- 比例不一致: 保留返回图片的比例和尺寸,不强行拉伸或裁剪;最长边超过 4096 时,等比缩小至 4096。
- 请求超过 4096: 先按比例把目标最长边限制为 4096。例如
7680x4320对应4096x2304。
| 请求示例 | 超分处理后的结果 |
|---|---|
2048x1152,返回 16:9 图片 |
调整为 2048x1152 |
4096x2304,返回 16:9 图片 |
调整为 4096x2304 |
7680x4320,返回 16:9 图片 |
调整为 4096x2304 |
2048x1152,返回 1536x1024 |
保留 1536x1024,不强制变为 16:9 |
如果请求进入超分处理,直接传 "size": "1K"、"2K" 或 "4K" 时,会使用以下目标尺寸。这些档位名并不等于固定最长边;它们也不是上一节“只指定比例”的默认输出尺寸:
| 方向 | size=1K |
size=2K |
size=4K |
|---|---|---|---|
| 方形 | 1024x1024 |
2048x2048 |
2880x2880 |
| 横向 | 1536x1024 |
2048x1360 |
3520x2352 |
| 竖向 | 1024x1536 |
1360x2048 |
2352x3520 |
方向来自 aspect_ratio;不传时按方形处理。这里仅区分方向,例如 16:9 会被归为横向,档位本身不会保留精确的 16:9。
需要 16:9 的 4K 图片时,直接填写 4096x2304,不要只写 4K。下载后检查图片属性中的宽度和高度;请求尺寸与实际文件尺寸可能不同。
5.4 常用比例的 1K / 2K / 4K 尺寸
下表是保持指定比例的精确 size 填写参考,按最长边约 1024 / 2048 / 4096 像素换算并四舍五入。它与上面的 size=1K/2K/4K 档位映射不同,也不代表每种比例都已逐项实测。复制单元格中的宽高作为 size 即可。
| 比例 | 1K 参考尺寸 | 2K 参考尺寸 | 4K 参考尺寸 |
|---|---|---|---|
| 1:1 | 1024x1024 |
2048x2048 |
4096x4096 |
| 16:9 | 1024x576 |
2048x1152 |
4096x2304 |
| 9:16 | 576x1024 |
1152x2048 |
2304x4096 |
| 4:3 | 1024x768 |
2048x1536 |
4096x3072 |
| 3:4 | 768x1024 |
1536x2048 |
3072x4096 |
| 3:2 | 1024x683 |
2048x1365 |
4096x2731 |
| 2:3 | 683x1024 |
1365x2048 |
2731x4096 |
| 3:1 | 1024x341 |
2048x683 |
4096x1365 |
| 1:3 | 341x1024 |
683x2048 |
1365x4096 |
| 21:9 | 1024x439 |
2048x878 |
4096x1755 |
| 9:21 | 439x1024 |
878x2048 |
1755x4096 |
| 5:4 | 1024x819 |
2048x1638 |
4096x3277 |
| 4:5 | 819x1024 |
1638x2048 |
3277x4096 |
常规直出尺寸还包括 1536x864(16:9)、864x1536(9:16)、1536x1152(4:3)、1152x1536(3:4)、1536x1024(3:2)和 1024x1536(2:3)。只需常规图片时,可以直接使用这些尺寸。
6 常见错误与重试
| 现象 | 检查与下一步 |
|---|---|
| 401 / 403 | 检查 Bearer Key、绑定分组和访问权限 |
| 400 / 参数错误 | 核对模型名、参考图字段、JSON 与尺寸格式;先恢复快速开始参数 |
| 429 / 服务繁忙 | 按响应提示等待,降低并发 |
| 超时 / 5xx | 保存请求 ID 和错误,先核对使用记录,再决定是否重新提交 |
| 200 但没有图片 | 检查 data、错误信息和返回内容,不能仅凭 HTTP 状态判断成功 |
| 图片尺寸不同 | 对照尺寸规则,检查实际文件宽高;比例指令不等于像素参数 |
排查时提供模型、请求时间、HTTP 状态和请求 ID;不要把 API Key 放入截图或公开日志。
#127 最新边界:gpt-image-2 最多 10 张,11 张返回 400。详见 #127 专项实测。