Nano Banana 2.1 и Nano Banana 2: один постер и две правки
Nano Banana 2.1 и 2: один плакат и две правки для каждой модели. Шесть реальных изображений, время ответа, токены и проверка перед переходом.
Тест проведён 13 октября 2026 года. Мы отправили три одинаковых запроса через нативный маршрут Gemini API в Ofox — отдельно для Nano Banana 2.1 и Nano Banana 2. Каждая модель создала постер мероприятия, изменила заголовок, а затем поменяла цвет чаши. Это одна цепочка из трёх шагов для каждой модели, а не три независимых испытания и не бенчмарк общего качества моделей.
Эту статью публикует Ofox, который также предоставляет шлюз, использованный в тесте. При подготовке черновика использовался ИИ; запросы к API и выходные файлы проверили с помощью инструментов, а перед публикацией провели отдельную проверку с помощью ИИ. Доказательства для визуального сравнения — шесть сгенерированных ниже изображений, а не интерфейс публичной страницы модели. Файлы и материалы запросов доступны в наборе для воспроизведения теста.
Шесть результатов
| Шаг | Nano Banana 2.1 | Nano Banana 2 |
|---|---|---|
| Создание постера | ![]() | ![]() |
| Изменение заголовка | ![]() | ![]() |
| Изменение цвета чаши | ![]() | ![]() |
В этом запуске обе модели выполнили запрошенную последовательность действий по смыслу. На первых постерах правильно написаны ORCHARD MARKET и SATURDAY 10 AM, а под текстом изображены три красных яблока в синей чаше. После первой правки у обеих моделей появилось ORCHARD FAIR, а строка меньшего размера, яблоки и синяя чаша сохранились. В результатах третьего шага чаша стала тёмно-зелёной, а текст и композиция остались на месте.
Есть и общий недочёт: несмотря на просьбу «без рамки» в первом запросе, обе модели изобразили дизайн как лист бумаги с внешним полем или тенью. Если под «без рамки» подразумевается, что рисунок должен доходить до краёв изображения, первый результат ни одной из моделей этому условию не соответствует. Эти результаты подходят для разработки идеи постера, но не доказывают, что какая-либо из моделей точно выполняет каждое указание по композиции.
Что мы отправили и какие выводы позволяет сделать сравнение
Точные запросы в порядке отправки:
Create a square minimalist event poster on warm cream paper. Large exact headline: ORCHARD MARKET. Smaller exact line: SATURDAY 10 AM. Draw three red apples in a blue ceramic bowl below the text. No other text, no logos, no border.Change only the headline from ORCHARD MARKET to ORCHARD FAIR. Keep SATURDAY 10 AM exactly unchanged. Preserve the three red apples, blue bowl, cream background, composition and all other pixels as closely as possible.Now change only the bowl from blue to dark green. Preserve ORCHARD FAIR, SATURDAY 10 AM, the three red apples and the layout.
Для каждой модели во втором запросе передавался созданный ею постер; в третьем — история диалога этой модели с правкой заголовка. Мы отправляли предыдущий полный candidates[0].content в роли ответа ассистента, а не собирали его части заново по отображённому PNG. Это важно, поскольку возвращённое содержимое может включать части, необходимые для продолжения диалога.
Проверенный маршрут Ofox: POST https://api.ofox.io/gemini/v1beta/models/{model}:generateContent, аутентификация выполнялась через x-goog-api-key. Использовались ID google/gemini-nano-banana-2.1 и google/gemini-3.1-flash-image для более старой модели. Для обеих цепочек запрашивались responseModalities: ["TEXT", "IMAGE"], соотношение сторон 1:1 и размер изображения 1K. Мы не задавали seed или явный уровень рассуждений. Поэтому модели могли использовать разные настройки по умолчанию: одинаковые запросы и заданные параметры изображения не означают, что внутренние конфигурации моделей совпадали.
Все шесть запросов завершились с HTTP 200, причиной завершения STOP и PNG размером 1024 × 1024. Мы не повторяли тесты, не проверяли другие языки и соотношения сторон и не запускали рабочую нагрузку в производственной среде. Приведённая выше визуальная оценка относится только к этим шести файлам. В частности, «сохранить все остальные пиксели как можно точнее» — это инструкция, а не гарантия попиксельного редактирования или наличия редактируемых слоёв. Даже в визуально стабильных нижних частях постеров после правки заголовка изменилось множество RGB-пикселей. При точном подсчёте различий пикселей к изменениям относятся небольшие отличия текстуры и цвета; такой подсчёт не измеряет визуальный ущерб. Приёмы для более точного контроля над областью товара описаны в отдельных материалах о сохранении с помощью маски и одном или нескольких референсах для сцены.
Время и возвращённые данные об использовании: наблюдения, а не рейтинг скорости
Ниже указаны затраченное время и данные об использовании, возвращённые для шести запросов. «Не указано» означает, что поля в ответе не было; это не означает ноль токенов рассуждений или нулевую связанную с ними стоимость.
| Модель и шаг | Время, с | Входные токены | Указанные выходные текстовые токены | Выходные токены изображения | Токены рассуждений |
|---|---|---|---|---|---|
| 2.1 — постер | 15,46 | 54 | 80 | 1 120 | 639 |
| 2.1 — правка заголовка | 17,48 | 1 167 | Не указано | 1 120 | 358 |
| 2.1 — правка чаши | 18,44 | 2 272 | Не указано | 1 120 | Не указано |
| 2 — постер | 10,08 | 54 | Не указано | 1 120 | Не указано |
| 2 — правка заголовка | 13,99 | 1 167 | Не указано | 1 120 | Не указано |
| 2 — правка чаши | 13,06 | 2 272 | Не указано | 1 120 | Не указано |
В первом ответе 2.1 указано 80 выходных токенов TEXT, но видимой текстовой части в нём не было. В таблице приведены категории из метаданных, а не подсчёт видимых слов.
В каждом из этих трёх сопоставленных шагов Nano Banana 2 отвечала быстрее. Шести последовательных запросов без повторов и контролируемых условий нагрузки недостаточно, чтобы заключить, что она в целом быстрее. Точно так же то, что обе модели справились с основными задачами на текст и редактирование в этом тесте, не доказывает одинаковую надёжность на других запросах. Рост числа входных токенов отражает данные API о многошаговых запросах; сам по себе он не показывает, как именно тарифицировалась переданная история. В шагах по переходу ниже эти ограниченные наблюдения превращаются в проверки для вашей собственной рабочей нагрузки.
Как воспроизвести цепочки из трёх шагов
В наборе собраны материалы теста и выходные изображения. Чтобы отправить новые запросы, установите requests, задайте ключ API Ofox и запустите скрипт ниже. Он использует точные запросы из статьи, сохраняет каждую возвращённую встроенную часть с изображением и передаёт полное содержимое кандидата из ответа API в следующий запрос. При новых генерациях результаты не обязаны совпасть с шестью опубликованными PNG.
python -m pip install requests
export OFOX_API_KEY="your-key"
python compare_posters.py
# compare_posters.py
import base64
import json
import os
import time
from pathlib import Path
import requests
KEY = os.environ["OFOX_API_KEY"]
OUT = Path("poster-comparison")
OUT.mkdir(exist_ok=True)
PROMPTS = [
"Create a square minimalist event poster on warm cream paper. Large exact headline: ORCHARD MARKET. Smaller exact line: SATURDAY 10 AM. Draw three red apples in a blue ceramic bowl below the text. No other text, no logos, no border.",
"Change only the headline from ORCHARD MARKET to ORCHARD FAIR. Keep SATURDAY 10 AM exactly unchanged. Preserve the three red apples, blue bowl, cream background, composition and all other pixels as closely as possible.",
"Now change only the bowl from blue to dark green. Preserve ORCHARD FAIR, SATURDAY 10 AM, the three red apples and the layout.",
]
MODELS = {
"21": "google/gemini-nano-banana-2.1",
"2": "google/gemini-3.1-flash-image",
}
STAGES = ("poster", "edit", "turn3")
for label, model in MODELS.items():
history = []
url = f"https://api.ofox.io/gemini/v1beta/models/{model}:generateContent"
for stage, prompt in zip(STAGES, PROMPTS):
user_turn = {"role": "user", "parts": [{"text": prompt}]}
payload = {
"contents": history + [user_turn],
"generationConfig": {
"responseModalities": ["TEXT", "IMAGE"],
"imageConfig": {"aspectRatio": "1:1", "imageSize": "1K"},
},
}
started = time.monotonic()
response = requests.post(
url,
headers={"x-goog-api-key": KEY},
json=payload,
timeout=180,
)
elapsed = time.monotonic() - started
response.raise_for_status()
body = response.json()
candidates = body.get("candidates") or []
if not candidates:
raise RuntimeError(f"{label}/{stage}: no candidate: {body}")
candidate = candidates[0]
if candidate.get("finishReason") != "STOP":
raise RuntimeError(
f"{label}/{stage}: finishReason={candidate.get('finishReason')}"
)
content = candidate["content"] # Keep all returned parts intact.
saved = []
for index, part in enumerate(content.get("parts", [])):
inline = part.get("inlineData")
if not inline:
continue
mime = inline.get("mimeType", "")
if not mime.startswith("image/"):
continue
extension = ".png" if mime == "image/png" else ".img"
path = OUT / f"{stage}-{label}-{index}{extension}"
path.write_bytes(base64.b64decode(inline["data"]))
saved.append(str(path))
if not saved:
raise RuntimeError(f"{label}/{stage}: STOP but no inline image")
print(json.dumps({
"model": model, "stage": stage, "seconds": round(elapsed, 2),
"images": saved, "usageMetadata": body.get("usageMetadata"),
}))
history += [user_turn, content]
Код обрабатывает текстовые части как текст, а не как изображения. Он также явно выдаёт ошибку, если успешный HTTP-ответ не содержит кандидата, имеет причину завершения, отличную от STOP, или не содержит встроенного изображения. Такие случаи стоит обработать до интеграции генерации изображений в рабочий процесс. На публичной странице модели Ofox 2.1 указаны модель и протоколы, но для входа во встроенный Playground нужна авторизация. Скриншот страницы модели подтверждает наличие публичного интерфейса, но не доказывает, что изображения в этой статье были получены через него. Проверка выбора модели в Agent с авторизацией не проводилась, поэтому статья не утверждает, что Agent автоматически выбирает 2.1. О проблемах обработки ответов читайте в руководстве по ошибке «нет изображения» и документации Google по устранению неполадок API.
Что означают токены — и чего они не означают
Токены изображений, входные токены, указанные выходные текстовые токены и токены рассуждений — отдельные компоненты использования. В снимке каталога среды выполнения Ofox от 13 октября для 2.1 указаны тарифы $1,50 за миллион входных токенов, $7,50 за миллион выходных текстовых токенов и $30 за миллион выходных токенов изображения. В соответствующем снимке для более старой модели указаны $0,50, $3 и $60 за миллион. Для 2.1 в снимке также указана цена $0,014 за запрос поиска; в этом тесте постера поиск не использовался. Пустое поле с ценой поставщика не подтверждает наличие скидки от поставщика. Каталог Ofox — динамический, а не статичная таблица цен в Git-репозитории сайта; пересчёт по снимку каталога не является проверенным счётом к оплате. Перед планированием бюджета сверяйтесь с актуальным руководством по ценам и данными о начислениях.
Для первого запроса 2.1 на создание постера применение тарифов из снимка даёт такую стоимость компонента изображения: 1,120 × $30 / 1,000,000 = $0.0336; компонента входных данных: 54 × $1.50 / 1,000,000 = $0.000081; указанного компонента выходного текста: 80 × $7.50 / 1,000,000 = $0.0006. Если 639 указанных токенов рассуждений тарифицируются по той же ставке, что и выходные текстовые токены, они добавят расчётные $0.0047925, и иллюстративная сумма составит $0.0390735. Этот условный расчёт — не счёт к оплате. Не считайте отсутствующие поля с токенами рассуждений у старой модели доказательством нулевой платы.
При указанной в снимке цене изображения 100 сгенерированных изображений 2.1 в разрешении 1K сами по себе составят $3.36; если для получения 100 принятых изображений нужно сгенерировать 125 — при иллюстративной доле принятия 80% — компонент изображений составит $4.20. В эти суммы только за изображения не входят входные данные, текст, потенциально тарифицируемые рассуждения, повторные попытки и другие применимые начисления. Компонент изображений старой модели для результата с 1 120 токенами составил бы $0.0672, но эти цифры не доказывают, что переход на другую модель снизит общий счёт для конкретной рабочей нагрузки или стоимость одного принятого дизайна.
На странице цен Google для Gemini отдельно указаны тарифы 2.1 на текст, рассуждения и изображения; там же сказано, что для изображения 1K требуется 1 120 токенов изображения. Опубликованные значения для 4K в материалах Google не совпадают: в таблице цен генерации изображений указано 2 520 токенов, а в документации Vertex — 3 780. В этом тесте мы не запрашивали 4K; ни одно из этих значений не следует выдавать за точный счёт Ofox за 4K по результатам данного теста.
Стоит ли менять ID модели в существующем рабочем процессе?
Переходите на другую модель, если её поведение или доступные возможности решают проблему, которую вы действительно проверили, — а не потому, что эти шесть изображений доказывают её всеобщее превосходство. Google описывает возможности Nano Banana 2.1 и рабочий процесс генерации изображений, включая варианты с более высоким разрешением и работу с референсными изображениями. Описание возможности в документации не доказывает, что все варианты проверялись через этот маршрут Ofox: в сравнении использовалось разрешение 1K, внешние референсные изображения не передавались, а запросы были только на английском языке. Мы также не сравнивали Pro или Lite. Описанное позиционирование этих моделей — повод оценить их для других задач, а не доказательство их превосходства, измеренного в этом тесте.
Осторожный переход состоит из четырёх шагов:
- Зафиксируйте ID модели. В тестовой конфигурации замените
google/gemini-3.1-flash-imageнаgoogle/gemini-nano-banana-2.1, вместо того чтобы незаметно менять все производственные запросы. - Явно сохраняйте конфигурацию и историю диалога. Записывайте запрошенное разрешение, соотношение сторон, модальности, запросы и полное содержимое ответа ассистента, переданное между ходами. Не публикуйте неподтверждённые рекомендации по настройке seed, temperature или top-p как способ сделать результаты воспроизводимыми.
- Проверяйте результаты на реальном целевом материале. Тестируйте точность текста, появление нежелательных полей, обработку референсов, если они нужны, ответы без изображения, долю принятых результатов, распределение времени ответа и общие начисления за использование. В руководстве по редактированию постеров рассматриваются дополнительные ограничения для подобных задач; в руководстве по API — интеграция.
- Сохраните возможность отката. Не удаляйте старый ID и настройки маршрутизации, пока новая модель не пройдёт ваши проверки. Этот тест не доказывает, что старый ID выведен из эксплуатации.
Наконец, привлекательный сгенерированный постер не означает, что права на него очищены или что соблюдена политика защиты данных. Перед коммерческим использованием или передачей чувствительных данных проверьте права на предоставленные материалы и условия использования Gemini API. Документацию SynthID не следует считать обещанием видимого водяного знака, исключительного права собственности или отсутствия нарушений прав третьих лиц. Обоснованный вывод здесь уже: в одной сопоставленной англоязычной цепочке из трёх шагов обе модели внесли запрошенные изменения текста и цвета чаши, но обе не выполнили указание убрать рамку.








