This skill should be used when generating AI image assets for websites, landing pages, or applications...
Automatically generate production-ready image assets for web applications using Google Gemini API. This skill analyzes page requirements, generates multiple assets in batch, processes them (background removal, SVG conversion), and integrates them into frontend code.
Analyze user requirements to determine needed assets:
Generate images using Google Gemini 2.0 Flash:
# Single image
node scripts/generate-image.js --prompt "modern airport terminal" --output hero.png
# With style
node scripts/generate-image.js --prompt "airplane icon" --style "minimal flat" --size 512x512
# Batch generation
node scripts/batch-generate.js --config assets-config.json
Background Removal (scripts/remove-background.js):
PNG to SVG Conversion (scripts/png-to-svg.js):
Asset Optimization (scripts/optimize-assets.js):
Automatically place assets in code:
prompt-templates/landing-hero.txtprompt-templates/icon-set.txtprompt-templates/background-abstract.txtprompt-templates/product-mockup.txtprompt-templates/infographic-element.txtremove-background.jspng-to-svg.jsoptimize-assets.jsplacement-templates/react-image-component.jsxplacement-templates/next-image-component.tsxplacement-templates/html-css-placement.htmlUser: "Build a landing page for an airport website"
Generated Assets (19 files total):
Commands:
# Generate all assets in one command
node scripts/batch-generate.js --landing-page "airport website" --output ./generated-assets/airport
# Output structure:
# ./generated-assets/airport/
# ├── hero-main.png
# ├── hero-secondary.png
# ├── hero-feature.png
# ├── hero-cta.png
# ├── background-main.png
# ├── background-secondary.png
# ├── icon-primary.png
# ├── icon-primary-nobg.png
# ├── icon-primary.svg
# ├── icon-secondary.png
# ├── icon-secondary-nobg.png
# ├── icon-secondary.svg
# ├── icon-tertiary.png
# ├── icon-tertiary-nobg.png
# ├── icon-tertiary.svg
# ├── icon-quaternary.png
# ├── icon-quaternary-nobg.png
# ├── icon-quinary.png
# └── icon-quinary-nobg.png
User: "Create icons for my dashboard"
Steps:
Commands:
node scripts/generate-image.js \
--prompt "dashboard analytics icon, minimal line art, white background" \
--style "consistent, minimal, monoline" \
--size 256x256 \
--output icons/analytics.png
User: "Generate a hero image for tech startup"
Steps:
Commands:
# Generate
node scripts/generate-image.js \
--prompt "futuristic tech startup office, modern, clean, blue accent lighting" \
--size 1920x1080 \
--output hero-main.png
# Optimize and create sizes
node scripts/optimize-assets.js \
--input hero-main.png \
--sizes "1920,1280,640" \
--format webp
User: "I want to build this website" (provides description)
Automated Flow:
✅ Good: "Modern minimalist airplane icon, flat design, single color,
white background, centered, high contrast, suitable for UI"
❌ Bad: "airplane icon"
| Category | Keywords |
|---|---|
| Style | minimal, flat, 3D, isometric, hand-drawn, realistic |
| Color | monochrome, vibrant, pastel, gradient, duotone |
| Mood | professional, playful, elegant, bold, subtle |
| Technical | high contrast, centered, white background, transparent |
For icon sets, include in every prompt:
GEMINI_API_KEY=your_api_key_here
OUTPUT_DIR=./generated-assets
DEFAULT_SIZE=1024x1024
DEFAULT_STYLE=modern, professional
config/gemini-config.json){
"model": "gemini-2.0-flash-exp",
"generationConfig": {
"temperature": 0.7,
"topK": 40,
"topP": 0.95
},
"safetySettings": "balanced"
}
config/image-presets.json){
"hero": { "width": 1920, "height": 1080 },
"icon": { "width": 256, "height": 256 },
"thumbnail": { "width": 400, "height": 300 },
"background": { "width": 1920, "height": 1080 }
}
Rate Limited → Wait 60 seconds, use batch-generate with delays → Check quota in Google Cloud Console
Invalid API Key → Verify GEMINI_API_KEY environment variable → Check key permissions in Google AI Studio
Blurry Output → Increase output size → Add "high quality, detailed" to prompt
Inconsistent Style → Use same style keywords across batch → Reference previous images in prompt
Wrong Subject → Be more specific in prompt → Add negative prompts ("not X, without Y")
Background Removal Failed → Ensure image has clear subject/background separation → Try with higher contrast original
SVG Conversion Poor Quality → Use simpler source images for SVG → Icons work better than photos for SVG
# Generate single image
node scripts/generate-image.js --prompt "your prompt" --output image.png
# Batch generate
node scripts/batch-generate.js --config config.json
# Remove background
node scripts/remove-background.js --input image.png --output transparent.png
# Convert to SVG
node scripts/png-to-svg.js --input image.png --output vector.svg
# Optimize assets
node scripts/optimize-assets.js --input ./images/ --output ./optimized/
# Analyze page needs
node scripts/analyze-page.js --description "landing page for X"
scripts/)generate-image.js - Core Gemini API integrationremove-background.js - Background removal with sharppng-to-svg.js - Vectorization with potracebatch-generate.js - Batch processing with rate limitinganalyze-page.js - Smart asset requirement analysisoptimize-assets.js - Compression and resizingassets/prompt-templates/)landing-hero.txt - Hero image promptsicon-set.txt - UI icon promptsbackground-abstract.txt - Background pattern promptsproduct-mockup.txt - Product image promptsinfographic-element.txt - Data visualization promptsassets/placement-templates/)react-image-component.jsx - React integrationnext-image-component.tsx - Next.js with Image optimizationhtml-css-placement.html - Vanilla HTML/CSSreferences/)gemini-api-guide.md - Complete Gemini API documentationprompt-engineering.md - Writing effective image promptsimage-best-practices.md - Asset optimization guideplacement-guidelines.md - Frontend integration patterns- name: Generate Assets
run: |
npm install
node scripts/batch-generate.js --config production-assets.json
env:
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
#!/bin/bash
# Optimize any new images before commit
node scripts/optimize-assets.js --input ./src/assets/ --output ./src/assets/