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

# Редактирование изображений возвращает Unable to Process Input Image?

> При редактировании изображений в Nano Banana возвращается ошибка 400 «Unable to process input image» или «empty inlineData parameter», так как данные изображения inlineData в запросе пусты. Это никак не связано с доступностью URL вашего изображения. Проверьте этап преобразования в base64 и выполните валидацию перед отправкой.

## Симптомы

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

```json theme={null}
{
  "error": {
    "message": "Unable to process input image. Please retry or report in https://developers.generativeai.google/guide/troubleshooting",
    "code": 400
  }
}
```

```text theme={null}
Unable to submit request because it has an empty inlineData parameter. Add a value to the parameter and try again.
```

Ошибки обычно возникают серией, а затем прекращаются, из-за чего API кажется нестабильным.

## Причина

**`inlineData.data` в вашем запросе пуст, поэтому провайдер так и не получил изображение.** Обе ошибки имеют одну и ту же причину; разные узлы формулируют её по-разному. В одном сообщается, что параметр inlineData пуст. В другом указано «unable to process input image», из-за чего может сложиться впечатление, что изображение повреждено или ссылка на него недоступна.

<Info>
  **Дело не в URL изображения и не в том, является ли ваш бакет хранилища публичным.** При использовании `inlineData` изображение передается в виде base64 внутри тела запроса, и провайдер не выполняет загрузку по ссылке. Эта ошибка означает, что сама строка base64 пуста. Проблема возникает на этапе, когда ваш код преобразует изображение в base64.
</Info>

В этом можно убедиться по логам в консоли: неудачные запросы содержат очень мало входных tokens (только prompt), тогда как у обычных запросов с изображением их на сотни и тысячи больше.

## Чек-лист

<Steps>
  <Step title="Действительно ли этап скачивания или кодирования завершился успешно?">
    Во многих программах изображение сначала скачивается из объектного хранилища (COS / OSS / S3), а затем конвертируется в base64. Если скачивание завершается сбоем, происходит таймаут или запрос отправляется до завершения асинхронного шага, вы получаете пустую строку. Логируйте длину base64 непосредственно перед отправкой.
  </Step>

  <Step title="Имеет ли переменная значение undefined?">
    В JavaScript `JSON.stringify` **без предупреждения пропускает поля со значением `undefined`**. Если `imageBase64` имеет значение `undefined`, то в сериализованном запросе внутри `inlineData` будет присутствовать только `mimeType`, а поле `data` будет полностью отсутствовать, из-за чего провайдер сообщает о пустом inlineData. В коде этого не видно — необходимо логировать тело запроса, которое фактически отправляется.
  </Step>

  <Step title="Содержит ли data префикс data URL?">
    Поле `inlineData.data` должно содержать только **чистый base64**. Если у вас полная строка `data:image/png;base64,iVBORw0...`, удалите всё до запятой включительно.
  </Step>

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

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

Несколько строк проверок перед формированием запроса позволят выявить проблему локально, а не в виде ошибки API:

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    const b64 = (imageBase64 || '').replace(/^data:[^;]+;base64,/, '');
    if (!b64) {
      throw new Error('Reference image base64 is empty; check the download / encoding step');
    }

    const payload = {
      contents: [{
        parts: [
          { text: prompt },
          { inlineData: { data: b64, mimeType: imageMimeType } }
        ]
      }],
      generationConfig: {
        responseModalities: ['IMAGE'],
        imageConfig: { imageSize: '2K' }
      }
    };
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={null}
    import base64, re

    def to_inline_data(image_bytes: bytes, mime_type: str) -> dict:
        if not image_bytes:
            raise ValueError("Reference image is empty; check the download / read step")
        b64 = base64.b64encode(image_bytes).decode()
        return {"inlineData": {"data": b64, "mimeType": mime_type}}

    def strip_data_url(s: str) -> str:
        b64 = re.sub(r"^data:[^;]+;base64,", "", s or "")
        if not b64:
            raise ValueError("Reference image base64 is empty")
        return b64
    ```
  </Tab>
</Tabs>

<Tip>
  Эта ошибка 400 вызвана самим запросом, поэтому **повторная отправка того же запроса не увенчается успехом**. После исправления кода никаких настроек на стороне платформы не требуется.
</Tip>

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

Нативный эндпоинт Gemini также принимает прямую ссылку на изображение. Используйте `fileData`, а **не** `inlineData`:

```json theme={null}
{
  "fileData": {
    "fileUri": "https://your-bucket.example.com/ref.png",
    "mimeType": "image/png"
  }
}
```

<Warning>
  При использовании URL серверам Google приходится скачивать изображение. Если ваше хранилище обслуживается только через CDN материкового Китая (например, Tencent Cloud COS со стандартными настройками), Google зачастую не может получить к нему доступ. Обычно это проявляется тем, что **результат игнорирует исходное изображение**, а не ошибкой. По возможности **base64 является более надежным вариантом**. Подробности см. в [Руководстве разработчика Nano Banana](/ru/api-capabilities/nano-banana-dev-guide).
</Warning>

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

<AccordionGroup>
  <Accordion title="Мое изображение общедоступно. Почему я все равно получаю эту ошибку?">
    При использовании `inlineData` провайдер не загружает данные по ссылке, поэтому публичный доступ не имеет значения. Проверьте шаг, на котором ваш код преобразует изображение в base64, и убедитесь, что отправляемое поле `data` не пустое.
  </Accordion>

  <Accordion title="Тарифицируются ли эти неудачные запросы?">
    Нет. Запрос отклоняется на точке входа провайдера, изображение не генерируется, и плата не взимается. Определяющими являются логи вызовов в консоли.
  </Accordion>
</AccordionGroup>

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

<CardGroup cols={2}>
  <Card title="Руководство разработчика по Nano Banana" icon="book-open" href="/ru/api-capabilities/nano-banana-dev-guide">
    Требования к входным изображениям, передача через URL и таймауты
  </Card>

  <Card title="Обработка ошибок изображений в Gemini" icon="shield-alert" href="/ru/api-capabilities/gemini-image-error-handling">
    Как обрабатывать каждую ошибку и finishReason
  </Card>

  <Card title="Несоответствие MIME-типа изображения?" icon="file-warning" href="/ru/faq/image-mime-type-mismatch-with-query">
    Несоответствие формата, вызванное параметрами обработки в URL изображений
  </Card>

  <Card title="Сжатие и разрешение изображений" icon="minimize-2" href="/ru/api-capabilities/image-compression-resolution">
    Сжатие референсных изображений не ухудшает качество результата
  </Card>
</CardGroup>


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