网页版 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 Continue

下载 PowerShell 示例。

1.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_KEY

Postman / 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: 先按比例把目标最长边限制为 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 放入截图或公开日志。