Открытый API

Gemini Batch Image API

Асинхронный пакетный API изображений LMU AI: отправляйте множество задач генерации изображений Gemini за раз, опрашивайте статус и детали, скачивайте изображения или ZIP, с идемпотентностью и оценкой стоимости.

Пакетный API изображений Gemini от LMU AI позволяет отправлять множество задач генерации изображений Gemini за раз. Сервер асинхронно создаёт пакетную задачу, отслеживает её статус, организует результаты и производит расчёт стоимости.

Основной эндпоинт:

POST https://api.lmuai.com/v1/images/batches

Это расширенный API LMU AI

Пакетный API находится по адресу /v1/images/batches. Это API асинхронных задач, который LMU AI предоставляет пользователям — а не нативный путь /v1beta Google Gemini.

Текущая реализация поддерживает только Gemini. Хотя тело запроса включает универсальное поле model, вы не можете отправить gpt-image-2 или модели изображений Grok на этот эндпоинт. Для text-to-image GPT используйте GPT Image API; для text-to-image Grok используйте Grok Image API.

Если вам нужно только сгенерировать одно изображение Gemini или вам нужны 2K / 4K, используйте Gemini Image API реального времени.


1. Когда его использовать

Пакетный API хорошо подходит, когда вы:

  • отправляете от десятков до сотен разных промптов за раз;
  • не нуждаетесь в немедленном возврате задач изображений в рамках того же HTTP-запроса;
  • нуждаетесь в статусе задач, деталях сбоев, отмене и пакетном скачивании;
  • производите иллюстрации для статей, ассеты для e-commerce, датасеты или дизайн-кандидатов офлайн;
  • хотите использовать Idempotency-Key для предотвращения дублирующих отправок и двойного списания.

Он не подходит, когда вы:

  • измеряете задержку одной генерации изображения в реальном времени;
  • нуждаетесь в 2K / 4K;
  • нуждаетесь в синхронном ожидании изображения и его немедленном отображении;
  • проводите стресс-тесты параллелизма или RPM.

2. Предварительные условия

Пакетная функция требует, чтобы администратор включил её как на стороне развёртывания, так и на стороне группы, и настроил совместимые вышестоящие аккаунты и цены.

Вы можете сначала запросить список моделей, чтобы проверить, доступна ли функция:

GET /v1/images/batches/models

Если возвращается BATCH_IMAGE_DISABLED

BATCH_IMAGE_DISABLED означает, что глобальная функция пакетных изображений в релее API не включена. Это не ошибка ключа API, модели или промпта.

Передайте администратору полный код ошибки и идентификатор запроса из заголовков ответа, например:

Error code: BATCH_IMAGE_DISABLED
Request ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Общие условия допуска:

  • текущий статус ключа API — активный;
  • платформа группы ключа API — Gemini;
  • группа разрешает пакетную генерацию изображений;
  • доступны ресурсы для выполнения пакетных изображений;
  • для модели настроена цена пакетных изображений;
  • сервис асинхронных пакетных задач работает нормально.

3. Аутентификация

Пакетный API использует ваш собственный ключ API LMU AI:

Authorization: Bearer YOUR_API_KEY

Пример:

curl 'https://api.lmuai.com/v1/images/batches/models' \
  -H 'Authorization: Bearer YOUR_API_KEY'

Не размещайте ваш ключ API в URL, исходном коде фронтенда или публичных репозиториях.


4. Обзор эндпоинтов

МетодПутьОписание
GET/v1/images/batches/modelsСписок моделей, которые текущий ключ может использовать для пакетной генерации изображений
POST/v1/images/batchesСоздать пакетную задачу изображений
GET/v1/images/batchesСписок пакетных задач, созданных текущим ключом
GET/v1/images/batches/{id}Запросить статус конкретной задачи
GET/v1/images/batches/{id}/itemsЗапросить детали элементов задачи
GET/v1/images/batches/{id}/items/{custom_id}/contentСкачать изображение для отдельного элемента задачи
GET/v1/images/batches/{id}/downloadСкачать весь пакет как ZIP
POST/v1/images/batches/{id}/cancelОтменить задачу
DELETE/v1/images/batches/{id}/outputsУдалить выходные файлы пакета
DELETE/v1/images/batches/{id}Удалить запись пакетной задачи

Все данные задач изолированы по ключу API, использованному для создания задачи.


