A genetic algorithm-based tool that creates photomosaic collages by arranging a collection of source images to visually approximate a target image.
- Advanced Genetic Algorithm: Multi-metric fitness evaluation with color, luminance, texture, and edge matching
- GPU Acceleration: CUDA support with CuPy for massive performance gains (1000x+ speedup)
- Multi-GPU Support: Utilize multiple GPUs simultaneously for extreme workloads
- Comprehensive Diversity Management: Advanced diversity preservation with fitness sharing, spatial awareness, and intelligent restart
- Real-time Diversity Dashboard: Live monitoring with alerts and intervention recommendations
- Complete Lineage Tracking: Genealogical analysis with 16 visualization plots and fitness component inheritance
- Checkpoint System: Crash recovery with resume capability for long-running simulations
- Island Model Evolution: Multi-population with migration for enhanced diversity
- Adaptive Parameters: Dynamic parameter adjustment based on diversity state
- Configurable Parameters: Flexible grid sizes, population settings, and genetic operators
- Performance Optimized: Parallel processing, intelligent caching, and memory management
- Multiple Output Formats: PNG, JPEG, TIFF with quality control
- Preset Configurations: Demo, quick, balanced, high-quality, GPU, and extreme modes
- Progress Monitoring: Real-time fitness tracking and generation statistics
- Enhanced Diagnostics: 10 visual reports + 3 data files with comprehensive diversity and evolution analysis
- Animated Evolution: Generate GIFs with generation numbers showing algorithm progression
- Organized Output: Automatic timestamped directories for clean workspace management
- CLI Interface: User-friendly command-line tool with comprehensive options
# Clone the repository
git clone https://github.com/yourusername/image-collage-generator.git
cd image-collage-generator
# Install the package
pip install -e .
# For GPU acceleration (requires CUDA-compatible GPU)
pip install -e ".[gpu]"
# For visualization and diagnostics (includes matplotlib, seaborn, pandas)
pip install -e ".[visualization]"
# Complete installation with all features
pip install -e ".[gpu,visualization,dev]"# Ultra-fast demo with all outputs
image-collage demo target.jpg source_images/
# Demo with GPU acceleration and advanced features
image-collage demo target.jpg source_images/ --gpu --verbose \
--track-lineage --enable-dashboard --save-checkpointsThis creates organized output in demo_output_YYYYMMDD_HHMMSS/:
- 📸
collage.jpg- Final collage result - 🎬
evolution.gif- Evolution animation with generation numbers - 📊
comparison.jpg- Target vs result side-by-side - ⚙️
config.yaml- Configuration parameters used - 📈
diagnostics/- 10 visual reports + 3 data files (with --diagnostics) - 🧬
lineage/- 16 lineage analysis plots (with --track-lineage) - 💾
checkpoints/- Crash recovery checkpoints (with --save-checkpoints)
# Generate a collage using balanced settings
image-collage generate target.jpg source_images/ output.png
# Demo preset for ultra-fast testing
image-collage generate target.jpg source_images/ output.png --preset demo
# Use quick preset for faster generation
image-collage generate target.jpg source_images/ output.png --preset quick
# GPU-accelerated high quality (requires dual RTX 4090s or similar)
image-collage generate target.jpg source_images/ output.png --preset gpu
# Ultimate quality with all advanced features
image-collage generate target.jpg source_images/ output.png \
--preset extreme \
--save-animation evolution.gif \
--save-comparison comparison.jpg \
--diagnostics analysis_folder/ \
--track-lineage lineage_analysis/ \
--save-checkpoints \
--enable-dashboard \
--enable-fitness-sharing \
--enable-restart \
--track-components \
--gpu \
--gpu-devices "0,1"
# High quality with custom parameters
image-collage generate target.jpg source_images/ output.png \
--preset high \
--grid-size 100 100 \
--generations 2000 \
--no-duplicatesNote:
- Source images are automatically discovered recursively in all subdirectories
- All outputs are organized in timestamped
output_YYYYMMDD_HHMMSS/directories - Evolution animations now include generation number titles
from image_collage import CollageGenerator
from image_collage.config import PresetConfigs
# Create generator with balanced preset
config = PresetConfigs.balanced()
generator = CollageGenerator(config)
# Load images
generator.load_target("target.jpg")
source_count = generator.load_sources("source_images/")
# Generate collage with progress callback
def progress(generation, fitness, preview):
print(f"Generation {generation}: Fitness = {fitness:.6f}")
# Generate with all features enabled
result = generator.generate(
callback=progress,
save_evolution=True, # Enable animation frames
evolution_interval=50, # Save every 50th generation
diagnostics_folder="analysis/" # Enable comprehensive diagnostics
)
# Save outputs
generator.export(result, "output.png", "PNG")
# Save animation with generation numbers if frames were collected
if result.evolution_frames:
generator.renderer.create_evolution_animation(
result.evolution_frames, "evolution.gif",
generation_numbers=result.evolution_generation_numbers
)
# Create comparison image
generator.renderer.create_comparison_image(
generator.target_image, result.collage_image, "comparison.jpg"
)
print(f"Generated in {result.generations_used} generations")
print(f"Final fitness: {result.fitness_score:.6f}")
print(f"Processing time: {result.processing_time:.2f} seconds")# Generate diagnostics without creating a collage
result = generator.generate(diagnostics_folder="detailed_analysis/")
# The analysis folder now contains:
# - 8 visualization charts
# - JSON data for custom analysis
# - CSV file for spreadsheet import
# - Human-readable summary report- Demo: Ultra-fast (15x20 grid, 30 generations) - Perfect for testing and demonstrations
- Quick: Low resolution (20x20 grid, 100 generations) - Fast preview generation
- Balanced: Medium resolution (50x50 grid, 1000 generations) - Good quality/speed balance
- High: High resolution (100x100 grid, 1500+ generations) - Enhanced quality
- GPU: GPU-accelerated (150x150 grid, 3000 generations) - Requires CUDA GPU
- Extreme: Maximum quality (300x300 grid, 5000 generations) - Ultimate detail
Generate comprehensive analysis of the genetic algorithm evolution process:
# Basic diagnostics
image-collage generate target.jpg sources/ output.jpg --diagnostics analysis/
# Complete analysis with all outputs
image-collage generate target.jpg sources/ output.jpg \
--preset gpu \
--save-animation evolution.gif \
--save-comparison comparison.jpg \
--diagnostics comprehensive_analysis/The diagnostics folder contains 10 visualization plots + 3 data files:
Visual Analysis (10 plots):
dashboard.png- Comprehensive overview with properly aligned statisticsfitness_evolution.png- Dual-shaded fitness progression (best-average AND average-worst regions)fitness_distribution.png- Population diversity and convergence analysis (4 subplots)genetic_operations.png- Operation effectiveness with clear explanations (4 subplots)performance_metrics.png- Accurate success rate calculations and timing analysis (4 subplots)population_analysis.png- Selection pressure analysis with definition and tooltip (4 subplots)evolution_grid.png- Color-coded individual progression with explanations and color barcomprehensive_diversity.png- Advanced diversity metrics (Hamming, entropy, clustering) (6 subplots)spatial_diversity.png- Spatial pattern analysis for image collages (9 subplots)advanced_metrics.png- Parameter adaptation and evolution trends (4 subplots)
Data Files (3 files):
diagnostics_data.json- Complete structured metrics for custom analysisgeneration_data.csv- Per-generation data for spreadsheet import with all diversity metricssummary.txt- Human-readable performance summary with insights
With --track-lineage, generates 16 genealogical visualization plots:
Lineage Reports (16 plots total):
lineage_dashboard.png- Comprehensive lineage overviewlineage_trees.png- Genealogical tree structurespopulation_dynamics.png- Population size and diversity evolutiondiversity_evolution.png- Diversity metrics over timefitness_lineages.png- Fitness inheritance patternsbirth_method_distribution.png- Genetic operation success analysisage_distribution.png- Individual survival patternsselection_pressure.png- Selection dynamics over timelineage_dominance.png- Dominant lineage identificationgenealogy_network.png- Complete ancestry networkmigration_patterns.png- Inter-population migration (island model)survival_curves.png- Individual and lineage survival analysisevolutionary_timeline.png- Comprehensive evolution timelinefitness_component_evolution.png- Individual fitness component trackingfitness_component_inheritance.png- Component heritability analysiscomponent_breeding_success.png- Top performers by fitness component
- Fitness Evolution: Best, average, worst with dual-shaded visualization regions
- Genetic Operations: Accurate success rates based on estimated total operations attempted
- Population Dynamics: Selection pressure (Avg - Best fitness) with clear definition
- Comprehensive Diversity: Hamming distance, entropy, clustering, spatial patterns
- Fitness Components: Individual tracking of color, luminance, texture, edge components
- Lineage Analysis: Complete genealogical tracking with inheritance patterns
- Spatial Diversity: Pattern entropy, clustering, edge patterns, quadrant analysis
- Performance: Processing time trends, evolution efficiency (fitness/second)
- Algorithm Behavior: Stagnation detection, convergence analysis, diversity tracking
- Success Metrics: Beneficial mutation/crossover rates, final convergence calculations
- Adaptive Parameters: Real-time parameter adjustment based on diversity state
- Intervention Systems: Automatic restart, fitness sharing, migration events
Create a YAML configuration file:
# === BASIC SETTINGS ===
basic_settings:
grid_size: [75, 75]
tile_size: [32, 32]
allow_duplicate_tiles: true
enable_diagnostics: false
diagnostics_output_dir: null
enable_lineage_tracking: false
lineage_output_dir: null
# === GENETIC ALGORITHM PARAMETERS ===
genetic_algorithm:
# Core GA Parameters
population_size: 150
max_generations: 1200
crossover_rate: 0.85
mutation_rate: 0.06
elitism_rate: 0.12
# Termination Criteria
convergence_threshold: 0.001
early_stopping_patience: 50
target_fitness: 0.0
# === FITNESS EVALUATION ===
fitness_evaluation:
color_weight: 0.45
luminance_weight: 0.25
texture_weight: 0.20
edges_weight: 0.10
# === PERFORMANCE SETTINGS ===
performance:
enable_parallel_processing: true
num_processes: 8
# === GPU ACCELERATION ===
gpu_acceleration:
enable_gpu: false
gpu_devices: [0, 1]The example_configs/ directory includes practical configuration examples:
my_config.yaml- Custom configuration example from the GETTING_STARTED guideisland_config.yaml- Multi-population island model with migrationexpert_config.yaml- Expert configuration with ALL advanced features enabled
Use with CLI:
# Using custom YAML config from GETTING_STARTED guide
image-collage generate target.jpg sources/ output.png --config example_configs/my_config.yaml
# Island model evolution with migration
image-collage generate target.jpg sources/ output.png --config example_configs/island_config.yaml
# Expert mode with all advanced features
image-collage generate target.jpg sources/ expert_result.png --config example_configs/expert_config.yaml \
--save-animation evolution.gif --diagnostics analysis/ --track-lineage lineage/ --save-checkpoints
# Export preset configurations
image-collage export-config balanced_config.yaml --preset balanced
image-collage export-config gpu_config.yaml --preset gpuimage-collage generate [OPTIONS] TARGET_IMAGE SOURCE_DIRECTORY OUTPUT_PATHOptions:
--preset: Choose quality preset (quick/balanced/high/gpu/extreme)--config: Use YAML configuration file--grid-size: Grid dimensions (width height)--generations: Maximum generations--population-size: GA population size--mutation-rate: Mutation rate (0.0-1.0)--no-duplicates: Prevent duplicate tiles--edge-blending: Enable smooth transitions--parallel/--no-parallel: Toggle parallel processing--gpu/--no-gpu: Enable GPU acceleration--gpu-devices: Specify GPU devices (e.g., "0,1")--gpu-batch-size: GPU batch size for processing--format: Output format (PNG/JPEG/TIFF)--save-animation: Save evolution GIF with generation number titles--save-comparison: Save target vs result side-by-side comparison--diagnostics: Generate 10 visual reports + 3 data files with comprehensive analysis--track-lineage: Enable complete lineage tracking with 16 genealogical plots--save-checkpoints: Enable crash recovery checkpoint system--resume-from: Resume from checkpoint directory--enable-dashboard: Enable real-time diversity monitoring dashboard--enable-fitness-sharing: Enable fitness sharing for diversity preservation--enable-restart: Enable intelligent population restart system--track-components: Track individual fitness component evolution--verbose: Enable detailed logging and output
image-collage analyze TARGET_IMAGE SOURCE_DIRECTORYAnalyzes your target image and source collection to provide optimization recommendations:
Target Image Analysis:
- Resolution and aspect ratio detection
- Optimal grid size recommendations based on aspect ratio
- Portrait/landscape/square format identification
Source Collection Analysis:
- Total source image count
- Grid size recommendations (with duplicate/no-duplicate suggestions)
- Preset recommendations based on collection size:
- Small collections (< 400 images):
quickpreset - Large collections (> 2000 images):
highpreset - Medium collections:
balancedpreset
- Small collections (< 400 images):
Example Output:
Target Image Analysis:
Resolution: 1920x1080 pixels
Aspect ratio: 1.778 (landscape)
Source Collection Analysis:
Total images: 1,247
Recommended grid sizes (aspect ratio 1.778):
36x20 (720 tiles, no duplicates, ✓ good aspect match)
71x40 (2,840 tiles, with duplicates, ✓ good aspect match)
107x60 (6,420 tiles, with duplicates, ⚠ aspect mismatch)
Recommendation: Use 'balanced' preset
Use this command before generation to optimize your settings for the best results.
image-collage resume CHECKPOINT_DIRECTORYResume a previously interrupted evolution from checkpoint files. Automatically detects configuration and continues from the last saved generation.
image-collage export-config output.yaml --preset balancedimage-collage generate-color-tiles NUM_TILES OUTPUT_DIRECTORY [OPTIONS]Creates a diverse set of single-color tiles spanning the RGB spectrum. Perfect for:
- Creating geometric/abstract collages with pure colors
- Testing the algorithm with controlled color palettes
- Educational demonstrations of color theory
Options:
--tile-size: Size of generated tiles (width height) - default: 32x32--prefix: Filename prefix for generated tiles - default: "color_tile"--preview: Save color palette preview image--analyze: Show color distribution analysis
Examples:
# Generate 100 diverse color tiles
image-collage generate-color-tiles 100 my_colors/
# Generate with custom size and preview
image-collage generate-color-tiles 500 tiles/ --tile-size 64 64 --preview palette.png
# Generate with analysis
image-collage generate-color-tiles 50 colors/ --analyzeThe fitness evaluation combines multiple metrics:
- Color Similarity (40%): CIEDE2000 color difference calculation
- Luminance Matching (25%): Brightness distribution comparison
- Texture Correlation (20%): Local binary pattern analysis
- Edge Preservation (15%): Sobel operator edge detection
- Selection: Tournament selection with configurable tournament size
- Crossover: Two-point crossover with position swapping
- Mutation: Random tile replacement and position swapping
- Elitism: Preserves top individuals across generations
The diverse color generation algorithm ensures optimal RGB spectrum coverage:
- Key Colors: Always includes fundamental colors (black, white, primary, secondary)
- HSV Distribution: Uses golden ratio spacing in HSV space for perceptual uniformity
- Saturation/Value Variation: Combines different brightness and saturation levels
- Perceptual Spacing: Maximizes visual distinctiveness between generated colors
This approach produces more visually diverse results than random color generation.
- CPU: Multi-core recommended (4+ cores optimal)
- RAM: 8GB minimum, 16GB recommended
- Storage: SSD recommended for image I/O
- Use appropriate grid size for your source collection
- Enable parallel processing for faster computation
- Consider using quick preset for initial testing
- Larger source collections generally produce better results
# Create a family portrait mosaic from organized photo collection
# This will search family_photos/ and all subdirectories for images
image-collage generate family_portrait.jpg family_photos/ mosaic.png \
--grid-size 80 80 \
--no-duplicates \
--edge-blending
# Example directory structure:
# family_photos/
# ├── vacations/
# │ ├── 2023/
# │ └── 2024/
# ├── birthdays/
# └── holidays/# Generate a diverse set of 200 color tiles
image-collage generate-color-tiles 200 color_tiles/ --tile-size 48 48
# Create a geometric collage using only pure colors
image-collage generate target_portrait.jpg color_tiles/ geometric_result.png \
--preset balanced \
--grid-size 60 60 \
--no-duplicates
# Generate with preview and analysis
image-collage generate-color-tiles 100 tiles/ \
--preview color_palette.png \
--analyzefrom image_collage import CollageGenerator
from image_collage.config import CollageConfig, FitnessWeights
config = CollageConfig()
config.fitness_weights = FitnessWeights(
color=0.6, # Prioritize color matching
luminance=0.3, # Secondary luminance
texture=0.1, # Minimal texture
edges=0.0 # Ignore edges
)
generator = CollageGenerator(config)
# ... generate collagepytest image_collage/tests/black image_collage/
flake8 image_collage/
mypy image_collage/MIT License - see LICENSE file for details.
Contributions welcome! Please read CONTRIBUTING.md for guidelines.