Saltar al contenido principal

Generación de imágenes

El acceso se activa bajo petición

Estas instrucciones están disponibles para todos los clientes, pero la generación de imágenes se activa para una clave bajo petición: escribe a support@omev.be. Una clave de API de texto o el acceso a esta página no significa que los productos de imagen estén activos para esa clave.

Máximo de imágenes de referencia por solicitud: 9. Las entradas de referencia (imagen a imagen) son compatibles con los trabajos de imagen mediante input_urls.

Todos los productos de imagen generan salida de clase 1K (hasta 1024 píxeles por lado en una solicitud cuadrada, y formatos más anchos o más altos de la misma clase donde el producto los ofrece). No existen niveles 2K ni 4K; una solicitud de uno de ellos se rechaza.

Precios​

Pagas por cada imagen entregada; una llamada que devuelve varias imágenes se cobra por cada una.

ProductoCalidadPrecio por imagen
omev-image-jobslow (por defecto; también auto)$0.021
omev-image-jobsmedium$0.024
omev-image-jobshigh$0.039
omev-image-liteun único nivel fijo$0.0192
omev-image-mainlow (por defecto; también auto)$0.021
omev-image-prolow (por defecto; también auto)$0.024
omev-image-promedium$0.1968

Una generación fallida o rechazada no se cobra. Todos los productos y precios: Modelos y precios.

Hay dos formas de crear imágenes, diseñadas para dos cargas de trabajo diferentes.

Trabajos de imagen: la ruta principal para procesos automatizados. Realizas un pedido, consultas el resultado periódicamente (o lo recibes en tu dirección de callback) y descargas la imagen final desde una URL que alojamos durante 48 horas. Un modelo, omev-image-jobs, con salida de clase 1K en muchos formatos, tres niveles de calidad e imágenes de referencia opcionales. Esta es la ruta para la generación masiva desatendida: tu worker encola los pedidos y recoge los resultados, sin que un humano espere en un socket.

Modelos directos. La imagen se devuelve en el cuerpo de la respuesta de una única llamada: omev-image-lite, omev-image-main y omev-image-pro. Elige estos cuando alguien está esperando la imagen en la pantalla en ese mismo momento.

API de trabajos de imagen​

Tres llamadas, mismo host y misma clave que para todo lo demás.

1. Realizar un pedido​

curl -sS https://llmapi.omev.be/api/v1/jobs/createTask \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "omev-image-jobs",
"input": {
"prompt": "Flat vector infographic: three steps of onboarding, numbered 1 2 3, short labels",
"aspect_ratio": "1:1"
}
}'
{"code": 200, "msg": "success", "data": {"taskId": "task_omevimage_1754937600123_a1b2c3d4"}}
CampoRequeridoValores
modelsíomev-image-jobs
input.promptsítexto libre; escribe explícitamente cada palabra que deba aparecer en la imagen
input.aspect_rationoauto (por defecto, cuadrada), 1:1, 3:2, 2:3, 4:3, 3:4, 16:9, 9:16, 21:9, 9:21, 5:4, 4:5, 9:8, 8:9, 27:16, 16:27, 2:1, 1:2, 3:1, 1:3
input.resolutionno1K: el único nivel ofrecido
input.qualitynolow (por defecto; auto equivale a lo mismo), medium o high; consulta Precios. medium y high funcionan en pedidos de texto a imagen, no con input_urls
input.backgroundnoauto (por defecto), transparent u opaque
input.enhancenotrue (por defecto) permite que OmevAI mejore el prompt; false envía tu prompt exactamente como lo escribiste
input.input_urlsno1–9 URL http(s) públicas de imágenes de referencia (ver más abajo)
callBackUrlnouna dirección http(s) pública; hacemos un POST con el registro final de la tarea allí; la consulta periódica simple también funciona

Los formatos que no son cuadrados salen en la misma clase 1K; por ejemplo, 16:9 es 1360x768 y 3:2 es 1536x1024.