5. Список доступных пакетных моделей

GET /v1/images/batches/models

curl 'https://api.lmuai.com/v1/images/batches/models' \
  -H 'Authorization: Bearer YOUR_API_KEY'

Типичный ответ (фрагмент):

{
  "object": "list",
  "data": [
    {
      "id": "gemini-3.1-flash-image",
      "object": "image.batch.model"
    }
  ]
}

Список пакетных моделей отличается от обычного списка моделей

Используйте /v1/images/batches/models как селектор моделей для пакетных задач. Он дополнительно проверяет разрешения на пакетную функцию, ресурсы выполнения, поддержку моделей и конфигурацию пакетного биллинга.

Не каждая модель, возвращаемая обычными /v1/models или /v1beta/models, может использоваться для асинхронной пакетной генерации изображений.


6. Создание пакетной задачи

POST /v1/images/batches

curl --request POST \
  'https://api.lmuai.com/v1/images/batches' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Idempotency-Key: client-batch-20260725-001' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "model": "gemini-3.1-flash-image",
    "task_name": "Product image batch eval 001",
    "response_mime_type": "image/png",
    "image_size": "1K",
    "items": [
      {
        "custom_id": "image_001",
        "prompt": "An orange tabby cat wearing an astronaut helmet, cinematic lighting",
        "output_count": 1
      },
      {
        "custom_id": "image_002",
        "prompt": "A futuristic city in morning mist, ultra-wide-angle photography",
        "output_count": 1
      },
      {
        "custom_id": "image_003",
        "prompt": "A seaside lighthouse at sunset, watercolor illustration, warm tones",
        "output_count": 1
      }
    ]
  }'

Поля запроса верхнего уровня

ПолеТипОбязательноПо умолчаниюОписание
modelstringДаДолжно быть из списка пакетных моделей
task_namestringНетГенерируется автоматическиИмя задачи; слишком длинное содержимое обрезается
parent_batch_idstringНетСвязывает родительскую задачу, подходит для повторного выполнения неудавшихся элементов
itemsarrayДаЭлементы пакетной задачи, минимум один
response_mime_typestringНетimage/pngОжидаемый выходной MIME-тип
aspect_ratiostringНетВ текущей версии пока не передаётся вышестоящему провайдеру; не полагайтесь на это поле для управления соотношением сторон
image_sizestringНет1KВ настоящее время поддерживается только 1K
metadataobjectНетПользовательские строковые пары ключ-значение

Поля items[]

ПолеТипОбязательноПо умолчаниюОписание
custom_idstringНетГенерируется автоматическиИдентификатор задачи вызывающего, должен быть уникальным в рамках одного пакета
promptstringДаКаждая задача может использовать свой промпт
output_countintegerНет1В настоящее время до 4 на элемент, в зависимости от конфигурации развёртывания
reference_imagesarrayНетРеференсные изображения для image-to-image

Idempotency-Key

Настоятельно рекомендуется включать уникальный ключ при каждом создании задачи:

Idempotency-Key: client-batch-20260725-001

Когда тот же ключ API повторно отправляет запрос с тем же Idempotency-Key и идентичным телом запроса, сервер может вернуть исходную задачу, избегая дублирующего создания и дублирующих удержаний средств после сетевого тайм-аута.

Если вы повторно используете тот же Idempotency-Key, но с другим содержимым запроса, возвращается:

BATCH_IMAGE_IDEMPOTENCY_CONFLICT

7. Текущие ограничения пакета

Ниже приведены значения по умолчанию из исходного кода; фактическое развёртывание может быть скорректировано администратором:

ОграничениеПо умолчанию
Макс. входных элементов на пакет200
Макс. выходных изображений на пакет200
Макс. output_count на элемент4
Макс. символов на промпт8000
Макс. размер одного встроенного референсного изображения10 MiB
Макс. элементов на ZIP по умолчанию200

Соотношение сторон пакета пока нельзя указать

aspect_ratio в настоящее время не имеет эффекта

Хотя структура пакетного запроса сохраняет поле aspect_ratio, текущая логика построения запросов Gemini Batch и Vertex Batch пока не записывает его в вышестоящий generationConfig.imageConfig.

В результате соотношение сторон пакетной задачи в настоящее время определяется поведением вышестоящего провайдера по умолчанию. Не указывайте aspect_ratio в вашем запросе и не полагайтесь на него как на стабильную возможность API.

