Generación de imágenes
Genera y edita imágenes con un único punto final compatible con OpenAI. La misma forma de petición llega a todos los modelos de imagen del catálogo.
Un único endpoint de imágenes compatible con OpenAI se distribuye a Flux, Nano-Banana, Wan y otros proveedores. Envía la misma estructura de request independientemente del upstream; las opciones específicas de cada proveedor pasan a través y se validan contra las capacidades de cada modelo.
Descubre los modelos de imagen listando el endpoint de models y conservando aquellos cuyas modalities de salida incluyan image.
POST /v1/images/generations
Compatible con OpenAI images.generate SDK. Los parámetros específicos del proveedor conviven con los estándar: el backend transmite lo que entiende cada modelo.
https://api.airforce/v1/images/generationsModelos de imagen
…· liveParámetros comunes
| 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. |
Ejemplo básico
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"
}'Forma de respuesta
| 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"
}]
}Variante de transmisión
Aprobar sse: true al realizar proxy a través de middleware que tiene tiempos de inactividad ajustados. La respuesta es un evento SSE con el JSON completo, luego [DONE].
data: {"created":1715000000,"data":[{"url":"https://.../image.jpeg"}]}
data: [DONE]Imagen a imagen y referencia
Modelos con image_caps.max_input_images > 0 aceptar imágenes de referencia. Pase URL o datos codificados en 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"}
]
}'Edición de imágenes
El endpoint de edición compatible con OpenAI. Envía la imagen de origen como archivo multipart, como hacen los SDK de OpenAI con images.edit, o envía el cuerpo JSON mostrado arriba con input_images. Sigue el mismo camino que /v1/images/generations: los mismos modelos, precios y formato de respuesta.
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)Hasta 16 imágenes de entrada por solicitud, de 25 MB cada una; el límite propio del modelo es image_caps.max_input_images. Una solicitud sin imagen de entrada se rechaza con 400 en lugar de convertirse en una llamada de texto a imagen. Cada imagen de entrada puede aumentar el precio, como indica la página del modelo.
Parámetros específicos del modelo
Más allá de los parámetros comunes anteriores, las familias de modelos individuales aceptan extras. Los parámetros desconocidos se envían al canal ascendente tal cual, por lo que cualquier mando específico del proveedor futuro también funcionará sin una actualización del 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 y suno-v5.5 se aceptaban históricamente en este endpoint. Ahora pertenecen a la API de música nativa en /v1/audio/music — las llamadas aquí se rechazan con `wrong_endpoint`.
Descubriendo capacidades
Cada modelo de imagen expone image_caps en /v1/models para que los clientes puedan validar las entradas antes de enviar:
| 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). |
Los precios de imagen no están en image_caps — usa los campos de precio del modelo en /v1/models para el coste.