Nano Banana: выбор модели и подключение OpenAI API
Nano Banana 2, 2.1 и Pro в BetterToken: сравнение товаров, генерация и редактирование через OpenAI Images, размеры, Python SDK, сохранение и фактическая оплата.
Обновлено 22 октября 2026 г..
Выбор модели · Сравнение изображений · Быстрое подключение · Размеры и параметры · Редактирование по референсу · Python SDK · Оплата и устранение ошибок
С одним BetterToken API Key можно вызывать все доступные на платформе модели генерации изображений, включая Nano Banana 2, 2.1, Pro и серию GPT Image. Используйте единое подключение для генерации по тексту, изменения цвета по референсу и объединения двух изображений, а затем выбирайте модель под задачу и сосредоточьтесь на композиции, материалах и творческом замысле.
Если вы ещё не выбрали модель, начните с Nano Banana 2 + 1K, чтобы подобрать композицию, а затем создайте материалы 2K или 4K с подходящим описанием или референсом. В наших примерах товаров с одинаковым заданием Nano 2 отвечала быстрее, 2.1 сильнее выделяла объект, а Pro оставляла больше свободного пространства. Эти различия помогут выбрать направление для черновиков; окончательный выбор зависит от товара и макета.
Почему удобно подключать Nano Banana через BetterToken?
Формат подключения Nano Banana зависит от инструмента и сервиса: одни используют нативную структуру сообщений Gemini, другие — OpenAI Images, а третьи выполняют генерацию через Chat Completions. Различия в полях запроса, загрузке референсов и расположении изображений в ответе заставляют разработчиков тратить время на адаптацию API.
BetterToken предоставляет три способа вызывать Nano Banana: OpenAI Images, нативную генерацию Gemini и OpenAI Chat Completions. Если в проекте уже используется OpenAI SDK, выбирайте Images или Chat по задаче. Если у вас есть Google SDK или рабочий процесс Gemini, оставьте нативный формат. Во всех трёх случаях используется один BetterToken API Key; параметры и область применения описаны в разделе Выбор протокола.
- Сравнивайте модели без отдельного подключения. Nano Banana и GPT Image работают с одним Key. В рабочем процессе Images можно повторно использовать авторизацию, адрес запроса и декодирование Base64, меняя параметры с учётом поддержки конкретной модели.
- Переходите от идеи к редактированию в привычном клиенте. Подберите направление текстом, загрузите один референс для смены цвета или два изображения для объединения сцены. Для Nano Banana не нужно строить отдельную цепочку вызовов Gemini, если у вас уже есть клиент OpenAI Images.
- Проверяйте характеристики и стоимость результата. Вместе с изображением ответ содержит фактический формат, размер в пикселях, тарифный уровень и сведения о списании. Приложение сможет правильно сохранить изображение, разместить его в макете и учесть расходы.
При выборе модели ориентируйтесь на качество изображения, а при подключении к приложению — на правила параметров и поля ответа. Сначала сравним изображения с одинаковым заданием, затем подключим генерацию и редактирование.
Выберите модель под задачу
| Задача | С чего начать | Что проверить дальше |
|---|---|---|
| Быстро подобрать композицию, цвета и стиль товара | nano-banana-2, 1K | Оцените объект, освещение и свободное пространство, затем повысьте разрешение |
| Сравнить передачу материала и размер объекта | nano-banana-2.1 | Используйте одинаковые запрос и параметры, сравните результат с Nano 2 |
| Найти изображение товара с местом для заголовка | nano-banana-pro | Укажите свободную область в запросе и проверьте, подходит ли макет |
| Перекрасить готовое изображение товара или заменить фон | Редактирование Images в любой из трёх моделей | Начните с реального референса и проверьте конструкцию товара, этикетки и цвета |
| Объединить два референса в одну сцену | Начните с примера для двух изображений в Pro | Уточните, что взять из каждого изображения и где разместить элементы |
Меняйте только одну ключевую переменную за раз. При сравнении моделей фиксируйте запрос и параметры; при сравнении композиций — модель. Иначе сложно понять, что изменило изображение: модель, запрос или размер.
Как три модели Nano отображают один запрос для товарного фото?
Задача: кораллово-красная керамическая кружка на столе из светло-серого камня, бежевая льняная ткань и белая надпись BETTER DAY на кружке; свет падает сверху слева. Полные изображения имеют размер 2048 × 2048; фрагменты вырезаны из оригиналов в одинаковом масштабе.
Край кружки и глазурь
Типографика и макет
Лён и столешница
| Что сравниваем | Nano Banana 2 | Nano Banana 2.1 | Nano Banana Pro |
|---|---|---|---|
| Материал | Заметны различия глазури у края, тёмные точки и глиняное основание | Видны мягкий переход у края, мелкие точки и отражения | Более ровная поверхность с непрерывным бликом |
| Текст | Две строки, крупный шрифт | Одна строка, широкий межбуквенный интервал | Одна строка, более узкие и мелкие буквы |
| Композиция | Хорошо выделены кружка, ткань и фактура каменного стола | Кружка занимает большую часть кадра, объект собраннее | Кружка меньше, край стола и свисающая ткань оставляют больше свободного места |
В этом примере начните с Nano 2, если нужна фактура ручной керамики; сравните с 2.1, если хотите сильнее выделить товар; для места под заголовок посмотрите на свободное пространство в изображении Pro. Это особенности данного примера; требования к композиции всё равно указывайте в запросе.
Сравнение с GPT Image 2.5
В примерах Flare и Sunburst поверхность кружки ровнее, а типографика и переносы строк различаются. Все пять моделей отобразили короткую английскую надпись «BETTER DAY», но ни одна не сохранила единый шрифт и макет. Брендовый шрифт, точный логотип и длинный текст лучше добавлять отдельно после генерации.
| Модель | Время для квадратного изображения 1K | Время для квадратного изображения 2K |
|---|---|---|
| Nano Banana 2 | 16.2 секунды | 27.1 секунды |
| Nano Banana 2.1 | 68.6 секунды | 73.5 секунды |
| Nano Banana Pro | 23.3 секунды | 31.0 секунды |
| GPT Image 2.5 Flare | 41.6 секунды | 62.3 секунды |
| GPT Image 2.5 Sunburst | 37.4 секунды | 38.5 секунды |
Время получено по одному запросу на целевой уровень с одинаковым заданием для товара; оно включает ожидание обработки и сети. Квадратные изображения Nano 1K имеют размер 1024 × 1024, а примеры двух моделей GPT на этом уровне — 1254 × 1254. Все изображения 2K имеют размер 2048 × 2048. В этой задаче Nano 2 отвечала быстрее и подходит для итеративных черновиков; эти значения не являются долгосрочными средними.
Превратите задачу в описание изображения и параметры результата
В повторно используемом запросе для товарной фотосъёмки укажите как минимум объект, материал, освещение, фон и то, что нужно сохранить. Например:
Create a realistic studio product photograph of one coral-red ceramic mug on a pale grey stone table, a folded beige linen cloth beside it. Print the exact white text BETTER DAY on the mug. Soft upper-left light, natural shadows, detailed ceramic glaze and linen fibres. Show the entire mug, simple background, no watermark, no additional objects or text.Замените объект, цвет и материал на характеристики своего товара. Если нужен заголовок, укажите, с какой стороны оставить свободное место; если нужна гладкая глазурь, опишите поверхность. Фотография реального товара в качестве референса лучше ограничивает его внешний вид, чем один текст. Перед публикацией всё равно проверьте, не изменилась ли конструкция товара.
Управляйте разрешением через параметры. Во всех трёх сравнительных изображениях, где «2K» или «4K» были указаны только в тексте запроса, результат всё равно имел размер 1024 × 1024. Начните с 1K, а затем задайте image_size: "2K" или "4K". Повышение уровня создаёт новое изображение; чтобы продолжить существующую композицию, используйте понравившееся изображение как референс и проверяйте изменения деталей.
Создайте первое изображение через OpenAI Images
Начните новое подключение с HTTP-примера ниже. Если вы уже используете OpenAI Python-клиент, перейдите к примеру SDK. Для генерации по тексту и редактирования по референсу используются одинаковые авторизация и логика сохранения изображения.
| Параметр | Значение |
|---|---|
| OpenAI SDK Base URL | https://bettertoken.ai/v1 |
| Генерация по тексту | POST https://bettertoken.ai/v1/images/generations, JSON |
| Редактирование по референсу | POST https://bettertoken.ai/v1/images/edits, multipart-форма |
| Авторизация | Authorization: Bearer YOUR_API_KEY |
| Model ID | nano-banana-2, nano-banana-2.1, nano-banana-pro |
| Изображение в ответе | data[].b64_json содержит изображение, data[].mime_type — фактический формат |
Получить API Key · Модели и цены
curl: одно горизонтальное товарное изображение 2K
Задайте BETTERTOKEN_API_KEY в терминале macOS или Linux и выполните запрос. Храните Key в переменной среды на сервере, не встраивайте его в общедоступную веб-страницу. Запрос возвращает результат синхронно; --max-time 650 даёт время на генерацию.
export BETTERTOKEN_API_KEY="YOUR_API_KEY"
curl --fail-with-body --max-time 650 \ "https://bettertoken.ai/v1/images/generations" \ -H "Authorization: Bearer $BETTERTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "nano-banana-2", "prompt": "A product photo of a green ceramic mug on a studio table", "image_size": "2K", "aspect_ratio": "16:9", "n": 1, "response_format": "b64_json" }' -o response.jsonИзображение ниже создано с этими параметрами: 2752 × 1536, JPEG, около 35.7 секунды на запрос. Горизонтальная композиция подходит для обложки или иллюстрации к материалу. При сохранении выбирайте расширение по фактическому формату в ответе.
Nano Banana 2 · горизонтальное изображение 2K
16:9, фактический размер 2752 × 1536, JPEG