Когда вам нужен точный контроль над соотношениями сторон, такими как 1:1, 16:9 или 21:9, используйте Gemini Image API реального времени.

Поддерживается только 1K

Пакетный API пока не поддерживает 2K / 4K

image_size пакетного API в настоящее время принимает только:

{
  "image_size": "1K"
}

Отправка 2K или 4K возвращает BATCH_IMAGE_INVALID_ITEMS.

Когда вам нужны 2K / 4K, используйте Gemini Image API реального времени и управляйте параллелизмом множественных запросов на стороне клиента.

Как output_count разворачивается в задачи

Если элемент устанавливает:

{
  "custom_id": "poster",
  "prompt": "Movie poster",
  "output_count": 3
}

сервер разворачивает его в отдельные идентификаторы задач, например:

poster_01
poster_02
poster_03

Общее количество изображений после разворачивания не может превышать максимальное количество выходных изображений пакета.


8. Пакетный image-to-image

Каждый элемент может включать reference_images:

{
  "model": "gemini-3.1-flash-image",
  "task_name": "Product image style transfer",
  "image_size": "1K",
  "items": [
    {
      "custom_id": "product_001",
      "prompt": "Place the product on a clean light-gray studio background, keeping the product structure and text accurate",
      "reference_images": [
        {
          "id": "source_001",
          "type": "reference",
          "mime_type": "image/png",
          "data": "BASE64_IMAGE_DATA"
        }
      ]
    }
  ]
}

Поля референсного изображения

ПолеТипОбязательноОписание
idstringНетИдентификатор референсного изображения
typestringНетТег назначения референсного изображения
mime_typestringДаimage/png, image/jpeg или image/webp
datastringОдно из двухСодержимое изображения в Base64

Для интеграции с публичным API мы рекомендуем передавать референсные изображения в Base64 через data. Другие методы ссылок на хранилище являются контролируемой продвинутой возможностью — обратитесь к администратору, если они вам нужны.

Количество референсных изображений зависит от модели. Сервис в настоящее время применяет следующие ограничения по умолчанию на основе имени модели:

  • имена, содержащие flash-image: до 3 референсных изображений на задачу;
  • имена, содержащие pro-image: до 14 референсных изображений на задачу.

Фактическое используемое количество также может зависеть от возможностей вышестоящей модели и конфигурации развёртывания.


9. Ответ создания задачи

Успешное создание возвращает HTTP 200 и объект пакета:

{
  "id": "imgbatch_abc123",
  "object": "image.batch",
  "task_name": "Product image batch eval 001",
  "status": "queued",
  "model": "gemini-3.1-flash-image",
  "item_count": 3,
  "success_count": 0,
  "fail_count": 0,
  "estimated_cost": 0.15,
  "hold_amount": 0.09,
  "actual_cost": null,
  "created_at": 1784995200,
  "submitted_at": 1784995201,
  "settled_at": null
}

Ключевые поля

ПолеОписание
idИдентификатор пакета, используемый для последующих запросов и скачиваний
statusСтатус задачи, отображаемый пользователю
item_countОбщее количество элементов задачи после разворачивания
success_countКоличество успешных задач
fail_countКоличество неудавшихся задач
estimated_costОценочная стоимость на момент отправки
hold_amountУдержание баланса, размещённое при создании задачи
actual_costФактическая стоимость после расчёта; null, пока не завершено

Успешная отправка не означает, что изображения готовы

200 от эндпоинта создания означает лишь, что пакет был принят и отправлен в конвейер асинхронной обработки. Клиент должен продолжать опрашивать статус задачи, пока он не достигнет completed, failed или cancelled.


10. Запрос статуса задачи

GET /v1/images/batches/{id}

curl 'https://api.lmuai.com/v1/images/batches/imgbatch_abc123' \
  -H 'Authorization: Bearer YOUR_API_KEY'

Статусы, отображаемые пользователю

СтатусОписаниеТерминальный
queuedСоздано, загружено или отправлено; ожидает вышестоящей обработкиНет
runningВышестоящий провайдер генерирует изображенияНет
processing_resultsСкачивание и индексация вышестоящих результатовНет
settlingРасчёт фактической стоимостиНет
completedОбработка завершена; результаты можно запросить и скачатьДа
failedПакет не выполненДа
cancelledОтмененоДа
output_deletedВыходные файлы удалены, но запись задачи остаётсяДа

