Youyun API Youyun API Документы

Руководство по использованию GPT-Image-2

GPT-Image-2 — это сервис AI-генерации изображений, предоставляемый YYCode. Он использует независимый интерфейс изображений gpt.yycode.net для text-to-image, image-to-image и асинхронного запроса задач.


Подготовка

1. Создайте API Key

Перейдите на страницу управления токенами YYCode, создайте или скопируйте API Key.

После создания сохраните его безопасно: все последующие запросы должны передавать этот Key в Header.

2. Адрес интерфейса

GPT-Image-2 использует отдельный Base URL:

https://gpt.yycode.net

Все запросы изображений также передают адрес посредника YYCode:

x-demo-base-url: https://yycode.net

Подключение AI Agent в один шаг

При использовании AI-инструментов для кодинга с поддержкой Skills, таких как Claude Code и Codex, отправьте AI следующий текст:

Подключи к этому проекту сервис генерации изображений YYCode GPT-Image-2.

Base URL:
https://gpt.yycode.net

Text to Image:
POST /api/images/generate

Image to Image:
POST /api/images/edit

Запрос задачи:
GET /api/jobs/{jobId}

Request Header:
x-demo-base-url: https://yycode.net
x-demo-api-key: YOUR_API_KEY
x-demo-async: 1

Text to Image использует JSON-тело запроса; Image to Image использует multipart/form-data и загружает исходное изображение через поле image.
После отправки задачи и получения jobId запрашивай /api/jobs/{jobId} каждые 6 секунд.
После возврата status=succeeded считай images[].b64 и images[].mimeType, затем сохрани base64 как файл изображения.

AI Agent выполнит интеграцию клиентского кода согласно указанным интерфейсам, Header, способу polling и сохранению изображений.


Подробное описание API

Text to Image

Отправка задачи генерации:

curl 'https://gpt.yycode.net/api/images/generate' \
  -H 'Content-Type: application/json' \
  -H 'x-demo-base-url: https://yycode.net' \
  -H 'x-demo-api-key: YOUR_API_KEY' \
  -H 'x-demo-async: 1' \
  -d '{
    "model": "gpt-image-2",
    "prompt": "Милый котенок дремлет на солнце",
    "n": 1,
    "size": "1024x1024"
  }'

Успешный ответ:

{
  "ok": true,
  "pending": true,
  "jobId": "job_1782732290788_3",
  "meta": {
    "requestId": "req_1782732290788_1"
  }
}

Запрос результата задачи

Замените job_1782732290788_3 на jobId, который вернулся при отправке задачи:

curl 'https://gpt.yycode.net/api/jobs/job_1782732290788_3'

Задача выполняется:

{
  "ok": true,
  "pending": true,
  "jobId": "job_1782732290788_3",
  "status": "running",
  "meta": {
    "requestId": "req_1782732290788_1"
  }
}

Задача завершена:

{
  "ok": true,
  "images": [
    {
      "b64": "iVBORw0KGgo...",
      "filename": null,
      "mimeType": "image/png"
    }
  ],
  "usage": null,
  "raw": {},
  "meta": {
    "requestId": "req_1782732290788_1"
  },
  "jobId": "job_1782732290788_3",
  "status": "succeeded"
}

Итоговые данные изображения находятся в images[0].b64, формат изображения — в images[0].mimeType. На фронтенде для отображения используйте data:${mimeType};base64,${b64}, а для скачивания декодируйте base64 в файл изображения.


Image to Image

Image to Image использует multipart/form-data для загрузки исходного изображения и отправляет файл через поле image.

Загрузить одно исходное изображение:

curl 'https://gpt.yycode.net/api/images/edit' \
  -H 'x-demo-base-url: https://yycode.net' \
  -H 'x-demo-api-key: YOUR_API_KEY' \
  -H 'x-demo-async: 1' \
  -F 'model=gpt-image-2' \
  -F 'prompt=Преобразуй это изображение в акварельный стиль' \
  -F 'n=1' \
  -F 'size=1024x1024' \
  -F '[email protected]'

Загрузить несколько исходных изображений:

