# 网页版 GPT {#section-1 .rd-guide-title}

使用 `gpt-image-2` 生成或编辑图片。模型别名、尺寸与超分能力由 Key 所在分组决定。

## 1 快速开始 {#quickstart}

使用 **75 或 77 分组**的 API Key。示例生成一张 **1024x1024** 图片，保存并打开；按分组价格计费。 选下面一种方式运行即可，切换示例并重新发送会产生新的调用。

### 1.1 Python 3：完整流程 {#quick-python}

适用于 Windows、macOS 和 Linux。只使用 Python 标准库，无需安装 SDK。

将下面的代码保存为 `gpt-image-quickstart.py`，在终端运行 `python3 gpt-image-quickstart.py`（Windows 可用 `py -3 gpt-image-quickstart.py`），按提示输入 API Key。程序会打印文件路径，并尝试用浏览器打开本地结果。

``` python
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 示例](gpt-image-quickstart.py)。如未自动打开结果，按输出路径手动打开。

### 1.2 PowerShell 7：完整流程 {#quick-powershell}

适合已有 PowerShell 7 的 Windows 用户。复制整段代码到终端，只按提示输入 API Key。

``` powershell
$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 示例](gpt-image-quickstart.ps1)。

### 1.3 cURL / JSON：检查原始请求 {#quick-http}

JSON 是请求体，需要由 cURL、Postman 或 Apifox 发送。先将下面内容保存为 UTF-8 的 `gpt-image-request.json`，也可[下载请求 JSON](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 状态码。

``` bash
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 示例会自动解码并保存图片。

[]{#1-分组与模型}

[]{#group75}[]{#group77}[]{#group127}

## 2 接入信息与模型选择 {#section-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-参考图数量}

### 2.1 选择模型与 Key {#section-9}

以下命令适用于 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`；该字段不保证切换它们的质量档。

[]{#文生图json}

## 3 按场景调用 {#section-8}

[]{#先选择分组-key模型和尺寸}

### 3.1 文生图：JSON {#section-10}

**接口：** `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"`。

``` bash
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`，见[读取响应与保存图片](#section-13)。

### 3.2 图生图：上传文件 {#section-11}

**接口：** `POST /v1/images/edits`。使用 `multipart/form-data`，其余生成参数沿用文生图。

  参数                   填写要求         说明
  ---------------------- ---------------- ------------------------------------
  `image`                至少一张参考图   每张文件使用一个同名字段
  `prompt`               填写编辑要求     例如保留第一张主体，采用第二张配色
  `model`、`size`、`n`   按场景填写       与文生图含义相同

下面以 #127 的 `gpt-image-2` 为例。单图时删除第二个 `image` 字段；其他组按上表替换参数。

``` bash
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`。

[]{#图生图图片-url--base64}

### 3.3 图生图：图片 URL / Base64 {#section-12}

**接口：** `POST /v1/images/edits`。使用 JSON，参考图写入 `images[].image_url`；支持图片 URL 或完整 Data URL。这与香蕉接口的纯 Base64 字段不同。

以 #77 为例，把下面内容保存为 `edit.json`，替换真实图片地址或 Base64。

``` json
{
  "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"
}
```

``` bash
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
```

[]{#返回结果}

**响应：** 两种图生图格式都按[图片响应](#section-13)读取。

## 4 读取响应、保存与查看图片 {#section-13}

``` json
{
  "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 参考图、比例与尺寸 {#section-4}

### 5.1 参考图数量 {#section-3}

**网页版 GPT 的参考图最多 15 张。** 文生图无需参考图；图生图可上传 1--15 张。

- 文件上传：重复使用 `image` 字段，每张图片建议小于 **20 MiB**。
- JSON：使用 `images` 数组，支持图片 URL 或 Base64 Data URL。
- `n` 表示输出图片数量，与参考图数量无关；本文示例使用 `n=1`。

[]{#3-尺寸比例与超分规则}[]{#当前哪些请求会超分}[]{#upscale-sizes}[]{#常规尺寸参考集合}[]{#比例集合与非常规尺寸示例}[]{#ratios}

### 5.2 只选比例，不指定分辨率 {#section-5}

**这里的"网页版 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 指定分辨率后，图片如何返回 {#section-6}

**优先使用精确宽高**，例如 `"size": "2048x1152"`。它同时指定了 16:9 和目标像素，不需要再填写 `aspect_ratio`。

<figure style="margin:24px 0">
<img src="gpt-image-resolution-routing.svg" style="display:block;width:100%;max-width:500px;height:auto;margin:24px auto" width="500" height="694" alt="尺寸路由：常规尺寸直接生成；其他尺寸进入超分处理。比例一致时调整到目标尺寸，比例不一致时保留原比例；超分输出最长边不超过 4096。" />
<figcaption aria-hidden="true">尺寸路由：常规尺寸直接生成；其他尺寸进入超分处理。比例一致时调整到目标尺寸，比例不一致时保留原比例；超分输出最长边不超过 4096。</figcaption>
</figure>

[打开路由图查看大图](gpt-image-resolution-routing.svg)

图示说明当前支持超分线路的尺寸处理规则。常规尺寸直接生成；其他尺寸进入超分处理。进入超分处理后：

- **尺寸已匹配：** 原样返回。
- **比例一致、尺寸不同：** 等比调整到目标尺寸，允许整数像素的微小比例误差。
- **比例不一致：** 保留返回图片的比例和尺寸，不强行拉伸或裁剪；最长边超过 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 尺寸 {#section-7}

下表是**保持指定比例的精确 `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）。只需常规图片时，可以直接使用这些尺寸。

[]{#4-请求示例}

[]{#examples}

## 6 常见错误与重试 {#gpt-troubleshooting}

  -------------------------------------------------------------------------------------------------
  现象                                检查与下一步
  ----------------------------------- -------------------------------------------------------------
  401 / 403                           检查 Bearer Key、绑定分组和访问权限

  400 / 参数错误                      核对模型名、参考图字段、JSON 与尺寸格式；先恢复快速开始参数

  429 / 服务繁忙                      按响应提示等待，降低并发

  超时 / 5xx                          保存请求 ID 和错误，先核对使用记录，再决定是否重新提交

  200 但没有图片                      检查 `data`、错误信息和返回内容，不能仅凭 HTTP 状态判断成功

  图片尺寸不同                        对照尺寸规则，检查实际文件宽高；比例指令不等于像素参数
  -------------------------------------------------------------------------------------------------

排查时提供模型、请求时间、HTTP 状态和请求 ID；不要把 API Key 放入截图或公开日志。

#127 最新边界：`gpt-image-2` 最多 10 张，11 张返回 400。详见 [#127 专项实测](adobe-group127-api.html)。
