Nano Banana 2 против GPT Image: что выбрать для генерации изображений
У обеих линеек один эндпоинт и разная механика. Разбираем, чем reference-to-image у Nano Banana отличается от edit у GPT Image и когда какая модель окупается.
4 мин · · Обновлено · изображения
Обновление, октябрь 2026. Генерация изображений через Zukko временно недоступна (Nano Banana 2 и GPT Image сейчас выключены). Актуальный список моделей — страница «Модели» или
GET https://api.zukko.pro/v1/models. Ближайшей замены среди текущих моделей нет: в каталоге сейчас только текстовые модели (Claude, GPT, GLM).
Провайдер эндпоинта один и тот же — /v1/images/generations, разница только в имени модели. Это осложняет сравнение: чтобы понять, какая линейка вам подходит, нужно смотреть не на общий адрес, а на то, что каждая модель реально умеет.
Что есть у каждой линейки
Nano Banana 2:
nano-banana-2-text-to-image(и-developer,-lite-*варианты) — текст в картинкуnano-banana-2-edit-developer— редактирование существующего изображенияnano-banana-2-reference-to-image-developer— генерация по образцу: отдельная картинка задаёт стиль или композицию, промпт — что на ней должно быть
GPT Image:
openai-gpt-image-2-text-to-image,openai-gpt-image-2-edit— актуальное поколениеopenai-gpt-image-1.5-text-to-image,openai-gpt-image-1.5-edit— предыдущее, тоже было в каталоге
Разница, которая реально влияет на выбор
У Nano Banana есть третий режим, которого нет у GPT Image, — reference-to-image. Если нужно «нарисуй в этом стиле» или «сохрани композицию, поменяй объект», в линейке GPT Image для этого нет отдельной модели: там только text-to-image и edit. Edit хорошо работает, когда правишь конкретную картинку по инструкции («замени фон на белый», «убери человека слева»), а не когда переносишь стиль с одного изображения на другое.
Если задача — перенос стиля или композиции, тестировать стоит с nano-banana-2-reference-to-image-developer в первую очередь.
Формат запроса одинаковый
Оба семейства принимают запрос одинаковой структуры:
curl https://api.zukko.pro/v1/images/generations \
-H "Authorization: Bearer fetch_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"model": "nano-banana-2-text-to-image",
"prompt": "Постер к техническому докладу, минимализм, синий и белый"
}'Для GPT Image меняется только model:
curl https://api.zukko.pro/v1/images/generations \
-H "Authorization: Bearer fetch_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"model": "openai-gpt-image-2-text-to-image",
"prompt": "Постер к техническому докладу, минимализм, синий и белый"
}'Редактирование в обеих линейках требует поля images с исходной картинкой:
curl https://api.zukko.pro/v1/images/generations \
-H "Authorization: Bearer fetch_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"model": "openai-gpt-image-2-edit",
"prompt": "Замени фон на однотонный светло-серый",
"images": ["https://example.com/source.png"]
}'Цена и биллинг
Обе линейки списывают деньги за готовое изображение, а не за токены в промпте — длинный подробный промпт стоит столько же, сколько короткий. Точные цены по каждой модели меняются, поэтому смотреть их стоит не в статье, а в каталоге:
curl https://api.zukko.pro/v1/models/infoЭтот запрос не требует ключа и отдаёт актуальные лимиты и цены. Дополнительно каждый ответ генерации содержит заголовок X-Zukko-Cost-Micros — точную стоимость именно этого запроса в микродолларах, так что можно логировать реальный расход по каждой модели в своём пайплайне, а не полагаться на приблизительные цифры.
Что делать, если модель не найдена
Имена в обеих линейках длинные, и легко опечатать один суффикс — вместо -developer написать -dev, например. В ответ придёт:
{"error": {"message": "The model 'openai-gpt-image-2-edit-dev' does not exist", "code": "model_not_found"}}Актуальный список моделей без опечаток — в /v1/models. Если модель есть в каталоге, но выключена, ответ будет другим: 503 с кодом model_disabled (не 404 и не model_retired) — замену в этом случае смотрите в актуальном списке GET https://api.zukko.pro/v1/models.
Баланс при генерации партиями
Если генерируете картинки пачками — например, десять вариантов подряд для одного макета — удобно следить за остатком без отдельного похода к /v1/balance. В ответе каждого запроса на генерацию приходит заголовок X-Fetch-Balance-Cents — остаток баланса после списания за это изображение; несмотря на название, он в микродолларах (1 000 000 = $1), а точный баланс в центах отдаёт GET /v1/balance (поле balance_cents). Скрипту, который гоняет генерацию в цикле, достаточно проверять этот заголовок после каждого вызова и останавливаться заранее, а не ловить 402 на середине партии.
Ретраи без двойного списания
Сетевые обрывы при генерации изображений случаются чаще, чем при коротких текстовых запросах — сама генерация занимает больше времени, и клиентский таймаут может сработать раньше, чем придёт ответ. Учтите, что Idempotency-Key на шлюзе работает только для POST /v1/chat/completions, /v1/messages и /v1/responses — на /v1/images/generations он не распространяется, поэтому автоматические ретраи генерации стоит ограничивать на стороне клиента и перед повтором сверяться с историей расходов, чтобы случайно не оплатить одну и ту же картинку дважды.
Обе линейки можно держать в проекте одновременно
Раз обе модели идут через один и тот же эндпоинт и различаются только полем model, нет причины жёстко привязываться к одной линейке в коде. Практичный вариант — вынести имя модели в конфиг или параметр запроса к своему бэкенду и переключаться между Nano Banana и GPT Image без изменений в остальном пайплайне, если понадобится сравнить качество на новой партии задач или отреагировать на 503 model_disabled, если конкретную версию выключат.
Как выбирать на практике
Гонять оба семейства на одном и том же промпте и сравнивать результат глазами — самый быстрый способ понять, что подходит именно вашей задаче. Тестируйте на дешёвых lite/developer-вариантах, финальный прогон делайте на полной версии, а решение «какая линейка вообще нужна» принимайте по наличию reference-режима: он есть только у Nano Banana.
zukko
Платите в 25×
меньше
за Claude Code & ChatGPT
Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.
Похожие статьи
- Агенты opencode: как настроить роли, модели и инструментыСвой агент в opencode — это роль, модель и список разрешений. Показываем конфиг и пример, где рутину делает дешёвая модель, а код правит сильная.
- Ключи OpenAI API в открытом доступе: почему ими нельзя пользоватьсяОткуда берутся «бесплатные» ключи на GitHub, почему пользоваться ими опасно и для вас, и для владельца, и как защитить собственный ключ от такой же утечки.
- Ошибки GLM API: почему не работает запрос и как это исправитьНеверный id модели, переполненный контекст 128K, ключ, баланс, лимиты: типичные причины ошибок GLM API и быстрый способ найти свою.
- Plan mode в Claude Code: сначала план, потом правки в кодеВ plan mode Claude Code читает код и предлагает план, но ничего не правит, пока вы не согласитесь. Как включить, использовать и во сколько это обходится.