openai-cookbook/examples/Generate_Images_With_GPT_Image.ipynb

674 lines
301 KiB
Plaintext
Raw Normal View History

2025-04-23 19:15:04 +01:00
{
"cells": [
{
"cell_type": "markdown",
"id": "760354d7",
"metadata": {},
"source": [
"# Generate and edit images with GPT Image"
]
},
{
"cell_type": "markdown",
"id": "3e51d6ca",
"metadata": {},
"source": [
"In this cookbook, you'll learn how to use GPT Image, our new large language model with image generation capabilities.\n",
"\n",
"This model has world knowledge and can generate images leveraging this broad understanding of the world.\n",
"It is also much better at instruction following and producing photorealistic images compared to our previous-generation image models, DallE 2 and 3. \n",
"\n",
"To learn more about image generation, refer to our [guide](http://localhost:5000/docs/guides/image-generation?image-generation-model=gpt-image-1)."
]
},
{
"cell_type": "markdown",
"id": "3b30f3ad",
"metadata": {},
"source": [
"## Set up"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f2811f97",
"metadata": {},
"outputs": [],
"source": [
"%pip install pillow openai -U"
2025-04-23 19:15:04 +01:00
]
},
{
"cell_type": "code",
"execution_count": 1,
2025-04-23 19:15:04 +01:00
"id": "8eda6833",
"metadata": {},
"outputs": [],
"source": [
"import base64\n",
"import os\n",
"from openai import OpenAI\n",
"from PIL import Image\n",
"from io import BytesIO\n",
2025-04-23 19:15:04 +01:00
"from IPython.display import Image as IPImage, display"
]
},
{
"cell_type": "code",
"execution_count": 2,
2025-04-23 19:15:04 +01:00
"id": "e022f680",
"metadata": {},
"outputs": [],
"source": [
"client = OpenAI()\n",
"# Set your API key if not set globally\n",
"#client = OpenAI(api_key=os.environ.get(\"OPENAI_API_KEY\", \"<your OpenAI API key if not set as env var>\"))"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "1eb23b94",
"metadata": {},
"outputs": [],
"source": [
"# Create imgs/ folder\n",
"folder_path = \"imgs\"\n",
"os.makedirs(folder_path, exist_ok=True)"
]
},
{
2025-04-23 19:15:04 +01:00
"cell_type": "markdown",
"id": "33146f60",
"metadata": {},
"source": [
"## Generate an image\n",
"\n",
"GPT Image 1 is great at instruction-following, meaning you can prompt the model to generate images with very detailed instructions."
]
},
{
"cell_type": "code",
"execution_count": 4,
2025-04-23 19:15:04 +01:00
"id": "c4a5607d",
"metadata": {},
"outputs": [],
"source": [
"prompt1 = \"\"\"\n",
"Render a realistic image of this character:\n",
"Blobby Alien Character Spec Name: Glorptak (or nickname: \"Glorp\")\n",
"Visual Appearance Body Shape: Amorphous and gelatinous. Overall silhouette resembles a teardrop or melting marshmallow, shifting slightly over time. Can squish and elongate when emotional or startled.\n",
"Material Texture: Semi-translucent, bio-luminescent goo with a jelly-like wobble. Surface occasionally ripples when communicating or moving quickly.\n",
"Color Palette:\n",
"- Base: Iridescent lavender or seafoam green\n",
"- Accents: Subsurface glowing veins of neon pink, electric blue, or golden yellow\n",
"- Mood-based color shifts (anger = dark red, joy = bright aqua, fear = pale gray)\n",
"Facial Features:\n",
"- Eyes: 35 asymmetrical floating orbs inside the blob that rotate or blink independently\n",
"- Mouth: Optional—appears as a rippling crescent on the surface when speaking or emoting\n",
"- No visible nose or ears; uses vibration-sensitive receptors embedded in goo\n",
"- Limbs: None by default, but can extrude pseudopods (tentacle-like limbs) when needed for interaction or locomotion. Can manifest temporary feet or hands.\n",
"Movement & Behavior Locomotion:\n",
"- Slides, bounces, and rolls.\n",
"- Can stick to walls and ceilings via suction. When scared, may flatten and ooze away quickly.\n",
"Mannerisms:\n",
"- Constant wiggling or wobbling even at rest\n",
"- Leaves harmless glowing slime trails\n",
"- Tends to absorb nearby small objects temporarily out of curiosity\n",
"\"\"\"\n",
"\n",
"img_path1 = \"imgs/glorptak.jpg\""
2025-04-23 19:15:04 +01:00
]
},
{
"cell_type": "code",
"execution_count": 5,
2025-04-23 19:15:04 +01:00
"id": "dae9821a",
"metadata": {},
"outputs": [],
"source": [
"# Generate the image\n",
"result1 = client.images.generate(\n",
" model=\"gpt-image-1\",\n",
" prompt=prompt1,\n",
" size=\"1024x1024\"\n",
2025-04-23 19:15:04 +01:00
")"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "15d182da",
"metadata": {},
"outputs": [],
"source": [
"# Save the image to a file and resize/compress for smaller files\n",
"image_base64 = result1.data[0].b64_json\n",
"image_bytes = base64.b64decode(image_base64)\n",
"\n",
"# Adjust this if you want a high-quality Glorptak\n",
"image = Image.open(BytesIO(image_bytes))\n",
"image = image.resize((300, 300), Image.LANCZOS)\n",
"image.save(img_path1, format=\"JPEG\", quality=80, optimize=True)"
2025-04-23 19:15:04 +01:00
]
},
{
"cell_type": "code",
"execution_count": 9,
2025-04-23 19:15:04 +01:00
"id": "1084fac0",
"metadata": {},
"outputs": [
{
"data": {
"image/jpeg": "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
2025-04-23 19:15:04 +01:00
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"metadata": {},
2025-04-23 19:15:04 +01:00
"output_type": "display_data"
}
],
"source": [
"# Show the result\n",
"display(IPImage(img_path1))"
2025-04-23 19:15:04 +01:00
]
},
{
"cell_type": "markdown",
"id": "e0101d66",
"metadata": {},
"source": [
"### Customize the output\n",
"\n",
"You can customize the following output properties:\n",
"- Quality can be `low`, `medium`, `high` or `auto` (default value)\n",
"- Size can be `1024x1024` (square), `1536x1024` (portrait), `1024x1536` (landscape) or `auto` (default)\n",
"- You can adjust the compression level (from 0-100%) for JPEG and WEBP formats\n",
"- You can choose to generate an image with a transparent background (only available for PNG or WEBP)"
]
},
{
"cell_type": "code",
"execution_count": 13,
2025-04-23 19:15:04 +01:00
"id": "6df3dbe3",
"metadata": {},
"outputs": [],
"source": [
"prompt2 = \"generate a portrait, pixel-art style, of a grey tabby cat dressed as a blond woman on a dark background.\"\n",
"img_path2 = \"imgs/cat_portrait_pixel.jpg\""
]
},
{
"cell_type": "code",
"execution_count": 17,
2025-04-23 19:15:04 +01:00
"id": "1bb40de7",
"metadata": {},
"outputs": [],
"source": [
"# Generate the image\n",
"result2 = client.images.generate(\n",
" model=\"gpt-image-1\",\n",
" prompt=prompt2,\n",
" quality=\"low\",\n",
" output_compression=50,\n",
" output_format=\"jpeg\",\n",
" size=\"1024x1536\"\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 31,
2025-04-23 19:15:04 +01:00
"id": "4de5aa8e",
"metadata": {},
"outputs": [],
"source": [
"# Save the image to a file and resize/compress for smaller files\n",
"image_base64 = result2.data[0].b64_json\n",
"image_bytes = base64.b64decode(image_base64)\n",
"\n",
"image = Image.open(BytesIO(image_bytes))\n",
"image = image.resize((250, 375), Image.LANCZOS)\n",
"image.save(img_path2, format=\"JPEG\", quality=80, optimize=True)"
2025-04-23 19:15:04 +01:00
]
},
{
"cell_type": "code",
"execution_count": 32,
2025-04-23 19:15:04 +01:00
"id": "03290401",
"metadata": {},
"outputs": [
{
"data": {
"image/jpeg": "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
2025-04-23 19:15:04 +01:00
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"metadata": {},
2025-04-23 19:15:04 +01:00
"output_type": "display_data"
}
],
"source": [
"# Show the result\n",
"display(IPImage(img_path2))"
2025-04-23 19:15:04 +01:00
]
},
{
"cell_type": "markdown",
"id": "203ba5d4",
"metadata": {},
"source": [
"### Transparent background\n",
"\n",
"You can use the `background` property to request a transparent background, but if you include in your prompt that you want a transparent background, it will be set to `transparent` by default. "
]
},
{
"cell_type": "code",
"execution_count": 20,
2025-04-23 19:15:04 +01:00
"id": "51b9f60f",
"metadata": {},
"outputs": [],
"source": [
"prompt3 = \"generate a pixel-art style picture of a green bucket hat with a pink quill on a transparent background.\"\n",
"img_path3 = \"imgs/hat.png\""
]
},
{
"cell_type": "code",
"execution_count": 21,
2025-04-23 19:15:04 +01:00
"id": "c3e8a066",
"metadata": {},
"outputs": [],
"source": [
"result3 = client.images.generate(\n",
" model=\"gpt-image-1\",\n",
" prompt=prompt3,\n",
" quality=\"low\",\n",
" output_format=\"png\",\n",
" size=\"1024x1024\"\n",
")\n",
"image_base64 = result3.data[0].b64_json\n",
"image_bytes = base64.b64decode(image_base64)"
]
},
{
"cell_type": "code",
"execution_count": 22,
2025-04-23 19:15:04 +01:00
"id": "b9929907",
"metadata": {},
"outputs": [],
"source": [
"# Save the image to a file and resize/compress for smaller files\n",
"image_base64 = result3.data[0].b64_json\n",
"image_bytes = base64.b64decode(image_base64)\n",
"\n",
"image = Image.open(BytesIO(image_bytes))\n",
"image = image.resize((250, 250), Image.LANCZOS)\n",
"image.save(img_path3, format=\"PNG\")"
2025-04-23 19:15:04 +01:00
]
},
{
"cell_type": "code",
"execution_count": 23,
2025-04-23 19:15:04 +01:00
"id": "a0a0694c",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
2025-04-23 19:15:04 +01:00
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"metadata": {
"image/png": {
"width": 250
}
},
"output_type": "display_data"
}
],
"source": [
"# Show the result\n",
"display(IPImage(img_path3))"
2025-04-23 19:15:04 +01:00
]
},
{
"cell_type": "markdown",
"id": "24aa76b7",
"metadata": {},
"source": [
"## Edit images\n",
"\n",
"GPT Image can also accept image inputs, and use them to create new images. You can also provide a mask if you don't want the model to change a specific part of the input image.\n",
"\n",
"You can use a maximum of 10 input images, and if you use a mask, it will be applied to the first image provided in the `image` array."
]
},
{
"cell_type": "code",
"execution_count": 24,
2025-04-23 19:15:04 +01:00
"id": "3e4ae773",
"metadata": {},
"outputs": [],
"source": [
"prompt_edit = \"\"\"\n",
"Combine the images of the cat and the hat to show the cat wearing the hat while being perched in a tree, still in pixel-art style.\n",
"\"\"\"\n",
"img_path_edit = \"imgs/cat_with_hat.jpg\""
]
},
{
"cell_type": "code",
"execution_count": 25,
2025-04-23 19:15:04 +01:00
"id": "be995b49",
"metadata": {},
"outputs": [],
"source": [
"img1 = open(img_path2, \"rb\")\n",
"img2 = open(img_path3, \"rb\")"
]
},
{
"cell_type": "code",
"execution_count": 26,
2025-04-23 19:15:04 +01:00
"id": "3e46de51",
"metadata": {},
"outputs": [],
"source": [
"# Generate the new image\n",
"result_edit = client.images.edit(\n",
" model=\"gpt-image-1\",\n",
" image=[img1,img2], \n",
" prompt=prompt_edit,\n",
" size=\"1024x1536\"\n",
2025-04-23 19:15:04 +01:00
")"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "30fad662",
"metadata": {},
"outputs": [],
"source": [
"# Save the image to a file and resize/compress for smaller files\n",
"image_base64 = result_edit.data[0].b64_json\n",
"image_bytes = base64.b64decode(image_base64)\n",
"\n",
"image = Image.open(BytesIO(image_bytes))\n",
"image = image.resize((250, 375), Image.LANCZOS)\n",
"image.save(img_path_edit, format=\"JPEG\", quality=80, optimize=True) "
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "9016913d",
"metadata": {},
"outputs": [
{
"data": {
"image/jpeg": "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
2025-04-23 19:15:04 +01:00
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"metadata": {},
2025-04-23 19:15:04 +01:00
"output_type": "display_data"
}
],
"source": [
"# Show the result\n",
"display(IPImage(img_path_edit))"
2025-04-23 19:15:04 +01:00
]
},
{
"cell_type": "markdown",
"id": "cb06c713",
"metadata": {},
"source": [
"## Edit an image with a mask\n",
"\n",
"You can also provide a mask along with your input images (if there are several, the mask will be applied on the first one) to edit only the part of the input image that is not covered by the mask. Please note that the model might still edit some parts of the image inside the mask, but it will avoid it. \n",
"\n",
"Important note: the mask should contain an alpha channel. If you're generating it manually, for example using an image editing software, make sure you include this alpha channel. "
]
},
{
"cell_type": "markdown",
"id": "e34eedd7",
"metadata": {},
"source": [
"#### Generating the mask\n",
"\n",
"For this example, we'll use our model to generate the mask automatically for us. The mask might not be exact, but it will be enough for our purposes. \n",
"If you need to have an exact mask, feel free to use an image segmentation model."
]
},
{
"cell_type": "code",
"execution_count": 37,
2025-04-23 19:15:04 +01:00
"id": "fe2ef0fc",
"metadata": {},
"outputs": [],
"source": [
"img_path_mask = \"imgs/mask.png\"\n",
"prompt_mask = \"generate a mask delimiting the entire character in the picture, using white where the character is and black for the background. Return an image in the same size as the input image.\""
]
},
{
"cell_type": "code",
"execution_count": 38,
2025-04-23 19:15:04 +01:00
"id": "70329b98",
"metadata": {},
"outputs": [],
"source": [
"img_input = open(img_path1, \"rb\")\n",
"\n",
"# Generate the mask\n",
"result_mask = client.images.edit(\n",
" model=\"gpt-image-1\",\n",
" image=img_input, \n",
" prompt=prompt_mask\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 39,
"id": "e3eb0193",
"metadata": {},
"outputs": [],
"source": [
"# Save the image to a file and resize/compress for smaller files\n",
"image_base64 = result_mask.data[0].b64_json\n",
"image_bytes = base64.b64decode(image_base64)\n",
"\n",
"image = Image.open(BytesIO(image_bytes))\n",
"image = image.resize((300, 300), Image.LANCZOS)\n",
"image.save(img_path_mask, format=\"PNG\")\n"
]
},
{
"cell_type": "code",
"execution_count": 40,
"id": "1660ae01",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
2025-04-23 19:15:04 +01:00
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"metadata": {},
2025-04-23 19:15:04 +01:00
"output_type": "display_data"
}
],
"source": [
"# Show the mask\n",
"display(IPImage(img_path_mask))"
2025-04-23 19:15:04 +01:00
]
},
{
"cell_type": "markdown",
"id": "2d66b14d",
"metadata": {},
"source": [
"#### Creating an alpha channel\n",
"This step is optional, if you want to turn a black & white image into a mask with an alpha channel that can be used in the Image Edit API."
]
},
{
"cell_type": "code",
"execution_count": 41,
2025-04-23 19:15:04 +01:00
"id": "2ea97104",
"metadata": {},
"outputs": [],
"source": [
"# 1. Load your black & white mask as a grayscale image\n",
"mask = Image.open(img_path_mask).convert(\"L\")\n",
"\n",
"# 2. Convert it to RGBA so it has space for an alpha channel\n",
"mask_rgba = mask.convert(\"RGBA\")\n",
"\n",
"# 3. Then use the mask itself to fill that alpha channel\n",
"mask_rgba.putalpha(mask)\n",
"\n",
"# 4. Convert the mask into bytes\n",
"buf = BytesIO()\n",
"mask_rgba.save(buf, format=\"PNG\")\n",
"mask_bytes = buf.getvalue()"
]
},
{
"cell_type": "code",
"execution_count": 42,
2025-04-23 19:15:04 +01:00
"id": "7aa9c7f7",
"metadata": {},
"outputs": [],
"source": [
"# Save the resulting file\n",
"img_path_mask_alpha = \"imgs/mask_alpha.png\"\n",
"with open(img_path_mask_alpha, \"wb\") as f:\n",
" f.write(mask_bytes)"
]
},
{
"cell_type": "markdown",
"id": "ca8fdead",
"metadata": {},
"source": [
"#### Editing with the mask\n",
"When using a mask, we still need the prompt the model describing the entiring resulting image, not just the area that is masked. "
]
},
{
"cell_type": "code",
"execution_count": 43,
2025-04-23 19:15:04 +01:00
"id": "40ee1402",
"metadata": {},
"outputs": [],
"source": [
"prompt_mask_edit = \"A strange character on a colorful galaxy background, with lots of stars and planets.\"\n",
"mask = open(img_path_mask_alpha, \"rb\")"
]
},
{
"cell_type": "code",
"execution_count": 44,
2025-04-23 19:15:04 +01:00
"id": "65b5487a",
"metadata": {},
"outputs": [],
"source": [
"result_mask_edit = client.images.edit(\n",
" model=\"gpt-image-1\", \n",
" prompt=prompt_mask_edit,\n",
" image=img_input,\n",
" mask=mask,\n",
" size=\"1024x1024\"\n",
2025-04-23 19:15:04 +01:00
")"
]
},
{
"cell_type": "code",
"execution_count": 45,
2025-04-23 19:15:04 +01:00
"id": "06ee85a6",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
2025-04-23 19:15:04 +01:00
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"metadata": {},
2025-04-23 19:15:04 +01:00
"output_type": "display_data"
}
],
"source": [
"# Display result\n",
"\n",
"img_path_mask_edit = \"imgs/mask_edit.png\"\n",
"\n",
"image_base64 = result_mask_edit.data[0].b64_json\n",
"image_bytes = base64.b64decode(image_base64)\n",
"\n",
"image = Image.open(BytesIO(image_bytes))\n",
"image = image.resize((300, 300), Image.LANCZOS)\n",
"image.save(img_path_mask_edit, format=\"JPEG\", quality=80, optimize=True)\n",
" \n",
"display(IPImage(img_path_mask_edit))"
2025-04-23 19:15:04 +01:00
]
},
{
"cell_type": "markdown",
"id": "ae87ecb7",
"metadata": {},
"source": [
"## Wrapping up"
]
},
{
"cell_type": "markdown",
"id": "28f2e4b8",
"metadata": {},
"source": [
"In this cookbook, we've seen how to use our new image generation model, GPT Image, to either generate new images from scratch, or use reference images. We've also covered how to create a mask with an alpha channel to apply it to an input image, to guide the image edition even further. \n",
"\n",
"Feel free to use this as a starting point to explore other use cases, and if you're looking for some inspiration, check out the [image gallery](https://platform.openai.com/docs/guides/image-generation?image-generation-model=gpt-image-1&gallery=open#generate-images) in our docs. \n",
"\n",
"Happy building!"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python (notebooks-env)",
"language": "python",
"name": "notebooks-env"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}