# Dynamic Image Generation - Quick Start ## What Was Created I've built a complete server-side image generation system that can dynamically create product images with different colors and configurations. Here's what's included: ### Files Created: 1. **`app/image_generator.py`** - Core image processing logic using PIL/Pillow 2. **`app/data/image_configs.json`** - Configuration for COBRAI product with colorable regions 3. **`app/templates/image_test.html`** - Test page to demonstrate the API 4. **`information/DYNAMIC_IMAGE_API.md`** - Complete documentation ### Files Modified: 1. **`app/app.py`** - Added 4 new API endpoints 2. **`app/requirements.txt`** - Added Pillow dependency ## ⚠️ Important: Image File You need to manually save the storm door image as: ``` app/images/cobrai.jpg ``` I created a placeholder file, but you need to replace it with the actual image from your screenshot (the white storm door with two screen panels). ## Setup & Testing ### 1. Install Dependencies ```bash cd app pip install Pillow ``` ### 2. Add the Image Save the storm door image as `app/images/cobrai.jpg` ### 3. Start the Server ```bash python app.py ``` ### 4. Test the API #### Option A: Visit Test Page Open browser to: ``` http://localhost:8080/image-test ``` This interactive page lets you: - Select colors (White, Black, Bronze, Sandstone) - Choose hinge side (Left/Right) - See both image rendering methods - View the product configuration - Clear the cache #### Option B: Direct URL Test Visit these URLs in your browser: ``` http://localhost:8080/api/product-image/cobrai?color=black&hinge=right http://localhost:8080/api/product-image/cobrai?color=bronze&hinge=left http://localhost:8080/api/product-config/cobrai ``` #### Option C: Using cURL ```bash # Get black door image curl http://localhost:8080/api/product-image/cobrai?color=black > test_black.png # Get bronze left-hinge door curl http://localhost:8080/api/product-image/cobrai?color=bronze&hinge=left > test_bronze_left.png # Get configuration curl http://localhost:8080/api/product-config/cobrai # Get as JSON with base64 curl http://localhost:8080/api/product-image/cobrai?color=white&format=json ``` ## How It Works ### The Configuration The `image_configs.json` file defines: 1. **Colorable Regions** - Rectangular areas to recolor: - Left frame: [0, 0] to [100, 1450] - Right frame: [620, 0] to [720, 1450] - Top rail: [0, 0] to [720, 80] - Middle rail: [0, 590] to [720, 680] - Bottom panel: [100, 1090] to [620, 1450] 2. **Available Colors**: - White: RGB [255, 255, 255] - Black: RGB [30, 30, 30] - Bronze: RGB [110, 80, 50] - Sandstone: RGB [210, 190, 165] 3. **Hardware Positions** - Where handles go (placeholder for future): - Right hinge: position [580, 730] - Left hinge: position [140, 730] (flipped) ### The Process 1. Load white storm door image 2. For each colorable region: - Calculate pixel brightness - Apply target color while preserving brightness - This maintains shadows/highlights 3. Optionally flip for left hinge 4. Cache the result for fast subsequent requests ## API Endpoints ### 1. Generate Image ``` GET /api/product-image/?color=&hinge= ``` **Parameters:** - `color`: white, black, bronze, sandstone - `hinge`: left, right - `format`: image (default) or json - `cache`: true (default) or false **Returns:** PNG image or JSON with base64 ### 2. Get Configuration ``` GET /api/product-config/ ``` **Returns:** JSON with all product config (colors, regions, etc.) ### 3. Clear Cache ``` POST /api/clear-image-cache ``` **Body (optional):** ```json {"productCode": "cobrai"} ``` ## Adjusting the Configuration ### If you need to change color regions: 1. Open the image in an image editor (Paint, Photoshop, etc.) 2. Note the pixel coordinates of the area you want to color 3. Edit `app/data/image_configs.json`: ```json { "name": "frame", "topLeft": [x1, y1], "bottomRight": [x2, y2] } ``` ### If you need to adjust colors: Edit the RGB values in `availableColors`: ```json "bronze": { "rgb": [110, 80, 50], // Adjust these numbers "name": "Bronze" } ``` ### If hardware images exist: Place hardware PNGs in `app/images/hardware/` and update config: ```json "hardwarePositions": { "handle_right": { "x": 580, "y": 730, "image": "images/hardware/handle-lever.png" } } ``` ## Next Steps ### To integrate into your product finder: Replace the layered image system with dynamic generation: ```javascript // Instead of static layers imageDisplayHtml = ``; // Or update existing image on change function updateProductPreview(productCode) { const color = document.getElementById('config-color').value; const hinge = document.querySelector('[name="hinge-location"]:checked').value; document.getElementById('product-image').src = `/api/product-image/${productCode}?color=${color}&hinge=${hinge}`; } ``` ### To add more products: 1. Take photo of product in white/neutral color 2. Save as `app/images/productcode.jpg` 3. Add configuration to `image_configs.json` 4. Define colorable regions using image editor coordinates 5. Test at `/image-test` ## Troubleshooting **"PIL/Pillow not installed"** ```bash pip install Pillow ``` **"Product cobrai not found"** - Check that image exists at `app/images/cobrai.jpg` - Check that config exists in `image_configs.json` **Colors look weird** - Adjust RGB values in config - Ensure source image is white or neutral - Check that region coordinates are correct **Image not changing** - Try clearing cache - Set `cache=false` in URL parameter - Check browser console for errors ## Performance - **First request**: ~100-300ms (generates and caches) - **Cached requests**: ~10-50ms (serves from cache) - **Cache location**: `app/cache/product_images/` ## Full Documentation See `information/DYNAMIC_IMAGE_API.md` for complete documentation including: - Advanced configuration options - Production deployment tips - Frontend integration examples - Adding glass tinting, textures, etc. - Batch generation scripts