Permettez aux modèles de générer ou de modifier des images.
L’outil de génération d’images permet de générer des images à partir d’un prompt textuel, auquel vous pouvez joindre des images. Il utilise les modèles GPT Image, notamment gpt-image-2.5-sunburst, gpt-image-2.5-flare, gpt-image-2, gpt-image-1.5 et gpt-image-1-mini, et optimise automatiquement le texte fourni pour améliorer les résultats.
Pour l’outil image_generation, réglez le paramètre model sur gpt-image-2.5-sunburst pour modifier des images avec précision, ou sur gpt-image-2.5-flare pour générer rapidement des images de haute qualité. Dans le champ model de premier niveau de la requête Responses, indiquez un modèle principal compatible.
gpt-image-1 a été mis hors service le 23 octobre 2026. Consultez l’avis de dépréciation pour connaître les modalités de migration.
Lorsque vous incluez l’outil image_generation dans votre requête, le modèle peut décider quand et comment générer des images au cours de la conversation, en s’appuyant sur votre prompt et sur les images que vous lui avez éventuellement fournies.
Le résultat de l’appel d’outil image_generation_call contient une image encodée en base64.
Si votre application s’adresse à des utilisateurs finaux, incluez dans chaque requête Responses de premier niveau un safety_identifier stable qui préserve la confidentialité de l’utilisateur concerné. Faites-le également pour les requêtes de modification ultérieures. Ce paramètre se définit au niveau de la requête et ne fait pas partie des options de l’outil image_generation. Consultez la section sur les identifiants de sécurité pour les images pour savoir comment les utiliser avec les deux API d’images.
Générer une image
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20import OpenAI from "openai";const openai = new OpenAI();const response = await openai.responses.create({ model: "gpt-6-astra", input: "Generate an image of gray tabby cat hugging an otter with an orange scarf", tools: [{ type: "image_generation", model: "gpt-image-2.5-sunburst" }],});// Save the image to a fileconst imageData = response.output .filter((output) => output.type === "image_generation_call") .map((output) => output.result);if (imageData.length > 0) { const imageBase64 = imageData[0]; const fs = await import("fs"); fs.writeFileSync("otter.png", Buffer.from(imageBase64, "base64"));}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22from openai import OpenAIimport base64client = OpenAI()response = client.responses.create(model="gpt-6-astra",input="Generate an image of gray tabby cat hugging an otter with an orange scarf",tools=[{"type": "image_generation", "model": "gpt-image-2.5-sunburst"}],)# Save the image to a fileimage_data = [ output.resultfor output in response.outputif output.type =="image_generation_call"]if image_data: image_base64 = image_data[0]withopen("otter.png", "wb") as f: f.write(base64.b64decode(image_base64))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42package mainimport ( "context" "encoding/base64" "os" "github.com/openai/openai-go/v3" "github.com/openai/openai-go/v3/responses")func main() { client := openai.NewClient() response, err := client.Responses.New(context.Background(), responses.ResponseNewParams{ Model: "gpt-6-astra", Input: responses.ResponseNewParamsInputUnion{ OfString: openai.String("Generate an image of gray tabby cat hugging an otter with an orange scarf"), }, Tools: []responses.ToolUnionParam{{OfImageGeneration: &responses.ToolImageGenerationParam{Model: "gpt-image-2.5-sunburst"}}}, }) if err != nil { panic(err) } saveFirstGeneratedImage(response, "otter.png")}func saveFirstGeneratedImage(response *responses.Response, filename string) { for _, output := range response.Output { if output.Type != "image_generation_call" { continue } image, err := base64.StdEncoding.DecodeString(output.AsImageGenerationCall().Result) if err != nil { panic(err) } if err := os.WriteFile(filename, image, 0o600); err != nil { panic(err) } return } panic("response did not include an image generation call")}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20using OpenAI.Responses;#pragma warning disable OPENAI001string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!;ResponsesClient client = new(key);CreateResponseOptions options = new() { Model = "gpt-6-astra" };options.InputItems.Add( ResponseItem.CreateUserMessageItem( "Generate an image of a gray tabby cat hugging an otter with an orange scarf." ));options.Tools.Add(ResponseTool.CreateImageGenerationTool(model: "gpt-image-2.5-sunburst"));ResponseResult response = await client.CreateResponseAsync(options);ImageGenerationCallResponseItem image = response .OutputItems.OfType<ImageGenerationCallResponseItem>() .FirstOrDefault() ?? throw new InvalidOperationException("No generated image was returned.");await File.WriteAllBytesAsync("otter.png", image.ImageResultBytes.ToArray());
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24require "base64"require "openai"client = OpenAI::Client.newresponse = client.responses.create( model: "gpt-6-astra", input: "Generate an image of a gray tabby cat hugging an otter with an orange scarf.", tools: [ { type: :image_generation, model: "gpt-image-2.5-sunburst" } ])image_call = response.output.find do |item| item.is_a?(OpenAI::Models::Responses::ResponseOutputItem::ImageGenerationCall)endunless image_call.is_a?(OpenAI::Models::Responses::ResponseOutputItem::ImageGenerationCall) raise "No image generation call returned"endencoded_image = image_call.result or raise "No image returned"File.binwrite("otter.png", Base64.strict_decode64(encoded_image))
Taille : dimensions de l’image, par exemple 1024 × 1024 ou 1024 × 1536
Qualité : qualité du rendu, par exemple faible, moyenne ou élevée
Format : format du fichier de sortie
Compression : niveau de compression (de 0 à 100 %) pour les formats JPEG et WebP
Arrière-plan : transparent, opaque ou choisi automatiquement
Action : choix automatique, génération d’une image ou modification d’une image existante
Les paramètres size, quality et background acceptent la valeur auto, qui laisse le modèle choisir le réglage le plus adapté au prompt.
Avec gpt-image-2.5-sunburst et gpt-image-2.5-flare, le paramètre quality accepte également les valeurs xhigh et max. Les modèles GPT Image antérieurs ne prennent pas en charge ces valeurs. La qualité par défaut reste auto.
gpt-image-2 accepte différentes valeurs de size, à condition qu’elles respectent ses contraintes de résolution. Les arrière-plans transparents sont disponibles en préversion. Pour en obtenir un, indiquez background: "transparent". Utilisez le format png (par défaut) ou webp. Le format jpeg ne prend pas en charge les arrière-plans transparents.
Avec l’outil de génération d’images de l’API Responses, les modèles GPT Image compatibles peuvent choisir de générer une nouvelle image ou de modifier une image déjà présente dans la conversation. Le paramètre facultatif action contrôle ce comportement. Laissez action sur auto pour que le modèle choisisse entre génération et modification, ou indiquez generate pour imposer la génération ou edit pour imposer la modification. Si vous omettez ce paramètre, sa valeur par défaut est auto.
Prompt reformulé
Lorsque vous utilisez l’outil de génération d’images, le modèle principal, par exemple gpt-5.5, reformule automatiquement votre prompt pour améliorer les résultats.
Vous pouvez retrouver le prompt reformulé dans le champ revised_prompt de l’appel à l’outil de génération d’images :
1234567{ "id": "ig_123", "type": "image_generation_call", "status": "completed", "revised_prompt": "A gray tabby cat hugging an otter. The otter is wearing an orange scarf. Both animals are cute and friendly, depicted in a warm, heartwarming style.", "result": "..."}
Conseils pour rédiger vos prompts
La génération d’images donne de meilleurs résultats lorsque votre prompt contient des verbes comme draw ou edit.
Par exemple, pour combiner des images, au lieu d’utiliser combine ou merge, vous pouvez écrire : « Modifiez la première image en y ajoutant cet élément de la deuxième image. »
Modifications successives
Pour modifier une image à plusieurs reprises, indiquez l’identifiant d’une réponse précédente ou celui de l’image. Vous pouvez ainsi affiner l’image au fil de la conversation.
L’outil de génération d’images peut diffuser des images partielles pendant qu’il génère l’image finale. Les utilisateurs voient ainsi plus rapidement les premiers résultats, ce qui réduit la latence perçue.
Le paramètre partial_images permet de fixer le nombre d’images partielles, de 1 à 3.
Diffuser une image en continu
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33import OpenAI from "openai";import fs from "fs";const openai = new OpenAI();function saveBase64Image(filename, imageBase64) { const imageBuffer = Buffer.from(imageBase64, "base64"); fs.writeFileSync(filename, imageBuffer);}const stream = await openai.responses.create({ model: "gpt-6-astra", input: "Draw a gorgeous image of a river made of white owl feathers, snaking its way through a serene winter landscape", stream: true, tools: [ { type: "image_generation", model: "gpt-image-2.5-sunburst", partial_images: 2 }, ],});for await (const event of stream) { if (event.type === "response.image_generation_call.partial_image") { const idx = event.partial_image_index; saveBase64Image(`river-partial-${idx}.png`, event.partial_image_b64); } else if (event.type === "response.completed") { const imageData = event.response.output .filter((output) => output.type === "image_generation_call") .map((output) => output.result); if (imageData.length > 0) { saveBase64Image("river-final.png", imageData[0]); } }}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34from openai import OpenAIimport base64client = OpenAI()defsave_base64_image(filename, image_base64): image_bytes = base64.b64decode(image_base64)withopen(filename, "wb") as f: f.write(image_bytes)stream = client.responses.create(model="gpt-6-astra",input="Draw a gorgeous image of a river made of white owl feathers, snaking its way through a serene winter landscape",stream=True,tools=[ {"type": "image_generation", "model": "gpt-image-2.5-sunburst", "partial_images": 2} ],)for event in stream:if event.type =="response.image_generation_call.partial_image": idx = event.partial_image_index save_base64_image(f"river-partial-{idx}.png", event.partial_image_b64)elif event.type =="response.completed": image_data = [ output.resultfor output in event.response.outputif output.type =="image_generation_call" ]if image_data: save_base64_image("river-final.png", image_data[0])
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49package mainimport ( "context" "encoding/base64" "fmt" "os" "github.com/openai/openai-go/v3" "github.com/openai/openai-go/v3/responses")func main() { client := openai.NewClient() stream := client.Responses.NewStreaming(context.Background(), responses.ResponseNewParams{ Model: "gpt-6-astra", Input: responses.ResponseNewParamsInputUnion{ OfString: openai.String("Draw a gorgeous image of a river made of white owl feathers, snaking its way through a serene winter landscape"), }, Tools: []responses.ToolUnionParam{{OfImageGeneration: &responses.ToolImageGenerationParam{Model: "gpt-image-2.5-sunburst", PartialImages: openai.Int(2)}}}, }) for stream.Next() { event := stream.Current() if event.Type == "response.image_generation_call.partial_image" { partial := event.AsResponseImageGenerationCallPartialImage() saveImage(fmt.Sprintf("river-partial-%d.png", partial.PartialImageIndex), partial.PartialImageB64) } if event.Type == "response.completed" { for _, output := range event.AsResponseCompleted().Response.Output { if output.Type == "image_generation_call" { saveImage("river-final.png", output.AsImageGenerationCall().Result) } } } } if err := stream.Err(); err != nil { panic(err) }}func saveImage(filename, encoded string) { image, err := base64.StdEncoding.DecodeString(encoded) if err != nil { panic(err) } if err := os.WriteFile(filename, image, 0o600); err != nil { panic(err) }}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33require "base64"require "openai"client = OpenAI::Client.newstream = client.responses.stream( model: "gpt-6-astra", input: "Generate an image of a river made of white owl feathers.", tools: [ { type: :image_generation, model: "gpt-image-2.5-sunburst", partial_images: 2 } ])stream.each do |event| case event when OpenAI::Models::Responses::ResponseImageGenCallPartialImageEvent image = Base64.strict_decode64(event.partial_image_b64) File.binwrite("river-partial-#{event.partial_image_index}.png", image) when OpenAI::Models::Responses::ResponseCompletedEvent image_call = event.response.output.find do |item| item.is_a?(OpenAI::Models::Responses::ResponseOutputItem::ImageGenerationCall) end next unless image_call.is_a?(OpenAI::Models::Responses::ResponseOutputItem::ImageGenerationCall) File.binwrite( "river-final.png", Base64.strict_decode64(image_call.result) ) endend
Modèles compatibles
Les modèles suivants ne sont pas dépréciés et leur documentation confirme leur compatibilité avec l’outil de génération d’images de l’API Responses. Utilisez leurs identifiants dans le champ model de premier niveau. Consultez la page de chaque modèle pour connaître sa disponibilité et ses conditions d’accès.