Рекомендуемые интервалы опроса:

First 2 minutes: every 10-15 seconds
After 2 minutes: every 30 seconds
Long tasks: gradually increase to every 60 seconds

Не опрашивайте каждую секунду.

Веб-хуки завершения пока не поддерживаются

Пакетный API в настоящее время не имеет конфигурации callback_url, webhook_url или коллбэка завершения. Он не уведомляет сервер вызывающего проактивно при завершении задачи.

Вызывающему нужно опрашивать GET /v1/images/batches/{id}, прекратить опрос, как только статус достигнет completed, failed, cancelled или output_deleted, а затем запросить детали или скачать результаты.


11. Список задач

GET /v1/images/batches

curl 'https://api.lmuai.com/v1/images/batches?status=completed&limit=20' \
  -H 'Authorization: Bearer YOUR_API_KEY'

Параметры запроса

ПараметрТипОписание
statusstringqueued, running, processing_results, settling, completed, failed, cancelled, output_deleted
task_namestringНечёткий поиск по имени задачи
downloadedstringtrue / false, фильтр по признаку скачивания
fromstringНачало диапазона времени создания
tostringКонец диапазона времени создания
limitintegerПо умолчанию 20, максимум 100
cursorstringКурсор пагинации

Ответ:

{
  "object": "list",
  "data": [
    {
      "id": "imgbatch_abc123",
      "object": "image.batch",
      "task_name": "Product image batch eval 001",
      "status": "completed",
      "model": "gemini-3.1-flash-image",
          "item_count": 3,
      "success_count": 3,
      "fail_count": 0,
      "estimated_cost": 0.15,
      "hold_amount": 0.09,
      "actual_cost": 0.12,
      "created_at": 1784995200,
      "submitted_at": 1784995201,
      "settled_at": 1784998800
    }
  ],
  "has_more": false
}

12. Запрос деталей элементов задачи

GET /v1/images/batches/{id}/items

curl 'https://api.lmuai.com/v1/images/batches/imgbatch_abc123/items?status=success&limit=100' \
  -H 'Authorization: Bearer YOUR_API_KEY'

Поддерживаемые значения status:

all
pending
success
failed

Типичный ответ (фрагмент):

{
  "object": "list",
  "data": [
    {
      "custom_id": "image_001",
      "status": "success",
      "prompt_preview": "An orange tabby cat wearing an astronaut helmet...",
      "mime_type": "image/png",
      "file_extension": "png",
      "image_count": 1,
      "error": null
    },
    {
      "custom_id": "image_002",
      "status": "failed",
      "prompt_preview": "A futuristic city in morning mist...",
      "mime_type": null,
      "file_extension": null,
      "image_count": 0,
      "error": {
        "code": "PROVIDER_ITEM_FAILED",
        "message": "image generation failed",
        "source": "provider"
      }
    }
  ],
  "has_more": false
}

По умолчанию элементы задачи отображаются по 100 на странице, максимум 500.


13. Скачивание изображений

Скачать отдельный элемент задачи

curl \
  'https://api.lmuai.com/v1/images/batches/imgbatch_abc123/items/image_001/content' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  --output image_001.png

Если элемент задачи имеет несколько изображений, вы можете указать:

?image_index=0
?image_index=1

image_index начинается с 0.

Скачать весь пакет как ZIP

curl \
  'https://api.lmuai.com/v1/images/batches/imgbatch_abc123/download' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  --output imgbatch_abc123.zip

Необязательные параметры:

?status=success
?max_items=100

ZIP содержит изображения и манифест результатов. После успешного скачивания задача записывает downloaded_at.


14. Отмена и удаление

Отмена задачи

curl --request POST \
  'https://api.lmuai.com/v1/images/batches/imgbatch_abc123/cancel' \
  -H 'Authorization: Bearer YOUR_API_KEY'

Задача, которая уже достигла терминального состояния, не будет отменена повторно. Возможность предотвратить вышестоящие списания зависит от текущего состояния вышестоящей задачи Batch.

Удаление выходных файлов

curl --request DELETE \
  'https://api.lmuai.com/v1/images/batches/imgbatch_abc123/outputs' \
  -H 'Authorization: Bearer YOUR_API_KEY'

После удаления выходных данных статус отображается как output_deleted, и изображения больше нельзя скачать.

Удаление записи задачи