curl 'https://gpt.yycode.net/api/images/edit' \
  -H 'x-demo-base-url: https://yycode.net' \
  -H 'x-demo-api-key: YOUR_API_KEY' \
  -H 'x-demo-async: 1' \
  -F 'model=gpt-image-2' \
  -F 'prompt=Создай единый постер в стиле киберпанк по этим референсам' \
  -F 'n=1' \
  -F 'size=1536x1024' \
  -F '[email protected]' \
  -F '[email protected]'

Важные замечания по Image to Image:

  • image — поле файла изображения; при загрузке нескольких изображений передавайте image повторно
  • mask — поле файла маски изображения для локального редактирования
  • Не задавайте Content-Type в заголовке вручную: curl или SDK автоматически сгенерирует multipart boundary
  • Задача Image to Image также возвращает jobId, а результат запрашивается через GET /api/jobs/{jobId}

Описание параметров

Параметр Описание
model Всегда указывать gpt-image-2
prompt Prompt для генерации или редактирования изображения
n Количество генерируемых изображений, диапазон от 1 до 10
size Размер выходного изображения в формате <width>x<height>
output_format Формат вывода: png, jpeg, webp
quality Качество изображения: auto, low, medium, high, standard, hd
background Режим фона: auto, opaque
image Поле исходного файла для Image to Image, поддерживает повторную передачу
mask Поле файла маски для Image to Image, используется для локального редактирования

Поддержка size

size использует реальные размеры в пикселях; ширина и высота должны быть кратны 16, длинная сторона не больше 3840, общее число пикселей не больше 3840x2160.

Размер Описание
1024x1024 Квадратное изображение
1536x1024 Горизонтальное изображение
1024x1536 Вертикальное изображение
1920x1080 Горизонтальное HD-изображение
1080x1920 Вертикальное HD-изображение
3840x2160 4K горизонтальное изображение
2160x3840 4K вертикальное изображение

Пример Python

import base64
import time

import requests


# Замените на свой YYCode API Key
base_url = "https://gpt.yycode.net"
api_key = "YOUR_API_KEY"

headers = {
    "Content-Type": "application/json",
    "x-demo-base-url": "https://yycode.net",
    "x-demo-api-key": api_key,
    "x-demo-async": "1",
}

# Шаг 1: отправить задачу Text to Image
submit = requests.post(
    f"{base_url}/api/images/generate",
    headers=headers,
    json={
        "model": "gpt-image-2",
        "prompt": "Милый котенок дремлет на солнце",
        "n": 1,
        "size": "1024x1024",
    },
    timeout=30,
)

submit.raise_for_status()
job_id = submit.json()["jobId"]
print(f"Задача отправлена: {job_id}")

# Шаг 2: каждые 6 секунд опрашивать статус задачи
while True:
    result = requests.get(
        f"{base_url}/api/jobs/{job_id}",
        timeout=30,
    )
    result.raise_for_status()

    data = result.json()

    if data.get("pending"):
        print("Задача обрабатывается...")
        time.sleep(6)
        continue

    if data.get("status") == "succeeded":
        # Шаг 3: сохранить base64-изображение в локальный файл
        image = data["images"][0]
        mime_type = image.get("mimeType") or "image/png"
        suffix = mime_type.split("/")[-1].replace("jpeg", "jpg")
        filename = f"{job_id}.{suffix}"

        with open(filename, "wb") as file:
            file.write(base64.b64decode(image["b64"]))

        print(f"Изображение создано: {filename}")
        break

    raise RuntimeError(data.get("error", {}).get("message", "Задача завершилась ошибкой"))

Описание биллинга

  • Генерация изображений расходует квоту аккаунта YYCode, которому принадлежит x-demo-api-key
  • Возврат jobId при отправке означает, что фоновая задача создана
  • Когда статус задачи succeeded и возвращены images, текущая генерация изображения завершена
  • При статусе failed в ответе возвращается информация об ошибке
  • Записи расхода аккаунта отображаются в панели YYCode

Описание возврата изображений

Интерфейс изображений YYCode возвращает стандартизированный массив images. Каждое изображение содержит поля b64 и mimeType; интегратор декодирует b64 для сохранения файла или собирает data:${mimeType};base64,${b64} для отображения на фронтенде.

Вся страница скопирована