Génération d'images
Ces instructions sont disponibles pour tous les clients, mais la génération d'images est activée pour une clé sur demande : écrivez à support@omev.be. Une clé API pour le texte ou l'accès à cette page ne signifie pas que les produits d'imagerie sont actifs pour cette clé.
Nombre maximal d'images de référence par requête : 9. Les entrées de référence (image-à-image) sont prises en charge par les tâches d'image avec input_urls.
Tous les produits d'image génèrent une sortie de classe 1K (jusqu'à un bord de 1024 pixels pour une requête carrée, et des formats plus larges ou plus hauts de la même classe là où le produit les propose). Il n'existe pas de niveaux 2K ou 4K ; une telle demande est refusée.
Prix
Vous payez par image livrée ; un appel qui renvoie plusieurs images est facturé pour chacune d'elles.
| Produit | Qualité | Prix par image |
|---|---|---|
omev-image-jobs | low (par défaut, également auto) | $0.021 |
omev-image-jobs | medium | $0.024 |
omev-image-jobs | high | $0.039 |
omev-image-lite | un niveau fixe | $0.0192 |
omev-image-main | low (par défaut, également auto) | $0.021 |
omev-image-pro | low (par défaut, également auto) | $0.024 |
omev-image-pro | medium | $0.1968 |
Une génération échouée ou refusée n'est pas facturée. Tous les produits et tous les prix : Modèles et prix.
Il existe deux manières de créer des images, conçues pour deux charges de travail différentes.
Tâches d'image (Image jobs) — la voie principale pour les pipelines. Vous passez une commande, interrogez l'API pour obtenir le résultat (ou le recevez à votre adresse de rappel), et téléchargez l'image terminée depuis une URL que nous hébergeons pendant 48 heures. Un seul modèle, omev-image-jobs, une sortie de classe 1K dans de nombreux formats, trois niveaux de qualité et des images de référence en option. C'est la méthode à privilégier pour la génération en masse non supervisée : votre worker met les commandes en file d'attente et récupère les résultats, sans qu'un humain n'attende sur un socket.
Modèles directs. L'image est retournée dans le corps de la réponse d'un unique appel : omev-image-lite, omev-image-main et omev-image-pro. Choisissez ces modèles lorsque quelqu'un attend l'image à l'écran en temps réel.
API des tâches d'image (Image jobs)
Trois appels, même hôte et même clé que pour le reste.
1. Passer une commande
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"}}
| Champ | Requis | Valeurs |
|---|---|---|
model | oui | omev-image-jobs |
input.prompt | oui | texte libre ; épelez chaque mot qui doit apparaître dans l'image |
input.aspect_ratio | non | auto (par défaut, carré), 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 | non | 1K — le seul niveau proposé |
input.quality | non | low (par défaut ; auto revient au même), medium ou high ; voir Prix. medium et high fonctionnent pour les commandes texte-vers-image, pas avec input_urls |
input.background | non | auto (par défaut), transparent ou opaque |
input.enhance | non | true (par défaut) laisse OmevAI affiner le prompt ; false envoie votre prompt exactement tel qu'il est écrit |
input.input_urls | non | 1 à 9 URL http(s) publiques d'images de référence (voir ci-dessous) |
callBackUrl | non | une adresse http(s) publique ; nous y envoyons l'enregistrement final de la tâche par POST ; l'interrogation simple (polling) fonctionne également |
Les formats autres que carrés sortent dans la même classe 1K, par exemple 16:9 donne 1360x768 et 3:2 donne 1536x1024.
Un code 403 signifie normalement que la clé n'est pas activée pour les tâches d'image. Contactez support@omev.be pour convenir d'un accès ; n'essayez pas de manière répétée.
Les erreurs de l'API des tâches arrivent avec le statut HTTP 200 et le code dans le corps, comme l'attendent les intégrations d'imagerie existantes basées sur des tâches : {"code": 422, "msg": "<la nature de l'erreur>", "data": null}.
Vérifiez code dans chaque réponse, pas seulement le statut HTTP. Voir Erreurs.
2. Vérifier le résultat
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"
}
}
L'état (state) passe par waiting → queuing → generating → success (ou fail, avec failCode et failMsg qui en indiquent la raison). Interrogez l'API toutes les 2 à 5 secondes, puis espacez les appels ; une tâche typique prend entre une et cinq minutes. resultJson est une chaîne de caractères JSON : analysez-la (parse) et extrayez les URL de resultUrls. effectiveQuality est le niveau de qualité auquel la commande a été réalisée et facturée.
Avec callBackUrl, le même enregistrement est envoyé à votre adresse lorsque la tâche atteint success ou fail.
3. Télécharger l'image
Téléchargez chaque URL de résultat avec le même en-tête Authorization: Bearer que pour les autres appels ; sans la clé, elle renvoie 401. Le fichier reste disponible pendant 48 heures : récupérez les octets dans votre propre espace de stockage immédiatement ; après 48 heures, le fichier est supprimé et l'URL renvoie un code 404. L'enregistrement de la tâche (recordInfo) reste disponible pendant 7 jours.
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 votre code pilote déjà une API d'imagerie basée sur des tâches de cette forme (créer une tâche, interroger un enregistrement, lire resultUrls), il fonctionnera ici après deux modifications : l'URL de base et la clé.
Images de référence (image-à-image)
Les commandes peuvent porter 1 à 9 images de référence : ajoutez à input un tableau input_urls avec les URL http(s) publiques des images à modifier ou à combiner. L'ordre de la liste est conservé : si votre prompt dit « place le produit de l'image 1 dans la scène de l'image 2 », image 1 correspond à 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"
}
}
- Sans
input_urls(ou avec une liste vide), la commande reste une simple commande texte-vers-image. - Chaque référence doit être une image PNG, JPEG ou WebP de 20 Mo au maximum.
- Plus de 9 URL sont refusées avec le message
A maximum of 9 reference images is allowed per request. - Les références sont copiées dans un stockage interne au moment de la commande, de sorte qu'une URL source qui expire plus tard ne peut pas interrompre une tâche en cours.
- Les commandes avec références sont réalisées en qualité
lowet coûtent le même prix que les autres commandeslow.
omev-image-main
La forme de la requête est l'API Images compatible OpenAI, donc tout SDK construit pour elle fonctionne sans changement : pointez base_url vers OmevAI et appelez images.generate. omev-image-main est le choix stable par défaut pour l'usage interactif. Prix : $0.021 par image.
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"
}'
| Champ | Requis | Valeurs |
|---|---|---|
prompt | oui | texte libre |
size | non | 1024x1024 (par défaut), 1536x1024, 1024x1536, auto |
quality | non | low (par défaut) ou auto ; medium/high renvoie 400 |
n | non | 1 uniquement |
response_format | non | b64_json uniquement |
L'image se trouve dans data[0].b64_json. Si l'appel se termine par un timeout 504, envoyez la même requête à nouveau avec le même en-tête Idempotency-Key : la commande continue côté serveur et la nouvelle tentative récupère le résultat terminé au lieu de payer une deuxième image.
omev-image-pro
La même forme d'API Images compatible OpenAI que omev-image-main. omev-image-pro est la voie qualité : les prompts contenant du texte intégré (infographies, diagrammes, graphiques, tableaux, étiquettes, logos) sont rendus de manière fiable ici. Prix : $0.024 par image en qualité low ou auto, $0.1968 par image en 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"
}'
| Champ | Requis | Valeurs |
|---|---|---|
prompt | oui | texte libre ; épelez chaque mot qui doit apparaître dans l'image |
size | non | 1024x1024 (par défaut), auto, ou tout WxH jusqu'à 1024 par bord |
quality | non | low, medium, auto ; high renvoie 400 |
n | non | jusqu'à 4 images |
response_format | non | b64_json uniquement |
background | non | transparent, opaque, auto |
output_format | non | 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)
L'image se trouve dans data[0].b64_json.
omev-image-lite
Une route différente et un format de corps de requête différent — celui construit autour de contents et parts. Si votre code utilise déjà ce format, il fonctionnera ici sans modification. La sortie est toujours en 1024×1024, il n'y a donc pas de paramètre de taille. Prix : $0.0192 par image.
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"}]}]
}'
Réponse :
{
"candidates": [{
"content": {
"role": "model",
"parts": [{"inlineData": {"mimeType": "image/png", "data": "<base64 PNG>"}}]
},
"finishReason": "STOP"
}]
}
L'image se trouve dans candidates[0].content.parts[0].inlineData.data, avec son type dans le champ voisin mimeType.
Définissez generationConfig.candidateCount (1 à 4) pour recevoir ce nombre de candidates distincts, chacun portant une image dans inlineData.
Erreurs
Modèles directs (omev-image-lite, omev-image-main, omev-image-pro) : même format que le reste de l'API — voir Erreurs et nouvelles tentatives. Un corps de requête malformé renvoie un code 400 avec la description de l'erreur ; un prompt refusé renvoie également un 400, et non une image vide. Un appel qui dépasse le délai renvoie 504 : pour omev-image-main, répétez-le avec le même Idempotency-Key.
Tâches d'image : la réponse arrive avec le statut HTTP 200 et le code dans le corps :
code | Signification |
|---|---|
200 | succès |
401 | la clé ou les en-têtes n'ont pas été acceptés |
404 | tâche inconnue |
422 | la commande a été refusée ; msg indique pourquoi (modèle inconnu, prompt vide, format, qualité ou résolution non pris en charge, trop de références) |
455 | le service d'images est temporairement indisponible ; réessayez plus tard |
500 | erreur temporaire ; réessayez un nombre limité de fois |
Une tâche acceptée puis échouée le signale dans l'enregistrement de la tâche : state: "fail" avec failCode et failMsg. Une tâche échouée n'est pas facturée.