Instructions to use OpenTrouter/Trouter-Imagine-1 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Diffusers
How to use OpenTrouter/Trouter-Imagine-1 with Diffusers:
pip install -U diffusers transformers accelerate
import torch from diffusers import DiffusionPipeline # switch to "mps" for apple devices pipe = DiffusionPipeline.from_pretrained("OpenTrouter/Trouter-Imagine-1", dtype=torch.bfloat16, device_map="cuda") prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" image = pipe(prompt).images[0] - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- Draw Things
- DiffusionBee
Download examples.py from OpenTrouter/Trouter-Imagine-1: direct link, hf CLI and curl.
- Browser
- Download file 31.7 kB
-
https://huggingface.co/OpenTrouter/Trouter-Imagine-1/resolve/main/examples.py
- Command line
-
hf download hf://OpenTrouter/Trouter-Imagine-1/examples.py
-
curl -L -o examples.py https://huggingface.co/OpenTrouter/Trouter-Imagine-1/resolve/main/examples.py
31.7 kB
| #!/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") |