Un 403 normalmente significa que la clave no está habilitada para trabajos de imagen. Contacta con support@omev.be para acordar el acceso; no reintentes repetidamente. Los errores de la API de trabajos llegan con el estado HTTP 200 y el código en el cuerpo, como esperan las integraciones existentes de imágenes basadas en tareas: {"code": 422, "msg": "<cuál fue el error>", "data": null}. Comprueba code en cada respuesta, no solo el estado HTTP. Consulta Errores.

2. Comprobar el resultado​

curl -sS "https://llmapi.omev.be/api/v1/jobs/recordInfo?taskId=task_omevimage_1754937600123_a1b2c3d4" \
-H "Authorization: Bearer $OMEV_API_KEY"
{
"code": 200,
"msg": "success",
"data": {
"taskId": "task_omevimage_1754937600123_a1b2c3d4",
"model": "omev-image-jobs",
"state": "success",
"resultJson": "{\"resultUrls\":[\"https://llmapi.omev.be/api/v1/jobs/result?id=task_omevimage_1754937600123_a1b2c3d4\"]}",
"failCode": "",
"failMsg": "",
"costTime": 96000,
"createTime": 1754937600123,
"completeTime": 1754937696123,
"progress": 100,
"effectiveQuality": "low"
}
}

state pasa por waiting → queuing → generating → success (o fail, con failCode y failMsg indicando el motivo). Consulta cada 2–5 segundos y aumenta el intervalo si es necesario; un trabajo típico tarda de uno a cinco minutos. resultJson es una cadena de texto JSON: analízala y extrae las URLs de resultUrls. effectiveQuality es el nivel de calidad con el que se hizo y se cobró el pedido.

Con callBackUrl, el mismo registro se envía a tu dirección cuando la tarea llega a success o fail.

3. Descargar la imagen​

Descarga cada URL de resultado con la misma cabecera Authorization: Bearer que usas en las demás llamadas; sin la clave responde 401. El archivo está disponible durante 48 horas: descarga los bytes a tu propio almacenamiento de inmediato; después de 48 horas el archivo se elimina y la URL responde con un 404. El registro de la tarea (recordInfo) está disponible durante 7 días.

curl -sS -o image.png "https://llmapi.omev.be/api/v1/jobs/result?id=task_omevimage_1754937600123_a1b2c3d4" \
-H "Authorization: Bearer $OMEV_API_KEY"

Si tu código ya utiliza una API de imágenes basada en tareas con esta estructura (crear una tarea, consultar un registro, leer resultUrls), funcionará aquí con dos cambios: la URL base y la clave.

Imágenes de referencia (imagen a imagen)​

Los pedidos pueden llevar de 1 a 9 imágenes de referencia: añade a input una lista input_urls con URLs http(s) públicas de las imágenes que quieres editar o combinar. El orden de la lista se conserva: si tu prompt dice "put the product from image 1 into the scene from image 2", image 1 es input_urls[0].

{
"model": "omev-image-jobs",
"input": {
"prompt": "Put the product from image 1 into the environment from image 2",
"input_urls": [
"https://example.com/product.png",
"https://example.com/location.jpg"
],
"aspect_ratio": "1:1"
}
}
  • Si omites input_urls (o envías una lista vacía), el pedido sigue siendo de texto a imagen.
  • Cada referencia debe ser una imagen PNG, JPEG o WebP de hasta 20 MB.
  • Más de 9 URLs se rechazan con el mensaje A maximum of 9 reference images is allowed per request.
  • Las referencias se copian a un almacenamiento interno al realizar el pedido, por lo que una URL de origen que caduque más tarde no puede romper un trabajo en curso.
  • Los pedidos con referencias se hacen con calidad low y cuestan lo mismo que otros pedidos low.

omev-image-main​

La forma de la solicitud es la API de Imágenes compatible con OpenAI, así que cualquier SDK construido para ella funciona sin cambios: apunta base_url a OmevAI y llama a images.generate. omev-image-main es el valor por defecto estable para uso interactivo. Precio: $0.021 por imagen.

