Генерация изображений
greenrouter предоставляет модели изображений (gpt-image-2, gemini-3.1-flash-image)
через OpenAI-совместимые эндпоинты: /v1/images/generations (текст → изображение)
и /v1/images/edits (image-to-image с опорными изображениями). Оба эндпоинта
активны и используют ключ sk-ru-…, как и чат.
Эндпоинты
POST https://api.ru-llm.relay2.xyz/v1/images/generationsPOST https://api.ru-llm.relay2.xyz/v1/images/editsГенерация изображения
curl https://api.ru-llm.relay2.xyz/v1/images/generations \ -H "Authorization: Bearer sk-ru-YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-image-2", "prompt": "A red panda coding at a laptop, soft studio lighting", "n": 1, "size": "1024x1024", "quality": "high" }'| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
model | string | Да | ID модели изображений — gpt-image-2 или gemini-3.1-flash-image. |
prompt | string | Да | Текстовое описание изображения для генерации. |
n | integer | Нет | Число изображений. По умолчанию: 1. |
size | string | Нет | Разрешение. gpt-image-2 принимает 1024x1024, 1536x1024, 1024x1536 и auto. |
quality | string | Нет | Качество для gpt-image-2: low, medium, high или auto. |
Ответ
Ответ следует формату изображений OpenAI. gpt-image-2 всегда возвращает данные
изображения в base64 (b64_json); шлюз передаёт полезную нагрузку без
изменений.
{ "created": 1710000000, "data": [ {"b64_json": "iVBORw0KGgoAAAANSUhEUgAA..."} ], "usage": { "input_tokens": 42, "output_tokens": 1568 }}Декодируйте первое изображение в файл PNG:
curl ... | python3 -c "import sys,json,base64; \open('out.png','wb').write(base64.b64decode(json.load(sys.stdin)['data'][0]['b64_json']))"Image-to-image (редактирование)
Чтобы преобразовать или дополнить существующее изображение, отправьте запрос
multipart/form-data на /v1/images/edits с одним или несколькими опорными
изображениями и промптом. Это поверхность для image-to-image и инпейнтинга.
curl https://api.ru-llm.relay2.xyz/v1/images/edits \ -H "Authorization: Bearer sk-ru-YOUR_KEY" \ -F model="gpt-image-2" \ -F prompt="Put the panda on a snowy mountain at dawn" \ -F image[]="@panda.png" \ -F size="1024x1024"| Поле формы | Обязательно | Описание |
|---|---|---|
model | Да | ID модели изображений (gpt-image-2). |
prompt | Да | Что изменить или сгенерировать на основе опорного изображения. |
image[] | Да | Одно или несколько опорных изображений (исходник для редактирования). |
mask | Нет | Необязательная PNG-маска редактируемой области (инпейнтинг). |
n, size, quality | Нет | Тот же смысл, что и при генерации. |
Ответ — тот же формат изображений OpenAI (base64 b64_json), что и при генерации.
Тарификация
Основа тарификации зависит от модели — см. страницу Модели и цены и страницу цен в консоли для актуальных тарифов.
gpt-image-2тарифицируется потокенно, поinput_tokens/output_tokensиз блокаusageответа. Эти счётчики растут сsizeиquality, поэтому потокенная тарификация естественно учитывает разрешение и качество.gemini-3.1-flash-imageтарифицируется за каждое сгенерированное изображение (тарифper_image), списание — за каждое изображение в массивеdata.
Списание идёт против заблокированных средств по принципу fail-closed, поэтому счёт
с нулевым балансом отклоняется с кодом 402 ещё до обращения к провайдеру.
Устранение неполадок
| Симптом | Причина | Решение |
|---|---|---|
401 Unauthorized | Ключ отсутствует или неверен | Передайте корректный ключ sk-ru-…. |
402 Payment Required | Нулевой баланс | Пополните в консоли → Billing. |
400 не модель изображений | ID — это чат- или embedding-модель | Используйте gpt-image-2 или gemini-3.1-flash-image. |
400 неизвестная модель | ID отсутствует в каталоге | Проверьте GET /v1/models. |
400 ожидался multipart | /v1/images/edits отправлен как JSON | Отправляйте edits как multipart/form-data (используйте -F, а не -d). |