Отдельная ручка /v1/images/generations, совместимая с OpenAI. Тот же vk- ключ, оплата — за картинку, а не за токены.
Запрос
curl https://vibecode.moe/v1/images/generations \
-H "Authorization: Bearer vk-YOUR-KEY" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-image-2","prompt":"a red fox in the snow","n":1,"size":"1024x1024"}'
Обязательное поле одно — model. Остальные (prompt, n, size, quality…) — те же, что в OpenAI Images API, и поддерживаются в объёме, который умеет выбранная модель. Генерация занимает десятки секунд — ставь таймаут клиента не меньше минуты.
Ссылка временная — живёт несколько часов, потом отдаёт 404. Скачай файл сразу (ключ для этого не нужен) или запрашивай b64_json, чтобы получить байты прямо в ответе (ниже).
Байты вместо ссылки
Добавь "response_format":"b64_json", и в data[].b64_json придёт сам файл в base64. Удобно, когда некуда ходить за ссылкой — очередь, фоновый воркер, изолированная сеть.
curl https://vibecode.moe/v1/images/generations \
-H "Authorization: Bearer vk-YOUR-KEY" -H "Content-Type: application/json" \
-d '{"model":"gpt-image-2","prompt":"a red fox in the snow","response_format":"b64_json"}' \
| python -c "import sys,json,base64; open('out.png','wb').write(base64.b64decode(json.load(sys.stdin)['data'][0]['b64_json']))"
Картинка-референс
Чтобы модель отталкивалась от твоего изображения (изменить его, дорисовать, совместить несколько), шли запрос на /v1/images/edits. Это multipart/form-data, как в OpenAI Images API: картинка идёт файлом в поле image — не ссылкой и не base64 внутри JSON.
curl https://vibecode.moe/v1/images/edits \
-H "Authorization: Bearer vk-YOUR-KEY" \
-F model=gpt-image-2.5 \
-F prompt="put a red scarf on the fox" \
-F image=@fox.png
from openai import OpenAI
client = OpenAI(base_url="https://vibecode.moe/v1", api_key="vk-YOUR-KEY")
result = client.images.edit(
model="gpt-image-2.5",
image=open("fox.png", "rb"),
prompt="put a red scarf on the fox",
)
print(result.data[0].url)
Обязательны model, prompt и хотя бы один файл image. Файлов может быть до четырёх (повтори поле image), формат — PNG, JPEG или WebP, весь запрос — до 32 МБ. Остальные поля (size, quality, response_format…) — те же, что при генерации. Файл mask принимается, но модели пока его не учитывают — правится вся картинка по описанию; n на правке даёт одну картинку. Запрос без файла или с не-картинкой вернёт ошибку 400 сразу, без списания. Правка идёт дольше генерации — до 2–3 минут, ставь таймаут клиента не меньше 4 минут.
Ответ, временная ссылка и цена — как у генерации: одна картинка в ответе — одно списание по цене модели.
Модели
gpt-image-2
gpt-image-2.5
gpt-image-2.5-flare
gpt-image-2.5-sunburst
gpt-image-2-vip
nano-banana-2
nano-banana-2-lite
nano-banana-2.1
nano-banana-pro
Цена за картинку и доступные размеры — на странице моделей и в GET https://vibecode.moe/v1/models (поле usd_per_image).
Через /v1/chat/completions эти модели не работают — только через /v1/images/generations и /v1/images/edits. Картинку, переданную как image_url в сообщении чата, они не получат. Если генерация не удалась, ответ будет ошибкой, и списания не произойдёт.