curl --request DELETE \
  'https://api.lmuai.com/v1/images/batches/imgbatch_abc123' \
  -H 'Authorization: Bearer YOUR_API_KEY'

Только задачи в терминальном состоянии могут иметь свою запись удалённой. Успех возвращает HTTP 204.

Удаление записи и удаление изображений — это две разные вещи

  • Удаление выходных данных: очищает файлы изображений, но запись задачи остаётся;
  • Удаление записи: скрывает задачу из списка задач текущего пользователя;
  • Производственные системы должны убедиться, что результаты были скачаны и заархивированы, прежде чем удалять.

15. Полный рабочий процесс на Node.js

import { mkdir, writeFile } from 'node:fs/promises';

const BASE_URL = process.env.LMU_BASE_URL || 'https://api.lmuai.com';
const API_KEY = process.env.LMU_API_KEY;

if (!API_KEY) throw new Error('Missing LMU_API_KEY');

const headers = {
  Authorization: `Bearer ${API_KEY}`,
};

async function jsonRequest(path, options = {}) {
  const response = await fetch(`${BASE_URL}${path}`, {
    ...options,
    headers: {
      ...headers,
      ...(options.headers || {}),
    },
  });

  const text = await response.text();
  let data;
  try {
    data = text ? JSON.parse(text) : null;
  } catch {
    throw new Error(`Non-JSON response: HTTP ${response.status}`);
  }

  if (!response.ok) {
    const error = data?.error || {};
    throw new Error(
      `${error.code || response.status}: ${error.message || text}`,
    );
  }

  return data;
}

const batch = await jsonRequest('/v1/images/batches', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Idempotency-Key': `client-${Date.now()}`,
  },
  body: JSON.stringify({
    model: 'gemini-3.1-flash-image',
    task_name: 'Node batch image demo',
    image_size: '1K',
    items: [
      { custom_id: 'cat', prompt: 'A cinematic astronaut orange tabby cat' },
      { custom_id: 'city', prompt: 'A futuristic city in morning mist' },
    ],
  }),
});

console.log('batch id:', batch.id);

let job = batch;
while (!['completed', 'failed', 'cancelled', 'output_deleted'].includes(job.status)) {
  await new Promise((resolve) => setTimeout(resolve, 15_000));
  job = await jsonRequest(`/v1/images/batches/${encodeURIComponent(batch.id)}`);
  console.log('status:', job.status);
}

if (job.status !== 'completed') {
  throw new Error(`Batch task did not complete successfully: ${job.status}`);
}

const items = await jsonRequest(
  `/v1/images/batches/${encodeURIComponent(batch.id)}/items?status=success`,
);

await mkdir('batch-output', { recursive: true });

for (const item of items.data || []) {
  const response = await fetch(
    `${BASE_URL}/v1/images/batches/${encodeURIComponent(batch.id)}` +
      `/items/${encodeURIComponent(item.custom_id)}/content`,
    { headers },
  );

  if (!response.ok) {
    console.error('Download failed:', item.custom_id, response.status);
    continue;
  }

  const extension = item.file_extension || 'png';
  await writeFile(
    `batch-output/${item.custom_id}.${extension}`,
    Buffer.from(await response.arrayBuffer()),
  );
}

16. Полный рабочий процесс на Python

import os
import time
from pathlib import Path
import requests

BASE_URL = os.getenv("LMU_BASE_URL", "https://api.lmuai.com")
API_KEY = os.environ["LMU_API_KEY"]
HEADERS = {"Authorization": f"Bearer {API_KEY}"}

payload = {
    "model": "gemini-3.1-flash-image",
    "task_name": "Python batch image demo",
    "image_size": "1K",
    "items": [
        {"custom_id": "cat", "prompt": "A cinematic astronaut orange tabby cat"},
        {"custom_id": "city", "prompt": "A futuristic city in morning mist"},
    ],
}

response = requests.post(
    f"{BASE_URL}/v1/images/batches",
    headers={
        **HEADERS,
        "Content-Type": "application/json",
        "Idempotency-Key": f"client-{int(time.time())}",
    },
    json=payload,
    timeout=300,
)
response.raise_for_status()
batch = response.json()
print("batch id:", batch["id"])

