Nano Banana API: сравнение Google и laozhang.ai по цене и надежности
Сравниваем Nano Banana 2 и Pro через Google и laozhang.ai: стоимость одинакового разрешения, запрос с сохранением файла, учет списаний и восстановление после ошибок.
Содержание

Для Nano Banana API дешевле всего не обязательно тот поставщик, у которого ниже цена в рекламном блоке. Сравнивайте одну модель, одинаковое разрешение и стоимость реально полученного изображения. При стандартной генерации 4K тариф laozhang.ai ниже стоимости вывода изображения у Google. Для фоновой генерации 1K прямой Google Batch может оказаться выгоднее. А определить более надежный вариант можно только по доле сохраненных пригодных файлов и времени их получения.
Ниже — сравнение прямой Gemini API и laozhang.ai по документации, проверенной 7 сентября 2026 года. Мы не проводили платных запросов и не измеряли доступность этих сервисов. Пример разбора ответа проверен локально на искусственных данных; это проверка кода, а не испытание API под нагрузкой.
Сколько стоит одинаковое изображение
Сначала зафиксируйте модель. Сейчас Nano Banana 2 использует gemini-3.1-flash-image, а Nano Banana Pro — gemini-3-pro-image. Старый Nano Banana и Nano Banana 2 Lite — другие модели: их низкая цена не показывает, сколько будет стоить ваш запрос к Pro.
В таблице Google указан приблизительный тариф только за вывод изображения. У laozhang.ai приведен тариф за успешно тарифицированный вызов; это другая единица учета. Все суммы в долларах США.
| Модель и разрешение | Google Standard, за вывод изображения | Google Batch, за вывод изображения | laozhang.ai, за вызов |
|---|---|---|---|
| Nano Banana 2, 0.5K | ≈ 0,045 $ | ≈ 0,022 $ | 0,055 $ |
| Nano Banana 2, 1K | ≈ 0,067 $ | ≈ 0,034 $ | 0,055 $ |
| Nano Banana 2, 2K | ≈ 0,101 $ | ≈ 0,050 $ | 0,055 $ |
| Nano Banana 2, 4K | ≈ 0,151 $ | ≈ 0,076 $ | 0,055 $ |
| Nano Banana Pro, 1K или 2K | ≈ 0,134 $ | ≈ 0,067 $ | 0,090 $ |
| Nano Banana Pro, 4K | 0,240 $ | 0,120 $ | 0,090 $ |
Источники: цены Gemini API и таблица генерации изображений laozhang.ai. У Google входные данные, текстовый вывод, вычисления модели и поиск могут добавлять расходы. Для вывода изображений этих двух моделей бесплатный уровень не предусмотрен.
У Google расчет идет по токенам, поэтому умножение округленного тарифа из таблицы дает лишь оценку. Например, вывод 1 000 изображений Nano Banana 2 в 1K при 1 120 токенах на изображение и 60 $ за миллион токенов стоит 67,20 $ в Standard и 33,60 $ в Batch. Для 1 000 изображений Pro в 4K соответствующие суммы — 240 $ и 120 $. В обоих случаях входные данные и прочие начисления сюда не включены.
У laozhang.ai тысяча тарифицированных вызовов составляет 55 $ для Nano Banana 2 или 90 $ для Pro. Но это еще не обещание тысячи пригодных файлов: документация Nano Banana 2 и Pro связывает оплату с успешным ответом Google; ответ без изображения тоже может тарифицироваться. Окончательные списания проверяйте в журнале вызовов.
Отсюда два практических выбора:
- Для интерактивной генерации Pro 4K стоит проверить laozhang.ai: разница в опубликованных тарифах существенна, а результат можно получать тем же форматом
generateContent. - Для плановой генерации NB2 1K стоит рассмотреть Google Batch: цена вывода ниже тарифа посредника, если задача допускает ожидание.
Batch API предназначен для асинхронной обработки с целевым временем выполнения до 24 часов. Это не замена повторному запросу, когда пользователь ждет картинку на экране. В бюджет выше включены Standard и Batch: страницы моделей и тарифов Google расходятся в описании поддержки Flex/Priority, поэтому доступность этих режимов нужно уточнять отдельно.

