Skip to main content

Симптомы

При вызове модели Nano Banana (gemini-3.1-flash-image-preview, gemini-3-pro-image-preview, gemini-nano-banana-2.1 и т. д.) для редактирования изображения с референсным изображением API возвращает HTTP 400 с одной из этих двух ошибок:
Ошибки обычно возникают серией, а затем прекращаются, из-за чего API кажется нестабильным.

Причина

inlineData.data в вашем запросе пуст, поэтому провайдер так и не получил изображение. Обе ошибки имеют одну и ту же причину; разные узлы формулируют её по-разному. В одном сообщается, что параметр inlineData пуст. В другом указано «unable to process input image», из-за чего может сложиться впечатление, что изображение повреждено или ссылка на него недоступна.
Дело не в URL изображения и не в том, является ли ваш бакет хранилища публичным. При использовании inlineData изображение передается в виде base64 внутри тела запроса, и провайдер не выполняет загрузку по ссылке. Эта ошибка означает, что сама строка base64 пуста. Проблема возникает на этапе, когда ваш код преобразует изображение в base64.
В этом можно убедиться по логам в консоли: неудачные запросы содержат очень мало входных tokens (только prompt), тогда как у обычных запросов с изображением их на сотни и тысячи больше.

Чек-лист

1

Действительно ли этап скачивания или кодирования завершился успешно?

Во многих программах изображение сначала скачивается из объектного хранилища (COS / OSS / S3), а затем конвертируется в base64. Если скачивание завершается сбоем, происходит таймаут или запрос отправляется до завершения асинхронного шага, вы получаете пустую строку. Логируйте длину base64 непосредственно перед отправкой.
2

Имеет ли переменная значение undefined?

В JavaScript JSON.stringify без предупреждения пропускает поля со значением undefined. Если imageBase64 имеет значение undefined, то в сериализованном запросе внутри inlineData будет присутствовать только mimeType, а поле data будет полностью отсутствовать, из-за чего провайдер сообщает о пустом inlineData. В коде этого не видно — необходимо логировать тело запроса, которое фактически отправляется.
3

Содержит ли data префикс data URL?

Поле inlineData.data должно содержать только чистый base64. Если у вас полная строка data:image/png;base64,iVBORw0..., удалите всё до запятой включительно.
4

Соответствует ли mimeType реальному формату изображения?

Задайте для mimeType значение image/png, image/jpeg или image/webp в соответствии с фактическим форматом. Расширения файлов ненадежны (некоторые файлы .jpg с телефонов на самом деле представляют собой многокадровые изображения). Самый надежный способ — перекодировать всё в PNG или JPEG в процессе конвертации.

Валидация перед отправкой

Несколько строк проверок перед формированием запроса позволят выявить проблему локально, а не в виде ошибки API:
Эта ошибка 400 вызвана самим запросом, поэтому повторная отправка того же запроса не увенчается успехом. После исправления кода никаких настроек на стороне платформы не требуется.

Хотите вместо этого передать URL изображения?

Нативный эндпоинт Gemini также принимает прямую ссылку на изображение. Используйте fileData, а не inlineData:
При использовании URL серверам Google приходится скачивать изображение. Если ваше хранилище обслуживается только через CDN материкового Китая (например, Tencent Cloud COS со стандартными настройками), Google зачастую не может получить к нему доступ. Обычно это проявляется тем, что результат игнорирует исходное изображение, а не ошибкой. По возможности base64 является более надежным вариантом. Подробности см. в Руководстве разработчика Nano Banana.

Часто задаваемые вопросы

При использовании inlineData провайдер не загружает данные по ссылке, поэтому публичный доступ не имеет значения. Проверьте шаг, на котором ваш код преобразует изображение в base64, и убедитесь, что отправляемое поле data не пустое.
Нет. Запрос отклоняется на точке входа провайдера, изображение не генерируется, и плата не взимается. Определяющими являются логи вызовов в консоли.

Связанная документация

Руководство разработчика по Nano Banana

Требования к входным изображениям, передача через URL и таймауты

Обработка ошибок изображений в Gemini

Как обрабатывать каждую ошибку и finishReason

Несоответствие MIME-типа изображения?

Несоответствие формата, вызванное параметрами обработки в URL изображений

Сжатие и разрешение изображений

Сжатие референсных изображений не ухудшает качество результата