117 lines
3.0 KiB
Markdown
117 lines
3.0 KiB
Markdown
# Media Generation
|
|
|
|
## Image Generation
|
|
Generate images using `gemini-2.5-flash-image`.
|
|
|
|
```python
|
|
from google import genai
|
|
from google.genai import types
|
|
|
|
client = genai.Client()
|
|
|
|
response = client.models.generate_content(
|
|
model="gemini-2.5-flash-image",
|
|
contents="A dog reading a newspaper",
|
|
)
|
|
|
|
for part in response.parts:
|
|
if part.text is not None:
|
|
print(part.text)
|
|
elif part.inline_data is not None:
|
|
image = part.as_image()
|
|
image.save("generated_image.png")
|
|
```
|
|
|
|
For high-resolution images or using the Search tool, use `gemini-3-pro-image-preview`.
|
|
|
|
```python
|
|
from google import genai
|
|
from google.genai import types
|
|
|
|
client = genai.Client()
|
|
|
|
response = client.models.generate_content(
|
|
model="gemini-3-pro-image-preview",
|
|
contents="A dog reading a newspaper",
|
|
config=types.GenerateContentConfig(
|
|
image_config=types.ImageConfig(
|
|
aspect_ratio="16:9",
|
|
image_size="2K"
|
|
)
|
|
)
|
|
)
|
|
|
|
for part in response.parts:
|
|
if part.text is not None:
|
|
print(part.text)
|
|
elif part.inline_data is not None:
|
|
image = part.as_image()
|
|
image.save("generated_image.png")
|
|
```
|
|
|
|
## Image Editing
|
|
Editing images is better done using the Gemini native image generation model, and it is recommended to use chat mode.
|
|
|
|
```python
|
|
from google import genai
|
|
from PIL import Image
|
|
|
|
client = genai.Client()
|
|
|
|
prompt = "A small white ceramic bowl with lemons and limes"
|
|
image = Image.open('fruit.png')
|
|
|
|
# Create the chat
|
|
chat = client.chats.create(model='gemini-2.5-flash-image')
|
|
|
|
# Send the image and ask for it to be edited
|
|
response = chat.send_message([prompt, image])
|
|
|
|
# Get the text and the image generated
|
|
for i, part in enumerate(response.candidates[0].content.parts):
|
|
if part.text is not None:
|
|
print(part.text)
|
|
elif part.inline_data is not None:
|
|
image = part.as_image()
|
|
image.save(f'generated_image_{i}.png')
|
|
|
|
# Continue iterating
|
|
chat.send_message('Make the bowl blue')
|
|
```
|
|
|
|
## Video Generation
|
|
Generate video using the Veo model. Usage of Veo can be costly, so check pricing for Veo. Start with the fast model (`veo-3.1-fast-generate-001`) since the result quality is usually sufficient, and swap to the larger model if needed.
|
|
|
|
```python
|
|
import time
|
|
from google import genai
|
|
from google.genai import types
|
|
from PIL import Image
|
|
|
|
client = genai.Client()
|
|
|
|
image = Image.open('image.png') # Optional initial image
|
|
|
|
# Video generation is an async operation
|
|
operation = client.models.generate_videos(
|
|
model="veo-3.1-fast-generate-001",
|
|
prompt="a cat reading a book",
|
|
image=image,
|
|
config=types.GenerateVideosConfig(
|
|
person_generation="dont_allow",
|
|
aspect_ratio="16:9",
|
|
number_of_videos=1,
|
|
duration_seconds=5,
|
|
output_gcs_uri="gs://your-bucket/your-prefix",
|
|
),
|
|
)
|
|
|
|
# Poll for completion
|
|
while not operation.done:
|
|
time.sleep(20)
|
|
operation = client.operations.get(operation)
|
|
|
|
if operation.response:
|
|
print(operation.result.generated_videos[0].video.uri)
|
|
```
|