Skip to content

Google AI (Gemini + Imagen)

The Google plugin provides comprehensive AI capabilities using Google’s Gemini and Imagen models.

FeatureProviderDescription
Text GenerationGeminiGenerate text with structured JSON output support
Vision AnalysisGeminiAnalyze images and extract information
Image EditingGemini (Nano Banana)Edit images using AI with natural language
Image GenerationGemini / ImagenGenerate images from text prompts
Terminal window
pnpm add @teamflojo/floimg-google

Get your API key from Google AI Studio.

Terminal window
export GOOGLE_AI_API_KEY=your-api-key

All providers support per-request API keys via the apiKey parameter, allowing users to provide their own keys.


Generate text using Gemini with optional structured JSON output.

import createClient from '@teamflojo/floimg';
import { geminiText } from '@teamflojo/floimg-google';
const floimg = createClient();
floimg.registerTextProvider(geminiText());
// Simple text generation
const result = await floimg.generateText({
provider: 'gemini-text',
params: {
prompt: 'Write 3 creative image prompts for a fantasy landscape',
}
});
console.log(result.content);
// Generate structured JSON
const result = await floimg.generateText({
provider: 'gemini-text',
params: {
prompt: 'Generate image prompts for a product photoshoot',
outputFormat: 'json',
jsonSchema: {
type: 'object',
properties: {
prompts: {
type: 'array',
items: { type: 'string' }
},
style: { type: 'string' },
mood: { type: 'string' }
}
}
}
});
console.log(result.parsed); // Typed JSON object
ParameterTypeRequiredDescription
promptstringYesText prompt for generation
systemPromptstringNoSystem prompt to guide behavior
contextstringNoAdditional context (e.g., from vision analysis)
outputFormat'text' | 'json'NoOutput format (default: 'text')
jsonSchemaobjectNoJSON schema for structured output
temperaturenumberNoCreativity (0-2, default: 0.7)
maxTokensnumberNoMax response tokens (default: 1000)
apiKeystringNoPer-request API key override

Analyze images using Gemini’s multimodal capabilities.

import createClient from '@teamflojo/floimg';
import { geminiVision } from '@teamflojo/floimg-google';
const floimg = createClient();
floimg.registerVisionProvider(geminiVision());
// Analyze an image
const result = await floimg.analyzeImage({
provider: 'gemini-vision',
blob: imageBlob,
params: {
prompt: 'What objects are in this image? List them with confidence scores.',
}
});
console.log(result.content);
// Get structured analysis
const result = await floimg.analyzeImage({
provider: 'gemini-vision',
blob: imageBlob,
params: {
prompt: 'Analyze this product image',
outputFormat: 'json',
jsonSchema: {
type: 'object',
properties: {
objects: { type: 'array', items: { type: 'string' } },
colors: { type: 'array', items: { type: 'string' } },
mood: { type: 'string' },
suggestedTags: { type: 'array', items: { type: 'string' } }
}
}
}
});
console.log(result.parsed.suggestedTags);
ParameterTypeRequiredDescription
promptstringNoWhat to analyze (default: “Describe this image”)
outputFormat'text' | 'json'NoOutput format (default: 'text')
jsonSchemaobjectNoJSON schema for structured output
maxTokensnumberNoMax response tokens (default: 1000)
apiKeystringNoPer-request API key override

Edit images using Gemini’s native image generation with natural language instructions.

Nano Banana is Google’s codename for Gemini’s image generation/editing capability.

import createClient from '@teamflojo/floimg';
import { geminiTransform } from '@teamflojo/floimg-google';
const floimg = createClient();
floimg.registerTransformProvider(geminiTransform());
// Edit an image
const edited = await floimg.transform({
blob: inputImage,
op: 'edit',
provider: 'gemini-transform',
params: {
prompt: 'Make the sky more vibrant with dramatic sunset colors',
}
});
await floimg.save(edited, './edited-image.png');

When receiving prompts from upstream nodes (e.g., text generation), use prePrompt to add context:

