Генерация изображений
Создавайте и редактируйте изображения через одну конечную точку, совместимую с OpenAI. Один и тот же формат запроса подходит для каждой модели изображений в каталоге.
Один OpenAI-совместимый image endpoint распределяет запросы между Flux, Nano-Banana, Wan и другими провайдерами. Отправляйте одну и ту же форму request независимо от upstream; специфичные для провайдера опции передаются и проверяются на соответствие возможностям каждой модели.
Находите image-модели, запросив models endpoint и оставив те, у которых среди output modalities есть image.
POST /v1/images/generations
Модуль, совместимый с OpenAI images.generate СДК. Параметры, специфичные для поставщика, живут рядом со стандартными — серверная часть передает то, что понимает каждая модель.
https://api.airforce/v1/images/generationsМодели изображений
…· liveОбщие параметры
| Parameter | Type | Required | Description |
|---|---|---|---|
| model | string | Required | Image model ID. Find them on /v1/models: image models carry media_type: "image" and an image_caps block. |
| prompt | string | Required | Image description. |
| n | integer | Optional | Number of variations to generate per request. Capped by the model's image_caps.max_n. |
| size | string | Optional | OpenAI-style WxH, e.g. "1024x1024". Provider-specific values pass through. |
| aspect_ratio | string | Optional | Alternative to size. "16:9", "1:1", "9:16", … Validated against image_caps.aspect_ratios. |
| quality | string | Optional | "standard" | "hd" (OpenAI) or model-specific labels. Validated. |
| response_format | string | Optional | "url" (default) or "b64_json". |
| seed | integer | Optional | Reproducibility seed. Same prompt + same seed = same image (where the upstream supports it). |
| input_images | array | Optional | [{ url? } | { b64_json? }] for image-to-image / reference / first-frame. |
| sse | boolean | Optional | When true the response is sent as Server-Sent Events. The full JSON arrives in one event followed by [DONE]. Useful to keep long upstream renders from timing out at proxies. |
Базовый пример
curl https://api.airforce/v1/images/generations \
-H "Authorization: Bearer sk-air-YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "nano-banana-2",
"prompt": "A cute baby sea otter floating on its back",
"n": 1,
"response_format": "url"
}'Форма ответа
| Parameter | Type | Required | Description |
|---|---|---|---|
| created | integer | Optional | Unix timestamp. |
| data | array | Optional | Generated assets. |
| data[].url | string | Optional | Image URL when response_format is "url" (default). The image is re-hosted to a file host and the link ends in /image.jpeg; null if the re-host fails. |
| data[].b64_json | string | Optional | Base64-encoded image bytes when response_format is "b64_json". The format follows the upstream provider (often JPEG), not necessarily PNG. |
{
"created": 1715000000,
"data": [{
"url": "https://.../image.jpeg"
}]
}Потоковый вариант
Проходить sse: true при проксировании через промежуточное программное обеспечение с жесткими тайм-аутами простоя. Ответом является одно событие SSE с полным JSON, затем [DONE].
data: {"created":1715000000,"data":[{"url":"https://.../image.jpeg"}]}
data: [DONE]Изображение к изображению и ссылка
Модели с image_caps.max_input_images > 0 принять эталонные изображения. Либо передайте URL-адреса, либо данные в кодировке Base64.
curl https://api.airforce/v1/images/generations \
-H "Authorization: Bearer sk-air-YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "nano-banana-2",
"prompt": "Same character, now in a snowy forest",
"aspect_ratio": "16:9",
"input_images": [
{"url": "https://example.com/character.jpg"}
]
}'Редактирование изображений
Совместимый с OpenAI эндпоинт редактирования. Отправьте исходное изображение файлом multipart, как это делают SDK OpenAI для images.edit, или отправьте показанное выше JSON-тело с input_images. Он идёт тем же путём, что и /v1/images/generations: те же модели, цены и формат ответа.
https://api.airforce/v1/images/edits| Parameter | Type | Required | Description |
|---|---|---|---|
| model | string | Required | An image model with image_caps.max_input_images > 0 (see Discovering capabilities below). |
| prompt | string | Required | What to change or create from the input image(s). |
| image | file | Required | The source image. Repeat as image[] for several references; images, images[] and input_images are accepted too, as files or as image URLs. |
| mask | file | Optional | Forwarded as is, but no listed model declares mask support, so the serving model may ignore it. |
| n | integer | Optional | Number of images to generate. |
| size | string | Optional | Output size, e.g. "1024x1024", where the model supports it. |
| aspect_ratio | string | Optional | Output aspect ratio, e.g. "16:9", where the model supports it. |
| quality | string | Optional | Model-specific quality level. |
| response_format | string | Optional | "url" or "b64_json", as on /v1/images/generations. |
curl https://api.airforce/v1/images/edits \
-H "Authorization: Bearer sk-air-YOUR_API_KEY" \
-F "model=nano-banana-2" \
-F "prompt=Same character, now in a snowy forest" \
-F "[email protected]" \
-F "aspect_ratio=16:9"from openai import OpenAI
client = OpenAI(base_url="https://api.airforce/v1", api_key="sk-air-YOUR_API_KEY")
with open("character.png", "rb") as image:
result = client.images.edit(
model="nano-banana-2",
image=image,
prompt="Same character, now in a snowy forest",
)
print(result.data[0].url)До 16 входных изображений на запрос, по 25 МБ каждое; собственный лимит модели — image_caps.max_input_images. Запрос без входного изображения отклоняется с кодом 400, а не превращается в генерацию по тексту. Каждое входное изображение может увеличить цену, как указано на странице модели.
Параметры, специфичные для модели
Помимо общих параметров, указанных выше, отдельные семейства моделей допускают дополнительные параметры. Неизвестные параметры передаются в восходящий поток как есть, поэтому любая будущая ручка, зависящая от поставщика, также будет работать без обновления SDK.
Nano-Banana
nano-banana-2, nano-banana-pro
| Parameter | Type | Required | Description |
|---|---|---|---|
| aspect_ratio | string | Optional | "1:1", "16:9", "9:16", "4:3". |
| resolution | string | Optional | "512", "1024", "2048". |
| image_urls | array | Optional | Reference images. |
Suno (music)
suno-v4.5, suno-v5 и suno-v5.5 исторически принимались на этой конечной точке. Теперь они относятся к нативному музыкальному API по адресу /v1/audio/music — вызовы здесь отклоняются с `wrong_endpoint`.
Открытие возможностей
Каждая модель изображения раскрывает image_caps на /v1/models чтобы клиенты могли проверять вводимые данные перед отправкой:
| Parameter | Type | Required | Description |
|---|---|---|---|
| image_caps.max_n | integer | Optional | Maximum n per request. |
| image_caps.aspect_ratios | array | Optional | Allowed aspect_ratio values. |
| image_caps.qualities | array | Optional | Allowed quality values. |
| image_caps.max_input_images | integer | Optional | 0 = text-only model. Higher = supports reference images. |
| image_caps.supports_url_input | boolean | Optional | Whether input_images may be passed as URLs (vs base64). |
| image_caps.supports_seed | boolean | Optional | Whether the model honours a seed value (most scraping-proxy upstreams ignore it). |
Цены на изображения не указаны в image_caps — для определения стоимости используйте поля цен модели в /v1/models.