Генерация изображений Imagen 3: Автоматическое сопоставление параметров size/quality OpenAI Images
Хотите вызывать Imagen 3 по привычке OpenAI Images API? Локальный прокси Antigravity Tools предоставляет /v1/images/generations и автоматически сопоставляет size / quality с настройками пропорции и разрешения, необходимыми для Imagen 3.
Чему вы научитесь
- Генерировать изображения Imagen 3 с помощью
POST /v1/images/generations, не меняя привычки вызова существующего клиента/SDK OpenAI - Стабильно управлять
aspectRatio(16:9, 9:16 и т.д.) с помощьюsize: "WIDTHxHEIGHT" - Управлять уровнем разрешения
imageSize(стандартный/2K/4K) с помощьюquality: "standard" | "medium" | "hd" - Понимать возврат
b64_json/url(data:...)и подтверждать фактически использованный аккаунт через заголовки ответа
Текущие проблемы
Вы могли столкнуться с этими ситуациями:
- Клиент только умеет вызывать
/v1/images/generationsOpenAI, но вы хотите использовать Imagen 3 - При одном и том же prompt иногда квадрат, иногда горизонтальный, управление пропорциями нестабильно
- Вы написали
sizeкак16:9, результат всё равно 1:1 (и не знаете почему)
Когда использовать этот метод
- Вы уже используете локальный прокси Antigravity Tools, хотите чтобы «генерация изображений» также единообразно проходила через тот же шлюз
- Вы хотите позволить инструментам, поддерживающим OpenAI Images API (Cherry Studio, Kilo Code и т.д.), напрямую генерировать изображения Imagen 3
🎒 Подготовка
Предварительная проверка
Этот урок предполагает, что вы уже запустили локальный прокси и знаете свой Base URL (например, http://127.0.0.1:<port>). Если ещё не реализовано, сначала завершите «Запуск локального прокси и подключение первого клиента».
Напоминание об аутентификации
Если вы включили proxy.auth_mode (например, strict / all_except_health), при вызове /v1/images/generations нужно принести:
Authorization: Bearer <proxy.api_key>
Основная идея
Что именно делает это «автоматическое сопоставление»?
Сопоставление OpenAI Images Imagen 3 означает: вы всё ещё отправляете prompt/size/quality по API OpenAI Images, прокси анализирует size как стандартное соотношение сторон (например, 16:9), анализирует quality как уровень разрешения (2K/4K), а затем использует формат внутреннего запроса для вызова вышестоящего gemini-3-pro-image.
Пояснение модели
gemini-3-pro-image — это имя модели генерации изображений Google Imagen 3 (из документации README проекта). В исходном коде по умолчанию используется эта модель для генерации изображений.
1) size -> aspectRatio (динамический расчёт)
- Прокси будет анализировать
sizeкакWIDTHxHEIGHT, а затем сопоставлять со стандартным соотношением по соотношению сторон. - Если анализ
sizeнеудачен (например, не разделёнx, или число недопустимо), откатится к1:1.
2) quality -> imageSize (уровень разрешения)
quality: "hd"->imageSize: "4K"quality: "medium"->imageSize: "2K"quality: "standard"(или другие значения) -> не устанавливатьimageSize(оставить по умолчанию)
3) n несколько изображений — это «параллельно отправить n раз»
Эта реализация не зависит от candidateCount > 1 вышестоящего уровня, а разбивает n генераций на параллельные несколько запросов, а затем объединяет результаты в возврат в стиле OpenAI data[].
Пошаговое руководство
Шаг 1: Подтвердите, что прокси запущен (опционально, но настоятельно рекомендуется)
Зачем Сначала подтвердите ваш Base URL и режим аутентификации, чтобы позже не ошибочно определить проблему как «неудача генерации изображений».
# Проверка работоспособности (при auth_mode=all_except_health также можно без аутентификации)
curl -sS http://127.0.0.1:PORT/healthz # Проверка работоспособности (при auth_mode=all_except_health также можно без аутентификации)
curl.exe -sS http://127.0.0.1:PORT/healthzЧто вы должны увидеть: Возвращается JSON, содержащий "status": "ok".
Шаг 2: Отправьте минимально доступный запрос генерации изображений
Зачем Сначала реализуйте цепочку с минимальными полями, затем наложите пропорцию/качество/количество и т.д. параметры.
curl -sS http://127.0.0.1:PORT/v1/images/generations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_PROXY_API_KEY" \
-d '{
"model": "gemini-3-pro-image",
"prompt": "A minimal icon of a rocket, flat design",
"n": 1,
"size": "1024x1024",
"quality": "standard",
"style": "vivid",
"response_format": "b64_json"
}'curl.exe -sS http://127.0.0.1:PORT/v1/images/generations `
-H "Content-Type: application/json" `
-H "Authorization: Bearer YOUR_PROXY_API_KEY" `
-d '{
"model": "gemini-3-pro-image",
"prompt": "A minimal icon of a rocket, flat design",
"n": 1,
"size": "1024x1024",
"quality": "standard",
"style": "vivid",
"response_format": "b64_json"
}'Что вы должны увидеть: В JSON ответа есть массив data, в массиве содержится поле b64_json (содержимое длинное).
Шаг 3: Подтвердите, какой аккаунт вы используете (смотрите заголовки ответа)
Зачем Генерация изображений также использует планирование пула аккаунтов; при устранении неполадок критично подтвердить «какой именно аккаунт генерирует».
curl -i http://127.0.0.1:PORT/v1/images/generations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_PROXY_API_KEY" \
-d '{"prompt":"test","n":1,"size":"1024x1024"}'curl.exe -i http://127.0.0.1:PORT/v1/images/generations `
-H "Content-Type: application/json" `
-H "Authorization: Bearer YOUR_PROXY_API_KEY" `
-d '{"prompt":"test","n":1,"size":"1024x1024"}'Что вы должны увидеть: В заголовке ответа содержится X-Account-Email: ....
Шаг 4: Управляйте соотношением сторон с помощью size (рекомендуется использовать только WIDTHxHEIGHT)
Зачем Вышестоящий уровень Imagen 3 принимает стандартизированное aspectRatio; вы просто напишете size как набор общих ширины и высоты, и сможете стабильно сопоставить со стандартным соотношением.
| Вы передали size | aspectRatio, рассчитанный прокси |
|---|---|
"1024x1024" | 1:1 |
"1920x1080" / "1280x720" | 16:9 |
"1080x1920" / "720x1280" | 9:16 |
"800x600" | 4:3 |
"600x800" | 3:4 |
"2560x1080" | 21:9 |
Что вы должны увидеть: Пропорция изображения меняется вместе с изменением size.
Шаг 5: Управляйте уровнем разрешения с помощью quality (standard/medium/hd)
Зачем Вам не нужно помнить внутренние поля Imagen 3, используйте только quality OpenAI Images, чтобы переключить уровень разрешения.
| Вы передали quality | imageSize, записанный прокси |
|---|---|
"standard" | Не устанавливать (использовать по умолчанию вышестоящего уровня) |
"medium" | "2K" |
"hd" | "4K" |
Что вы должны увидеть: hd деталей более богато (одновременно медленнее/больше ресурсов, это поведение вышестоящего уровня, ориентируйтесь на фактический возврат).
Шаг 6: Решите, хотите ли b64_json или url
Зачем В этой реализации response_format: "url" не даст вам URL, доступный публично, а вернёт data:<mime>;base64,... Data URI; многие инструменты более подходят для прямого использования b64_json.
| response_format | Поле data[] |
|---|---|
"b64_json" (по умолчанию) | { "b64_json": "..." } |
"url" | { "url": "data:image/png;base64,..." } |
Контрольные точки ✅
- Вы можете вернуть минимум 1 изображение с помощью
/v1/images/generations(data.length >= 1) - Вы можете увидеть
X-Account-Emailв заголовке ответа и при необходимости воспроизвести ту же проблему с аккаунтом - После изменения
sizeна1920x1080пропорция изображения станет горизонтальной (16:9) - После изменения
qualityнаhdпрокси сопоставит это сimageSize: "4K"
Частые ошибки
1) size написано как 16:9 не даст 16:9
Здесь логика разбора size разделяется по WIDTHxHEIGHT; если size не такого формата, напрямую откатится к 1:1.
| Запись | Результат |
|---|---|
✓ "1920x1080" | 16:9 |
❌ "16:9" | Откат 1:1 |
2) Не включили аутентификацию, но принесли Authorization, это не приведёт к успеху
Аутентификация — это вопрос «обязательна ли»:
proxy.auth_mode=off: можно или нет принестиAuthorizationproxy.auth_mode=strict/all_except_health: безAuthorizationбудет отклонено
3) При n > 1 может появиться «частичный успех»
Реализация — это параллельный запрос и объединение результатов: если часть запросов неудачна, всё равно может вернуть часть изображений, и в журналах записать причину неудачи.
Итог урока
- Используйте
/v1/images/generationsдля вызова Imagen 3, ключ — запомнить:sizeиспользуетWIDTHxHEIGHT,qualityиспользуетstandard/medium/hd sizeуправляетaspectRatio,qualityуправляетimageSize(2K/4K)response_format=urlвозвращает Data URI, а не публичный URL
Предпросмотр следующего урока
В следующем уроке мы изучим Транскрипция аудио: Ограничения и обработка больших пакетов /v1/audio/transcriptions.
Приложение: Справочник по исходному коду
Нажмите, чтобы раскрыть расположение исходного кода
Обновлено: 2026-01-23
| Функция | Путь к файлу | Строки |
|---|---|---|
| Экспозиция маршрута OpenAI Images | src-tauri/src/proxy/server.rs | 123-146 |
| Конечная точка генерации Images: разбор prompt/size/quality + сборка ответа OpenAI | src-tauri/src/proxy/handlers/openai.rs | 1104-1333 |
| --- | --- | --- |
| Объявление size/quality OpenAIRequest (для совместимости уровня протокола) | src-tauri/src/proxy/mappers/openai/models.rs | 6-38 |
| --- | --- | --- |
Ключевые поля (из исходного кода):
size: анализируется какaspectRatioпоWIDTHxHEIGHTquality:hd -> 4K,medium -> 2K, остальные не устанавливают