terminal = {"completed", "failed", "cancelled", "output_deleted"}
job = batch
while job["status"] not in terminal:
    time.sleep(15)
    response = requests.get(
        f"{BASE_URL}/v1/images/batches/{batch['id']}",
        headers=HEADERS,
        timeout=60,
    )
    response.raise_for_status()
    job = response.json()
    print("status:", job["status"])

if job["status"] != "completed":
    raise RuntimeError(f"Batch task did not complete successfully: {job['status']}")

items_response = requests.get(
    f"{BASE_URL}/v1/images/batches/{batch['id']}/items",
    headers=HEADERS,
    params={"status": "success"},
    timeout=60,
)
items_response.raise_for_status()
items = items_response.json().get("data", [])

output_dir = Path("batch-output")
output_dir.mkdir(exist_ok=True)

for item in items:
    content = requests.get(
        f"{BASE_URL}/v1/images/batches/{batch['id']}"
        f"/items/{item['custom_id']}/content",
        headers=HEADERS,
        timeout=300,
    )
    content.raise_for_status()
    extension = item.get("file_extension") or "png"
    (output_dir / f"{item['custom_id']}.{extension}").write_bytes(content.content)

17. Биллинг и удержания баланса

Пакетные задачи следуют процессу «оценка, удержание, затем расчёт по завершении»:

  1. Сервер оценивает стоимость на основе модели, количества задач, множителя группы и пакетной скидки;
  2. Он размещает удержание hold_amount при создании задачи;
  3. После завершения вышестоящей обработки он вычисляет actual_cost на основе количества успешных изображений;
  4. После расчёта он высвобождает любое избыточное удержание;
  5. Если задача завершается неудачно или отменяется до отправки, система пытается высвободить удержание в соответствии со статусом задачи.

Поля ответа:

estimated_cost
hold_amount
actual_cost

представляют оценочную сумму, удержанную сумму и итоговую фактическую сумму соответственно.

Ценообразование следует текущей конфигурации группы

Пакетная скидка, множитель группы, множитель аккаунта и цена за изображение могут настраиваться администратором. Документация не обещает фиксированных цен; итоговое списание определяется деталями использования в консоли и actual_cost пакета.


18. Формат ошибок

Пакетный API использует следующую структуру ошибок:

{
  "error": {
    "type": "invalid_request_error",
    "code": "BATCH_IMAGE_INVALID_ITEMS",
    "message": "batch image items are invalid"
  }
}

Также записывайте идентификатор запроса из заголовков ответа. В консоли сообщение об ошибке отображается как:

Error code: BATCH_IMAGE_DISABLED
Request ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Распространённые коды ошибок

Код ошибкиHTTPЗначениеЧто делать
BATCH_IMAGE_DISABLED404Глобальная пакетная генерация изображений не включенаПередайте администратору код ошибки и идентификатор запроса
BATCH_IMAGE_GROUP_DISABLED403Группа текущего ключа не разрешает пакетную генерацию изображений или не является группой GeminiСмените ключ или обратитесь к администратору для включения разрешения группы
BATCH_IMAGE_NO_ACCOUNT_AVAILABLE502В настоящее время нет доступных ресурсов для выполнения пакетаСохраните идентификатор запроса и обратитесь к администратору
BATCH_IMAGE_SETTLEMENT_PRICING_MISSING400У пакетной модели нет цены биллингаОбратитесь к администратору для настройки цены модели
BATCH_IMAGE_INVALID_MODEL400Модель не была предоставленаИспользуйте модель из списка пакетных моделей
BATCH_IMAGE_INVALID_ITEMS400Элементы, разрешение или поля запроса недействительныПроверьте тело запроса; в настоящее время поддерживается только 1K
BATCH_IMAGE_DUPLICATE_CUSTOM_ID400Дублирующийся custom_idУбедитесь, что он уникален в рамках одного пакета
BATCH_IMAGE_PROMPT_TOO_LONG400Промпт слишком длинныйСократите промпт
BATCH_IMAGE_TOO_MANY_OUTPUT_IMAGES400Количество изображений после разворачивания превышает лимитУменьшите items или output_count
BATCH_IMAGE_INVALID_REFERENCE_IMAGE400Формат, размер или URI референсного изображения недействительныПроверьте MIME-тип, Base64 и file_uri
BATCH_IMAGE_INSUFFICIENT_BALANCE402Недостаточно баланса для размещения удержанияПополните или уменьшите объём задачи
BATCH_IMAGE_IDEMPOTENCY_CONFLICT409Тот же ключ идемпотентности сопоставляется с другим телом запросаИспользуйте новый Idempotency-Key
BATCH_IMAGE_PROVIDER_SUBMIT_FAILED502Создание вышестоящей пакетной задачи не удалосьСохраните идентификатор запроса, повторите ограниченное число раз или обратитесь к администратору
BATCH_IMAGE_QUEUE_FAILED502Сервис асинхронных задач временно недоступенСохраните идентификатор запроса и обратитесь к администратору
BATCH_IMAGE_NOT_READY409Вы попытались скачать до завершения задачиДождитесь статуса completed
BATCH_IMAGE_OUTPUT_DELETED410Выходные данные уже очищеныИх нельзя скачать снова; нужно пересоздать задачу
BATCH_IMAGE_ITEM_FAILED409У указанного элемента задачи нет успешного изображенияПроверьте item.error
BATCH_IMAGE_DOWNLOAD_LIMITED429Слишком много одновременных скачиванийПовторите позже

