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

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

GPT Image 2 API на apiToken.sale — это два маршрута: POST /v1/images/generations для новых ассетов и POST /v1/images/edits для редактирования по референсам. Оба работают с тем же Bearer-ключом и предоплаченным балансом, что ваши текстовые запросы к GPT. Usage тарифицируется по токенам вдвое дешевле официальных расценок OpenAI. В гайде — точные запросы, путь через SDK, реальная таблица цен и лимиты поверхности, которые стоит знать до релиза.

·

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

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

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

Официальные поля GPT Image принимаются и переводятся на этот пул. Лишние ключи (user, stream, moderation, style) игнорируются, а не дают 400. quality medium/high/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. 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 пикселей. 1536x1024 и 1024x1536 — срезы 3:2 и 2:3 того же мегапиксельного бюджета. Таблица — цель prompt-steer. Если заголовок PNG не совпал с бакетом, API всё равно вернёт HTTP 200 и PNG — проверяйте IHDR и альфу в приёмке, а не рассчитывайте на 502.

POST /v1/images/* возвращает один PNG на вызов, без стриминга. Не стройте прогресс-UI вокруг этого маршрута. Для потоковых preview-кадров используйте отдельный Responses-инструмент image_generation с partial_images (ниже) — тривиальные промпты могут пропустить partials.

Читайте также: Стоимость GPT Image 2 API и скидка 50% для B2C

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

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

curl https://router.apitoken.sale/v1/images/edits \
  -H "Authorization: Bearer $APITOKEN_API_KEY" \
  -F "model=gpt-image-2" \
  -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, поэтому редактирование стоит дороже генерации того же результата по чистому промпту.
  • Формат ответа совпадает с генерацией: один PNG на вызов, без стриминга.

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

Inpaint области и Responses image_generation

Не отправляйте multipart-поле mask на /v1/images/edits. Это поле отклоняется, а URL редактирования ChatGPT его всё равно игнорирует. Чтобы изменить только часть картинки — или вызвать hosted-инструмент image_generation с текстовой GPT-модели — используйте POST /v1/responses (Chat Completions мапит те же hosted-инструменты на Responses). Исходный PNG в input как input_image при правке, tools: [{type:"image_generation", …}]. Для маски — 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",
        "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 — этот id принадлежит маршрутам Images.
  • Исходник и маска — только 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 отбрасывается — эти поля дают 400 на этом ChatGPT image tool. Quality/size на инструменте всё ещё ремапятся; completed item эхо того, что вернул ChatGPT.
  • Маска не тарифицируется как второй референс; settlement идёт по image-input и image-output токенам хода.
  • Отдельные маршруты POST /v1/images/* по-прежнему принимают только PNG на выходе и не стримят partials — не смешивайте два контракта.

Вызов через официальный 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",
    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 — референс-файлы открываются в бинарном режиме. Держите ключ в серверной переменной окружения: image-endpoints так же чувствительны, как chat, потому что списывают с того же баланса.

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

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

СоставляющаяОфициально за 1 млн токеновЦена здесь
Text input, некэшированный$5$2.50
Image input, некэшированный$8$4
Text input, кэшированный$1.25$0.625
Image input, кэшированный$2$1
Image output$30$15
  • На каждую составляющую действует плоская B2C-скидка 50%; кэшированный text и image input тарифицируются по 25% обычной input-ставки ещё до применения скидки.
  • Читайте объект usage в каждом ответе и логируйте его рядом с ассетом — это биллинговый авторитет, именно с ним сверяется списание в дашборде.
  • gpt-image-2 — алиас иммутабельного снапшота gpt-image-2-2026-04-21, поэтому поведение не плывёт между вызовами; зафиксируйте датированный ID, если хотите эту гарантию явно в коде.

Не выводите цену за изображение на своей странице тарифов по паре тестовых рендеров. Output usage меняется от ассета к ассету, и число, полученное из трёх примеров, в проде окажется неверным. Просуммируйте составляющие по реальному usage за неделю — и решайте.

Полная модель стоимости и расчёт экономии

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

Планируйте от того, что маршрут доказуемо умеет сегодня, а не от того, что обещает маркетинговое имя. Подтверждённый профиль намеренно узкий:

  • POST /v1/images/* без стриминга. n=1..10 запускает столько последовательных нативных ходов и тарифицирует их все. n>10 режется до 10.
  • Лишние JSON-ключи игнорируются. openai/gpt-image-2 принимается как gpt-image-2. GET /v1/models перечисляет два id и image-маршруты.
  • size — пропорция: 2K/4K строки мапятся в 1:1 или 16:9, PNG остаётся ~1,57 Мп. quality medium/high всё равно 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-модель, маршрут на стороне Gemini задокументирован рядом с этим, а в сравнительном гайде разобрано, где какая модель сильнее.

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

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

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

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

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

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

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

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

Да. Маршрут 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", input_image_mask:{image_url:"data:image/png;base64,…"}}]. Можно задать output_format jpeg|webp и partial_images 1..=3. Прозрачные пиксели маски — зона правки. Не отправляйте mask на /v1/images/edits и не используйте file_id. Chat Completions мапит тот же image_generation на Responses.

Какой точный model ID у GPT Image 2?

Используйте gpt-image-2 — алиас иммутабельного снапшота gpt-image-2-2026-04-21. Зафиксируйте датированный ID в коде, если хотите снапшот прописанным явно.

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

Фиксированной цены за изображение нет: биллинг идёт по финальному 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 прозрачный фон или стриминг?

На POST /v1/images/*: прозрачный фон как запрос — да, стриминг — нет; background=transparent просит PNG с альфой; omit/opaque — сплошной; без альфы всё равно HTTP 200. На Responses image_generation: background=transparent переписывается в opaque; для SSE preview используйте partial_images 1..=3 (response.image_generation_call.partial_image).

Можно ли задать размер изображения?

Задаёте пропорцию, не 2K/4K пиксели. omitted или auto обычно около 1254×1254. 1024x1024, 1:1 и 2048x2048 направляют в квадрат; 3840x2160 — в 16:9. Поле size в ответе — IHDR PNG, не запрос. Если заголовок другой, API всё равно вернёт HTTP 200.

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

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

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