Настройка инструментов

Генерация и редактирование изображений через GPT Image 2.5 Flare и Sunburst

GPT Image 2.5 на apiToken.sale — два Images HTTP id: gpt-image-2.5-flare для повседневной быстрой генерации и gpt-image-2.5-sunburst для более точных правок. Те же POST /v1/images/generations и /v1/images/edits, тот же Bearer-ключ и предоплаченный баланс, что у GPT Image 2. Официальные ставки совпадают. Гайд описывает живую конвертацию, а не официальные xhigh/max/2K/4K.

·

Маршрут генерации одним запросом

GPT Image 2.5 Flare и Sunburst — image-модели на OpenAI-совместимой поверхности: отправьте промпт на /v1/images/generations с моделью gpt-image-2.5-flare или gpt-image-2.5-sunburst и заголовком Authorization: Bearer — и получите в ответ один PNG. Ни отдельного image-тарифа, ни второго ключа: тот же sk-pool ключ и предоплаченный баланс покрывают и генерацию изображений. Flare — быстрый повседневный id; Sunburst медленнее и рассчитан на более точные правки. Официальные ставки совпадают с GPT Image 2.

curl https://router.apitoken.sale/v1/images/generations \
  -H "Authorization: Bearer $APITOKEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2.5-flare",
    "prompt": "A precise technical cutaway of a lunar rover",
    "quality": "low"
  }'

Официальные поля GPT Image принимаются и переводятся на этот ChatGPT-пул. Лишние ключи (user, stream, moderation, style) игнорируются, а не дают 400. quality medium/high/xhigh/max/auto на чистом промпте всё равно генерирует на низком тарифе пула. output_format jpeg или webp транскодирует нативный PNG локально; omit или png оставляют PNG. response_format=url игнорируется — тело всегда b64_json. n может быть 1–10; каждый лишний кадр — ещё один нативный ход. background=auto это opaque; transparent добавляет cutout-фразу и просит настоящий PNG alpha — проверьте файл; отсутствие альфы всё равно HTTP 200, не 502. JSON background=transparent не фиксирует альфу. size выбирает пропорцию, не пиксельный замок. 2048x2048 и 3840x2160 мапятся в 1:1 и 16:9; PNG остаётся около 1,57 мегапикселей, а поле size в ответе — реальный IHDR.

sizeProportionSteer target (inspect the PNG)
omitted or autono size steertypically ~1254×1254; not a lock
1024x1024, 1:1, 2048x20481:11254×1254
1536x1024 or 3:23:2 landscape1536×1024
1024x1536 or 2:32:3 portrait1024×1536
4:34:31448×1086
16:9, 2048x1152, 3840x216016:91672×941
9:16, 2160x38409:16944×1665

1024x1024 — квадратный бакет, а не фиксация 1024 пикселей. Явный native WIDTHxHEIGHT всё равно около 1,57 Мп. Таблица — цель customer aspect-prefix. Если заголовок PNG не совпал с бакетом, API всё равно вернёт HTTP 200 и PNG — проверяйте IHDR и альфу в приёмке, а не рассчитывайте на 502.