Сохраняйте изображение с расширением по фактическому формату
Успешный ответ имеет следующую структуру; данные Base64 заменены заполнителем:
{ "data": [{ "b64_json": "BASE64_IMAGE_DATA", "mime_type": "image/jpeg" }]}Сохраните следующий код как save_images.py и выполните python save_images.py, чтобы прочитать response.json из предыдущего примера. Для генерации и редактирования используется одна и та же логика сохранения.
import base64import jsonfrom pathlib import Path
result = json.loads(Path("response.json").read_text(encoding="utf-8"))images = result.get("data") or []if not images: raise RuntimeError("No image returned; inspect response.json.")suffixes = {"image/png": ".png", "image/jpeg": ".jpg"}for index, item in enumerate(images, 1): mime = item.get("mime_type") if mime not in suffixes: raise ValueError(f"Unexpected image MIME type: {mime}") path = Path(f"generated-{index}{suffixes[mime]}") path.write_bytes(base64.b64decode(item["b64_json"], validate=True)) print(path)Не сохраняйте все файлы с расширением .png. Параметр output_format для Nano можно опустить; даже при значении "png" фактический ответ может быть JPEG. В тестах такое происходило с Pro. Если нужен WebP, определённый уровень сжатия или единый формат файлов, сначала получите изображение, затем преобразуйте его в своём приложении.
Размеры, пропорции и число изображений: что задавать?
Предпочтительно использовать image_size + aspect_ratio
| Поле | Допустимые значения и назначение |
|---|---|
prompt | Обязательно, не может быть пустым; опишите изображение или правки |
image_size | 1K, 2K или 4K; по умолчанию 1K |
aspect_ratio | Задаёт пропорции; если поле не передано, их выбирает модель |
n | Принимает целое число 1–4, но изображений может вернуться меньше. Во всех примерах руководства используется 1 |
response_format | Используйте b64_json; url не поддерживается |
output_format | Лучше не передавать; принимается только png, фактический формат всё равно определяется по mime_type |
1K подходит для подбора композиции, 2K — для проверки материала и деталей, а 4K оставляет пиксели для последующего кадрирования и крупных макетов. K обозначает уровень качества, а ширина или высота прямоугольного изображения не обязана равняться 1024, 2048 или 4096. Например, изображение 2K с пропорциями 16:9 в этом руководстве имеет размер 2752 × 1536, а образец Nano 2.1 уровня 4K с пропорциями 1:1 — 4096 × 4096.
| Модель | Доступные пропорции |
|---|---|
| Поддерживаются всеми тремя | 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9 |
| Дополнительно в Nano 2 и 2.1 | 1:4, 4:1, 1:8, 8:1 |
Для квадратной карточки товара выберите 1:1, для вертикального контента — 3:4 или 9:16, для горизонтальной обложки — 16:9. В таблице указаны допустимые пропорции API; примеры не охватывают все сочетания.
Подключение возможно и тогда, когда клиент принимает только size
size — краткая запись пропорций и уровня разрешения. Принимаются auto, строка с пропорциями (например, 16:9) и фиксированные размеры из таблицы. Строка пропорций задаёт только формат кадра; если image_size не передан, используется уровень 1K.
size | Соответствующие пропорции | Уровень |
|---|---|---|
1024x1024 | 1:1 | 1K |
1536x1024 / 1024x1536 | 3:2 / 2:3 | 1K |
1536x1152 / 1152x1536 | 4:3 / 3:4 | 1K |
2048x2048 | 1:1 | 2K |
2048x1152 | 16:9 | 2K |
3840x2160 / 2160x3840 | 16:9 / 9:16 | 4K |
size не гарантирует точного числа пикселей. В одном тесте Pro приняла 1536x1024 и вернула изображение 1264 × 848. Если материал должен поместиться на холст фиксированного размера, выберите близкие пропорции, а затем масштабируйте, добавьте поля или обрежьте его в приложении с учётом фактического размера; если товар должен быть виден целиком, предпочтительнее добавить поля.
Не отправляйте одновременно конфликтующие настройки, например size: "1024x1024" вместе с image_size: "2K" или aspect_ratio: "16:9". Проще выбрать один способ: использовать сокращённый size либо только image_size + aspect_ratio.
При переходе с GPT Image удалите эти параметры
Текущая конечная точка Nano отклоняет quality, background, moderation, output_compression и неуказанные дополнительные поля с ошибкой 400 unsupported_parameter. Нельзя просто заменить имя модели в полном запросе GPT Image: удалите эти поля и задайте размер и пропорции Nano.
Поле mask также не поддерживается конечной точкой редактирования Nano Images. Если нужен прозрачный фон, точное редактирование по маске или конкретный формат сжатия, предусмотрите отдельную постобработку или другой рабочий процесс.
Меняйте цвет, объединяйте и продолжайте редактирование по референсам
Редактирование одного изображения: сохраните объект и измените нужный атрибут
Загрузите имеющийся PNG- или JPEG-файл в поле image, а в запросе укажите, что нужно изменить и сохранить. В примере синяя кружка перекрашивается в красный цвет; замените reference.png на путь к локальному PNG-файлу. Для JPEG укажите соответствующий путь и type=image/jpeg.
curl --fail-with-body --max-time 650 \ "https://bettertoken.ai/v1/images/edits" \ -H "Authorization: Bearer $BETTERTOKEN_API_KEY" \ -F 'model=nano-banana-2' \ -F 'prompt=Change the mug to red. Preserve its shape and the background.' \ -F 'image=@reference.png;type=image/png' \ -F 'image_size=1K' \ -F 'aspect_ratio=1:1' \ -F 'n=1' \ -F 'response_format=b64_json' \ -o response.jsonПусть curl автоматически задаст Content-Type и boundary для multipart; не добавляйте Content-Type: application/json. Сохраните ответ с помощью скрипта save_images.py выше.
Nano 2 и Nano 2.1 перекрасили синюю кружку в красный, используя PNG- и JPEG-референсы одной сцены. Оба результата имеют размер 1024 × 1024; запросы заняли около 15.5 и 57.8 секунды. Основная форма кружки, стол и фон сохранились. Перед использованием изображения для демонстрации товара проверьте глазурь, края и этикетку.
Объедините два референса в одно изображение
Загрузите файлы через повторяющиеся поля image[] и опишите назначение каждого изображения в порядке загрузки. В примере синяя кружка с первого изображения располагается слева, красная со второго — справа. n=1 задаёт количество выходных изображений, а не число загруженных референсов.
curl --fail-with-body --max-time 650 \ "https://bettertoken.ai/v1/images/edits" \ -H "Authorization: Bearer $BETTERTOKEN_API_KEY" \ -F 'model=nano-banana-pro' \ -F 'prompt=Create one photograph with the blue mug from the first image on the left and the red mug from the second image on the right, on the same white table. Preserve both mug shapes. No extra mugs.' \ -F 'image[]=@blue-mug.png;type=image/png' \ -F 'image[]=@red-mug.jpg;type=image/jpeg' \ -F 'image_size=1K' \ -F 'aspect_ratio=3:4' \ -F 'n=1' \ -F 'response_format=b64_json' \ -o response.jsonВ результате Pro обе формы кружек остались различимыми и расположились на заданных сторонах. Размер изображения — 896 × 1200, время — около 36.6 секунды. Для составного изображения укажите, какие элементы использовать, где их разместить и чего не добавлять: такой результат проще проверить, чем просьбу просто «объединить два изображения».
В одном запросе используйте либо image, либо image[], но не смешивайте их. Загружайте настоящие файлы PNG/JPEG; строка локального пути и URL изображения не являются содержимым файла.
Продолжайте редактирование, используя предыдущий результат как новый референс
API Images не хранит историю диалога. Сначала сохраните результат перекраски, затем передайте его в поле image следующего запроса /images/edits и укажите новую задачу, например: «Измените только существующую ручку кружки на золотую; сохраните красный корпус и белый стол». Каждый шаг — новый запрос на генерацию; проверяйте результат перед продолжением.
Если нужно без изменений сохранить логотипы, мелкий текст, штрихкоды или фактуру товара, оставьте исходный материал и восстановите его на финальном слое композиции. Следующее сравнение перекраски показывает причину: все три модели Nano поменяли цвет кругов и часть мелкого текста. В двух примерах GPT мелкий текст читается лучше, но эти модели также перерисовали часть фона или краёв.
Один и тот же референс с двумя красными кругами и запрос на их перекраску в синий дали разные оттенки и разную сохранность мелкого текста. После смены цвета проверьте и нетронутые области; если отдельные части должны остаться точными, надёжнее скомпоновать результат с оригинальным материалом.
Используйте Images в уже подключённом OpenAI Python-клиенте
Установите openai в виртуальную среду проекта. В примере используется images.generate; параметры Nano передаются через extra_body и попадают в корень JSON HTTP-запроса. Автоматические повторы SDK отключены; все полученные изображения сохраняются с расширением по MIME-типу.
python -m pip install openaiimport base64import osfrom pathlib import Pathfrom openai import OpenAI
client = OpenAI( api_key=os.environ["BETTERTOKEN_API_KEY"], base_url="https://bettertoken.ai/v1", timeout=650, max_retries=0,)
def save_response(response, prefix): images = response.data or [] if not images: raise RuntimeError("No image returned.") suffixes = {"image/png": ".png", "image/jpeg": ".jpg"} for index, item in enumerate(images, 1): mime = getattr(item, "mime_type", None) if mime not in suffixes: raise ValueError(f"Unexpected image MIME type: {mime}") path = Path(f"{prefix}-{index}{suffixes[mime]}") path.write_bytes(base64.b64decode(item.b64_json, validate=True)) print(path) billing = getattr(response, "bettertoken_image_billing", None) if billing is not None: print("Billing:", billing)
response = client.images.generate( model="nano-banana-2", prompt="A product photo of a green ceramic mug on a studio table", n=1, response_format="b64_json", extra_body={"image_size": "2K", "aspect_ratio": "16:9"},)save_response(response, "generated")Для редактирования одного изображения используйте те же client и save_response, открыв файл в двоичном режиме:
with open("reference.png", "rb") as source: response = client.images.edit( model="nano-banana-2", image=source, prompt="Change the mug to red. Preserve its shape and the background.", n=1, response_format="b64_json", extra_body={"image_size": "1K", "aspect_ratio": "1:1"}, )save_response(response, "edited")mime_type и bettertoken_image_billing — расширения BetterToken в ответе; не рассчитывайте на наличие revised_prompt. О том, как обращаться с дополнительными полями запроса и ответа, см. документацию OpenAI Python SDK.
У вас уже есть проект Gemini или Chat — нужно ли его переносить?
Можно оставить протокол, к которому привык ваш проект. BetterToken предоставляет отдельные точки входа для самостоятельных задач с изображениями, нативных сообщений Gemini и клиентов Chat. У них общий Key, но параметры и структура ответа соответствуют каждому протоколу.
| Точка входа | Где задаются параметры размера | Где находится изображение | Когда использовать |
|---|---|---|---|
| OpenAI Images | В корне: image_size, aspect_ratio | data[].b64_json и mime_type | Отдельная генерация по тексту или редактирование с файлами-референсами; основной сценарий этого руководства |
Нативный Gemini generateContent | generationConfig.imageConfig.imageSize, aspectRatio | candidates[].content.parts[].inlineData | В проекте уже используется Google SDK или структура сообщений Gemini |
| OpenAI Chat Completions | В корне: google.image_config.image_size, aspect_ratio | Data URL изображения в choices[0].message.content | Уже есть интеграция генерации по тексту через Chat |
Адрес нативного Gemini: https://bettertoken.ai/v1beta/models/{model}:generateContent; адрес Chat: https://bettertoken.ai/v1/chat/completions. В Google SDK задайте корневой домен как Base URL, а версию API v1beta укажите отдельно. Для OpenAI SDK используйте Base URL с /v1.
При многошаговом редактировании через нативный Gemini сохраняйте полный ответ модели и порядок сообщений, включая возвращённые поля подписи. Для Nano 2.1 есть ограничения на последовательное редактирование и совместимость редактирования с Google SDK. Если нужны пошаговые контролируемые правки, используйте описанный здесь однократный сценарий Images: каждый раз загружайте утверждённое изображение и проверяйте новый результат.
Генерация изображений через Gemini · Редактирование изображений Gemini по референсу
После генерации проверьте фактические размеры и стоимость
Сначала проверьте цену для валюты и уровня изображения в вашем аккаунте, затем сверьте результат по ответу. n — запрошенное количество; фактическое число результатов определяется количеством элементов в возвращённом массиве. API принимает n=1–4, но может вернуть меньше изображений. В руководстве показан сценарий для одного изображения; если требуется фиксированное количество, отправляйте запросы по одному и записывайте каждый результат.
После успешного вызова /v1/images/generations или /v1/images/edits данные изображения и bettertoken_image_billing приходят вместе в одном JSON-ответе. Это расширение BetterToken содержит фактические размеры и сведения о списании. Его можно прочитать с собственным API Key; права администратора и отдельный запрос стоимости не нужны.
Сохраняйте изображения из data[], а фактические пиксели, тарифный уровень, сумму и валюту считывайте из bettertoken_image_billing, чтобы сопоставить каждый материал с его стоимостью. Ориентируйтесь на фактическое списание в своём аккаунте.
| Поле | Использование в приложении |
|---|---|
currency, settled_amount | Показать валюту и общую сумму списания за запрос |
outputs[].width, outputs[].height | Проверить фактические пиксели и выбрать масштабирование, поля или кадрирование |
outputs[].billing_resolution | Проверить фактический тарифный уровень |
outputs[].amount, outputs[].currency | Записать стоимость и валюту отдельного изображения |
Суммы возвращаются десятичными строками. Для подсчётов используйте десятичный денежный тип и суммируйте отдельно по каждой валюте. Если расширение оплаты отсутствует, отметьте сумму как ожидающую проверки, а не как бесплатную. Актуальные цены смотрите в каталоге моделей BetterToken.
Images — синхронный API. После успешного ответа сразу сохраните изображение в собственный файл или объектное хранилище, прежде чем показывать его пользователю. API не возвращает task_id для последующей проверки статуса. Если приложение показывает ожидание, поддерживайте запрос на своём сервере и сохраните там результат.
Устранение ошибок: что изменить в первую очередь?
Сначала проверьте в ответе error.message, error.code и error.param. Повторная отправка того же запроса не исправит ошибку параметра.
| Ошибка или симптом | Что делать |
|---|---|
unsupported_parameter | Проверьте error.param; удалите неподдерживаемые поля, например quality, background или mask |
conflicting_image_parameters | Проверьте конфликт size с размером или пропорциями; при редактировании не смешивайте image и image[] |
unsupported_image_size | Используйте допустимый size или image_size + aspect_ratio; произвольные размеры, например 2080x2080, не принимаются |
invalid_image_size / invalid_aspect_ratio | Используйте прописные 1K/2K/4K и проверьте диапазон пропорций выбранной модели |
unsupported_output_format / unsupported_response_format | Не передавайте output_format, задайте response_format равным b64_json |
missing_reference_image | Загрузите файл изображения в точку входа редактирования; если есть только текст, используйте генерацию |
invalid_image_count / missing_prompt | Начните с n=1 и задайте непустой запрос |
401 | Проверьте BetterToken API Key, переменную среды и заголовок Bearer |
no_eligible_image_service | Нет доступного сервиса для сочетания модели, параметров или редактирования; сохраните данные запроса и обратитесь в поддержку |
| Файл не открывается после сохранения | Проверьте декодирование Base64 и выберите .jpg или .png по mime_type |
| Тайм-аут или разрыв соединения | Сначала проверьте журнал вызовов и оплату, сохраните ID запроса, затем решите, отправлять ли его повторно |
Тайм-аут клиента не означает, что генерация на стороне сервиса отменена. Настройте согласованное время ожидания для SDK, обратного прокси и сервера приложения, чтобы браузер не завершил ожидание раньше. Если неизвестно, чем закончился предыдущий запрос, не включайте автоматический повтор: он может запустить и оплатить дубликат.

















