Generación de imágenes
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.
| Producto | Calidad | Precio por imagen |
|---|---|---|
omev-image-jobs | low (por defecto; también auto) | $0.021 |
omev-image-jobs | medium | $0.024 |
omev-image-jobs | high | $0.039 |
omev-image-lite | un único nivel fijo | $0.0192 |
omev-image-main | low (por defecto; también auto) | $0.021 |
omev-image-pro | low (por defecto; también auto) | $0.024 |
omev-image-pro | medium | $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"}}
| Campo | Requerido | Valores |
|---|---|---|
model | sí | omev-image-jobs |
input.prompt | sí | texto libre; escribe explícitamente cada palabra que deba aparecer en la imagen |
input.aspect_ratio | no | auto (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.resolution | no | 1K: el único nivel ofrecido |
input.quality | no | low (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.background | no | auto (por defecto), transparent u opaque |
input.enhance | no | true (por defecto) permite que OmevAI mejore el prompt; false envía tu prompt exactamente como lo escribiste |
input.input_urls | no | 1–9 URL http(s) públicas de imágenes de referencia (ver más abajo) |
callBackUrl | no | una 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
lowy cuestan lo mismo que otros pedidoslow.
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"
}'
| Campo | Requerido | Valores |
|---|---|---|
prompt | sí | texto libre |
size | no | 1024x1024 (por defecto), 1536x1024, 1024x1536, auto |
quality | no | low (por defecto) o auto; medium/high responde 400 |
n | no | solo 1 |
response_format | no | solo 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"
}'
| Campo | Requerido | Valores |
|---|---|---|
prompt | sí | texto libre; escribe explícitamente cada palabra que deba aparecer en la imagen |
size | no | 1024x1024 (por defecto), auto, o cualquier WxH hasta 1024 en cada lado |
quality | no | low, medium, auto; high responde 400 |
n | no | hasta 4 imágenes |
response_format | no | solo b64_json |
background | no | transparent, opaque, auto |
output_format | no | png, 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:
code | Significado |
|---|---|
200 | éxito |
401 | no se aceptaron la clave o los encabezados |
404 | tarea desconocida |
422 | el pedido fue rechazado; msg indica el motivo (modelo desconocido, prompt vacío, formato, calidad o resolución no admitidos, demasiadas referencias) |
455 | el servicio de imágenes no está disponible temporalmente; reintenta más tarde |
500 | error 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.