Gemini 2.5 Flash Image Preview
Google's Gemini 2.5 Flash Image Preview model provides state-of-the-art image generation, editing, and combination capabilities with advanced prompt understanding and multimodal processing.
Overview
The Gemini 2.5 integration offers three main operations:
- Generate: Create images from text prompts with optional reference images
- Combine: Intelligently combine 2-10 images with text guidance
- Edit: Edit images with text prompts and optional masks for precise modifications
Installation
npm install @imagineoai/javascript
# or
yarn add @imagineoai/javascript
# or
bun add @imagineoai/javascript
Authentication
import { ImagineoAIClient } from '@imagineoai/javascript';
const client = new ImagineoAIClient({
apiKey: 'your_api_key_here'
});
Image Generation
Generate images using Gemini 2.5's advanced text-to-image capabilities.
Basic Generation
const result = await client.images.generate({
prompt: "A serene Japanese garden with cherry blossoms at sunset",
model_type: "gemini-2.5",
aspect_ratio: "16:9"
});
console.log(result.image_url);
Generation with Reference Image
const result = await client.images.generate({
prompt: "Transform this into a cyberpunk scene",
model_type: "gemini-2.5",
reference_image_url: "https://example.com/city.jpg",
aspect_ratio: "1:1"
});
Image Combination
Combine multiple images into a cohesive composition with AI guidance.
Combine with Run IDs
const result = await client.images.combine.gemini25.json({
prompt: "Blend these fashion items into a cohesive outfit presentation",
run_ids: ["run_id_1", "run_id_2", "run_id_3"],
aspect_ratio: "4:3"
});
console.log(result.image_url);
Combine with Image URLs
const result = await client.images.combine.gemini25.json({
prompt: "Create a panoramic landscape from these images",
image_urls: [
"https://example.com/mountain1.jpg",
"https://example.com/mountain2.jpg",
"https://example.com/mountain3.jpg"
],
aspect_ratio: "21:9"
});
Combine with File Upload
const formData = new FormData();
const files = [file1, file2, file3]; // File objects from input
const result = await client.images.combine.gemini25.formData({
prompt: "Combine these product images into a lifestyle shot",
files: files,
aspect_ratio: "16:9"
});
Mixed Input Sources
// Combine files, URLs, and run IDs in a single operation
const result = await client.images.combine.gemini25.formData({
prompt: "Create a mood board from these elements",
files: [file1, file2],
image_urls: ["https://example.com/texture.jpg"],
run_ids: ["previous_run_id"],
aspect_ratio: "1:1"
});
Image Editing
Edit existing images with text prompts and optional masks.
Basic Edit with Run ID
const result = await client.images.edit.gemini25.json({
prompt: "Change the sky to a starry night",
original_run_id: "run_123",
aspect_ratio: "16:9"
});
console.log(result.image_url);
Edit with Image URL
const result = await client.images.edit.gemini25.json({
prompt: "Add autumn colors to the trees",
image_url: "https://example.com/forest.jpg",
aspect_ratio: "4:3"
});
Edit with Mask (Inpainting)
const result = await client.images.edit.gemini25.json({
prompt: "Replace the car with a bicycle",
image_url: "https://example.com/street.jpg",
mask_url: "https://example.com/car-mask.png",
aspect_ratio: "16:9"
});
Edit with File Upload
const result = await client.images.edit.gemini25.formData({
prompt: "Remove all people from the scene",
file: imageFile, // File object
aspect_ratio: "1:1"
});
Edit with File and Mask Upload
const result = await client.images.edit.gemini25.formData({
prompt: "Replace the sky with sunset colors",
file: imageFile,
mask: maskFile,
aspect_ratio: "16:9"
});
Parameters
Generation Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
prompt | string | Yes | Text description of the desired image |
model_type | string | Yes | Must be "gemini-2.5" |
aspect_ratio | string | No | Output aspect ratio (e.g., "16:9", "1:1", "4:3") |
reference_image_url | string | No | URL of reference image for context |
Combination Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
prompt | string | Yes | Text guidance for combination |
image_urls | string[] | No* | Array of image URLs (2-10 images) |
run_ids | string[] | No* | Array of run IDs (2-10 runs) |
files | File[] | No* | Array of files (2-10 files) |
aspect_ratio | string | No | Output aspect ratio |
*At least one image source (URLs, run IDs, or files) must be provided with 2-10 total images.
Edit Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
prompt | string | Yes | Edit instruction |
original_run_id | string | No* | Run ID of image to edit |
image_url | string | No* | URL of image to edit |
file | File | No* | File to edit (formData only) |
mask_url | string | No | URL of mask for inpainting |
mask | File | No | Mask file (formData only) |
aspect_ratio | string | No | Output aspect ratio |
*At least one image source must be provided.
Response Format
All Gemini 2.5 operations return a consistent response format:
interface GenerateImageOutput {
run_id: string;
user_id: string;
image_url: string;
status: 'completed' | 'pending' | 'failed';
created_at: string;
updated_at: string;
inputs: {
prompt: string;
model: string;
aspect_ratio?: string;
[key: string]: any;
};
run_type: string;
}
Advanced Features
Aspect Ratios
Gemini 2.5 supports various aspect ratios for different use cases:
const aspectRatios = [
"1:1", // Square (Instagram posts)
"4:3", // Traditional photo
"3:4", // Portrait orientation
"16:9", // Widescreen (YouTube)
"9:16", // Mobile/Stories
"21:9", // Ultra-wide
"2:3", // Classic portrait
"3:2" // Classic landscape
];
Error Handling
try {
const result = await client.images.generate({
prompt: "Beautiful landscape",
model_type: "gemini-2.5"
});
console.log(result);
} catch (error) {
if (error.code === 'CONTENT_BLOCKED') {
console.error('Content was blocked by safety filters');
} else if (error.code === 'QUOTA_EXCEEDED') {
console.error('API quota exceeded');
} else {
console.error('Generation failed:', error.message);
}
}
Batch Processing
// Process multiple images in parallel
const prompts = [
"Sunset over mountains",
"City skyline at night",
"Tropical beach paradise"
];
const results = await Promise.all(
prompts.map(prompt =>
client.images.generate({
prompt,
model_type: "gemini-2.5",
aspect_ratio: "16:9"
})
)
);
results.forEach(result => {
console.log(result.image_url);
});
Use Cases
E-commerce Product Composites
// Combine multiple product angles into a single showcase
const showcase = await client.images.combine.gemini25.json({
prompt: "Create an elegant product showcase with multiple angles",
run_ids: ["front_view_id", "side_view_id", "detail_view_id"],
aspect_ratio: "16:9"
});
Creative Content Editing
// Transform image style while preserving structure
const stylized = await client.images.edit.gemini25.json({
prompt: "Apply watercolor painting style while keeping the composition",
original_run_id: "photo_run_id",
aspect_ratio: "1:1"
});
Marketing Material Generation
// Generate variations for A/B testing
const variations = await Promise.all([
client.images.generate({
prompt: "Modern minimalist product advertisement with blue tones",
model_type: "gemini-2.5",
aspect_ratio: "4:3"
}),
client.images.generate({
prompt: "Vibrant energetic product advertisement with warm colors",
model_type: "gemini-2.5",
aspect_ratio: "4:3"
})
]);
Best Practices
- Prompt Engineering: Be specific and descriptive in your prompts for best results
- Aspect Ratio Selection: Choose aspect ratios that match your intended use case
- Image Quality: Use high-quality source images for editing and combination
- Mask Creation: For precise edits, provide accurate masks that clearly define edit areas
- Error Handling: Always implement proper error handling for production applications
- Rate Limiting: Respect API rate limits and implement retry logic with exponential backoff
Limitations
- Combination requires 2-10 images (no single image or more than 10)
- Maximum prompt length is subject to API limits
- Generated content is subject to safety filters
- API availability may vary by region