Один запрос, два адреса API
Для честного сравнения используйте Google-формат у обоих поставщиков. В примере — Nano Banana Pro, квадратное изображение 2K. Так вы не сравните случайно 1K через один интерфейс с 2K через другой. В документации laozhang.ai режим /v1/chat/completions для Pro ограничен 1:1 и 1K; для другого соотношения сторон или 2K/4K указан generateContent. Наличие OpenAI-совместимости само по себе не гарантирует одинаковые возможности генерации.
Сохраните тело запроса в request.json:
{
"contents": [{
"parts": [{
"text": "Создай квадратное предметное фото белой керамической чашки на светло-сером фоне. Верни изображение."
}]
}],
"generationConfig": {
"responseModalities": ["IMAGE"],
"imageConfig": {"aspectRatio": "1:1", "imageSize": "2K"}
}
}Для прямого Google задайте свой ключ в переменной окружения GOOGLE_API_KEY и выполните:
curl --fail-with-body --max-time 180 \
'https://generativelanguage.googleapis.com/v1beta/models/gemini-3-pro-image:generateContent' \
-H "x-goog-api-key: $GOOGLE_API_KEY" \
-H 'Content-Type: application/json' \
--data-binary @request.json \
--output google-response.jsonДля laozhang.ai используйте ключ этого сервиса в LAOZHANG_API_KEY:
curl --fail-with-body --max-time 180 \
'https://api2.laozhang.ai/v1beta/models/gemini-3-pro-image:generateContent' \
-H "Authorization: Bearer $LAOZHANG_API_KEY" \
-H 'Content-Type: application/json' \
--data-binary @request.json \
--output laozhang-response.jsonФормат основан на руководстве Google по generateContent и инструкции laozhang.ai для Pro. Для Nano Banana 2 замените в адресе только модель на gemini-3.1-flash-image. Ключи остаются разными. Параметр --max-time 180 — выбранный предел ожидания клиента, а не обещание скорости API. Команды не делают автоматических повторов: при неоднозначном тайм-ауте сначала нужно выяснить судьбу первой попытки.
Как сохранить именно изображение
В ответе REST данные изображения находятся в candidates[].content.parts[].inlineData. Перед ними может идти текст; обращение только к parts[0] ненадежно. Части с thought: true нужно пропускать: промежуточная иллюстрация процесса рассуждения не является итоговой картинкой. Имена inline_data из Python SDK не нужно переносить в разбор исходного JSON.
Следующий скрипт обходит все части, проверяет base64 и возможность декодирования, сохраняет полученные байты без перекодирования и выводит реальные размеры. Он принимает только PNG, JPEG и WebP, проверяя соответствие заявленного MIME-типа содержимому. Для выбранного примера Pro 2K, 1:1 ожидается файл 2048 × 2048; при другом задании измените ожидаемые размеры.
Установите Pillow в виртуальное окружение и сохраните код как save_images.py:
python3 -m venv .venv
. .venv/bin/activate
python -m pip install Pillowimport base64
import binascii
import io
import json
import sys
from pathlib import Path
from PIL import Image
FORMATS = {
"image/png": ("PNG", ".png"),
"image/jpeg": ("JPEG", ".jpg"),
"image/webp": ("WEBP", ".webp"),
}
def save_images(payload, output, expected):
output = Path(output)
output.mkdir(parents=True, exist_ok=True)
saved, errors = [], []
for candidate in payload.get("candidates", []):
for part in candidate.get("content", {}).get("parts", []):
if part.get("thought") is True:
continue
item = part.get("inlineData")
if not item:
continue
try:
mime = item.get("mimeType")
if mime not in FORMATS:
raise ValueError("Неподдерживаемый MIME-тип")
fmt, suffix = FORMATS[mime]
raw = base64.b64decode(item["data"], validate=True)
with Image.open(io.BytesIO(raw)) as img:
img.verify()
with Image.open(io.BytesIO(raw)) as img:
img.load()
size = img.size
if img.format != fmt:
raise ValueError("MIME-тип не совпадает с файлом")
if size != expected:
raise ValueError(f"Получено {size}, ожидалось {expected}")
target = output / f"image-{len(saved) + 1}{suffix}"
with target.open("xb") as handle:
handle.write(raw)
saved.append(target)
print(f"Сохранено: {target}; {size[0]} x {size[1]}")
except (ValueError, KeyError, TypeError, binascii.Error, OSError) as exc:
errors.append(str(exc))
if errors:
print("Ошибки частей ответа: " + "; ".join(errors), file=sys.stderr)
if not saved:
raise ValueError("В ответе нет пригодного изображения")
return saved
if __name__ == "__main__":
payload = json.loads(Path(sys.argv[1]).read_text(encoding="utf-8"))
expected = (int(sys.argv[3]), int(sys.argv[4]))
save_images(payload, sys.argv[2], expected)Запустите разбор после успешного завершения соответствующей команды curl:
python save_images.py google-response.json google-output-001 2048 2048
python save_images.py laozhang-response.json laozhang-output-001 2048 2048Для каждой новой попытки задавайте новый каталог: режим xb защищает существующие файлы от перезаписи. Проверка размеров и формата подтверждает технически корректную доставку. Пригодность композиции, текста и содержания оценивайте отдельно по требованиям вашего приложения. Если модель вернула объяснение или отказ без картинки, исправляйте причину, а не сохраняйте текст под расширением .png.
Более подробное подключение и редактирование по исходному изображению разобраны в руководстве по Nano Banana API.
Почему HTTP 200 может оказаться дорогим
Для пользователя генерация завершена, когда приложение получило пригодный файл. Поэтому считайте результат в двух независимых колонках: что доставлено и что списано. Код HTTP 200, ненулевой usage, ответ с текстом или существующий идентификатор запроса сами по себе не подтверждают доставку изображения.
Полезная формула:
Цена пригодного изображения =
(окончательные списания − подтвержденные возвраты) / число пригодных изображенийЕсли пригодных изображений нет, показатель не определен; нельзя записывать нулевую цену. В числитель включайте повторные попытки и все дополнительные начисления за рассматриваемую задачу.
Например, это расчетный сценарий, не результат теста: 100 вызовов NB2 оплачены по 0,055 $, а пригодными признаны 90 файлов. Эффективная цена составляет 5,50 / 90 ≈ 0,0611 $ за файл. Восемь текстовых ответов и две испорченные доставки могут изменить экономику даже при отсутствии HTTP-ошибок. Какая именно попытка подлежала оплате или возврату, определяется окончательной записью поставщика, а не предположением по клиентскому сообщению.
Чтобы сверить результат, сохраняйте для каждой попытки собственный идентификатор, полученный идентификатор поставщика, модель, размер, время начала, HTTP-статус, итог разбора, путь к файлу и окончательное списание. Ключ API в журнал не записывайте. Если учет оплаты обновляется с задержкой, пометьте расчет как предварительный и пересчитайте после сверки.
Что делать при ошибке или долгом ожидании
| Ситуация | Следующее действие | Чего недостаточно для решения |
|---|---|---|
| 400 или ошибка параметров | Проверить модель, поля запроса, разрешение и формат интерфейса; затем исправить запрос | Повторять тот же JSON без изменений |
| 401/403 | Проверить ключ, права, состояние аккаунта и условия доступа | Переключать разрешение изображения |
| 429 | Снизить параллельность, учесть Retry-After, если он есть, и добавить ограниченный повтор с задержкой | Выпускать новые ключи в том же проекте |
| 5xx | Проверить состояние сервиса и запись попытки, затем выполнить ограниченный повтор с возрастающей задержкой и случайной добавкой | Запускать бесконечный цикл повторов |
| Тайм-аут или разрыв соединения | Найти попытку в журнале поставщика, проверить результат и списание до повторной отправки | Считать, что запрос точно не выполнялся |
| HTTP 200, только текст | Изучить текст и сведения о завершении, явно запросить изображение либо устранить причину отказа | Считать ответ бесплатным или успешно доставленным |
| Битые данные или неверный размер | Сохранить сведения об ошибке, проверить разбор и параметры, сверить оплату | Автоматически признать это HTTP-ошибкой поставщика |
Клиентский тайм-аут особенно неприятен: сервер мог закончить генерацию уже после закрытия соединения. Если запись не позволяет однозначно восстановить результат, явно учитывайте риск второго списания при повторе. Самостоятельный идентификатор помогает сопоставить попытки, но не создает гарантии идемпотентности на стороне API.
У Google лимиты применяются к проекту, а не к отдельному ключу. Активные значения смотрите в AI Studio; отдельные условия повышения квоты приведены в статье о лимитах Nano Banana Pro. Перенос запроса к посреднику меняет учетную запись и интеграцию, но не доказывает независимость от мощности той же модели Google.
Как выбрать основной и резервный сервис
Начните с небольшой одинаковой подборки заданий: например, реальные карточки товаров, иллюстрации и правки, которые выполняет ваше приложение. Зафиксируйте модель, разрешение, соотношение сторон, количество одновременных запросов и предел ожидания. Отдельно сравните интерактивные запросы и фоновые задания: у них разные критерии успеха.
Для каждого сервиса измеряйте:
- Долю пригодных результатов: число заданий с принятым изображением, деленное на число запущенных заданий. Повторы относятся к исходному заданию и учитываются в его расходах.
- Время до файла: от первой отправки задания до записи проверенного изображения, включая ожидание повторов и получение данных.
- P95 времени: значение, быстрее которого завершились 95% успешно доставленных заданий за указанный период и при заданной нагрузке. Неудачные задания сюда не входят, поэтому рядом обязательно показывайте их долю.
- Долю тайм-аутов: число попыток, достигших предела ожидания, деленное на все отправленные попытки. Указывайте сам предел; результаты при 30 и 180 секундах несопоставимы.
- Расход на пригодный файл: после окончательной сверки всех начислений и возвратов.

