GPT Image 2
Générez des images, retouchez des références et appliquez des masques via un point de terminaison d'images asynchrone unique.
GPT Image 2 accepte un prompt textuel et, en option, des images de référence. Soumettez une fois, conservez l'identifiant de tâche renvoyé et interrogez cette tâche pour obtenir les images terminées. Il est proposé sur deux canaux, chacun avec son propre ID de modèle ; les deux lisent les mêmes paramètres.
ID de modèle
| ID de modèle | Canal | Facturation |
|---|---|---|
gpt-image-2 | Standard | Un prix fixe par image livrée, quelles que soient la taille et la qualité |
gpt-image-2-official | Official | Les tokens déclarés à chaque rendu (entrée texte et sortie image) |
Les deux ID acceptent les mêmes paramètres et prennent en charge tous les modes ; seule la facturation diffère. Consultez la page du modèle pour les prix actuels. Les exemples ci-dessous utilisent gpt-image-2 ; remplacez-le par gpt-image-2-official pour une facturation au token.
Exemple rapide
curl https://api.seedrouter.ai/v1/images/generations \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "An amber glass bottle on a cream background, studio lighting",
"size": "1024x1024",
"quality": "low"
}'Point de terminaison
POST https://api.seedrouter.ai/v1/images/generations| En-tête | Valeur |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/json |
Le même point de terminaison gère la génération, les retouches par référence et les retouches masquées. La réponse contient un identifiant de tâche, pas l'image terminée. Conservez les clés API dans du code côté serveur.
Paramètres
| Nom | Type | Requis | Par défaut | Remarques |
|---|---|---|---|---|
model | string | Oui | — | gpt-image-2 ou gpt-image-2-official |
prompt | string | Oui | — | Non vide ; jusqu'à 32 000 caractères. |
images | object[] | Non | — | 1 à 16 objets de la forme {"image_url":"https://..."} ; fournir images sélectionne la retouche. |
mask | object | Non | — | {"image_url":"https://..."} ; nécessite images. |
size | string | Non | auto | auto ou WIDTHxHEIGHT, sous réserve des règles ci-dessous. |
quality | enum | Non | auto | auto, low, medium, high. |
background | enum | Non | auto | auto, opaque, transparent. |
output_format | enum | Non | png | png, jpeg. |
output_compression | integer | Non | 100 pour JPEG | 0 à 100 ; à envoyer uniquement avec jpeg. Zéro est valide. |
n | integer | Non | 1 | 1 à 10 images. |
moderation | enum | Non | auto | auto, low. |
user | string | Non | — | Identifiant facultatif de l'utilisateur final de votre application. Évitez les données personnelles. |
Règles de taille
Les valeurs courantes sont 1024x1024, 1536x1024 et 1024x1536. Les dimensions personnalisées doivent respecter toutes les règles :
- La largeur et la hauteur sont des multiples de 16.
- Aucun côté ne dépasse 3840 pixels.
- Le rapport d'aspect est compris entre 1:3 et 3:1.
- La surface totale est comprise entre 655 360 et 8 294 400 pixels, bornes incluses.
auto laisse les dimensions de sortie au modèle. N'envoyez pas de rapports d'aspect tels que 16:9 comme size.
Le Playground propose les commandes Auto, Ratio et Personnalisé. Le mode Ratio combine un rapport d'aspect avec un budget de pixels prédéfini en 1K, 2K ou 4K, puis n'envoie que la size obtenue. Ce sont des préréglages d'interface, pas des paramètres d'API distincts : n'envoyez ni resolution ni aspect_ratio. Par exemple, 16:9 + 4K envoie size: "3840x2160" ; 9:16 + 4K envoie "2160x3840" ; 1:1 + 2K envoie "2048x2048". L'arrondi et la limite de côté peuvent réduire le nombre de pixels d'un palier sélectionné. Les dimensions exactes sont affichées avant la soumission.
OpenAI qualifie d'expérimentales les résolutions supérieures à 2560×1440. Elles sont acceptées dans les limites ci-dessus ; une résolution plus élevée ne garantit pas de meilleurs détails.
Paliers de qualité
Utilisez low pour les brouillons et comparez les résultats avant de choisir un palier supérieur. auto laisse le modèle choisir ; cela ne garantit ni un palier ni un coût particulier.
Arrière-plans transparents
La transparence est en préversion pour GPT Image 2. Pour un arrière-plan transparent, définissez background: "transparent" et utilisez PNG. JPEG ne prend pas en charge la transparence. La compression ne s'applique qu'à JPEG.
user est disponible pour les intégrations d'API mais n'est ni affiché ni renseigné automatiquement dans le Playground.
Les réglages scalaires facultatifs (n, size, quality, background, output_format, output_compression, moderation) acceptent null comme omission. Les champs inconnus sont rejetés. input_fidelity n'est pas configurable pour GPT Image 2 ; les entrées de référence utilisent toujours une haute fidélité. style et response_format appartiennent à d'autres modèles d'images et ne sont pas acceptés ici.
Modes
Il n'existe ni paramètre de mode distinct ni point de terminaison de retouche à choisir.
| Opération | Paramètres |
|---|---|
| Texte vers image | prompt |
| Retouche par référence | prompt + images |
| Retouche masquée | prompt + images + mask |
Retoucher des images de référence
curl https://api.seedrouter.ai/v1/images/generations \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "Make the bottle blue. Preserve the composition and lighting.",
"images": [{"image_url": "https://example.com/reference.png"}],
"mask": {"image_url": "https://example.com/mask.png"},
"output_format": "jpeg",
"output_compression": 90
}'Remplacez les deux URL d'exemple par vos propres images accessibles. Omettez mask pour une retouche par référence sans zone sélectionnée.
Entrées média
Cette API n'accepte que des références par URL. Les identifiants OpenAI Files, les data URL base64 et les envois multipart ne sont pas acceptés. Le Playground téléverse les fichiers sélectionnés vers le stockage avant d'en soumettre les URL.
Les images de référence doivent être des URL HTTP(S) publiques pointant vers des fichiers PNG, JPEG ou WebP de moins de 50 Mo chacun. Un masque doit être un PNG de moins de 4 Mo, aux mêmes dimensions que la première image de référence ; sa zone transparente indique ce qui doit être retouché. Un masque guide le modèle et ne garantit pas des contours au pixel près. Avec plusieurs références, le masque s'applique à la première image. Les médias référencés par URL sont validés pendant le traitement ; un média invalide ou inaccessible peut faire échouer la tâche.
Le Playground téléverse les fichiers sélectionnés et en soumet les URL. Les requêtes API utilisent des objets URL JSON : n'envoyez pas d'octets de fichier, de base64, d'URL data:, d'URL blob: ni de données de formulaire multipart.
Facteurs de coût
Consultez la section tarifs du modèle pour les tarifs actuels. gpt-image-2 (Standard) facture un prix fixe par image livrée, quels que soient la qualité, la taille ou le prompt. Sur gpt-image-2-official (Official), le coût final dépend de la consommation en entrée et en sortie : qualité, dimensions de sortie, images de référence, longueur du prompt et nombre d'images peuvent tous l'influencer.
L'estimation du Playground s'appuie sur un échantillon mesuré et les tarifs actuels ; ce n'est pas un devis ferme. Consultez les frais définitifs dans l'historique d'utilisation de votre compte. Les tâches échouées ne sont pas facturées.
Schéma de sortie
La soumission renvoie une référence de tâche :
{
"id": "task_...",
"model": "gpt-image-2",
"status": "processing",
"created_at": 1789970508
}Interroger la tâche
curl https://api.seedrouter.ai/v1/tasks/YOUR_TASK_ID \
-H "Authorization: Bearer $SEEDROUTER_API_KEY"Interrogez à un rythme modéré, par exemple toutes les trois secondes, jusqu'à ce que status vaille completed ou failed. Un dépassement de délai réseau pendant l'interrogation ne signifie pas que la génération a échoué : conservez l'identifiant de tâche et reprenez la vérification. Ne créez pas une autre tâche pour vérifier l'avancement.
Exemple d'interrogation complet
Exécutez ceci après l'exemple de soumission Python ci-dessus. Il utilise le task_id renvoyé et attend jusqu'à dix minutes. Atteindre cette échéance locale ne fait qu'arrêter l'interrogation ; conservez l'identifiant et reprenez la consultation de la même tâche.
import time
print(f"Task ID: {task_id}")
deadline = time.monotonic() + 600
while time.monotonic() < deadline:
result = requests.get(
f"https://api.seedrouter.ai/v1/tasks/{task_id}",
headers={"Authorization": f"Bearer {os.environ['SEEDROUTER_API_KEY']}"},
timeout=30,
)
result.raise_for_status()
task = result.json()
if task["status"] == "completed":
for image in task["output"]["data"]:
print(image["url"])
break
if task["status"] == "failed":
raise RuntimeError(task["error"]["message"])
time.sleep(3)
else:
raise TimeoutError(f"Still waiting. Resume polling task {task_id}.")Tâche terminée
Une tâche terminée renvoie les URL des images hébergées ainsi que l'utilisation :
{
"id": "task_...",
"model": "gpt-image-2",
"status": "completed",
"created_at": 1789970508,
"finished_at": 1789970538,
"output": {
"created": 1789970532,
"data": [{"url": "https://static.seedrouter.ai/media/tasks/task_example/0.png"}],
"usage": {
"input_tokens": 29,
"output_tokens": 196,
"total_tokens": 225
}
}
}| Champ | Signification |
|---|---|
id | Conservez cet identifiant pour les requêtes ultérieures. |
status | processing, completed ou failed. |
created_at, finished_at | Horodatages Unix en secondes ; l'heure de fin est absente ou nulle pendant le traitement. |
output.data[].url | URL des images générées, disponibles une fois la tâche terminée. |
output.size | Dimensions de sortie réelles, lorsque rapportées. |
output.quality | Palier de qualité réel, lorsque rapporté. |
output.background | Arrière-plan réel, lorsque rapporté. |
output.output_format | Format d'image réel, lorsque rapporté. |
output.usage | Utilisation de tokens rapportée, lorsqu'elle est disponible. Les objets de détail peuvent contenir le nombre de tokens de texte et d'image. |
error | Erreur structurée pour une tâche échouée. |
Cette API livre ses résultats de façon asynchrone via des tâches. Ce n'est pas un remplacement d'un SDK Images synchrone ; stream et partial_images ne sont pas pris en charge.
Erreurs
Les requêtes rejetées avant la création d'une tâche renvoient une erreur HTTP accompagnée d'un objet error. Une tâche qui échoue après acceptation renvoie HTTP 200 à l'interrogation, avec status: "failed" et un objet error.
Voir le catalogue d'erreurs commun pour les codes, les statuts HTTP et les conseils de reprise. Toutes les API de modèles utilisent la même enveloppe d'erreur.
{
"id": "task_...",
"status": "failed",
"error": {
"code": 60002,
"message": "Generation could not be completed. Please try again."
}
}Si la soumission elle-même dépasse le délai, vérifiez votre historique de tâches avant de soumettre à nouveau : la première requête a peut-être déjà été acceptée.
Conseils
- Décrivez les matières, la composition et la lumière dans le prompt.
- Pour une retouche, précisez à la fois le changement souhaité et ce qui doit rester inchangé.
- Utilisez un masque lorsque seule une zone sélectionnée doit changer.
- Enregistrez les images renvoyées dans votre propre stockage si vous avez besoin d'une copie durable.
