Add new content to specific regions of an image using masks.
Foreground Mask
Semantic Mask
Custom Mask
Automatically detect and replace foreground objects:
# Generate a starting imageimage_prompt = """a small wooden bowl with grapes and apples on a marble kitchen counter, light brown cabinets blurred in the background"""generated_image = client.models.generate_images( model="imagen-3.0-generate-002", prompt=image_prompt, config=GenerateImagesConfig( number_of_images=1, aspect_ratio="1:1", ),)# Edit the foreground objectsedit_prompt = "a small white ceramic bowl with lemons and limes"raw_ref_image = RawReferenceImage( reference_image=generated_image.generated_images[0].image, reference_id=0)mask_ref_image = MaskReferenceImage( reference_id=1, reference_image=None, # Auto-detect config=MaskReferenceConfig( mask_mode="MASK_MODE_FOREGROUND", mask_dilation=0.1, ),)edited_image = client.models.edit_image( model=edit_model, prompt=edit_prompt, reference_images=[raw_ref_image, mask_ref_image], config=EditImageConfig( edit_mode="EDIT_MODE_INPAINT_INSERTION", number_of_images=1, ),)
Target specific object classes using segmentation:
image_prompt = """a french bulldog sitting in a living room on a couch with green throw pillows, a circular mirror on the wall above"""generated_image = client.models.generate_images( model="imagen-3.0-generate-002", prompt=image_prompt,)# Replace the dog (class ID 8) with a corgiedit_prompt = "a corgi sitting on a couch"raw_ref_image = RawReferenceImage( reference_image=generated_image.generated_images[0].image, reference_id=0)mask_ref_image = MaskReferenceImage( reference_id=1, reference_image=None, config=MaskReferenceConfig( mask_mode="MASK_MODE_SEMANTIC", segmentation_classes=[8], # Dog class mask_dilation=0.1, ),)edited_image = client.models.edit_image( model=edit_model, prompt=edit_prompt, reference_images=[raw_ref_image, mask_ref_image], config=EditImageConfig( edit_mode="EDIT_MODE_INPAINT_INSERTION", number_of_images=1, ),)
Replace backgrounds while preserving product or subject:
product_image = Image( gcs_uri="gs://cloud-samples-data/generative-ai/image/suitcase.png")raw_ref_image = RawReferenceImage( reference_image=product_image, reference_id=0)mask_ref_image = MaskReferenceImage( reference_id=1, reference_image=None, config=MaskReferenceConfig( mask_mode="MASK_MODE_BACKGROUND", ),)prompt = """a light blue suitcase in front of a window in an airport, lots of bright natural lighting, planes taking off in the distance"""edited_image = client.models.edit_image( model=edit_model, prompt=prompt, reference_images=[raw_ref_image, mask_ref_image], config=EditImageConfig( edit_mode="EDIT_MODE_BGSWAP", number_of_images=1, ),)
Background swap is perfect for product photography, e-commerce listings, and marketing materials.
original_image = Image( gcs_uri="gs://cloud-samples-data/generative-ai/image/latte.jpg")raw_ref_image = RawReferenceImage( reference_image=original_image, reference_id=0)prompt = """swan latte art in the coffee cup and an assortment of red velvet cupcakes in gold wrappers on the white plate"""edited_image = client.models.edit_image( model=edit_model, prompt=prompt, reference_images=[raw_ref_image], # Only reference image config=EditImageConfig( edit_mode="EDIT_MODE_DEFAULT", number_of_images=1, ),)
Mask-free editing is ideal for subtle changes, style adjustments, and when precise masking isn’t needed.
Apply subjects from reference images to new contexts:
from google.genai.types import Part, GenerateContentConfig, ImageConfigMODEL_ID = "gemini-2.5-flash-image"# Load reference imagewith open("dog-1.jpg", "rb") as f: image = f.read()response = client.models.generate_content( model=MODEL_ID, contents=[ Part.from_bytes( data=image, mime_type="image/jpeg", ), "Create a pencil sketch image of this dog wearing a cowboy hat in a western-themed setting.", ], config=GenerateContentConfig( response_modalities=["IMAGE"], image_config=ImageConfig( aspect_ratio="1:1", ), ),)for part in response.candidates[0].content.parts: if part.inline_data: display(Image(data=part.inline_data.data))
# Load style reference (living room)with open("living-room.png", "rb") as f: style_image = f.read()response = client.models.generate_content( model=MODEL_ID, contents=[ Part.from_bytes( data=style_image, mime_type="image/png", ), "Using the concepts, colors, and themes from this living room generate a kitchen with the same aesthetic.", ], config=GenerateContentConfig( response_modalities=["IMAGE"], image_config=ImageConfig( aspect_ratio="21:9", ), ),)
# Start a chat sessionchat = client.chats.create(model=MODEL_ID)# First edit: Change colorresponse = chat.send_message( message=[ Part.from_uri( file_uri="gs://cloud-samples-data/generative-ai/image/perfume.jpg", mime_type="image/jpeg", ), "change the perfume color to a light purple", ], config=GenerateContentConfig( response_modalities=["IMAGE"], image_config=ImageConfig( aspect_ratio="3:2", ), ),)# Save the generated image datadata = response.candidates[0].content.parts[0].inline_data.data# Second edit: Add text (continuing the conversation)response = chat.send_message( message=[ Part.from_bytes( data=data, mime_type="image/jpeg", ), "inscribe the word flowers in French on the perfume bottle in a delicate white cursive font", ], config=GenerateContentConfig( response_modalities=["IMAGE"], image_config=ImageConfig( aspect_ratio="3:2", ), ),)
Multi-turn editing is perfect for iterative design workflows where you refine details progressively.