Nano Banana 2 Lite (Gemini 3.1 Flash Lite Image)
Генерация и редактирование изображений 1K в Nano Banana 2 Lite — модели изображений Google с наименьшей задержкой — через единую асинхронную конечную точку с телом запроса generateContent.
Nano Banana 2 Lite — это модель Gemini 3.1 Flash Lite Image от Google, участник семейства с низкой задержкой и низкой стоимостью. Она генерирует изображения в 1K. Отправьте тело запроса generateContent от Google с полем model, сохраните возвращённый идентификатор задачи и запрашивайте эту задачу, чтобы получить готовое изображение. Референсные изображения передаются в contents как URL в частях fileData.
ID моделей
| ID модели | Канал | Тарификация |
|---|---|---|
gemini-3.1-flash-lite-image-official | Official | Потокенные тарифы на вход, текстовый вывод и мышление, а также на вывод изображения |
Nano Banana 2 Lite продаётся только с потокенной тарификацией. Актуальные цены — на странице модели.
Краткий пример
curl https://api.seedrouter.ai/v1/images/generations \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.1-flash-lite-image-official",
"contents": [{"parts": [{"text": "A ceramic teapot on a linen tablecloth, soft window light"}]}],
"generationConfig": {
"responseModalities": ["IMAGE"],
"imageConfig": {"aspectRatio": "16:9", "imageSize": "1K"}
}
}'Конечная точка
POST https://api.seedrouter.ai/v1/images/generations| Заголовок | Значение |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/json |
Тело запроса — это запрос generateContent от Google с одним дополнением: полем model, поскольку путь этой конечной точки не содержит модели. В ответе приходит идентификатор задачи, а не готовое изображение. Храните API-ключи в серверном коде. Прямые вызовы /v1beta/models/...:generateContent не поддерживаются; используйте эту конечную точку.
Параметры
| Имя | Тип | Обязательный | По умолчанию | Примечания |
|---|---|---|---|---|
model | string | Да | — | ID модели, указанный выше. |
contents | Content[] | Да | — | От 1 до 32 реплик. У каждой есть parts и необязательная role (user или model); последняя реплика — user. |
contents[].parts[].text | string | — | — | Текстовая часть. Требуется хотя бы одна текстовая часть. |
contents[].parts[].fileData | object | Нет | — | {"mimeType": "...", "fileUri": "https://..."}; референс-изображение, видео или PDF. Всего до 14. |
systemInstruction | object | Нет | — | {"parts": [{"text": "..."}]}. |
safetySettings | object[] | Нет | — | Пары {"category", "threshold"}; см. ниже. |
generationConfig.responseModalities | enum[] | Нет | текст и изображение | ["IMAGE"] — только изображения, или ["TEXT", "IMAGE"]. |
generationConfig.imageConfig.aspectRatio | enum | Нет | Соотношение сторон входного изображения, иначе 1:1 | 1:1, 1:4, 4:1, 1:8, 8:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9. |
generationConfig.imageConfig.imageSize | enum | Нет | 1K | Только 1K. |
generationConfig.candidateCount | integer | Нет | 1 | Только 1. Один запрос возвращает одно изображение. |
generationConfig.temperature | number | Нет | По умолчанию модели | 0–2. |
generationConfig.topP | number | Нет | По умолчанию модели | 0–1. |
generationConfig.topK | integer | Нет | По умолчанию модели | 1 или больше. |
generationConfig.seed | integer | Нет | — | 32-битное целое число. |
generationConfig.maxOutputTokens | integer | Нет | По умолчанию модели | 1–4 096. |
generationConfig.stopSequences | string[] | Нет | — | До 5. |
generationConfig.mediaResolution | enum | Нет | По умолчанию модели | MEDIA_RESOLUTION_LOW, MEDIA_RESOLUTION_MEDIUM, MEDIA_RESOLUTION_HIGH. Определяет, сколько токенов расходуют входные медиа. |
generationConfig.thinkingConfig.includeThoughts | boolean | Нет | false | Возвращать сводки размышлений модели в output.thoughts. |
generationConfig.thinkingConfig.thinkingLevel | enum | Нет | MINIMAL | MINIMAL или HIGH. |
Категории безопасности: HARM_CATEGORY_HARASSMENT, HARM_CATEGORY_HATE_SPEECH, HARM_CATEGORY_SEXUALLY_EXPLICIT, HARM_CATEGORY_DANGEROUS_CONTENT. Пороги: BLOCK_NONE, BLOCK_ONLY_HIGH, BLOCK_MEDIUM_AND_ABOVE, BLOCK_LOW_AND_ABOVE, OFF.
Неизвестные поля отклоняются. Пока недоступны: заземление через Google Search (tools) и кэшированный контент. inlineData не принимается; передавайте медиа как URL в fileData.
Размер вывода
imageSize | Вывод 1:1 | Токены изображения |
|---|---|---|
1K | 1024×1024 | 1 120 |
Другие соотношения сторон сохраняют то же число токенов.
Режимы
Отдельного параметра режима или конечной точки для редактирования нет.
| Операция | Параметры |
|---|---|
| Текст в изображение | текстовая часть |
| Редактирование или композиция | текстовая часть + одна или несколько частей fileData |
| Многошаговое редактирование | предыдущие реплики user и model, затем новая реплика user (см. примечание ниже) |
Чтобы продолжить диалог, восстановите реплику model из output.parts предыдущей задачи в том же порядке: текстовая часть превращается в {"text": ..., "thoughtSignature": ...}, а часть с изображением — в {"fileData": {"mimeType": "image/<output_format>", "fileUri": <data[image].url>}, "thoughtSignature": ...}. Сохраняйте каждую thoughtSignature в точности в том виде, в котором она была возвращена: это URL подписи, которую мы сохранили для вас (подпись изображения 4K занимает несколько мегабайт), и мы восстанавливаем её до того, как запрос попадёт к модели. Принимаются только подписи из результатов ваших собственных задач.
Редактирование по референсному изображению
curl https://api.seedrouter.ai/v1/images/generations \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.1-flash-lite-image-official",
"contents": [{
"role": "user",
"parts": [
{"text": "Turn this photo into a watercolor painting. Keep the composition."},
{"fileData": {"mimeType": "image/jpeg", "fileUri": "https://example.com/photo.jpg"}}
]
}]
}'Замените пример URL на адрес своего доступного изображения.
Медиа на входе
Этот API принимает только ссылки в виде URL. Base64 inlineData, URL вида data: и multipart-загрузки не принимаются. Playground загружает выбранные файлы в хранилище, а затем отправляет их URL.
Референсы должны быть публичными HTTP(S)-URL, каждый меньше 50 МБ и не более 100 МБ в сумме: изображения (image/png, image/jpeg, image/webp, image/heic, image/heif), видео (video/mp4, video/mpeg, video/mov, video/avi, video/x-flv, video/mpg, video/webm, video/wmv, video/3gpp) или PDF-документы (application/pdf). mimeType должен соответствовать файлу. URL загружаются во время обработки; недоступное изображение приводит к сбою задачи, а неудачная задача не оплачивается.
Параметры тарификации
Актуальные тарифы — в разделе цен модели. gemini-3.1-flash-lite-image-official тарифицирует по использованию: входные токены (текст и референсные изображения), выходные токены текста и мышления и выходные токены изображения — каждые по своему тарифу. Главный фактор — вывод изображения; каждое изображение имеет размер 1K.
Итоговые списания смотрите в истории использования аккаунта. Неудачные задачи не оплачиваются.
Схема ответа
При отправке возвращается ссылка на задачу:
{
"id": "task_...",
"model": "gemini-3.1-flash-lite-image-official",
"status": "processing",
"created_at": 1790310979
}Опрос задачи
curl https://api.seedrouter.ai/v1/tasks/YOUR_TASK_ID \
-H "Authorization: Bearer $SEEDROUTER_API_KEY"Опрашивайте задачу каждые несколько секунд, пока status не станет completed или failed. Сетевой тайм-аут при опросе не означает, что генерация не удалась: сохраните идентификатор задачи и продолжайте её проверять. Не создавайте новую задачу, чтобы узнать прогресс.
Полный пример опроса
Запустите этот код после примера отправки на Python выше.
import time
deadline = time.monotonic() + 600
while time.monotonic() < deadline:
result = requests.get(
f"https://api.seedrouter.ai/v1/tasks/{task_id}",
headers={"Authorization": f"Bearer {os.environ['SEEDROUTER_API_KEY']}"},
timeout=30,
)
result.raise_for_status()
task = result.json()
if task["status"] == "completed":
for image in task["output"]["data"]:
print(image["url"])
break
if task["status"] == "failed":
raise RuntimeError(task["error"]["message"])
time.sleep(3)
else:
raise TimeoutError(f"Still waiting. Resume polling task {task_id}.")Завершённая задача
{
"id": "task_...",
"model": "gemini-3.1-flash-lite-image-official",
"status": "completed",
"created_at": 1790310979,
"finished_at": 1790311001,
"output": {
"created": 1790310999,
"data": [{"url": "https://static.seedrouter.ai/media/tasks/task_example/0.jpg"}],
"output_format": "jpeg",
"usage": {
"input_tokens": 27,
"output_tokens": 1518,
"total_tokens": 1545,
"output_tokens_details": {"image_tokens": 1120, "text_tokens": 398, "reasoning_tokens": 0}
}
}
}| Поле | Значение |
|---|---|
id | Сохраните этот ID для последующих запросов. |
status | processing, completed или failed. |
created_at, finished_at | Unix-время в секундах. |
output.data[].url | URL сгенерированного изображения. |
output.text | Текст, который модель вернула вместе с изображением, если responseModalities включает TEXT. Размышления сюда не входят. |
output.thoughts | Сводки размышлений модели, если includeThoughts равно true. Промежуточные изображения, которые модель рисует в процессе размышления, не доставляются. |
output.output_format | Фактический формат изображения. |
output.parts | Итоговые части ответа по порядку, для многошагового редактирования: {"text", "thoughtSignature"} или {"image": <index into data>, "thoughtSignature"}. thoughtSignature — это URL; отправляйте её обратно без изменений. |
output.usage | Расход токенов. output_tokens учитывает вывод текста, мышления и изображения; output_tokens_details.image_tokens — доля изображения. |
error | Структурированная ошибка неудачной задачи. |
Потоковая передача (streamGenerateContent) не поддерживается; результаты доставляются через задачу.
Ошибки
Запросы, отклонённые до создания задачи, возвращают HTTP-ошибку с объектом error. Задача, завершившаяся сбоем после принятия, при запросе возвращает HTTP 200 со status: "failed" и объектом error. Изображение, заблокированное фильтрами безопасности модели, завершается ошибкой content_policy_violation; ответ без изображения — ошибкой no_output.
Коды, HTTP-статусы и рекомендации по повторным попыткам — в общем каталоге ошибок.
{
"id": "task_...",
"status": "failed",
"error": {
"code": 60001,
"message": "The request was rejected by the content policy. Please revise the prompt or input images."
}
}Если тайм-аут произошёл уже при отправке, проверьте историю задач, прежде чем отправлять запрос повторно: первый запрос мог быть принят.
Советы
- Описывайте объект, окружение, освещение и стиль полными предложениями.
- При редактировании укажите, что нужно изменить и что должно остаться прежним.
- Выбирайте Nano Banana 2 или Nano Banana Pro, если нужен вывод в 2K или 4K.
- Сохраняйте полученные изображения в своём хранилище, если нужна долговременная копия.
