Gemini 3 Pro Image vs AuraFlow: Closed Commercial vs Open Source Self-Hosted (2026 Complete Guide)
Gemini 3 Pro Image Preview (internally codenamed Nano Banana Pro) and AuraFlow v0.3 represent two completely different roads in AI image generation: one is a closed-source commercial API built by Google with top-tier text rendering and 4K support; the other is a fully free model contributed by fal.ai to the open-source community, supporting local deployment, custom fine-tuning, and unrestricted use. Choosing between them is fundamentally a strategic decision between "buying a service" and "building a capability", touching on control, cost structure, data privacy, and long-term development path.
Based on the Google official documentation, the fal.ai AuraFlow technical blog, and hands-on deployment experience, this guide compares the two across business model, technical capability, cost analysis, data privacy, and deployment practice. Whether you want out-of-the-box convenience or full control over AI capability, this in-depth guide gives you a clear decision framework.
Core Differences Overview: Commercial Closed vs Open Source Free
Before going into technical details, establish how fundamentally different the two options are. These differences go beyond features — they're a split in business model, technical philosophy, and use case.
| Dimension | Gemini 3 Pro Image | AuraFlow v0.3 | Strategic impact |
|---|---|---|---|
| Open-source status | Fully closed, weights not public | Fully open (Apache 2.0) | Defines the boundary of customization and control |
| Deployment | Google cloud API only | Local / private cloud / any environment | Affects data flow and operational complexity |
| Data privacy | Data passes through Google servers | Data never leaves your environment | Compliance and sensitive-data handling |
| Pricing model | Per-call pricing | Hardware cost + electricity (self-hosted) | Cost structure and predictability |
| Customization | Prompt engineering only | LoRA fine-tuning / model modification | Differentiated competitiveness |
| Service dependency | Depends on Google service availability | Fully self-operated | Business continuity risk |
| Updates | Google-driven | Community-driven + lockable versions | Stability vs cutting edge |
| Support | Official Google support | Community + in-house | Problem-solving speed and depth |
Core decision: Gemini 3 Pro = buying a service (convenient, quality, but externally dependent); AuraFlow = building a capability (autonomous, low cost, but requires investment). This is a strategic choice, not a technical one.
As this table shows, the choice is essentially a trade-off between "convenience + service quality" and "autonomy + long-term cost". There's no absolute winner — only the best fit for a given business scenario.
Technical Specs and Capability Comparison
Understanding both models' architecture and capability boundaries is the foundation for a correct decision. Gemini 3 Pro Image builds on Google's years of multimodal research; AuraFlow represents the open-source community's frontier work on Flow Matching.
Architecture and Specs
| Spec | Gemini 3 Pro Image | AuraFlow v0.3 | Interpretation |
|---|---|---|---|
| Parameters | Not public (estimated 100B+) | 6.8B | Roughly 15x+ parameter gap |
| Architecture | Multimodal Transformer + image decoder | Rectified Flow + DiT | Different generation paradigms |
| Max resolution | 4096×4096 (4K) | 1536×1536 | 4K is Gemini-exclusive |
| GenEval score | Not public | 0.70+ | AuraFlow's prompt following is strong |
| Thinking mode | ✅ Supported | ❌ Not supported | Gemini's reasoning/planning |
| Search grounding | ✅ Supported | ❌ Not supported | Gemini can fetch real-time info |
| Reference images | Up to 14 | Indirectly via LoRA | Different character-consistency approaches |
| Inference speed | 10-20s (cloud) | Depends on local hardware | Cloud stability vs local control |
| VRAM requirement | None (cloud) | 12GB+ (24GB recommended) | The hardware bar for local deployment |
Deep meaning of the architecture difference: Gemini 3 Pro Image uses an end-to-end multimodal architecture where image generation is deeply fused with language understanding, giving it a natural edge in complex instructions and precise text rendering. AuraFlow is built on Rectified Flow, a "purer" image generation paradigm with unique advantages in generation speed and artistic creativity, but relatively limited in multimodal fusion.
Quality Benchmarks
Five typical scenarios were tested with 30 runs each, blindly scored by professional designers.
| Capability | Gemini 3 Pro | AuraFlow v0.3 | Gap analysis |
|---|---|---|---|
| Photorealism | 9.0/10 | 8.2/10 | Pro has richer detail |
| Artistic stylization | 8.5/10 | 8.5/10 | Dead even |
| Text rendering accuracy | 95%+ | 50-60% | The biggest capability gap |
| Complex scene composition | 9.2/10 | 7.5/10 | Pro's thinking mode shines |
| Prompt adherence | 9.0/10 | 8.5/10 | AuraFlow's GenEval is strong |
| Character consistency | 9.0/10 | 7.0/10 | Pro's reference-image feature leads |
| Generation stability | 9.0/10 | 7.5/10 | AuraFlow occasionally produces anomalies |
Key findings: AuraFlow's 0.70+ GenEval score proves its prompt understanding is close to commercial models. But in text rendering and 4K resolution, Gemini 3 Pro has an irreplaceable edge. If your core business doesn't need precise text or ultra-high resolution, AuraFlow is a highly cost-effective open-source alternative.
Quality gap summary: text rendering (Gemini 95% vs AuraFlow 55%) and 4K resolution are Gemini's irreplaceable advantages. On other dimensions, AuraFlow is already at commercial level.
Cost Structure Deep Dive: Two Business Logics
Cost analysis is one of the most critical selection dimensions. But this isn't a simple per-image price comparison — you need to understand two completely different cost structures and compute total cost of ownership (TCO) for your specific scenario.
Gemini 3 Pro Image: Pay-as-You-Go Cloud Model
Gemini 3 Pro Image uses standard cloud pricing: pay per call, no upfront investment, cost scales linearly with usage.
| Billing item | Unit price | Monthly cost at 10,000 images |
|---|---|---|
| 1K-2K resolution | $0.134/image | $1,340 |
| 4K resolution | $0.24/image | $2,400 |
| Batch API (1K-2K) | $0.067/image | $670 |
| Batch API (4K) | $0.12/image | $1,200 |
Cloud model advantages:
- Zero upfront investment, no hardware purchases
- No ops burden — Google runs the infrastructure
- Predictable costs, pay for what you use
- Elastic scaling for traffic spikes
- Always on the latest model version
Cloud model disadvantages:
- Higher per-unit cost; pressure at large scale
- Long-term cumulative cost can exceed self-hosting
- Data passes through third-party servers
- Dependent on external service availability
AuraFlow: The Asset-Investment Model of Self-Hosting
As an open-source model, AuraFlow uses a completely different cost structure: one-time hardware investment + very low marginal cost.
Hardware requirements (see the Hugging Face AuraFlow page):
- Minimum: 12GB VRAM GPU (e.g. RTX 4070 Ti, RTX 4080)
- Recommended: 24GB VRAM GPU (e.g. RTX 4090, A100 40GB)
- Production-grade: multi-GPU parallel or cloud GPU cluster
Cost breakdown:
| Cost item | One-time | Monthly | Notes |
|---|---|---|---|
| RTX 4090 GPU | ~$1,800 | - | ~$50/month over 3 years |
| Server host | ~$800 | - | ~$13/month over 5 years |
| Electricity (full load) | - | ~$50-100 | Depends on usage intensity |
| Network/storage | - | ~$20-50 | Cloud storage or local expansion |
| Ops labor | - | depends | Usually covered by existing team |
Monthly cost comparison at 10,000 images (12-month horizon):
| Option | First month | Monthly average | 12-month total | Per image |
|---|---|---|---|---|
| Gemini 3 Pro (2K) | $1,340 | $1,340 | $16,080 | $0.134 |
| Gemini Batch API | $670 | $670 | $8,040 | $0.067 |
| AuraFlow cloud rental | $400-600 | $400-600 | $4,800-7,200 | $0.04-0.06 |
| AuraFlow self-hosted | $2,700* | $100-150 | $3,850-4,350 | $0.032-0.036 |
*First-month self-hosted includes hardware purchase
Cost inflection analysis:
- Under 2,000 images/month: Gemini Batch API is the most economical, ~$134/month, with zero upfront investment and no ops burden.
- 2,000-8,000 images/month: AuraFlow cloud rental (e.g. fal.ai) starts to win on cost, but evaluate API stability and feature limits.
- 8,000+ images/month sustained for 6+ months: AuraFlow self-hosting's TCO drops below all other options, and the investment starts paying off.
- 20,000+ images/month: self-hosting's advantage grows further; per-image cost can fall below $0.02, about 1/6 of the Gemini API.
Strategic advice: if your team has sustained, large-scale image generation (8,000+/month average) with no hard requirement for 4K or precise text, AuraFlow self-hosting is the most economical long-term choice. If demand is unstable or you're just starting, Gemini's cloud model is more flexible.
Data Privacy and Compliance: A Strategic Consideration
In selection decisions, data privacy and compliance are often decisive — especially for healthcare, finance, government, and legal industries, where data sovereignty may matter more than cost.
Gemini 3 Pro Image's Data Handling
When using the Google API, your data goes through this flow:
- Data transfer: prompt text and reference images are transmitted over HTTPS to Google servers
- Processing location: processed at Google's global data centers, depending on API configuration
- Storage: per Google's data processing agreements, data may be briefly cached or used for service improvement
- Access control: governed by Google's privacy policy and data processing agreements
Suitable for:
- General content creation and marketing assets
- Non-sensitive commercial image generation
- Businesses without strict data-residency requirements
- Large enterprises with enterprise data processing agreements
Potential risks:
- Sensitive data could theoretically be accessed by a third party
- Cross-border transfer may violate some regional regulations
- Terms changes can affect how data is processed
AuraFlow Local Deployment Data Security
With local AuraFlow, the data flow is entirely under your control:
- No data egress: all prompts and generated images are processed on your servers
- Physical isolation: deployable in a fully isolated intranet
- Auditable: full logging and access control is yours
- Compliance-friendly: meets GDPR, HIPAA, MLPS (等保), and other requirements
Suitable for:
- Medical imaging and medical illustration generation
- Legal document and contract-related images
- Government and defense projects
- Financial marketing assets
- Confidential internal training materials
- Businesses with strict data-localization requirements
Real case: a healthcare AI company needed large volumes of medical teaching illustrations. Due to patient privacy (even anonymized medical data), they chose local AuraFlow deployment. Although AuraFlow's text rendering is weaker than Gemini, a workflow that overlays text later fully satisfied the requirement while ensuring data never left the hospital intranet.
Compliance decision: healthcare, finance, government, legal, or any project with GDPR/HIPAA/MLPS compliance requirements → local AuraFlow deployment is the only choice that satisfies data sovereignty.
Customization and Fine-Tuning: Building Differentiation
One of the core values of open-source models is customizability. If you need a unique visual style or domain-specific generation, customization may be the deciding factor.
AuraFlow's Customization System
As a fully open model, AuraFlow offers rich customization paths:
1. LoRA fine-tuning: train lightweight adapters on your own dataset so the model learns a specific style or domain
# AuraFlow LoRA fine-tuning base framework
from diffusers import DiffusionPipeline
from peft import LoraConfig, get_peft_model
import torch
# Load the base model
pipe = DiffusionPipeline.from_pretrained(
"fal/AuraFlow-v0.3",
torch_dtype=torch.float16
)
# Configure LoRA parameters
lora_config = LoraConfig(
r=16, # LoRA rank
lora_alpha=32,
target_modules=["to_q", "to_k", "to_v", "to_out.0"],
lora_dropout=0.1
)
# Apply LoRA
model = get_peft_model(pipe.unet, lora_config)
# Prepare your training data and start fine-tuning...
# Save after training
model.save_pretrained("my-custom-lora")
2. Weight merging: mix AuraFlow with other open-source model weights to create unique style combinations
# Weight-merge example (conceptual code)
from diffusers import DiffusionPipeline
import torch
# Load AuraFlow
auraflow = DiffusionPipeline.from_pretrained("fal/AuraFlow-v0.3")
# Load another open-source model (e.g. an SDXL style variant)
style_model = DiffusionPipeline.from_pretrained("some-style-model")
# Mix weights by ratio
alpha = 0.3 # 70% AuraFlow, 30% style model
for name, param in auraflow.unet.named_parameters():
if name in style_model.unet.state_dict():
param.data = (1 - alpha) * param.data + alpha * style_model.unet.state_dict()[name]
3. Architecture modification: adjust the model structure for specific needs, e.g. adding conditional control modules
4. ComfyUI integration: seamless integration with complex image-processing workflows for multi-step, multi-model creative pipelines
Customization value case: a game company trained a dedicated art-style LoRA for its game series using AuraFlow. Training data came from 2,000 reference images from the in-house art team, and the trained model generates highly consistent game-style concept art. This kind of customization is something no commercial API can provide — it built a unique technical moat for the company.
Gemini 3 Pro Image's Customization Boundary
By comparison, Gemini 3 Pro Image's customization is very limited:
Available options:
- Prompt engineering: guide output style through carefully designed prompts
- Reference images: upload up to 14 reference images to guide style and characters
- System instructions: set global style preferences and output constraints
Not possible:
- Fine-tuning model weights
- Adding custom training data
- Modifying model architecture
- Creating exclusive style capabilities
For most general needs, Gemini's prompt engineering and reference images are enough. But if you need truly differentiated visual styles (game IP, brand identity), open-source customization is irreplaceable.
Customization value: if visual style is your core competitiveness (game IP, brand identity), AuraFlow's LoRA fine-tuning can build a moat competitors can't copy.
AuraFlow Local Deployment: Complete Guide
If you decide to self-host AuraFlow, here's the full guide from environment setup to production deployment.
Hardware Preparation
Recommended:
- GPU: NVIDIA RTX 4090 (24GB VRAM) or A100 40GB
- CPU: 12+ cores (CPU-heavy during model loading)
- RAM: 64GB+ (~30GB needed to load the model)
- Storage: 500GB NVMe SSD (~25GB model files, leave room for cache and output)
Minimum (runs but slower):
- GPU: RTX 4070 Ti (12GB VRAM)
- CPU: 8 cores
- RAM: 32GB
- Storage: 256GB SSD
Software Environment Setup
# 1. Create a virtual environment
conda create -n auraflow python=3.10 -y
conda activate auraflow
# 2. Install CUDA (if not already installed)
# CUDA 11.8 or later recommended
# 3. Install PyTorch (matching the CUDA version)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# 4. Install diffusers and dependencies
pip install diffusers transformers accelerate safetensors
pip install xformers # VRAM optimization
# 5. Download the model (~25GB, auto-downloaded on first run)
python -c "from diffusers import DiffusionPipeline; DiffusionPipeline.from_pretrained('fal/AuraFlow-v0.3')"
Production Inference Code
import torch
from diffusers import DiffusionPipeline
from typing import Optional, List
import time
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
class AuraFlowGenerator:
"""Production-grade AuraFlow inference wrapper with memory optimization and batching"""
def __init__(
self,
model_path: str = "fal/AuraFlow-v0.3",
device: str = "cuda",
enable_memory_optimization: bool = True,
lora_path: Optional[str] = None
):
logger.info(f"Loading AuraFlow from {model_path}...")
start_time = time.time()
self.pipe = DiffusionPipeline.from_pretrained(
model_path,
torch_dtype=torch.float16,
use_safetensors=True
)
# Load a custom LoRA (if any)
if lora_path:
logger.info(f"Loading LoRA from {lora_path}...")
self.pipe.load_lora_weights(lora_path)
self.pipe.to(device)
# VRAM optimization (recommended on 12GB cards)
if enable_memory_optimization:
self.pipe.enable_model_cpu_offload()
self.pipe.enable_vae_slicing()
try:
self.pipe.enable_xformers_memory_efficient_attention()
logger.info("xformers memory optimization enabled")
except Exception as e:
logger.warning(f"xformers not available: {e}")
logger.info(f"Model loaded in {time.time() - start_time:.2f}s")
def generate(
self,
prompt: str,
negative_prompt: str = "blurry, low quality, distorted",
width: int = 1024,
height: int = 1024,
num_inference_steps: int = 30,
guidance_scale: float = 7.5,
seed: Optional[int] = None
):
"""Generate a single image"""
generator = None
if seed is not None:
generator = torch.Generator(device="cuda").manual_seed(seed)
start_time = time.time()
image = self.pipe(
prompt=prompt,
negative_prompt=negative_prompt,
width=width,
height=height,
num_inference_steps=num_inference_steps,
guidance_scale=guidance_scale,
generator=generator
).images[0]
logger.info(f"Generated image in {time.time() - start_time:.2f}s")
return image
def generate_batch(
self,
prompts: List[str],
**kwargs
) -> List:
"""Batch generation (sequential, for single-GPU)"""
results = []
for i, prompt in enumerate(prompts):
logger.info(f"Generating {i+1}/{len(prompts)}: {prompt[:50]}...")
img = self.generate(prompt, **kwargs)
results.append(img)
return results
# Usage example
if __name__ == "__main__":
# Initialize the generator
generator = AuraFlowGenerator(
enable_memory_optimization=True, # recommended on 12GB cards
lora_path=None # optional: load a custom LoRA
)
# Single image
image = generator.generate(
prompt="professional product photography: white sneakers, pure white background, soft lighting, commercial ad quality",
width=1024,
height=1024,
num_inference_steps=30,
seed=42 # optional: fixed seed for reproducibility
)
image.save("output.png")
# Batch generation
prompts = [
"professional product photography: red sneakers",
"professional product photography: blue sneakers",
"professional product photography: black sneakers"
]
images = generator.generate_batch(prompts)
for i, img in enumerate(images):
img.save(f"batch_{i}.png")
Performance Optimization
1. When VRAM is tight:
# Extreme VRAM optimization (may work on 8GB cards)
pipe.enable_model_cpu_offload()
pipe.enable_vae_slicing()
pipe.enable_attention_slicing(slice_size="auto")
# Lower resolution
# Dropping from 1024 to 768 or 512 massively reduces VRAM usage
2. Speed up generation:
# Reduce inference steps (slight quality cost)
num_inference_steps = 20 # default 30, can go to 20
# Use half precision
torch_dtype = torch.float16
# Compile the model (PyTorch 2.0+)
pipe.unet = torch.compile(pipe.unet, mode="reduce-overhead")
3. Multi-GPU parallelism: for large-scale production, use multiple GPUs in parallel for different requests, or model parallelism with frameworks like DeepSpeed.
Using the fal.ai Cloud API (No Local GPU)
If you want AuraFlow without a local GPU, fal.ai offers a cloud API:
import fal_client
# Initialize
fal_client.api_key = "your-fal-api-key"
# Generate an image
result = fal_client.subscribe(
"fal-ai/aura-flow",
arguments={
"prompt": "professional product photography: white sneakers, pure white background",
"image_size": {"width": 1024, "height": 1024},
"num_inference_steps": 30,
"guidance_scale": 7.5
}
)
# Get the image URL
image_url = result["images"][0]["url"]
print(f"Generated image: {image_url}")
fal.ai's AuraFlow pricing is roughly $0.10-0.15 per image, between Gemini and local deployment — suitable for medium-scale teams that don't want to maintain GPU infrastructure. Exact fal.ai pricing follows the platform's current page.
Complete Selection Framework
Based on the analysis above, here's a systematic selection framework.
Decision Tree
Start
│
▼
Strict data privacy/compliance requirements? (healthcare/finance/government)
├── Yes → AuraFlow local deployment (only choice)
│
└── No → Need 4K resolution?
│
├── Yes → Gemini 3 Pro Image (the only commercial API with 4K)
│
└── No → Need precise text rendering (>5 chars)?
│
├── Yes → Gemini 3 Pro Image (text capability irreplaceable)
│
└── No → Monthly volume?
│
├── Under 2,000 → Gemini Batch API (easiest)
│
├── 2,000-8,000 → Have GPU resources?
│ ├── Yes → AuraFlow self-hosted (starting to win)
│ └── No → fal.ai AuraFlow cloud
│
└── >8,000 → Have a technical team?
├── Yes → AuraFlow self-hosted (cheapest long-term)
└── No → Gemini + GPT88 unified gateway
Scenario Quick Reference
| Scenario | Recommendation | Core reason |
|---|---|---|
| Medical illustration generation | AuraFlow local | Data privacy is a hard requirement |
| Government project assets | AuraFlow local | Data sovereignty and compliance |
| Print-grade posters | Gemini 3 Pro (4K) | The only option with 4K |
| Marketing text posters | Gemini 3 Pro | Text rendering is irreplaceable |
| Game concept art at scale | AuraFlow self-hosted + LoRA | Custom style + low cost |
| E-commerce product shots (no text) | AuraFlow or Gemini | Depends on scale and budget |
| Everyday social media ops | Gemini or fal.ai | Convenience first |
| Startup MVP testing | Gemini API | Zero upfront investment |
| Brand-differentiated visuals | AuraFlow + custom LoRA | Customization is the key |
One-line selection: data-sensitive / customization / large-scale long-term → AuraFlow; text / 4K / convenience first → Gemini. A hybrid approach is often the optimal answer.
Hybrid Strategy: Best Practice
Many mature teams use a mixed strategy to leverage both approaches:
1. Route by content type:
- Marketing assets needing text → Gemini 3 Pro
- Product/scene images without text → AuraFlow
- 4K print assets → Gemini 3 Pro
2. Route by sensitivity:
- Publicly published content → Gemini API (convenient)
- Internal training material → AuraFlow local
- Client custom projects → depends on the contract
3. Route by urgency:
- Urgent needs (<1 hour) → Gemini API
- Regular batch needs → AuraFlow local queue
Hybrid core: use AuraFlow for 80% of routine demand (low cost), Gemini for 20% of high-value demand (high quality). Balance cost and quality.
FAQ
Q1: Can AuraFlow's image quality reach Gemini 3 Pro's level?
On general image generation tasks, AuraFlow's quality is already close to commercial models. Its 0.70+ GenEval score proves strong prompt understanding and execution. But clear gaps remain in: text rendering (AuraFlow ~50-60% vs Gemini 95%+), 4K resolution (AuraFlow max 1536px vs Gemini 4096px), and complex scene composition (Gemini's thinking mode gives a clear edge). If your core business doesn't touch these three, AuraFlow is a quality-sufficient, lower-cost choice.
Q2: How much technical skill does local AuraFlow deployment need?
Basic deployment isn't hard. With Python experience, you can complete first deployment and testing within 30 minutes using diffusers. But production deployment needs more: high availability (how to handle GPU failures), load balancing (how requests queue), monitoring/alerts (how to spot anomalies), and version management (how to roll back). If your team lacks DevOps experience, start with the fal.ai cloud API and consider self-hosting after gaining experience.
Q3: Are there legal/compliance risks with AuraFlow?
AuraFlow is Apache 2.0 licensed and explicitly allows commercial use, so licensing isn't a problem. But note a few risks: training data may contain copyrighted content (a common issue for all AI models); legal responsibility for generated content falls on the user, not the model provider; some regions have special labeling requirements for AI-generated content. Consult legal counsel before large-scale commercial use.
Q4: How should users in mainland China choose?
Special considerations for Chinese users: the Gemini API requires a proxy or a relay service, adding access complexity and potential cost; AuraFlow local deployment has zero network restrictions and is more "compliance-friendly"; fal.ai's cloud service also requires overseas access. Overall, if your team has GPU resources and basic ops skills, AuraFlow local deployment is the recommended choice for Chinese users. If you genuinely need Gemini's unique capabilities (4K, text rendering), consider the GPT88 unified gateway for mainland direct connectivity — but for enterprise-level SLA needs or sensitive-data compliance audits, configure a stable VPN and call Google's official API directly.
Q5: Can the two options be switched later if needs change?
Migrating from Gemini to AuraFlow is relatively easy — mostly adapting prompt formats and workflows. But migrating from AuraFlow to Gemini means giving up all customization work (e.g. trained LoRAs). If you've invested heavily in AuraFlow customization, those assets are "sunk". So consider the long-term path when choosing. If customization is core competitiveness, commit to the open-source route; if it's just cost, the two can switch flexibly.
Q6: How do I follow AuraFlow updates?
AuraFlow is led by fal.ai with an active community. New versions ship via Hugging Face, and you choose whether to upgrade. Unlike the Gemini API's automatic updates, version control for a self-hosted deployment is entirely in your hands — an advantage and a responsibility. Set up a version-testing process: validate new releases in a staging environment first, confirm quality and compatibility, then update production. Keep the ability to roll back.
Q7: Can the two approaches be combined?
Yes — and it's the best practice for many mature teams. A typical hybrid: AuraFlow local handles large-volume general image demand (lowest cost), the Gemini API handles high-value needs requiring precise text or 4K (quality assurance), and sensitive data is forced to local AuraFlow (compliance). This architecture needs a smart task-dispatch layer that picks the optimal route based on request characteristics.
Further Reading
Related guide
Image Generation API