Trouter-Imagine-1 / examples.py
Trouter-Library's picture
Create examples.py
b36e7c7 verified
#!/usr/bin/env python3
"""
Trouter-Imagine-1 Comprehensive Examples
Apache 2.0 License
This file contains extensive examples demonstrating various use cases
and advanced techniques for the Trouter-Imagine-1 model.
Topics Covered:
- Basic text-to-image generation
- Advanced parameter tuning
- Batch processing workflows
- Style transfer techniques
- Prompt engineering strategies
- Memory optimization
- Multi-resolution generation
- Quality comparison testing
- Scheduler comparison
- Automated prompt generation
- Image series creation
- Professional workflows
"""
import torch
from diffusers import StableDiffusionPipeline, DPMSolverMultistepScheduler
from PIL import Image, ImageDraw, ImageFont
import random
import json
from pathlib import Path
from typing import List, Dict, Tuple
import time
# ============================================================================
# EXAMPLE 1: Basic Text-to-Image Generation
# ============================================================================
def example_basic_generation():
"""
Simplest example of generating an image from text
Perfect for beginners getting started with the model
"""
print("\n" + "="*70)
print("EXAMPLE 1: Basic Text-to-Image Generation")
print("="*70)
# Load the model
model_id = "OpenTrouter/Trouter-Imagine-1"
pipe = StableDiffusionPipeline.from_pretrained(
model_id,
torch_dtype=torch.float16
)
pipe = pipe.to("cuda")
# Define your prompt
prompt = "a beautiful sunset over mountains, vibrant colors, professional photography"
# Generate the image
print(f"Generating: {prompt}")
image = pipe(prompt).images[0]
# Save the result
image.save("example1_basic.png")
print("✓ Image saved to example1_basic.png")
# ============================================================================
# EXAMPLE 2: Using Negative Prompts for Better Quality
# ============================================================================
def example_negative_prompts():
"""
Demonstrates how negative prompts improve image quality
by specifying what NOT to include in the generation
"""
print("\n" + "="*70)
print("EXAMPLE 2: Using Negative Prompts")
print("="*70)
model_id = "OpenTrouter/Trouter-Imagine-1"
pipe = StableDiffusionPipeline.from_pretrained(
model_id,
torch_dtype=torch.float16
).to("cuda")
prompt = "portrait of a young woman, elegant dress, studio lighting"
# Without negative prompt
print("Generating WITHOUT negative prompt...")
image_without = pipe(prompt, num_inference_steps=30).images[0]
image_without.save("example2_without_negative.png")
# With negative prompt
negative_prompt = "blurry, low quality, distorted, bad anatomy, ugly, deformed"
print("Generating WITH negative prompt...")
image_with = pipe(
prompt,
negative_prompt=negative_prompt,
num_inference_steps=30
).images[0]
image_with.save("example2_with_negative.png")
print("✓ Compare example2_without_negative.png vs example2_with_negative.png")
# ============================================================================
# EXAMPLE 3: Parameter Exploration
# ============================================================================
def example_parameter_exploration():
"""
Shows how different parameters affect the output
Tests guidance scale and inference steps
"""
print("\n" + "="*70)
print("EXAMPLE 3: Parameter Exploration")
print("="*70)
model_id = "OpenTrouter/Trouter-Imagine-1"
pipe = StableDiffusionPipeline.from_pretrained(
model_id,
torch_dtype=torch.float16
).to("cuda")
prompt = "a cozy cabin in snowy mountains, winter scene, warm lights"
# Test different guidance scales
guidance_scales = [5.0, 7.5, 10.0, 15.0]
print("Testing different guidance scales...")
for guidance in guidance_scales:
print(f" Generating with guidance_scale={guidance}")
image = pipe(
prompt,
guidance_scale=guidance,
num_inference_steps=30
).images[0]
image.save(f"example3_guidance_{guidance}.png")
# Test different step counts
step_counts = [15, 25, 35, 50]
print("\nTesting different step counts...")
for steps in step_counts:
print(f" Generating with {steps} steps")
start_time = time.time()
image = pipe(
prompt,
num_inference_steps=steps,
guidance_scale=7.5
).images[0]
elapsed = time.time() - start_time
image.save(f"example3_steps_{steps}.png")
print(f" Completed in {elapsed:.2f}s")
print("✓ Parameter exploration complete")
# ============================================================================
# EXAMPLE 4: Multiple Resolution Generation
# ============================================================================
def example_multi_resolution():
"""
Generate the same prompt at different resolutions
Demonstrates quality vs speed tradeoffs
"""
print("\n" + "="*70)
print("EXAMPLE 4: Multi-Resolution Generation")
print("="*70)
model_id = "OpenTrouter/Trouter-Imagine-1"
pipe = StableDiffusionPipeline.from_pretrained(
model_id,
torch_dtype=torch.float16
).to("cuda")
prompt = "futuristic cyberpunk city at night, neon lights, detailed"
resolutions = [
(512, 512, "standard"),
(768, 768, "high"),
(1024, 1024, "ultra"),
(768, 512, "landscape"),
(512, 768, "portrait")
]
for width, height, desc in resolutions:
print(f"Generating {width}x{height} ({desc})...")
start_time = time.time()
image = pipe(
prompt,
width=width,
height=height,
num_inference_steps=30,
guidance_scale=7.5
).images[0]
elapsed = time.time() - start_time
filename = f"example4_{desc}_{width}x{height}.png"
image.save(filename)
print(f" ✓ Saved {filename} ({elapsed:.2f}s)")
print("✓ Multi-resolution generation complete")
# ============================================================================
# EXAMPLE 5: Batch Generation with Different Seeds
# ============================================================================
def example_seed_variations():
"""
Generate variations of the same prompt using different seeds
Useful for exploring different interpretations
"""
print("\n" + "="*70)
print("EXAMPLE 5: Seed Variations")
print("="*70)
model_id = "OpenTrouter/Trouter-Imagine-1"
pipe = StableDiffusionPipeline.from_pretrained(
model_id,
torch_dtype=torch.float16
).to("cuda")
prompt = "a magical forest with glowing mushrooms, fairy lights, enchanted atmosphere"
seeds = [42, 123, 456, 789, 1337, 9999]
print(f"Generating {len(seeds)} variations...")
for i, seed in enumerate(seeds):
generator = torch.Generator("cuda").manual_seed(seed)
image = pipe(
prompt,
generator=generator,
num_inference_steps=30,
guidance_scale=7.5
).images[0]
image.save(f"example5_seed_{seed}.png")
print(f" ✓ Variation {i+1}/6 (seed: {seed})")
print("✓ Seed variations complete")
# ============================================================================
# EXAMPLE 6: Style Comparison
# ============================================================================
def example_style_comparison():
"""
Generate the same subject in different artistic styles
Shows the model's versatility across styles
"""
print("\n" + "="*70)
print("EXAMPLE 6: Style Comparison")
print("="*70)
model_id = "OpenTrouter/Trouter-Imagine-1"
pipe = StableDiffusionPipeline.from_pretrained(
model_id,
torch_dtype=torch.float16
).to("cuda")
base_subject = "a majestic lion"
styles = {
"photorealistic": "photorealistic, 4k photography, national geographic",
"oil_painting": "oil painting, classical art style, detailed brushstrokes",
"watercolor": "watercolor painting, soft colors, artistic",
"digital_art": "digital art, concept art, highly detailed illustration",
"anime": "anime style, cel shaded, vibrant colors, manga art",
"cyberpunk": "cyberpunk style, neon colors, futuristic, tech-enhanced",
"fantasy": "fantasy art style, magical, ethereal, mystical atmosphere",
"minimalist": "minimalist art, simple shapes, clean design, modern"
}
for style_name, style_desc in styles.items():
prompt = f"{base_subject}, {style_desc}"
print(f"Generating {style_name} style...")
image = pipe(
prompt,
num_inference_steps=35,
guidance_scale=8.0
).images[0]
image.save(f"example6_style_{style_name}.png")
print(f" ✓ {style_name}")
print("✓ Style comparison complete")
# ============================================================================
# EXAMPLE 7: Scheduler Comparison
# ============================================================================
def example_scheduler_comparison():
"""
Compare different schedulers (samplers) and their outputs
Helps understand which scheduler works best for different use cases
"""
print("\n" + "="*70)
print("EXAMPLE 7: Scheduler Comparison")
print("="*70)
from diffusers import (
DPMSolverMultistepScheduler,
EulerAncestralDiscreteScheduler,
DDIMScheduler,
PNDMScheduler
)
model_id = "OpenTrouter/Trouter-Imagine-1"
pipe = StableDiffusionPipeline.from_pretrained(
model_id,
torch_dtype=torch.float16
).to("cuda")
prompt = "ancient temple in jungle, overgrown with vines, mystical atmosphere"
schedulers = {
"DPM": DPMSolverMultistepScheduler,
"Euler": EulerAncestralDiscreteScheduler,
"DDIM": DDIMScheduler,
"PNDM": PNDMScheduler
}
# Use same seed for fair comparison
seed = 42
for name, scheduler_class in schedulers.items():
print(f"Testing {name} scheduler...")
pipe.scheduler = scheduler_class.from_config(pipe.scheduler.config)
generator = torch.Generator("cuda").manual_seed(seed)
start_time = time.time()
image = pipe(
prompt,
generator=generator,
num_inference_steps=30,
guidance_scale=7.5
).images[0]
elapsed = time.time() - start_time
image.save(f"example7_scheduler_{name}.png")
print(f" ✓ {name} completed in {elapsed:.2f}s")
print("✓ Scheduler comparison complete")
# ============================================================================
# EXAMPLE 8: Memory-Optimized Generation
# ============================================================================
def example_memory_optimization():
"""
Demonstrates memory optimization techniques for limited VRAM
Useful for running on consumer GPUs
"""
print("\n" + "="*70)
print("EXAMPLE 8: Memory-Optimized Generation")
print("="*70)
model_id = "OpenTrouter/Trouter-Imagine-1"
pipe = StableDiffusionPipeline.from_pretrained(
model_id,
torch_dtype=torch.float16
).to("cuda")
# Enable all memory optimizations
print("Enabling memory optimizations...")
pipe.enable_attention_slicing()
pipe.enable_vae_slicing()
# For very limited VRAM, enable CPU offload
# pipe.enable_model_cpu_offload()
# Try xformers if available
try:
pipe.enable_xformers_memory_efficient_attention()
print(" ✓ xformers enabled")
except:
print(" ℹ xformers not available")
prompt = "detailed cityscape at sunset, skyscrapers, urban photography"
# Generate high resolution with optimizations
print("Generating 1024x1024 image with optimizations...")
image = pipe(
prompt,
width=1024,
height=1024,
num_inference_steps=30,
guidance_scale=7.5
).images[0]
image.save("example8_optimized_1024.png")
print("✓ High-resolution generation with optimizations complete")
# ============================================================================
# EXAMPLE 9: Automated Prompt Generation and Testing
# ============================================================================
def example_automated_prompts():
"""
Automatically generate and test multiple prompt combinations
Useful for finding optimal prompt formulations
"""
print("\n" + "="*70)
print("EXAMPLE 9: Automated Prompt Generation")
print("="*70)
model_id = "OpenTrouter/Trouter-Imagine-1"
pipe = StableDiffusionPipeline.from_pretrained(
model_id,
torch_dtype=torch.float16
).to("cuda")
# Build prompts from components
subjects = ["a dragon", "a spaceship", "a castle"]
settings = ["in space", "on a mountain", "underwater"]
styles = ["cyberpunk style", "fantasy art", "photorealistic"]
qualities = ["highly detailed", "4k", "masterpiece"]
print("Generating combinations...")
output_dir = Path("example9_automated")
output_dir.mkdir(exist_ok=True)
for i, subject in enumerate(subjects):
for j, setting in enumerate(settings):
style = random.choice(styles)
quality = random.choice(qualities)
prompt = f"{subject} {setting}, {style}, {quality}"
print(f" Generating: {prompt[:60]}...")
image = pipe(
prompt,
num_inference_steps=25,
guidance_scale=7.5
).images[0]
filename = output_dir / f"combo_{i}_{j}.png"
image.save(filename)
print(f"✓ Generated {len(subjects) * len(settings)} combinations")
# ============================================================================
# EXAMPLE 10: Image Series Generation (Storytelling)
# ============================================================================
def example_image_series():
"""
Generate a series of related images telling a story
Demonstrates consistency in sequential generation
"""
print("\n" + "="*70)
print("EXAMPLE 10: Image Series (Storytelling)")
print("="*70)
model_id = "OpenTrouter/Trouter-Imagine-1"
pipe = StableDiffusionPipeline.from_pretrained(
model_id,
torch_dtype=torch.float16
).to("cuda")
# Story sequence
story_prompts = [
"a young wizard finding a mysterious glowing orb in a cave, fantasy art, dramatic lighting",
"the wizard holding the glowing orb as magic energy swirls around him, fantasy art, detailed",
"the wizard casting a powerful spell with the orb, energy beams, magical effects, fantasy art",
"the wizard standing victorious as the orb floats above his hand, epic scene, fantasy art"
]
output_dir = Path("example10_story_series")
output_dir.mkdir(exist_ok=True)
print(f"Generating {len(story_prompts)}-part story sequence...")
for i, prompt in enumerate(story_prompts, 1):
print(f" Scene {i}/{len(story_prompts)}: {prompt[:50]}...")
image = pipe(
prompt,
num_inference_steps=35,
guidance_scale=8.0
).images[0]
# Add scene number to image
draw = ImageDraw.Draw(image)
try:
# Try to load a font, fall back to default if not available
font = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 40)
except:
font = ImageFont.load_default()
draw.text((20, 20), f"Scene {i}", fill="white", font=font)
filename = output_dir / f"scene_{i:02d}.png"
image.save(filename)
print("✓ Story series generation complete")
# ============================================================================
# EXAMPLE 11: Quality vs Speed Benchmark
# ============================================================================
def example_quality_speed_benchmark():
"""
Benchmark different quality settings and their generation times
Helps users choose optimal settings for their use case
"""
print("\n" + "="*70)
print("EXAMPLE 11: Quality vs Speed Benchmark")
print("="*70)
model_id = "OpenTrouter/Trouter-Imagine-1"
pipe = StableDiffusionPipeline.from_pretrained(
model_id,
torch_dtype=torch.float16
).to("cuda")
pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config)
prompt = "detailed portrait of a knight in armor, medieval, dramatic lighting"
presets = {
"draft": {"steps": 15, "resolution": 512, "guidance": 6.0},
"balanced": {"steps": 25, "resolution": 512, "guidance": 7.5},
"quality": {"steps": 40, "resolution": 768, "guidance": 8.0},
"maximum": {"steps": 50, "resolution": 1024, "guidance": 9.0}
}
results = {}
for preset_name, settings in presets.items():
print(f"\nTesting {preset_name} preset:")
print(f" Resolution: {settings['resolution']}x{settings['resolution']}")
print(f" Steps: {settings['steps']}")
print(f" Guidance: {settings['guidance']}")
start_time = time.time()
image = pipe(
prompt,
width=settings['resolution'],
height=settings['resolution'],
num_inference_steps=settings['steps'],
guidance_scale=settings['guidance']
).images[0]
elapsed = time.time() - start_time
results[preset_name] = elapsed
image.save(f"example11_preset_{preset_name}.png")
print(f" ✓ Generated in {elapsed:.2f}s")
print("\n" + "="*70)
print("BENCHMARK RESULTS:")
print("="*70)
for preset, time_taken in results.items():
print(f"{preset:>12}: {time_taken:>6.2f}s")
print("✓ Quality vs speed benchmark complete")
# ============================================================================
# EXAMPLE 12: Professional Workflow - Product Photography
# ============================================================================
def example_product_photography():
"""
Generate professional product photography shots
Demonstrates commercial use case
"""
print("\n" + "="*70)
print("EXAMPLE 12: Professional Product Photography")
print("="*70)
model_id = "OpenTrouter/Trouter-Imagine-1"
pipe = StableDiffusionPipeline.from_pretrained(
model_id,
torch_dtype=torch.float16
).to("cuda")
products = [
"luxury watch with leather strap on marble surface",
"modern smartphone with sleek design on white background",
"artisanal coffee cup with latte art on wooden table",
"designer sunglasses with reflection of sunset",
"premium headphones with soft studio lighting"
]
base_prompt_additions = "professional product photography, commercial, high-end, 4k, studio lighting, detailed"
negative_prompt = "low quality, blurry, amateur, cluttered, distorted, watermark"
output_dir = Path("example12_product_photos")
output_dir.mkdir(exist_ok=True)
print("Generating professional product photos...")
for i, product in enumerate(products, 1):
full_prompt = f"{product}, {base_prompt_additions}"
print(f" Product {i}/{len(products)}: {product}")
image = pipe(
prompt=full_prompt,
negative_prompt=negative_prompt,
width=768,
height=768,
num_inference_steps=40,
guidance_scale=8.5
).images[0]
filename = output_dir / f"product_{i:02d}.png"
image.save(filename)
print("✓ Professional product photography complete")
# ============================================================================
# EXAMPLE 13: Advanced - Image Grid Comparison
# ============================================================================
def example_image_grid():
"""
Create comparison grids showing different parameters
Useful for presentations and documentation
"""
print("\n" + "="*70)
print("EXAMPLE 13: Image Grid Comparison")
print("="*70)
model_id = "OpenTrouter/Trouter-Imagine-1"
pipe = StableDiffusionPipeline.from_pretrained(
model_id,
torch_dtype=torch.float16
).to("cuda")
prompt = "a red sports car on mountain road, sunset"
guidance_scales = [5.0, 7.5, 10.0, 12.5]
print("Generating images for grid...")
images = []
for guidance in guidance_scales:
print(f" Guidance scale: {guidance}")
image = pipe(
prompt,
guidance_scale=guidance,
num_inference_steps=30,
width=512,
height=512
).images[0]
# Add label
draw = ImageDraw.Draw(image)
draw.text((10, 10), f"Guidance: {guidance}", fill="white")
images.append(image)
# Create 2x2 grid
grid = Image.new('RGB', (1024, 1024))
for i, img in enumerate(images):
x = (i % 2) * 512
y = (i // 2) * 512
grid.paste(img, (x, y))
grid.save("example13_comparison_grid.png")
print("✓ Comparison grid created")
# ============================================================================
# EXAMPLE 14: Batch Processing from JSON Config
# ============================================================================
def example_json_batch_processing():
"""
Process multiple generations from a JSON configuration file
Useful for automated workflows and reproducible results
"""
print("\n" + "="*70)
print("EXAMPLE 14: JSON Batch Processing")
print("="*70)
# Create example config
config = {
"model_id": "OpenTrouter/Trouter-Imagine-1",
"output_dir": "example14_json_batch",
"default_params": {
"num_inference_steps": 30,
"guidance_scale": 7.5,
"width": 512,
"height": 512
},
"generations": [
{
"prompt": "sunset over ocean, peaceful scene",
"negative_prompt": "stormy, dark, gloomy",
"filename": "peaceful_sunset.png"
},
{
"prompt": "cyberpunk alley with neon signs",
"negative_prompt": "daytime, bright, clean",
"guidance_scale": 8.5,
"filename": "cyberpunk_alley.png"
},
{
"prompt": "fantasy castle on floating island",
"negative_prompt": "modern, realistic",
"width": 768,
"height": 768,
"num_inference_steps": 40,
"filename": "floating_castle.png"
}
]
}
# Save config
config_path = "example14_config.json"
with open(config_path, 'w') as f:
json.dump(config, indent=2, fp=f)
print(f"Config saved to {config_path}")
# Load and process
model_id = config["model_id"]
pipe = StableDiffusionPipeline.from_pretrained(
model_id,
torch_dtype=torch.float16
).to("cuda")
output_dir = Path(config["output_dir"])
output_dir.mkdir(exist_ok=True)
default_params = config["default_params"]
print(f"\nProcessing {len(config['generations'])} generations...")
for i, gen_config in enumerate(config["generations"], 1):
# Merge with defaults
params = {**default_params, **gen_config}
prompt = params.pop("prompt")
filename = params.pop("filename")
negative_prompt = params.pop("negative_prompt", "")
print(f" {i}/{len(config['generations'])}: {filename}")
image = pipe(
prompt=prompt,
negative_prompt=negative_prompt,
**params
).images[0]
image.save(output_dir / filename)
print("✓ JSON batch processing complete")
# ============================================================================
# EXAMPLE 15: Advanced - Reproducible Research Workflow
# ============================================================================
def example_reproducible_research():
"""
Demonstrates best practices for reproducible research
Includes logging, seed management, and metadata storage
"""
print("\n" + "="*70)
print("EXAMPLE 15: Reproducible Research Workflow")
print("="*70)
import hashlib
from datetime import datetime
model_id = "OpenTrouter/Trouter-Imagine-1"
pipe = StableDiffusionPipeline.from_pretrained(
model_id,
torch_dtype=torch.float16
).to("cuda")
output_dir = Path("example15_research")
output_dir.mkdir(exist_ok=True)
# Experiment configuration
experiment = {
"experiment_id": hashlib.md5(str(datetime.now()).encode()).hexdigest()[:8],
"timestamp": datetime.now().isoformat(),
"model": model_id,
"hypothesis": "Testing effect of guidance scale on image fidelity",
"prompt": "a scientist in a laboratory, professional photography",
"negative_prompt": "blurry, low quality, distorted",
"fixed_seed": 12345,
"variable_parameter": "guidance_scale",
"test_values": [5.0, 7.5, 10.0, 12.5, 15.0],
"fixed_parameters": {
"width": 512,
"height": 512,
"num_inference_steps": 35
}
}
# Save experiment config
config_file = output_dir / f"experiment_{experiment['experiment_id']}.json"
with open(config_file, 'w') as f:
json.dump(experiment, indent=2, fp=f)
print(f"Experiment ID: {experiment['experiment_id']}")
print(f"Testing: {experiment['hypothesis']}")
# Run experiment
results = []
for value in experiment['test_values']:
print(f"\n Testing {experiment['variable_parameter']} = {value}")
generator = torch.Generator("cuda").manual_seed(experiment['fixed_seed'])
start_time = time.time()
image = pipe(
prompt=experiment['prompt'],
negative_prompt=experiment['negative_prompt'],
guidance_scale=value,
generator=generator,
**experiment['fixed_parameters']
).images[0]
generation_time = time.time() - start_time
# Save with metadata
filename = f"{experiment['experiment_id']}_guidance_{value}.png"
image.save(output_dir / filename)
result = {
"parameter_value": value,
"filename": filename,
"generation_time": generation_time,
"seed_used": experiment['fixed_seed']
}
results.append(result)
print(f" Generated in {generation_time:.2f}s")
# Save results
experiment['results'] = results
with open(config_file, 'w') as f:
json.dump(experiment, indent=2, fp=f)
print(f"\n✓ Experiment complete. Results saved to {config_file}")
# ============================================================================
# Main Function - Run All Examples
# ============================================================================
def run_all_examples():
"""Run all examples (warning: this will take a long time!)"""
examples = [
("Basic Generation", example_basic_generation),
("Negative Prompts", example_negative_prompts),
("Parameter Exploration", example_parameter_exploration),
("Multi-Resolution", example_multi_resolution),
("Seed Variations", example_seed_variations),
("Style Comparison", example_style_comparison),
("Scheduler Comparison", example_scheduler_comparison),
("Memory Optimization", example_memory_optimization),
("Automated Prompts", example_automated_prompts),
("Image Series", example_image_series),
("Quality/Speed Benchmark", example_quality_speed_benchmark),
("Product Photography", example_product_photography),
("Image Grid", example_image_grid),
("JSON Batch Processing", example_json_batch_processing),
("Reproducible Research", example_reproducible_research)
]
print("\n" + "="*70)
print("TROUTER-IMAGINE-1 COMPREHENSIVE EXAMPLES")
print("="*70)
print(f"\nTotal examples: {len(examples)}")
print("Warning: Running all examples will take considerable time and GPU resources")
print("="*70)
for i, (name, func) in enumerate(examples, 1):
try:
print(f"\n[{i}/{len(examples)}] Running: {name}")
func()
except Exception as e:
print(f"ERROR in {name}: {e}")
continue
print("\n" + "="*70)
print("ALL EXAMPLES COMPLETED")
print("="*70)
if __name__ == "__main__":
import sys
if len(sys.argv) > 1:
example_num = sys.argv[1]
examples_map = {
"1": example_basic_generation,
"2": example_negative_prompts,
"3": example_parameter_exploration,
"4": example_multi_resolution,
"5": example_seed_variations,
"6": example_style_comparison,
"7": example_scheduler_comparison,
"8": example_memory_optimization,
"9": example_automated_prompts,
"10": example_image_series,
"11": example_quality_speed_benchmark,
"12": example_product_photography,
"13": example_image_grid,
"14": example_json_batch_processing,
"15": example_reproducible_research,
"all": run_all_examples
}
if example_num in examples_map:
examples_map[example_num]()
else:
print(f"Unknown example: {example_num}")
print("Available examples: 1-15, all")
else:
print("\nUsage: python examples.py <example_number>")
print("\nAvailable examples:")
print(" 1 - Basic Generation")
print(" 2 - Negative Prompts")
print(" 3 - Parameter Exploration")
print(" 4 - Multi-Resolution")
print(" 5 - Seed Variations")
print(" 6 - Style Comparison")
print(" 7 - Scheduler Comparison")
print(" 8 - Memory Optimization")
print(" 9 - Automated Prompts")
print(" 10 - Image Series (Storytelling)")
print(" 11 - Quality vs Speed Benchmark")
print(" 12 - Professional Product Photography")
print(" 13 - Image Grid Comparison")
print(" 14 - JSON Batch Processing")
print(" 15 - Reproducible Research Workflow")
print(" all - Run all examples (takes a long time!)")
print("\nExample: python examples.py 1")