curl -sS https://llmapi.omev.be/v1/images/generations \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "omev-image-main",
"prompt": "A photorealistic cat wearing sunglasses",
"size": "1024x1024"
}'
CampoRequeridoValores
promptsítexto libre
sizeno1024x1024 (por defecto), 1536x1024, 1024x1536, auto
qualitynolow (por defecto) o auto; medium/high responde 400
nnosolo 1
response_formatnosolo b64_json

La imagen se encuentra en data[0].b64_json. Si la llamada termina con un 504, envía la misma solicitud de nuevo con el mismo encabezado Idempotency-Key: el pedido continúa en el servidor y el reintento recoge el resultado finalizado en lugar de pagar por una segunda imagen.

omev-image-pro​

La misma forma de API de Imágenes compatible con OpenAI que omev-image-main. omev-image-pro es la vía de calidad: los prompts con texto incrustado (infografías, diagramas, gráficos, tablas, etiquetas, logotipos) se renderizan de forma fiable aquí. Precio: $0.024 por imagen con calidad low o auto, $0.1968 por imagen con medium.

curl -sS https://llmapi.omev.be/v1/images/generations \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "omev-image-pro",
"prompt": "Flat vector infographic: three steps of onboarding, numbered 1 2 3, short labels",
"size": "1024x1024"
}'
CampoRequeridoValores
promptsítexto libre; escribe explícitamente cada palabra que deba aparecer en la imagen
sizeno1024x1024 (por defecto), auto, o cualquier WxH hasta 1024 en cada lado
qualitynolow, medium, auto; high responde 400
nnohasta 4 imágenes
response_formatnosolo b64_json
backgroundnotransparent, opaque, auto
output_formatnopng, jpeg, webp
client = OpenAI(base_url="https://llmapi.omev.be/v1", api_key=os.environ["OMEV_API_KEY"])

resp = client.images.generate(
model="omev-image-pro",
prompt="Flat vector infographic: three steps of onboarding, numbered 1 2 3",
size="1024x1024",
)
png_bytes = base64.b64decode(resp.data[0].b64_json)

La imagen se encuentra en data[0].b64_json.

omev-image-lite​

Una ruta diferente y una estructura de cuerpo diferente, la que se basa en contents y parts. Si tu código ya utiliza esa estructura, funcionará aquí sin cambios. La salida es siempre de 1024×1024, por lo que no hay parámetro de tamaño. Precio: $0.0192 por imagen.

curl -sS https://llmapi.omev.be/v1beta/models/omev-image-lite:generateContent \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [{"parts": [{"text": "A photorealistic cat wearing sunglasses"}]}]
}'

Respuesta:

{
"candidates": [{
"content": {
"role": "model",
"parts": [{"inlineData": {"mimeType": "image/png", "data": "<base64 PNG>"}}]
},
"finishReason": "STOP"
}]
}

La imagen se encuentra en candidates[0].content.parts[0].inlineData.data, con su tipo en el campo adyacente mimeType.

Define generationConfig.candidateCount (1–4) para recibir esa cantidad de candidates separados, cada uno con una imagen en inlineData.

Errores​

Los modelos directos (omev-image-lite, omev-image-main, omev-image-pro) usan la misma estructura que el resto de la API; consulta Errores y reintentos. Un cuerpo de solicitud malformado devuelve un 400 con el detalle del error; un prompt rechazado también devuelve un 400, no una imagen en blanco. Una llamada que se queda sin tiempo devuelve 504: con omev-image-main, repítela con el mismo Idempotency-Key.

Los trabajos de imagen responden con el estado HTTP 200 y el código en el cuerpo:

codeSignificado
200éxito
401no se aceptaron la clave o los encabezados
404tarea desconocida
422el pedido fue rechazado; msg indica el motivo (modelo desconocido, prompt vacío, formato, calidad o resolución no admitidos, demasiadas referencias)
455el servicio de imágenes no está disponible temporalmente; reintenta más tarde
500error temporal; reintenta un número limitado de veces

Una tarea que se aceptó y después falló lo indica en el registro de la tarea: state: "fail" con failCode y failMsg. Una tarea fallida no se cobra.