API Pro : générer et retoucher des images
Une image coûte 1 crédit, quel que soit le mode. La génération à partir d'un prompt et la retouche d'une image que tu fournis passent toutes les deux par la même route.
Soumettre une image
POST /images
{ "prompt": "portrait of a woman in a rainy street at night, neon reflections, cinematic",
"width": 832, "height": 1216 }
| Champ | Type | Défaut | Ce que ça fait |
|---|---|---|---|
prompt | string | requis | La scène. L'anglais donne les résultats les plus précis. |
width, height | int | 1024 x 1024 | Taille en pixels. Formats recommandés : 1024 x 1024 (carré), 832 x 1216 (portrait), 1216 x 832 (paysage). |
mode | string | generation | edit, img2img ou inpaint, voir ci-dessous. Absent = génération à partir du prompt. |
image_b64 | string | Image source en base64 (PNG ou JPEG), requise par les trois modes de retouche. 12 Mo décodés au maximum. | |
mask_b64 | string | Masque en base64 : requis par inpaint, optionnel pour edit. Peins les zones à retoucher en rouge, à la taille de l'image source. | |
lora | string | Un personnage entraîné sur le compte : le name renvoyé par GET /loras. Place son trigger dans le prompt. | |
lora2, lora2_strength | string, number | Un second personnage et son intensité (0 à 1, défaut 1) pour une scène à deux. | |
steps | int | engine | Laisse vide. Le moteur connaît sa propre valeur. |
La réponse :
{ "jobId": "test-79634842-4586-46d4-ad52-d9ea236ae00d", "seed": 178078967, "cost": 1 }
Le seed est tiré par le moteur et renvoyé à titre informatif. Il ne peut pas être fixé en
entrée dans cette version.
Les trois modes de retouche
Les trois fonctionnent sur le même moteur d'édition guidé par instruction, qui préserve
l'apparence de l'image source. Quand tu fournis une image source, width et height sont
lus depuis l'image elle-même et n'ont pas besoin d'être envoyés.
mode | Entrées | Ce que le moteur fait |
|---|---|---|
edit | image_b64 + prompt (+ mask_b64 optionnel) | Applique l'instruction à toute l'image ("add sunglasses", "make it snow"). Avec un masque, la modification se concentre dans la zone rouge. |
inpaint | image_b64 + mask_b64 + prompt | Régénère uniquement la zone rouge du masque en suivant l'instruction. Le reste est recomposé pixel par pixel. |
img2img | image_b64 + prompt | Retravaille toute l'image selon le prompt en conservant sa composition et son apparence : une variation. |
IMG=$(base64 -w0 photo.png)
curl -s $B/images -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d "{\"mode\":\"edit\",\"prompt\":\"add a red scarf, keep everything else identical\",\"image_b64\":\"$IMG\"}"
Polling
GET /images/{jobId}
| Réponse | Signification |
|---|---|
{ "status": "pending", "phase": "IN_QUEUE" } | En file d'attente |
{ "status": "pending", "phase": "IN_PROGRESS" } | En cours de rendu |
{ "status": "completed", "cost": 1, "file_url": "/pro/v1/images/{jobId}/file", ... } | Terminé, fichier prêt |
{ "status": "failed", "detail": "..." } | Échoué, et rien n'est facturé |
Interroge toutes les 3 secondes, pas plus vite : la file est partagée.
Téléchargement
GET /images/{jobId}/file
Le PNG lui-même, comme corps de réponse (Content-Type: image/png). Disponible dès que le
statut est completed, et 404 media_indisponible une fois le rendu supprimé. Télécharge-le
immédiatement, il n'est pas archivé.
Annulation
POST /images/{jobId}/cancel
Annule un rendu en file d'attente ou en cours. Répond { "ok": true }. Rien n'est facturé,
et le coût réservé sur le plafond journalier de la clé est restitué.