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

Редактируйте изображения через GPT Image 2, Flare и Sunburst

Модели GPT Image принимают до пяти исходных изображений PNG, JPEG или WebP через маршрут Images edits. Ключ и баланс те же, что для генерации. Проверяйте каждый результат перед публикацией.

·

Редактирование исходных изображений через GPT Image

GPT Image 2, GPT Image 2.5 Flare и GPT Image 2.5 Sunburst используют одни маршруты OpenAI Images, ключ и предоплаченный баланс. Flare подходит для быстрой повседневной работы, Sunburst — для более точного редактирования. Сравнивайте модели по результатам, которые прошли вашу проверку. У всех трёх одинаковые опубликованные ставки за токены.

POST /v1/images/edits принимает от одного до пяти файлов PNG, JPEG или WebP размером до 50 МБ каждый в поле image или image[]. ID моделей те же, что для генерации. Поле mask в multipart игнорируется; для редактирования области используйте инструмент image_generation в Responses. Проверяйте геометрию, надписи и сохранение товара перед приёмкой.

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

Edit через GPT Image 2: PNG, JPEG или WebP на входе, один base64 PNG на выходе

Edits endpoint — это multipart form data: model, prompt и по одному image-полю на reference. Published profile: background opaque или transparent, quality low, size как пропорция (auto, 1024x1024/1:1, 1536x1024/3:2, 1024x1536/2:3, 4:3, 16:9, 9:16). Response — один JSON с одним base64 PNG. Значения size 2K/4K задают пропорции, но не гарантируют такое число пикселей.

curl https://router.apitoken.sale/v1/images/edits \
  -H "Authorization: Bearer $APITOKEN_API_KEY" \
  -F "model=gpt-image-2" \
  -F "prompt=Replace only the background with a neutral studio backdrop; keep the product untouched" \
  -F "image=@reference.png;type=image/png" \
  -F "background=opaque" \
  -F "quality=low" \
  -F "size=auto"

Повторяйте имя поля image для каждого референса или отправьте image[]. Multipart mask на /v1/images/edits игнорируется; inpaint — Responses input_image_mask.

// Response (abridged): decode data[0].b64_json into a PNG file.
{
  "data": [
    { "b64_json": "<BASE64 PNG>" }
  ]
}

Декодирование payload не завершает request. Сохраните request ID и terminal usage рядом с source и result: размер PNG в байтах — не формула цены, billing authority — terminal usage event, и именно с ним сверяется charge в дашборде.

Inpaint области: маска в Responses, не в Images

Multipart-поле mask на POST /v1/images/edits игнорируется. Форма OpenAI Images на этом пуле ChatGPT недоступна. Чтобы изменить только часть картинки — или вызвать hosted image_generation с текстовой GPT — вызовите POST /v1/responses (Chat Completions мапит тот же инструмент): исходный PNG в input как input_image и tools: [{type:"image_generation", …}]. Для маски — input_image_mask.image_url как data:image/png;base64,…. Маска того же размера, что исходник. Прозрачные пиксели — зона правки, непрозрачные остаются. Responses также пробрасывает output_format jpeg/webp и partial_images 1..=3 (SSE response.image_generation_call.partial_image); background=transparent → opaque, input_fidelity отбрасывается. file_id не работает: Files API здесь нет. Биллинг по image-токенам; маска не второй референс. Отдельные POST /v1/images/* по-прежнему отдают только non-streaming PNG.

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")},
    }],
)

Запускайте edits как validated pipeline

  1. 01Нормализуйте и проверяйте каждую reference на server-side: декодируйте файл, подтвердите supported MIME type и отклоняйте empty или oversized payloads до любого paid call.
  2. 02Напишите edit brief, отделяющий immutable traits — product geometry, logo, label text — от единственного named change: одно изменение на request делает failures диагностируемыми.
  3. 03Декодируйте каждый результат из data[].b64_json и проверяйте файл перед сохранением.
  4. 04Отправляйте один bounded candidate на source asset; не запускайте paid variants, пока первый output не прошёл review.
  5. 05Валидируйте доставленное изображение — format, plausible dimensions, product identity и отсутствие prohibited changes — до того, как его увидит downstream.
  6. 06Сохраняйте request ID, terminal usage, prompt version, source и result вместе: эта запись — одновременно rollback path и cost attribution.

Бюджет по измеренному расходу токенов

Расход за 1 млн токеновОфициальноОбычный B2C · скидка 50%
Входной текст$5$2.50
Кешированный текст$1.25$0.625
Входные изображения$8$4
Кешированные изображения$2$1
Выходные изображения$30$15

Например, редактирование с 900 свежими текстовыми входными токенами, 1 200 входными токенами изображения и 4 000 выходными токенами изображения стоит $0.1341 официально, или $0.06705 для обычного B2C. Число токенов в примере не гарантируется для каждой картинки. Для своих расчётов используйте итоговый usage и списание по соответствующему запросу.

Для каталога или пакетной обработки разделите все списания на число принятых изображений. Включайте оплаченные результаты, которые не прошли проверку. У GPT Image нет бесплатного countTokens: измерьте небольшую оплачиваемую выборку и задайте лимит расхода до запуска очереди.

Дисциплина стоимости и retries

  1. 01Выберите модель GPT Image и небольшую выборку типичных промптов и исходных изображений.
  2. 02Задайте лимит расхода и используйте n=1, quality=low и size=auto для выборки.
  3. 03Запишите итоговый usage и списание каждого запроса, включая отклонённые результаты.
  4. 04Разделите все списания на число принятых изображений и используйте эту стоимость для бюджета партии.

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

Edits дороже prompt-only generation?

Они добавляют billable image input, поэтому comparable edit обычно дороже по input. Но он может быть дешевле per accepted asset, если references повышают acceptance rate и убирают retries: считайте settled cost на принятый ассет, а не на request.

Безопасно ли retry edit после timeout?

Только если доказано, что prior attempt не был принят. Ambiguous timeout может скрывать завершённую работу provider; сохраните request ID и проведите reconciliation до нового paid attempt — иначе retry станет вторым paid render той же задачи.

Как дёшево протестировать edit routes?

Начните с одного исходного изображения и n=1, quality=low, size=auto. Проверьте размеры результата и итоговый usage перед увеличением объёма.

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

Отправьте от одного до пяти файлов PNG, JPEG или WebP не больше 50 МБ каждый в /v1/images/edits через image или image[].

Создайте аккаунт, пополните баланс и выпустите API-ключ для поддерживаемых моделей Claude, GPT и Gemini.