Passer au contenu principal

Génération d'images

L'accès est activé sur demande

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.

ProduitQualitéPrix par image
omev-image-jobslow (par défaut, également auto)$0.021
omev-image-jobsmedium$0.024
omev-image-jobshigh$0.039
omev-image-liteun niveau fixe$0.0192
omev-image-mainlow (par défaut, également auto)$0.021
omev-image-prolow (par défaut, également auto)$0.024
omev-image-promedium$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"}}
ChampRequisValeurs
modelouiomev-image-jobs
input.promptouitexte libre ; épelez chaque mot qui doit apparaître dans l'image
input.aspect_rationonauto (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.resolutionnon1K — le seul niveau proposé
input.qualitynonlow (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.backgroundnonauto (par défaut), transparent ou opaque
input.enhancenontrue (par défaut) laisse OmevAI affiner le prompt ; false envoie votre prompt exactement tel qu'il est écrit
input.input_urlsnon1 à 9 URL http(s) publiques d'images de référence (voir ci-dessous)
callBackUrlnonune 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é low et coûtent le même prix que les autres commandes low.

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"
}'
ChampRequisValeurs
promptouitexte libre
sizenon1024x1024 (par défaut), 1536x1024, 1024x1536, auto
qualitynonlow (par défaut) ou auto ; medium/high renvoie 400
nnon1 uniquement
response_formatnonb64_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"
}'
ChampRequisValeurs
promptouitexte libre ; épelez chaque mot qui doit apparaître dans l'image
sizenon1024x1024 (par défaut), auto, ou tout WxH jusqu'à 1024 par bord
qualitynonlow, medium, auto ; high renvoie 400
nnonjusqu'à 4 images
response_formatnonb64_json uniquement
backgroundnontransparent, opaque, auto
output_formatnonpng, 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 :

codeSignification
200succès
401la clé ou les en-têtes n'ont pas été acceptés
404tâche inconnue
422la 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)
455le service d'images est temporairement indisponible ; réessayez plus tard
500erreur 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.