Image Generation

Generate an image through OpenRouter, decode the returned bytes, and display the result with Pillow.

image_generation.py
from io import BytesIO

from agno.agent import Agent, RunOutput  # noqa
from agno.models.openrouter import OpenRouter
from PIL import Image

# Request both image and text modalities so OpenRouter returns generated images
agent = Agent(
    model=OpenRouter(
        id="google/gemini-2.5-flash-image",
        modalities=["image", "text"],
    )
)

run_response = agent.run("Make me an image of a cat in a tree.")

if run_response and isinstance(run_response, RunOutput) and run_response.images:
    for image_response in run_response.images:
        image_bytes = image_response.content
        if image_bytes:
            image = Image.open(BytesIO(image_bytes))
            image.show()
            # Save the image to a file
            # image.save("generated_image.png")
else:
    print("No images found in run response")

Run the Example

Set up your virtual environment

uv venv --python 3.12
source .venv/bin/activate

Install dependencies

uv pip install -U agno openai pillow

Export your OpenRouter API key

export OPENROUTER_API_KEY="your_openrouter_api_key_here"

Run the example

Save the code above as image_generation.py, then run:

python image_generation.py

Full source: cookbook/90_models/openrouter/chat/image_generation.py