const edited = await floimg.transform({
blob: inputImage,
op: 'edit',
provider: 'gemini-transform',
params: {
prompt: dynamicPromptFromTextNode, // e.g., "a magical forest"
prePrompt: 'Edit this image by incorporating the following concept while preserving the original composition:',
}
});
ParameterTypeRequiredDescription
promptstringYesEdit instructions
prePromptstringNoInstructions prepended to prompt (for dynamic workflows)
modelstringNoModel (gemini-2.5-flash-image or gemini-3-pro-image-preview)
aspectRatiostringNoOutput aspect ratio (see below)
imageSizestringNoOutput resolution: 1K, 2K, or 4K (default: 1K)
groundingWithSearchbooleanNoEnable Google Search grounding for real-time data
apiKeystringNoPer-request API key override

Supported values: 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9

SizeResolutionUse Case
1K~1024pxDefault, fast generation
2K~2048pxHigher quality output
4K~4096pxPrint/archival quality

When enabled, the model can generate images based on real-time data:

const edited = await floimg.transform({
blob: inputImage,
op: 'edit',
provider: 'gemini-transform',
params: {
prompt: 'Add the current weather forecast for Tokyo as an overlay',
groundingWithSearch: true,
aspectRatio: '16:9',
imageSize: '2K',
}
});
ModelDescription
gemini-2.5-flash-imageFast, high-volume (default)
gemini-3-pro-image-previewHigher quality, better text rendering

Generate images from text prompts using Gemini’s native image generation.

import createClient from '@teamflojo/floimg';
import { geminiGenerate } from '@teamflojo/floimg-google';
const floimg = createClient();
floimg.registerGenerator(geminiGenerate());
const image = await floimg.generate({
generator: 'gemini-generate',
params: {
prompt: 'A cozy coffee shop interior with warm lighting and plants',
aspectRatio: '16:9',
imageSize: '2K',
}
});
await floimg.save(image, './coffee-shop.png');
ParameterTypeRequiredDescription
promptstringYesImage description
modelstringNoModel (default: gemini-2.5-flash-image)
aspectRatiostringNoOutput aspect ratio (default: 1:1)
imageSizestringNoOutput resolution: 1K, 2K, or 4K (default: 1K)
groundingWithSearchbooleanNoEnable Google Search grounding
apiKeystringNoPer-request API key override

Aspect ratios, image sizes, and Google Search grounding work the same as in Gemini Edit.


Generate images using Google’s Imagen model (separate from Gemini).

import createClient from '@teamflojo/floimg';
import googleImagen from '@teamflojo/floimg-google';
const floimg = createClient();
floimg.registerGenerator(googleImagen());
const image = await floimg.generate({
generator: 'google-imagen',
params: {
prompt: 'A photorealistic mountain lake at sunrise',
aspectRatio: '16:9',
}
});
ParameterTypeRequiredDescription
promptstringYesImage description (max 480 tokens)
modelstringNoImagen model variant
aspectRatiostringNo1:1, 16:9, 9:16, 4:3, 3:4 (default: 1:1)
numberOfImagesnumberNoImages to generate (1-4)
ModelDescription
imagen-4.0-generate-001Latest Imagen 4.0 (default)
imagen-4.0-fast-generate-001Faster variant
imagen-4.0-ultra-generate-001Highest quality
imagen-3.0-generate-002Imagen 3.0

Combine text, vision, and editing in a workflow:

import createClient from '@teamflojo/floimg';
import { geminiText, geminiVision, geminiTransform } from '@teamflojo/floimg-google';
const floimg = createClient();
floimg.registerTextProvider(geminiText());
floimg.registerVisionProvider(geminiVision());
floimg.registerTransformProvider(geminiTransform());
// 1. Analyze the input image
const analysis = await floimg.analyzeImage({
provider: 'gemini-vision',
blob: inputImage,
params: {
prompt: 'Describe the mood and style of this image',
}
});
// 2. Generate enhancement suggestions
const suggestions = await floimg.generateText({
provider: 'gemini-text',
params: {
prompt: 'Based on this image analysis, suggest an edit to make it more dramatic',
context: analysis.content,
outputFormat: 'json',
}
});
// 3. Apply the AI-suggested edit
const edited = await floimg.transform({
blob: inputImage,
op: 'edit',
provider: 'gemini-transform',
params: {
prompt: suggestions.parsed.suggestion,
prePrompt: 'Apply this enhancement while preserving the original composition:',
}
});
await floimg.save(edited, './enhanced-image.png');