Второе подключение полезно, когда вы понимаете, какую неисправность оно обходит. Прямой Google и laozhang.ai могут различаться сетью, ключами, учетной записью и обслуживанием. Но оба способны зависеть от одного сервиса генерации Google. Поэтому два посредника или два адреса не гарантируют, что изображения будут доступны при общем сбое модели. Если задача допускает другую модель, такой резерв нужно проверять отдельно по качеству, формату и цене.
Практический старт — выбрать нужную строку таблицы, получить один корректный файл приведенным запросом и проверить запись о списании. Для Pro 4K кандидат с меньшим опубликованным тарифом — laozhang.ai; для фонового NB2 1K — Google Batch. После небольшой серии реальных заданий выбирайте основной сервис по полученным файлам, времени и расходам. Для более широкого сравнения семейства и бесплатных возможностей используйте разбор цен Nano Banana API.
Частые вопросы
Доступен ли прямой Google API пользователю из России?
Русский язык документации или работающий сайт не подтверждают доступность API для конкретной страны, аккаунта и способа оплаты. Перед настройкой проверьте действующие условия Google для вашего аккаунта. Аналогично, наличие посредника не является обещанием местной оплаты или гарантированного доступа: эти условия нужно выяснить у выбранного сервиса.
Одинаковый model ID означает одинаковую надежность?
Нет. Он помогает зафиксировать сравниваемую модель, но не описывает сетевое соединение, ограничения аккаунта, очередь и обработку ответа в вашем приложении. Сравнивайте доставку при одинаковых параметрах; рекламная цифра доступности не заменяет измерение.
Можно ли отправлять запрос сразу двум поставщикам ради скорости?
Технически приложение может отправить две попытки, но это создает риск двойной оплаты и не устраняет общий сбой Google. Если такой режим нужен, заранее задайте бюджет, правила принятия результата и учет обеих попыток. Для обычного начала проще один основной запрос и ограниченный повтор после выяснения его состояния.





