Generating Images with Gemini AI
There are two valid ways to generate images, depending on your system design.
Approach A: Standalone Per-image Generation
Good for simple tools and scripts.
Common Models
| Model | Typical Use |
|---|---|
gemini-2.5-flash-image |
Cost-efficient single-image generation |
gemini-3-pro-image-preview |
Higher-fidelity generation |
Basic Call
const response = await genAI.models.generateContent({
model: 'gemini-2.5-flash-image',
contents: prompt,
config: {
responseModalities: ['IMAGE'],
imageConfig: {
aspectRatio: '9:16',
imageSize: '1K', // or '2K', '4K'
},
},
});
Approach B: Pipeline-oriented Generation
Good for multi-slide video systems.
- Use
gemini-3-pro-image-previewas primary model. - Generate composite grids (for example 3x3) instead of one prompt per slide.
- Use deterministic grid/cell dimensions by
videoTypeandimageSize. - Split grids downstream into slide assets.
const response = await genAI.models.generateContent({
model: 'gemini-3-pro-image-preview',
contents: prompt,
config: {
responseModalities: ['IMAGE'],
imageConfig: { aspectRatio: '9:16', imageSize: '4K' },
},
});
Extract Base64 Image Data
const parts = response.response.candidates?.[0]?.content?.parts;
if (!parts || parts.length === 0) throw new Error('No image data in response');
const imagePart = parts.find((part: any) => part.inlineData?.data);
if (!imagePart) throw new Error('No inline image data found');
const imageBuffer = Buffer.from(imagePart.inlineData.data, 'base64');
Grounding (Optional)
For supported models/modalities, use conditional grounding helper:
config: withGoogleSearchGrounding(modelId, {
responseModalities: ['IMAGE'],
imageConfig: { aspectRatio: '9:16', imageSize: '4K' },
})
Prompt Quality Pattern
A practical prompt structure:
- Subject
- Composition
- Lighting
- Setting
- Context
- Colors
Which Approach to Choose
- Choose Approach A for ad-hoc generation and low orchestration overhead.
- Choose Approach B when you need deterministic batching, slide indexing, and lower orchestration complexity per video.