19. Пакетный API против API реального времени

АспектGemini image реального времениАсинхронный пакетный image
Эндпоинт/v1beta/models/{model}:generateContent/v1/images/batches
Способ возвратаВозвращает изображение в Base64 в том же HTTP-запросеВозвращает идентификатор пакета; опрос и скачивание позже
Разрешение1K / 2K / 4KВ настоящее время принимает только 1K, а вышестоящий провайдер использует свою конфигурацию изображений по умолчанию
Соотношение сторонУправляется перечислением соотношений, которое модель фактически поддерживаетВ настоящее время не может быть указано; используется соотношение сторон вышестоящего провайдера по умолчанию
Множественные промптыКлиент делает несколько запросовОдин пакет содержит несколько элементов
Несколько изображений на элементНесколько отдельных запросовoutput_count, до 4 по умолчанию
Управление состояниемВызывающий отслеживает самВстроенный статус задачи, детали, отмена и удаление
Способ скачиванияДекодирование Base64Скачивание отдельного изображения или ZIP
СтоимостьОплата за запрос в реальном времениОценка, удержание баланса, расчёт по завершении
Лучше всего дляОнлайн-взаимодействие, тестирование качества, стресс-тесты производительностиКрупномасштабное офлайн-производство

20. Чек-лист интеграции

  • /v1/images/batches/models возвращает хотя бы одну модель;
  • используемый вами ключ API принадлежит группе Gemini, которая разрешает пакетную генерацию изображений;
  • создание задачи включает уникальный Idempotency-Key;
  • image_size использует 1K;
  • все значения custom_id уникальны;
  • вы можете опрашивать до completed или определённого терминального состояния;
  • вы можете запрашивать детали успешных / неудавшихся задач;
  • вы можете скачать отдельное изображение;
  • вы можете скачать ZIP и прочитать манифест результатов;
  • вы можете идентифицировать неудавшиеся элементы и избегать повторной отправки всего пакета;
  • вы проверили estimated_cost, hold_amount и actual_cost;
  • логи записывают код ошибки и идентификатор запроса, но не полный ключ API.

Следующие шаги

Последнее обновление:

На этой странице

1. Когда его использовать2. Предварительные условия3. Аутентификация4. Обзор эндпоинтов5. Список доступных пакетных моделейGET /v1/images/batches/models6. Создание пакетной задачиPOST /v1/images/batchesПоля запроса верхнего уровняПоля items[]Idempotency-Key7. Текущие ограничения пакетаСоотношение сторон пакета пока нельзя указатьПоддерживается только 1KКак output_count разворачивается в задачи8. Пакетный image-to-imageПоля референсного изображения9. Ответ создания задачиКлючевые поля10. Запрос статуса задачиGET /v1/images/batches/{id}Статусы, отображаемые пользователю11. Список задачGET /v1/images/batchesПараметры запроса12. Запрос деталей элементов задачиGET /v1/images/batches/{id}/items13. Скачивание изображенийСкачать отдельный элемент задачиСкачать весь пакет как ZIP14. Отмена и удалениеОтмена задачиУдаление выходных файловУдаление записи задачи15. Полный рабочий процесс на Node.js16. Полный рабочий процесс на Python17. Биллинг и удержания баланса18. Формат ошибокРаспространённые коды ошибок19. Пакетный API против API реального времени20. Чек-лист интеграцииСледующие шаги