Skip to content

Nano Banana (модели изображений Gemini)

Модели изображений Gemini в продаже: gemini-3.1-flash-image-preview, gemini-3-pro-image-preview и gemini-3.1-flash-lite-image. Это модели генерации изображений, обслуживаемые каналами Gemini, и есть два способа обращения (точный список для каждой модели см. в поле supported_endpoint_types в разделе Модели):

ПутьЭндпоинтТело, которое вы отправляете
Формат изображений OpenAIPOST /v1/images/generationsJSON изображения OpenAI, описан в разделе Формат изображений OpenAI
Нативный GeminiPOST /v1beta/models/{model}:generateContentcontents + generationConfig Gemini

Используйте нативный путь, если ваш клиент уже работает по протоколу Gemini (Google GenAI SDK) и нуждается в полном контроле над responseModalities и imageConfig; используйте /v1/images/generations, если клиент умеет только OpenAI-совместимый API изображений.

Структура запроса, аутентификация и тело ошибки совпадают с Форматом изображений OpenAI. RouteAPI преобразует ваш запрос изображения в вызов Gemini generateContent.

ПолеТипОбязательноОписание
modelstringДаID модели изображений Gemini, например gemini-3.1-flash-image-preview
promptstringДаОтправляется единственной текстовой частью в ходе user
sizestringНетОтображается в generationConfig.imageConfig.aspectRatio (см. таблицу ниже)
nintegerНетЗначения больше 1 передаются как generationConfig.candidateCount; 1 или отсутствие значения ничего не отправляют
quality, response_format, style, user, watermark—НетНа этом пути не преобразуются; адаптер Gemini их игнорирует

RouteAPI сам заполняет responseModalities значением ["TEXT", "IMAGE"], поэтому через этот эндпоинт его передавать не нужно. Настройки безопасности берутся из платформенных настроек Gemini.

Размер в соотношение сторон

Section titled “Размер в соотношение сторон”

Только эти точные значения size отображаются в соотношение сторон:

sizeaspectRatio
256x256, 512x512, 1024x10241:1
1536x10243:2
1024x15362:3
1024x17929:16
1792x102416:9

Значение, уже содержащее :, передаётся как соотношение сторон. Любое другое значение (например, 2K или auto) вообще не отправляет imageConfig, и применяется значение upstream по умолчанию. Пиксельные размеры на этом пути не запрашиваются — соотношение сторон является единственным управлением размером.

Terminal window
curl https://api.routeapi.ai/v1/images/generations \
-H "Authorization: Bearer $ROUTEAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.1-flash-image-preview",
"prompt": "A nano banana wearing sunglasses, studio product shot",
"size": "1536x1024"
}'

Ответ преобразуется в объект изображения OpenAI; сохраняются только встроенные части изображения, а любой текст, возвращённый моделью, отбрасывается.

{
"created": 1740000000,
"data": [
{
"b64_json": "iVBORw0KGgoAAAANSUhEUgAA..."
}
]
}

URL на этом пути не создаются — всегда читайте data[].b64_json. Если в ответе нет части изображения, запрос завершается с 500; если Gemini блокирует prompt, он завершается с 400, а причина блокировки записывается в запрос.

POST /v1beta/models/{model}:generateContent
POST /v1beta/models/{model}:streamGenerateContent?alt=sse

Пример:

Terminal window
curl https://api.routeapi.ai/v1beta/models/gemini-3-pro-image-preview:generateContent \
-H "x-goog-api-key: $ROUTEAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{ "role": "user", "parts": [{ "text": "Draw a cat astronaut on the moon" }] }
],
"generationConfig": {
"responseModalities": ["TEXT", "IMAGE"],
"imageConfig": { "aspectRatio": "16:9", "imageSize": "2K" }
}
}'
ПолеТипОбязательноОписание
contentsarrayДаСодержимое диалога Gemini, минимум один элемент. Роли — user и model
generationConfig.responseModalitiesarray of stringПрактически даДолжно включать IMAGE, иначе модель ответит только текстом
generationConfig.imageConfigobjectНетПараметры изображения, передаются в Gemini как есть. aspectRatio например 1:1, 3:2, 16:9; imageSize например 1K, 2K, 4K. Допустимые значения зависят от модели
generationConfig.candidateCountintegerНетЧисло кандидатов; поддерживается не всеми моделями изображений
safetySettingsarrayНетНастройки безопасности Gemini, передаются без изменений
systemInstructionobjectНетСистемная инструкция; также принимается snake_case-форма system_instruction

generationConfig принимает как camelCase, так и snake_case написание полей (например, responseModalities / response_modalities и imageConfig / image_config); если присутствуют оба, побеждает snake_case. imageConfig и его содержимое передаются без проверки, поэтому о неподдерживаемом imageSize сообщит Gemini, а не RouteAPI.

Чтобы отредактировать или сослаться на изображение, добавьте встроенную часть изображения рядом с текстом:

{
"contents": [
{
"role": "user",
"parts": [
{ "text": "Repaint this photo as a watercolor illustration" },
{
"inlineData": {
"mimeType": "image/png",
"data": "iVBORw0KGgoAAAANSUhEUgAA..."
}
}
]
}
],
"generationConfig": { "responseModalities": ["TEXT", "IMAGE"] }
}

inlineData содержит байты изображения в Base64 и передаётся в Gemini без изменений. Для файлов, уже загруженных в Google, также доступна нативная часть fileData.fileUri, которая входит в передаваемую структуру. Если ваш клиент использует формат чата OpenAI, части image_url скачиваются на сервере и преобразуются во встроенные части перед отправкой в Gemini.

Потоковая передача выбирается параметром ?alt=sse, а не именем действия: с ним действие upstream становится streamGenerateContent, а ответ представляет собой поток server-sent events Gemini. Каждый фрагмент имеет стандартную структуру candidates[].content.parts. Используйте его, если изображение должно приходить по частям; иначе :generateContent вернёт всю структуру одним телом.

Нативный путь возвращает собственную структуру ответа Gemini без изменений:

{
"candidates": [
{
"content": {
"role": "model",
"parts": [
{ "text": "Here is the image." },
{
"inlineData": {
"mimeType": "image/png",
"data": "iVBORw0KGgoAAAANSUhEUgAA..."
}
}
]
},
"finishReason": "STOP"
}
],
"usageMetadata": {
"promptTokenCount": 12,
"candidatesTokenCount": 1120,
"totalTokenCount": 1132
}
}

Изображение читается из parts[].inlineData; обычно рядом присутствует текстовая часть. Если Gemini блокирует запрос, устанавливается promptFeedback.blockReason, а candidates пуст.

Модели изображений Gemini тарифицируются по токенам: сгенерированные изображения считаются выходными токенами по цене выхода, а prompt и изображения-референсы — входными токенами. Актуальные ставки см. в разделе Тарификация моделей и на странице модели.