> ## Documentation Index
> Fetch the complete documentation index at: https://docs.laozhang.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Nano Banana 2 Lite API: изображения 1K за $0.025, генерация и правка

> Генерация и редактирование изображений 1K через gemini-3.1-flash-lite-image с API-ключом LaoZhang API без аккаунта Google: 10 соотношений сторон, работа под нагрузкой и готовый код.

Nano Banana 2 Lite — модель изображений Gemini, которую Google называет самой быстрой и дешёвой: она рассчитана на изображения 1K, быстрые правки и большие объёмы.

## Что поддерживает Lite

| Параметр | Значение |
| - | - |
| ID модели | `gemini-3.1-flash-lite-image` (стабильная) |
| Цена | **\$0.025 за вызов** для генерации и редактирования, ниже стандартной цены Google \$0.0336 за изображение (публичные цены на 24 сентября 2026 года, см. [Цены на API моделей ИИ](https://docs.laozhang.ai/ru/models.md)) |
| Аккаунт | Аккаунт Google не нужен, только API-ключ LaoZhang API |
| Параллельность и лимиты | Нет лимита параллельности и троттлинга на платформе; `429` возникает из-за ёмкости апстрима, см. [Параллельность и 429](https://docs.laozhang.ai/ru/faq/api-concurrency.md) |
| Оплата | Каждый ответ HTTP 200 тарифицируется как один вызов, даже без изображения; ответы не 200 не тарифицируются. См. [правила оплаты](https://docs.laozhang.ai/ru/api-capabilities/nano-banana-image.md) |
| Эндпоинты | Нативный `generateContent` или OpenAI-совместимый chat completions |
| Размер вывода | Только 1K |
| Соотношения сторон | 10, в нативном маршруте Gemini: `1:1`, `2:3`, `3:2`, `3:4`, `4:3`, `4:5`, `5:4`, `9:16`, `16:9`, `21:9` |
| Вход | Текст и до 14 изображений объектов |
| Выход | Изображение в Base64 в ответе |
| Привязка к поиску Google | Не поддерживается |

На OpenAI-совместимом маршруте соотношение сторон задать нельзя: промпт без изображений возвращает квадратное изображение.

![Современная логистическая панель на тёмно-сером фоне с бирюзовыми акцентами, сгенерировано Nano Banana 2 Lite](https://mintcdn.com/laozhangai-edd05f2c/YuJHjB7ivlJQODe0/images/samples/lite-en-generate.jpg?fit=max\&auto=format\&n=YuJHjB7ivlJQODe0\&q=85\&s=1a0b918a99dd6f11e7339d4c487c9cdd)

Результат примера генерации ниже: 1K, 16:9. Промпт: Generate an image of a modern logistics dashboard on a dark gray background with cyan highlights.

Google отмечает, что Lite не оптимизирована для большого числа референсов и многошаговой правки. Для таких задач, для вывода 2K или 4K и для привязки к поиску Google используйте [Nano Banana 2.1](https://docs.laozhang.ai/ru/api-capabilities/nano-banana-2-1-image.md) или [Nano Banana 2](https://docs.laozhang.ai/ru/api-capabilities/nano-banana2-image.md), а для самых сложных макетов — [Nano Banana Pro](https://docs.laozhang.ai/ru/api-capabilities/nano-banana-pro-image.md). Все пять моделей сравниваются в [обзоре Nano Banana](https://docs.laozhang.ai/ru/api-capabilities/nano-banana-image.md).

## Подготовка к вызову

**1. Создайте API-ключ**

В разделе [Управление токенами](https://api.laozhang.ai/token) откройте диалог создания токена (创建令牌), в поле **Режим оплаты** (计费模式) выберите **«сначала по использованию»** (按量优先, рекомендуется) или **«оплата за вызов»** (按次计费) и нажмите **Создать** (创建). У Lite есть только цена за вызов, поэтому ключ с режимом «оплата по использованию» (按量计费) её вызвать не может; когда запрос тарифицируется, описано в [правилах оплаты](https://docs.laozhang.ai/ru/api-capabilities/nano-banana-image.md).

**2. Задайте ключ и установите зависимости**

```bash theme={null}
export LAOZHANG_API_KEY="sk-..."  # замените на свой API-ключ LaoZhang API
python -m pip install openai requests
```

**3. Добавьте функцию сохранения для cURL**

Для примеров с cURL нужен `jq`. Определите эту shell-функцию: она сохраняет последнее изображение из нативного ответа Gemini (если вместе с результатом пришли промежуточные изображения, финальное — последнее) с расширением, которое соответствует `mimeType`:

```bash theme={null}
save_image() {
  local image='[.candidates[]?.content.parts[]? | select(.inlineData and (.thought | not))][-1].inlineData'
  local ext
  case "$(jq -r "$image.mimeType" "$1")" in
    image/png) ext=png ;;
    image/jpeg) ext=jpg ;;
    image/webp) ext=webp ;;
    *) jq '{error, promptFeedback, finishReasons: [.candidates[]?.finishReason]}' "$1"; return 1 ;;
  esac
  jq -r "$image.data" "$1" | base64 --decode > "$2.$ext" && echo "Сохранено: $2.$ext"
}
```

Если в ответе нет изображения, функция выводит поля `error`, `promptFeedback` и `finishReason`.

## Генерация изображения

> [tab] cURL
>
> ```bash theme={null}
> curl --fail-with-body --max-time 300 \
>   "https://api.laozhang.ai/v1beta/models/gemini-3.1-flash-lite-image:generateContent" \
>   -H "Authorization: Bearer $LAOZHANG_API_KEY" \
>   -H "Content-Type: application/json" \
>   -d '{
>     "contents": [{
>       "role": "user",
>       "parts": [{"text": "Generate an image of a modern logistics dashboard on a dark gray background with cyan highlights."}]
>     }],
>     "generationConfig": {
>       "responseModalities": ["IMAGE"],
>       "imageConfig": {"aspectRatio": "16:9", "imageSize": "1K"}
>     }
>   }' \
>   -o lite-response.json
>
> save_image lite-response.json lite-dashboard
> ```

> [tab] Python
>
> Сохраните скрипт как `nano_banana_lite.py`. Он генерирует изображение по промпту или редактирует изображения, перечисленные после промпта:
>
> ```python theme={null}
> """Генерация и редактирование изображений 1K через Nano Banana 2 Lite (gemini-3.1-flash-lite-image)."""
> import argparse
> import base64
> import os
> import sys
> from pathlib import Path
>
> import requests
>
> URL = "https://api.laozhang.ai/v1beta/models/gemini-3.1-flash-lite-image:generateContent"
> RATIOS = ["1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "21:9"]
> MIME_TYPES = {".png": "image/png", ".jpg": "image/jpeg", ".jpeg": "image/jpeg", ".webp": "image/webp"}
> EXTENSIONS = {"image/png": "png", "image/jpeg": "jpg", "image/webp": "webp"}
>
> parser = argparse.ArgumentParser(description="Сгенерировать изображение или отредактировать переданные.")
> parser.add_argument("prompt")
> parser.add_argument("images", nargs="*", help="до 14 изображений PNG, JPEG или WebP")
> parser.add_argument("--ratio", choices=RATIOS, help="соотношение сторон; без него — 1:1 или как у входного изображения")
> parser.add_argument("--out", default="nano-banana-lite", help="имя выходного файла без расширения")
> args = parser.parse_args()
> if len(args.images) > 14:
>     sys.exit("Передайте не больше 14 изображений.")
>
> parts = [{"text": args.prompt}]
> for path in args.images:
>     mime = MIME_TYPES.get(Path(path).suffix.lower())
>     if mime is None:
>         sys.exit(f"Нужен файл PNG, JPEG или WebP: {path}")
>     data = base64.b64encode(Path(path).read_bytes()).decode("ascii")
>     parts.append({"inlineData": {"mimeType": mime, "data": data}})
>
> image_config = {"imageSize": "1K"}
> if args.ratio:
>     image_config["aspectRatio"] = args.ratio
>
> response = requests.post(
>     URL,
>     headers={"Authorization": f"Bearer {os.environ['LAOZHANG_API_KEY']}"},
>     json={
>         "contents": [{"role": "user", "parts": parts}],
>         "generationConfig": {"responseModalities": ["IMAGE"], "imageConfig": image_config},
>     },
>     timeout=300,
> )
> if response.status_code != 200:
>     sys.exit(f"HTTP {response.status_code}: {response.text[:500]}")
>
> result = response.json()
> images = [
>     part["inlineData"]
>     for candidate in result.get("candidates") or []
>     for part in (candidate.get("content") or {}).get("parts") or []
>     if "inlineData" in part and not part.get("thought")
> ]
> if not images:
>     reasons = [candidate.get("finishReason") for candidate in result.get("candidates") or []]
>     sys.exit(f"Изображение не получено: {result.get('promptFeedback') or reasons}")
> for number, image in enumerate(images, start=1):
>     suffix = "" if number == 1 else f"-{number}"
>     output = Path(f"{args.out}{suffix}.{EXTENSIONS.get(image['mimeType'], 'bin')}")
>     output.write_bytes(base64.b64decode(image["data"]))
>     print("Сохранено:", output)
> ```
>
> Сгенерируйте изображение с соотношением 16:9:
>
> ```bash theme={null}
> python nano_banana_lite.py "Generate an image of a modern logistics dashboard on a dark gray background with cyan highlights." --ratio 16:9 --out lite-dashboard
> ```

Изображение приходит в Base64 в `candidates[0].content.parts[].inlineData.data`, а формат указывает `mimeType`. Оба примера декодируют его и сохраняют соответствующий файл PNG, JPEG или WebP.

## Редактирование изображения

Поставьте в `parts` сначала инструкцию, а за ней изображение. Локальный файл передаётся как `inlineData` в Base64 с `mimeType`, соответствующим файлу.

> [tab] cURL
>
> Собирайте тело запроса через `jq`, чтобы большое изображение не превысило лимиты аргументов shell:
>
> ```bash theme={null}
> base64 < product.jpg | tr -d '\n' > product.b64
> jq -n --rawfile image product.b64 '{
>   contents: [{
>     role: "user",
>     parts: [
>       {text: "Оставь изделие без изменений и замени фон на светло-серую студийную стену."},
>       {inlineData: {mimeType: "image/jpeg", data: $image}}
>     ]
>   }],
>   generationConfig: {
>     responseModalities: ["IMAGE"],
>     imageConfig: {aspectRatio: "4:5", imageSize: "1K"}
>   }
> }' > lite-edit-request.json
>
> curl --fail-with-body --max-time 300 \
>   "https://api.laozhang.ai/v1beta/models/gemini-3.1-flash-lite-image:generateContent" \
>   -H "Authorization: Bearer $LAOZHANG_API_KEY" \
>   -H "Content-Type: application/json" \
>   --data-binary @lite-edit-request.json \
>   -o lite-edit-response.json
>
> save_image lite-edit-response.json lite-product
> ```

> [tab] Python
>
> Используйте `nano_banana_lite.py` из раздела «Генерация изображения» и передайте файл после промпта:
>
> ```bash theme={null}
> python nano_banana_lite.py "Оставь изделие без изменений и замени фон на светло-серую студийную стену." product.jpg --ratio 4:5 --out lite-product
> ```

Типичные правки в Lite — замена фона, смена цвета, наклейки и быстрые вариации. Укажите в инструкции, что должно остаться без изменений. Для композиций из нескольких референсных изображений используйте Nano Banana 2.1 или Nano Banana 2.

## OpenAI-совместимый маршрут

Если приложение уже использует OpenAI SDK, вызывайте Lite через chat completions. На этом маршруте нет настроек соотношения сторон и размера, поэтому промпт без изображений возвращает квадратное изображение 1K. Изображение приходит как data URL в Base64 внутри `message.content`. Сохраните скрипт как `nano_banana_lite_chat.py`:

```python theme={null}
"""Генерация и редактирование изображения через Nano Banana 2 Lite по OpenAI-совместимому маршруту."""
import argparse
import base64
import os
import re
import sys
from pathlib import Path

from openai import OpenAI

MIME_TYPES = {".png": "image/png", ".jpg": "image/jpeg", ".jpeg": "image/jpeg", ".webp": "image/webp"}
EXTENSIONS = {"png": "png", "jpeg": "jpg", "jpg": "jpg", "webp": "webp"}

parser = argparse.ArgumentParser(description="Сгенерировать изображение или отредактировать переданные.")
parser.add_argument("prompt")
parser.add_argument("images", nargs="*", help="изображения PNG, JPEG или WebP для редактирования")
parser.add_argument("--out", default="nano-banana-lite-chat", help="имя выходного файла без расширения")
args = parser.parse_args()

content = args.prompt
if args.images:  # правка: отправляем инструкцию и локальные изображения как data URL
    content = [{"type": "text", "text": args.prompt}]
    for path in args.images:
        mime = MIME_TYPES.get(Path(path).suffix.lower())
        if mime is None:
            sys.exit(f"Нужен файл PNG, JPEG или WebP: {path}")
        encoded = base64.b64encode(Path(path).read_bytes()).decode("ascii")
        content.append({"type": "image_url", "image_url": {"url": f"data:{mime};base64,{encoded}"}})

# max_retries=0: автоповтор после таймаута мог бы сгенерировать и оплатить изображение дважды
client = OpenAI(api_key=os.environ["LAOZHANG_API_KEY"], base_url="https://api.laozhang.ai/v1", timeout=300, max_retries=0)
reply = client.chat.completions.create(
    model="gemini-3.1-flash-lite-image",
    messages=[{"role": "user", "content": content}],
)
text = reply.choices[0].message.content or ""

found = re.findall(r"data:image/(png|jpe?g|webp);base64,([A-Za-z0-9+/=]+)", text)
if not found:
    sys.exit(f"Изображение не получено: {text[:300]}")
for number, (kind, encoded) in enumerate(found, start=1):
    suffix = "" if number == 1 else f"-{number}"
    output = Path(f"{args.out}{suffix}.{EXTENSIONS[kind]}")
    output.write_bytes(base64.b64decode(encoded + "=" * (-len(encoded) % 4)))
    print("Сохранено:", output)
```

Сгенерируйте изображение, а затем отредактируйте локальный файл:

```bash theme={null}
python nano_banana_lite_chat.py "Сгенерируй чистую иллюстрацию в синих тонах для мобильной посадочной страницы SaaS-сервиса." --out lite-chat-illustration
python nano_banana_lite_chat.py "Преврати эту фотографию в плоскую векторную иллюстрацию. Сохрани композицию." photo.jpg --out lite-chat-vector
```

## Lite под высокой нагрузкой

Lite подходит для черновиков, превью и интерактивных приложений, которые создают много изображений. Платформа не ограничивает параллельность, а редкий `429` вызван ёмкостью апстрима; см. [Параллельность и 429](https://docs.laozhang.ai/ru/faq/api-concurrency.md). Для рабочего трафика:

1. Переиспользуйте HTTP-соединения, а не создавайте новый клиент для каждого изображения.
2. Повторяйте ответы 429 и 5xx и сетевые ошибки с экспоненциальной задержкой и случайным разбросом.
3. Задайте бизнес-таймаут и перед повтором запроса с таймаутом проверьте [журнал вызовов](https://api.laozhang.ai/log), чтобы не оплатить его дважды.
4. Не повторяйте ответ HTTP 200 без изображения. Он уже оплачен, а повторная отправка того же содержимого обычно снова ничего не возвращает.
5. Записывайте для каждого вызова модель, код статуса, задержку и время запроса.
6. Перед долгим запуском сообщите поддержке по адресу [hi@laozhang.ai](mailto:hi@laozhang.ai) ожидаемую пиковую параллельность, дневной объём и размеры входных изображений, чтобы подтвердить мощность.

## Ошибки и оплата

* Lite поддерживает только `1K`. Не передавайте `512`, `2K` или `4K`; для других размеров используйте Nano Banana 2.1, Nano Banana 2 или Pro.
* Пишите размеры с заглавной K. Значения в нижнем регистре, например `1k`, Google отклоняет.
* Запрос может вернуть HTTP 200 без изображения, например если промпт не просит изображение или проверка безопасности блокирует результат. Он тарифицируется как один вызов, поэтому измените промпт или изображение, прежде чем отправлять снова; см. раздел «Как не платить за пустые ответы» в [обзоре Nano Banana](https://docs.laozhang.ai/ru/api-capabilities/nano-banana-image.md).
* HTTP 401 означает неверный ключ или заголовок `Authorization: Bearer`. Ответы 429 и 5xx повторяйте с нарастающей задержкой.

## Частые вопросы

### Может ли Lite выдавать 2K или 4K и использовать поиск Google?

Нет, ни то ни другое: Lite выдаёт только 1K и не поддерживает привязку к поиску. Все три модели ниже принимают те же запросы, поэтому достаточно сменить ID модели:

* `gemini-nano-banana-2.1` (Nano Banana 2.1, \$0.045 за вызов) — для размеров от 1K до 4K
* `gemini-3.1-flash-image` (Nano Banana 2) — если нужны ещё 512px, 14 соотношений сторон или привязка к веб-поиску и поиску изображений
* `gemini-3-pro-image` (Nano Banana Pro) — для сложных макетов от 1K до 4K с привязкой к веб-поиску

### Подходит ли Lite для композиций и серий с одним персонажем?

Не очень. Lite принимает до 14 изображений объектов, но в таблице референсов Google для неё нет референсов персонажей и стиля, а сам Google отмечает, что модель не оптимизирована для нескольких референсов и последовательной многошаговой правки.

Lite справляется с локальными правками одного изображения, например со сменой цвета или фона. Чтобы объединить несколько изображений в одно или сохранить внешность человека в серии, используйте Nano Banana 2.1 или Nano Banana 2: они принимают до 10 изображений объектов и 4 изображений персонажей.

### Является ли `gemini-3.1-flash-lite-image` стабильным ID модели?

Да. На странице модели Google она указана как стабильная версия, без суффикса `-preview`. Используйте ID ровно в таком написании.

### Можно ли запускать Lite с высокой параллельностью?

Да, платформа не ограничивает параллельность. Перед запуском настройте повторы и таймауты по разделу «Lite под высокой нагрузкой» и сообщите поддержке ожидаемый пик, чтобы подтвердить мощность апстрима.

## Связанные материалы и источники

* [Обзор Nano Banana](https://docs.laozhang.ai/ru/api-capabilities/nano-banana-image.md) — сравнение пяти моделей, двух протоколов и оплаты
* [Nano Banana 2.1](https://docs.laozhang.ai/ru/api-capabilities/nano-banana-2-1-image.md) — вывод от 1K до 4K, 14 соотношений сторон и привязка к поиску по более низкой цене
* [Nano Banana 2](https://docs.laozhang.ai/ru/api-capabilities/nano-banana2-image.md) — вывод от 512px до 4K, 14 соотношений сторон и привязка к поиску
* [Nano Banana Pro](https://docs.laozhang.ai/ru/api-capabilities/nano-banana-pro-image.md) — сложные макеты и ассеты, критичные для бренда
* [Редактирование Standard](https://docs.laozhang.ai/ru/api-capabilities/nano-banana-image-edit.md) — выбор между Lite и Nano Banana 2 при переносе правок с `gemini-2.5-flash-image`
* [Google: Nano Banana image generation](https://ai.google.dev/gemini-api/docs/image-generation) — размеры, соотношения сторон и лимиты референсов Gemini 3.1 Flash Lite Image
* [Google: страница модели Gemini 3.1 Flash Lite Image](https://ai.google.dev/gemini-api/docs/models/gemini-3.1-flash-lite-image) — стабильный ID модели и поддерживаемые возможности
* [Журнал вызовов](https://docs.laozhang.ai/en/faq/call-logs.md) — статус и списание по запросу


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.