Редактируйте изображения через 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
- 01Нормализуйте и проверяйте каждую reference на server-side: декодируйте файл, подтвердите supported MIME type и отклоняйте empty или oversized payloads до любого paid call.
- 02Напишите edit brief, отделяющий immutable traits — product geometry, logo, label text — от единственного named change: одно изменение на request делает failures диагностируемыми.
- 03Декодируйте каждый результат из data[].b64_json и проверяйте файл перед сохранением.
- 04Отправляйте один bounded candidate на source asset; не запускайте paid variants, пока первый output не прошёл review.
- 05Валидируйте доставленное изображение — format, plausible dimensions, product identity и отсутствие prohibited changes — до того, как его увидит downstream.
- 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
- 01Выберите модель GPT Image и небольшую выборку типичных промптов и исходных изображений.
- 02Задайте лимит расхода и используйте n=1, quality=low и size=auto для выборки.
- 03Запишите итоговый usage и списание каждого запроса, включая отклонённые результаты.
- 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.