POST /v1/images/* без стриминга. n=2..10 запускает последовательные нативные ходы и возвращает data[] этой длины. Для потоковых preview-кадров используйте отдельный Responses-инструмент image_generation с partial_images (ниже). Settlement на Responses идёт по текстовой модели, не по пятинотому image-тарифу.

Читайте также: Генерация и редактирование изображений через GPT Image 2 API

Редактирование изображений по пяти PNG, JPEG или WebP референсам

Редактирование уходит на другой маршрут и с другим content type. Отправьте multipart/form-data на /v1/images/edits с gpt-image-2.5-flare или gpt-image-2.5-sunburst, промптом и от одного до пяти PNG, JPEG или WebP (каждый файл ≤50 MB). Референсы — способ попросить точечное изменение: переосветить этот предметный кадр, заменить этот фон, расширить этот баннер — вместо генерации с нуля. Берите Sunburst, когда нужна точность; Flare — когда важнее скорость.

curl https://router.apitoken.sale/v1/images/edits \
  -H "Authorization: Bearer $APITOKEN_API_KEY" \
  -F "model=gpt-image-2.5-flare" \
  -F "prompt=Replace the backdrop with a seamless light-gray studio sweep" \
  -F "image=@packshot.png" \
  -F "image=@brand-swatch.png"
  • Повторяйте имя поля image для каждого файла или отправьте image[]. Multipart mask на этом маршруте игнорируется — inpaint через Responses input_image_mask.
  • Референсы — PNG, JPEG или WebP, каждый не больше 50 MB. GIF, HEIC и прочие типы отклоняются.
  • Лимит — пять референсов на вызов: выбирайте те немногие, что несут инструкцию, а не выгружайте всю библиотеку ассетов.
  • Каждый референс тарифицируется как image input, поэтому редактирование стоит дороже генерации того же результата по чистому промпту.
  • Формат ответа совпадает с генерацией: b64_json плюс фактические size/background/output_format. jpeg/webp на этом маршруте — локальный транскод нативного PNG.

Более глубокие сценарии редактирования: маски, батчи и приёмочные проверки

Inpaint области и Responses image_generation

Multipart-поле mask на /v1/images/edits игнорируется, чтобы SDK всё равно получил правку всего кадра. Native Codex это поле тоже игнорирует. Чтобы изменить только часть картинки — или вызвать hosted-инструмент image_generation с текстовой GPT-модели — используйте POST /v1/responses (Chat Completions мапит те же hosted-инструменты на Responses). Исходный PNG в input как input_image при правке, tools: [{type:"image_generation", model:"gpt-image-2.5-flare", …}]. Для маски — input_image_mask.image_url как PNG data URL. Прозрачные пиксели маски — зона правки, непрозрачные остаются. Маска того же размера, что исходник. file_id не поддерживается: Files API на этой плоскости нет.

import base64, os
from pathlib import Path
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["APITOKEN_API_KEY"],
    base_url="https://router.apitoken.sale/v1",
)

def png_url(path):
    return "data:image/png;base64," + base64.b64encode(Path(path).read_bytes()).decode()

response = client.responses.create(
    model="gpt-5.6-sol",
    input=[{
        "role": "user",
        "content": [
            {"type": "input_text", "text": "Change only the masked region."},
            {"type": "input_image", "image_url": png_url("photo.png")},
        ],
    }],
    tools=[{
        "type": "image_generation",
        "model": "gpt-image-2.5-flare",
        "output_format": "webp",
        "partial_images": 2,
        "input_image_mask": {"image_url": png_url("mask.png")},
    }],
)
  • Текстовая GPT-модель на /v1/responses или /v1/chat/completions (например gpt-5.6-sol), не gpt-image-2.5-flare — этот id принадлежит маршрутам Images. Отправка image-id на текстовый lane даёт 400 с указанием /v1/images/*, не 404.
  • Исходник и маска — только data:image/png;base64,…, не https:// и не OpenAI file id.
  • Responses image_generation пробрасывает output_format jpeg или webp и partial_images 1..=3; SSE отдаёт response.image_generation_call.partial_image, когда partials приходят.
  • background=transparent переписывается в opaque, input_fidelity отбрасывается. Quality/size на инструменте всё ещё ремапятся. Responses image_generation на проде сгенерировал Flare/Sunburst, но в матрице 2026-09-08 остался RGB.
  • Маска не тарифицируется как второй референс; settlement на Responses идёт по текстовой модели, не по пятинотому image-тарифу. Images HTTP settlement держит native /images/* usage.
  • POST /v1/images/* может вернуть jpeg/webp локальным транскодом нативного PNG. Настоящий jpeg magic и partial_images SSE остаются на Responses image_generation — не смешивайте два контракта.

Вызов через официальный OpenAI SDK

Официальный SDK OpenAI можно оставить. base_url и api_key — как для текстовых моделей. Лишние ключи (user, stream, moderation) игнорируются. response_format=url всё равно вернёт b64_json. size=2048x2048 принимается и переводится в квадратную пропорцию; PNG не 2K пикселей — читайте size в ответе.

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["APITOKEN_API_KEY"],
    base_url="https://router.apitoken.sale/v1",
)

result = client.images.generate(
    model="gpt-image-2.5-flare",
    prompt="A clean isometric diagram of a wind turbine",
    quality="low",
    size="3:2",
)

png_bytes = result.data[0].b64_json  # decode base64 and write to disk

Для редактирования тот же клиент предоставляет images.edits — референс-файлы открываются в бинарном режиме. Держите ключ в серверной переменной окружения. Для более точного и более медленного id подставьте gpt-image-2.5-sunburst.

Сколько на самом деле стоит генерация

Честной фиксированной цены за картинку нет. GPT Image 2.5 тарифицируется по токенам через те же составляющие usage, что GPT Image 2 — text input, image input, cached input и image output — а итог запроса определяется финальным usage, который возвращает API, а не размером или разрешением PNG.

Usage legOfficial per 1M tokensPrice here
Fresh text input$5$2.50
Fresh image input$8$4
Cached text input$1.25$0.625
Cached image input$2$1
Image output$30$15
  • На каждую составляющую действует плоская B2C-скидка 50%; кэшированный text и image input тарифицируются по 25% обычной input-ставки ещё до применения скидки.
  • Читайте объект usage в каждом ответе и логируйте его рядом с ассетом — это биллинговый авторитет, именно с ним сверяется списание в дашборде.
  • gpt-image-2.5-flare — алиас снапшота gpt-image-2.5-flare-2026-09-08; gpt-image-2.5-sunburst — алиас gpt-image-2.5-sunburst-2026-09-08. Зафиксируйте датированный ID, если хотите эту гарантию явно в коде.
  • Продакшен-canary 2026-09-09 на low вернул HTTP 200, RGB PNG 1254×1254 и 515 image-output токенов и для Flare, и для Sunburst.

Не выводите цену за изображение по паре тестовых рендеров. Cutout/logo промпт может поднять echo quality до medium (~2058 токенов), даже если JSON сказал quality=auto и background=opaque.

Модель стоимости GPT Image 2 (те же ставки)

Лимиты текущей image-поверхности

Планируйте от того, что Codex-пул реально отдаёт. Официальные поля клиента конвертируются на этот конверт:

  • POST /v1/images/* без стриминга. n=1..10 запускает столько последовательных нативных ходов и тарифицирует их все. n>10 режется до 10.
  • Лишние JSON-ключи игнорируются. openai/gpt-image-2.5-flare принимается как gpt-image-2.5-flare. GET /v1/models перечисляет шесть Images API id и image-маршруты.
  • size — пропорция: 2K/4K строки мапятся в 1:1 или 16:9, PNG остаётся ~1,57 Мп. quality medium/high/xhigh/max/auto на чистом промпте всё равно low. jpeg/webp — локальный транскод. background=transparent — cutout в промпте, не замок альфы.
  • Разобранный PNG с terminal usage — HTTP 200, даже если size или альфа не совпали со steer. Единственный post-success 502 на этом маршруте — отсутствие usage после PNG.
  • Редактирование принимает от одного до пяти PNG, JPEG или WebP (каждый ≤50 MB). image[] = image. mask игнорируется; inpaint области — Responses image_generation выше.
  • Image usage списывается с того же предоплаченного баланса, что запросы к GPT, Claude и Gemini.

Если нужна другая image-модель для сравнения, GPT Image 2 использует ту же конвертацию на тех же маршрутах, а Gemini-сторона задокументирована рядом.

Как удержать расходы на изображения в рамках на общем балансе

Image output — самая дорогая составляющая, а батч-циклы её умножают, поэтому выделите image-воркеру отдельный API-ключ с общим лимитом расходов (lifetime).

  1. 01Создайте в дашборде отдельный ключ для image-пайплайна и установите его общий лимит расходов равным бюджету батча.
  2. 02Отправьте один ограниченный запрос на генерацию (curl выше) и проверьте возвращённый PNG плюс объект usage с ожидаемыми составляющими.
  3. 03Прогоните свой реальный набор промптов в небольшом цикле, запишите финальный usage по каждому ассету и сверьте сумму со списанием в дашборде.
  4. 04Только после этого масштабируйтесь до полного объёма батча, держа лимит ключа в соответствии с реально утверждённым бюджетом.

Тарифы по моделям всех поддерживаемых провайдеров

Частые вопросы

Какой endpoint использует GPT Image 2.5 API?

POST /v1/images/generations для нового изображения и POST /v1/images/edits для редактирования по референсам — оба на OpenAI-совместимом base URL https://router.apitoken.sale/v1 с заголовком Authorization: Bearer.

Чем Flare отличается от Sunburst?

gpt-image-2.5-flare — быстрый повседневный id. gpt-image-2.5-sunburst — более точный и более медленный. Оба используют ту же Images HTTP конвертацию, тот же пятиногий тариф и тот же предоплаченный баланс.

Умеет ли GPT Image 2.5 редактировать существующее изображение?

Да. Маршрут edits принимает multipart/form-data с одним-пятью PNG, JPEG или WebP (каждый ≤50 MB) и промптом. Повторяйте имя поля image или отправьте image[]. Multipart mask игнорируется; inpaint области — Responses input_image_mask.

Как закрасить только часть изображения?

POST /v1/responses с текстовой GPT-моделью, исходный PNG как input_image и tools: [{type:"image_generation", model:"gpt-image-2.5-flare", input_image_mask:{image_url:"data:image/png;base64,…"}}]. Можно задать output_format jpeg|webp и partial_images 1..=3. Не отправляйте mask на /v1/images/edits и не используйте file_id.

Какой точный model ID?

Используйте gpt-image-2.5-flare или gpt-image-2.5-sunburst — алиасы иммутабельных снапшотов gpt-image-2.5-flare-2026-09-08 и gpt-image-2.5-sunburst-2026-09-08.

Сколько стоит одно изображение в GPT Image 2.5?

Фиксированной цены нет: биллинг идёт по финальному usage — text input ($5/1M официально), image input ($8/1M), cached input (25% от некэшированного) и image output ($30/1M) — с плоской скидкой 50% здесь: $2.50, $4 и $15 за 1M. Ставки совпадают с GPT Image 2. Продакшен-canary на low использовал 515 image-output токенов.

Поддерживает ли GPT Image 2.5 прозрачный фон, xhigh или 2K/4K пиксели?

На POST /v1/images/*: background=transparent просит cutout PNG с альфой; omit/opaque/auto — сплошной; без альфы всё равно HTTP 200. JSON transparent не фиксирует альфу. quality xhigh/max/medium/high/auto на чистом промпте всё равно low. size — пропорция, не 2K/4K пиксели. stream игнорируется.

Нужны ли для генерации изображений отдельный ключ или баланс?

Нет. Используются тот же Bearer-ключ и предоплаченный баланс, что для всех остальных поддерживаемых моделей.

Создайте аккаунт через Google или GitHub и протестируйте шлюз с бонусом $5 на балансе платформы.