# 🎮 TextureAlchemy - Example Workflows Ready-to-use ComfyUI workflow JSON files for testing and learning. --- ## 📂 Workflow Files ### 01_quick_start_pbr_extraction.json **Fastest PBR Material Extraction** - 6 nodes total **What it does:** - Loads an image - Runs Marigold (appearance + lighting) - Extracts PBR maps (albedo, roughness, metallic, AO) - Saves all maps with auto-naming - Previews all saved maps **Nodes used:** 1. Load Image 2. Marigold Depth Estimation x2 3. PBR Extractor 4. PBR Saver 5. Preview Image **Perfect for:** First-time testing, quick material generation **Expected output:** 4 maps (albedo, roughness, metallic, lighting) saved to `ComfyUI/output/pbr_materials/` --- ### 02_seamless_tiling.json **Tileable Material Creation** - 7 nodes total **What it does:** - Loads texture - Makes it seamlessly tileable - Extracts PBR maps - Saves tileable material set **Nodes used:** 1. Load Image 2. Seamless Tiling Maker 3. Marigold x2 4. PBR Extractor 5. PBR Saver 6. Preview Image **Perfect for:** Game textures, repeating materials **Parameters:** - Tiling method: `blend_edges` (best quality) - Blend width: `0.1` (10% edge blending) **Outputs:** - Seamless tileable texture - **Edge mask** - White mask showing seam regions (perfect for inpainting cleanup!) **Expected output:** Seamless tileable PBR material set **Pro tip:** Use the edge_mask output with inpainting nodes to further clean up any remaining seams! --- ### 03_channel_packing_orm.json **ORM Texture Packing** - 8 nodes total **What it does:** - Extracts PBR maps - Packs AO, Roughness, Metallic into single RGB texture - Saves packed ORM texture (game engine format) **Nodes used:** 1. Load Image 2. Marigold x2 3. PBR Extractor 4. PBR Splitter 5. Channel Packer 6. Save Image 7. Preview Image **Perfect for:** Game engines (Unity/Unreal), VRAM optimization **Format:** ORM_packed.png - Red channel = AO (Ambient Occlusion) - Green channel = Roughness - Blue channel = Metallic **Memory saved:** 66% (3 textures → 1 texture) --- ### 04_color_ramp_stylized.json **Stylized Material with Custom Colors** - 10 nodes total **What it does:** - Extracts PBR material - Uses AO to create color gradient - Applies heat map preset - Replaces albedo with stylized colors - Saves final material **Nodes used:** 1. Load Image 2. Marigold x2 3. PBR Extractor 4. PBR Splitter 5. Gradient Map 6. Color Ramp (interactive!) 7. PBR Combiner 8. PBR Saver 9. Preview Image **Perfect for:** Artistic materials, data visualization, heat maps **Interactive:** Double-click Color Ramp node to edit gradient visually! **Parameters:** - Preset: `heat` (black → red → orange → yellow) - Gradient range: 0.2 to 0.8 - Can customize colors by clicking on Color Ramp ### 05_seamless_with_inpainting.json **Seamless Tiling with Edge Mask for Inpainting** - 6 nodes + notes **What it does:** - Makes texture seamless - Generates edge mask showing seam regions - Provides mask for targeted inpainting cleanup **Nodes used:** 1. Load Image 2. Seamless Tiling Maker 3. Preview Image x2 (result + mask) 4. Note nodes (documentation) **Perfect for:** Creating ultra-clean seamless textures with inpainting **Outputs:** - **Seamless image** - Ready to use or further process - **Edge mask** - White where seams are (use for inpainting) **How the mask helps:** - Shows exactly where edges/seams are located - Connect to inpainting nodes (LaMa, MAG, etc.) - Inpainting targets ONLY the seam areas - Results in cleaner, more perfect tiling **Advanced workflow:** ``` Seamless Tiling → image + edge_mask ↓ ↓ [PBR Extract] + [Inpainting with mask] ↓ Perfect seamless PBR material ``` ### 06_texture_offset_and_tiling.json **Texture Offset & Tiling Preview** - 8 nodes + notes **What it does:** - Makes texture seamless - Tests seamless quality by offsetting by 50% - Creates tiled previews (2x2 and 3x3) - Reveals any remaining seams **Nodes used:** 1. Load Image 2. Seamless Tiling Maker 3. Texture Offset (shift by 0.5 to test seams) 4. Texture Tiler x2 (2x2 and 3x3 previews) 5. Preview Image x2 6. Note node (documentation) **Perfect for:** Testing seamless texture quality thoroughly **How it works:** - **Upper branch:** Offset by 0.5 (half) shifts seams to center - If texture is truly seamless, NO seams will appear - Tiles as 3x3 grid for comprehensive view - **Lower branch:** Direct 2x2 tiling without offset - Shows normal tiling appearance **Why offset by 0.5?** - Moves edge seams to the CENTER of the image - Makes ANY remaining seams immediately visible - Industry-standard technique for testing tileable textures **Texture Offset features:** - `offset_x/y`: -1.0 to 1.0 (fraction of image size) - `rotation`: -360° to 360° (test different orientations) - `wrap_mode`: - **repeat** - Seamless circular wrapping (uses `torch.roll` for offset, tiles 3x3 for rotation) - **clamp** - Extends edge pixels - **mirror** - Reflects at boundaries - `edge_mask_width`: 0.0-0.5 (shows affected/transformed areas) - **NEW OUTPUT:** `edge_mask` - White mask showing where wrapping/rotation affected the image **Texture Tiler features:** - `tile_x/y`: 1-8 (grid size) - `scale_to_input`: **NEW!** Two modes: - **OFF (default):** Output size = input × (tile_x, tile_y) - Creates large preview - **ON:** Output size = input size - Each tile scaled down to fit - Perfect for visualizing repeating patterns at different scales **Tiler Mode Examples:** ``` Input: 512×512, Tiles: 3×3 - scale_to_input OFF → Output: 1536×1536 (see all tiles full-size) - scale_to_input ON → Output: 512×512 (see tiling density/frequency) ``` **Advanced uses:** ``` Texture Offset ├─ offset_x: 0.5 → shift right by half ├─ offset_y: 0.5 → shift down by half ├─ rotation: 45 → test at angle └─ wrap_mode: repeat → seamless wrapping ``` ### 07_texture_tiler_modes.json **Texture Tiler Mode Comparison** - 8 nodes + notes **What it does:** - Demonstrates both Texture Tiler modes side-by-side - Shows difference between large grid vs density preview - Compares 3×3 and 5×5 tiling at same output size **Nodes used:** 1. Load Image (seamless texture) 2. Texture Tiler x3 (different configurations) 3. Preview Image x3 4. Note node (documentation) **Perfect for:** Understanding scale_to_input feature **Comparison:** - **Top preview:** 3×3 tiles, scale OFF → 1536×1536 output (large grid) - **Middle preview:** 3×3 tiles, scale ON → 512×512 output (density view) - **Bottom preview:** 5×5 tiles, scale ON → 512×512 output (high frequency) **Use cases for each mode:** **Scale OFF (default):** - Check seam quality at full resolution - Create large texture sheets - Export high-res tiled versions **Scale ON:** - Preview how dense/frequent pattern appears - Compare different tiling densities (3×3 vs 5×5) - Test visual impact of scale - See how pattern looks when tiled smaller **Example comparison:** ``` Same 512×512 input texture: 3×3, scale OFF → 1536×1536 (see every detail) 3×3, scale ON → 512×512 (normal density) 5×5, scale ON → 512×512 (high density/busy pattern) ``` **Why use scale ON?** - Quickly preview different tiling frequencies - All previews same size = easy comparison - Useful for game textures (how does it look at different UV scales?) ### 08_texture_equalizer_test.json **Texture Equalization - Remove Shadows** - 7 nodes + notes **What it does:** - Removes uneven lighting, shadows, and vignetting from textures - Based on professional Photoshop High Pass + Linear Light technique - Compares different radius settings side-by-side **Nodes used:** 1. Load Image (texture with uneven lighting) 2. Texture Equalizer x2 (radius 100 and radius 50, both using overlay method) 3. Preview Image x4 (original + results + average_color debug) 4. Note node (comprehensive documentation) **Outputs:** - **image** - Equalized result (shadows removed) - **average_color** - Debug output showing extracted average tone **Blend methods:** - **overlay** - Photoshop standard (default, recommended) - **soft_light** - Gentle correction - **linear_light** - Strong correction **Perfect for:** Cleaning photos with shadows, preparing textures for tiling **How the technique works:** Based on [this classic tutorial](https://tolas.wordpress.com/2009/05/26/tutorial-how-to-equalize-textures-in-photoshop/): 1. Extracts average color from texture 2. Applies High Pass filter (isolates details, removes gradients) 3. Uses Linear Light blend mode to normalize lighting 4. Preserves original color hue (optional) **Parameters to experiment with:** **Radius (50-150):** - **50** - Gentle, preserves some gradients - **100** - Standard correction (default) ⭐ - **150** - Aggressive, removes all gradients **Strength (0.0-2.0):** - **0.5** - Subtle correction - **1.0** - Full correction ⭐ - **1.5** - Extra strong (stylized) **Preserve Color:** - **ON** - Keep original hue/saturation (recommended for albedo) - **OFF** - Full equalization (good for height maps) **Common problems it fixes:** - ✓ Photos with directional lighting/shadows - ✓ Camera vignetting (dark edges) - ✓ Uneven scanner illumination - ✓ Baked lighting in textures - ✓ Gradient lighting from light sources - ✓ Hot spots and dark patches **Recommended workflow:** ``` Load Photo (with shadows/uneven lighting) ↓ Texture Equalizer ├─ radius: 100 ├─ strength: 1.0 └─ preserve_color: ON ↓ Seamless Tiling Maker (now works better!) ↓ PBR Extractor ↓ Clean material, no shadow artifacts! ``` **Pro tips:** - Apply BEFORE seamless tiling for best results - Use higher radius (150+) for removing large shadows - Use lower radius (50-70) to preserve some depth - Enable preserve_color for albedo/diffuse maps - Disable preserve_color for grayscale maps **Troubleshooting:** - **If output looks black:** - ⭐ **Ensure method is set to "overlay"** (not linear_light) - Check console output for value ranges - View `average_color` output to see extracted tone - Try reducing radius (try 30-50) - Try reducing strength (try 0.5-0.7) - **If output looks washed out:** - Increase radius or strength - Try method="linear_light" for stronger correction - **If colors look wrong:** Enable `preserve_color` - **If not enough effect:** - Increase radius to 150-200 - Try method="linear_light" **Reference:** [Tolas' Photoshop Equalization Tutorial](https://tolas.wordpress.com/2009/05/26/tutorial-how-to-equalize-textures-in-photoshop/) --- ## 09_normal_format_validator.json **Description:** Automatically detect whether a normal map is OpenGL or DirectX format with visual analysis. **Nodes used:** 1. Load Image (normal map to validate) 2. Normal Format Validator (analyzer) 3. Preview Image x2 (original + 4-panel analysis) 4. Note node (comprehensive documentation) **Outputs:** - **visualization** - 4 panels showing: 1. Original normal map 2. Green channel isolated 3. Threshold map (white=up, black=down) 4. Format indicator (green=OGL, red=DX, yellow=ambiguous) - **detected_format** - String with format and confidence **Console output:** ``` 📊 GREEN CHANNEL ANALYSIS: Pixels > 0.5: 73.2% (up-facing) Pixels < 0.5: 26.8% (down-facing) Bias: +0.464 🎯 DETECTION RESULT: Format: OpenGL Confidence: High ``` **How it works:** - Analyzes green channel distribution - **OpenGL**: Y points UP → more pixels > 0.5 - **DirectX**: Y points DOWN → more pixels < 0.5 - Provides confidence based on bias strength **Confidence levels:** - **High** (>20% bias) - Very clear - **Medium** (10-20%) - Likely correct - **Low** (5-10%) - Uncertain - **Ambiguous** (<5%) - Flat or balanced **Use cases:** - Verify normals from unknown sources - Debug "why do my normals look inverted?" - QA for asset pipelines - Educational tool for learning normal map formats **Pro tips:** - Check visualization if result is ambiguous - Flat normal maps may return AMBIGUOUS (this is normal) - Use with "Normal Format Converter" to fix incorrect formats - Great for troubleshooting imported assets --- ## 📥 How to Use These Workflows ### Method 1: Drag & Drop 1. Open ComfyUI in your browser 2. Drag the `.json` file directly onto the ComfyUI window 3. Workflow loads automatically! ### Method 2: Load from Menu 1. In ComfyUI, click **"Load"** button (top menu) 2. Navigate to `custom_nodes/ComfyUI_PBR_MaterialProcessor/examples/` 3. Select a workflow JSON file 4. Click **Open** ### Method 3: Copy-Paste 1. Open the `.json` file in a text editor 2. Copy all contents 3. In ComfyUI, press **Ctrl+V** 4. Workflow appears! --- ## ⚙️ Before Running ### Required Nodes All workflows require these ComfyUI nodes: - **PBR Material Processor** (this pack) ✅ - **ComfyUI Marigold** (for depth estimation) - ComfyUI base nodes (Load Image, Save Image, etc.) Optional (for extended workflows): - **ComfyUI Lotus** (for normal/height maps) ### Check Your Input Each workflow starts with **Load Image**. You'll need to: 1. Click on the "Load Image" node 2. Choose your input image from the dropdown 3. Or upload a new image using the upload button --- ## 🎯 Workflow Testing Checklist ### Test 1: Quick Start ✓ ``` □ Load workflow: 01_quick_start_pbr_extraction.json □ Select an input image □ Click "Queue Prompt" □ Check console for progress □ Verify 4 maps saved to output/pbr_materials/ □ Preview shows all maps in one view ``` ### Test 2: Seamless Tiling ✓ ``` □ Load workflow: 02_seamless_tiling.json □ Use a texture with visible edges □ Queue prompt □ Check if result tiles seamlessly □ Open saved files in image viewer □ Tile them side-by-side to verify seamlessness ``` ### Test 3: Channel Packing ✓ ``` □ Load workflow: 03_channel_packing_orm.json □ Queue prompt □ Check saved ORM_packed.png □ Verify R=AO, G=Roughness, B=Metallic □ Compare file size: 1 ORM vs 3 separate maps ``` ### Test 4: Color Ramp ✓ ``` □ Load workflow: 04_color_ramp_stylized.json □ Queue prompt □ Check stylized albedo □ INTERACTIVE: Double-click Color Ramp node □ Try changing colors (click swatches) □ Try different presets (heat, rainbow, gold) □ Queue again to see changes ``` --- ## 🔧 Customizing Workflows ### Change Output Location Find `PBRSaver` node → Change `output_path`: ``` "widgets_values": [ "my_material", // base_name "pbr_materials", // ← Change this "png", "enumerate", 1 ] ``` ### Change File Format In `PBRSaver` or `SaveImage` → Change format: ``` "png" → Standard, lossless "jpg" → Compressed, smaller files "exr" → 32-bit precision (for normals/height) "tiff" → Professional, 16-bit ``` ### Adjust Gamma (if maps look washed out) Find `PBRExtractor` node → Adjust parameters: ``` "widgets_values": [ "lighting", // albedo_source ← Try "appearance" for alternative 0.45, // gamma_albedo (affects albedo from both sources) 2.2, // gamma_metal_rough ← Adjust 1.8-2.6 if needed 0.45 // gamma_lighting_ao ] ``` ### Change Tiling Method Find `SeamlessTiling` node → Change method: ``` "widgets_values": [ "blend_edges", // ← Try: "mirror" or "offset" 0.1 // blend_width (for blend_edges mode) ] ``` ### Change Color Ramp Preset Find `ColorRamp` node → Change preset: ``` "widgets_values": [ "heat", // ← Try: "rainbow", "gold_metal", "rust", etc. "linear", // interpolation "[...]" // color_stops data ] ``` --- ## 📊 Performance Notes | Workflow | Approx. Time (1024x1024) | VRAM Usage | |----------|--------------------------|------------| | 01_quick_start | ~30 seconds | ~4 GB | | 02_seamless_tiling | ~35 seconds | ~4 GB | | 03_channel_packing | ~30 seconds | ~4 GB | | 04_color_ramp_stylized | ~35 seconds | ~4 GB | *Times based on RTX 3080. Actual times vary by GPU and image size.* --- ## 🐛 Troubleshooting ### "Cannot find node type: PBRExtractor" **Solution:** Restart ComfyUI after installing PBR Material Processor ### "Cannot find node type: MarigoldDepthEstimation_v2" **Solution:** Install ComfyUI_Marigold from ComfyUI Manager ### "Output folder not found" **Solution:** Folders are created automatically. If error persists, manually create `ComfyUI/output/pbr_materials/` ### Workflow loads but nodes are red **Solution:** Missing required nodes. Check console for which nodes are missing. ### "Expected IMAGE but got PBR_PIPE" **Solution:** Use PBR Splitter to extract IMAGE from PBR_PIPE if needed ### Maps look washed out **Solution:** Adjust `gamma_metal_rough` (try 1.8-2.6) in PBR Extractor. Default is 2.2. ### Color Ramp gradient doesn't show **Solution:** 1. Restart ComfyUI (widget loads on startup) 2. Clear browser cache (Ctrl+F5) 3. Check browser console (F12) for errors --- ## 🎨 Creating Your Own Workflows ### Tips for Building Workflows: 1. **Start simple:** Begin with quick_start, add nodes gradually 2. **Use PBR_PIPE:** Cleaner than individual connections 3. **Add PBR Pipe Preview:** Debug at any stage 4. **Save incrementally:** Save versions as you build 5. **Test frequently:** Queue prompt after each major change 6. **Document:** Add notes about what each section does ### Common Workflow Pattern: ``` Load Image ↓ [Preprocessing] (optional: Seamless Tiling, Scaling, etc.) ↓ [AI Generation] (Marigold, Lotus) ↓ [PBR Extraction] (PBR Extractor) ↓ [Pipe Assembly] (PBR Combiner) ↓ [Adjustments] (PBR Pipeline Adjuster, Color tools) ↓ [Effects] (Wear, Detail, Mixing - optional) ↓ [Output] (PBR Saver, Save Image) ↓ [Preview] (Preview Image) ``` --- --- ## 🆕 NEW WORKFLOWS (v3.0) - Advanced Features ### 10_fastest_pbr_extraction.json **Lightning-Fast PBR Extraction** ⚡ **NEW!** **Nodes:** 6 total **Difficulty:** ⭐ Beginner **Time:** ~2 seconds **What it does:** Fastest workflow to extract complete PBR material **Perfect for:** Learning basics, quick materials, testing --- ### 11_frequency_separation_workflow.json **Professional Texture Editing** 🔬 **NEW!** **Nodes:** 7 total **Difficulty:** ⭐⭐⭐ Advanced **Time:** ~1 second **What it demonstrates:** Frequency separation - the professional's secret weapon! **Perfect for:** Retouching, skin/fabric editing, pro workflows --- ### 12_procedural_material_creation.json **Create Materials from Scratch** 🎲 **NEW!** **Nodes:** 11 total **Difficulty:** ⭐⭐⭐ Advanced **Time:** ~3 seconds **What it demonstrates:** Complete PBR material without any photo! **Perfect for:** Stylized materials, procedural generation, experimental art --- ### 13_mask_generation_weathering.json **Mask Generation Showcase** 🎭 **NEW!** **Nodes:** 10 total **Difficulty:** ⭐⭐ Intermediate **Time:** <1 second **What it demonstrates:** All 4 mask generator types with examples **Perfect for:** Weathering, selective editing, layer masking --- ### 14_blend_modes_showcase.json **24 Blend Modes Comparison** 🎨 **NEW!** **Nodes:** 11 total **Difficulty:** ⭐⭐ Intermediate **Time:** <1 second **What it demonstrates:** 4 essential blend modes + guide to all 24 **Perfect for:** Learning blending, texture compositing, effects --- **See `WORKFLOW_INDEX.md` for detailed descriptions of all workflows!** --- ## 📤 Sharing Your Workflows If you create a great workflow: 1. Save it as JSON 2. Test it with different images 3. Add comments (using Group nodes or notes) 4. Share with the community! **Workflow naming convention:** ``` ##_descriptive_name.json Examples: 05_weathered_metal.json 06_fabric_detail.json 07_multi_material_mix.json ``` --- ## 🔗 Next Steps After testing these workflows: 1. **Read full docs:** `../README.md` for all node details 2. **Try more workflows:** `../WORKFLOWS.md` for 10 more examples 3. **Quick reference:** `../QUICK_REFERENCE.md` for parameters 4. **Build custom:** Combine techniques from multiple workflows --- ## 📝 Workflow JSON Format ComfyUI workflows are JSON files containing: - **Nodes:** Each node's type, position, and parameters - **Links:** Connections between nodes - **Groups:** Optional visual grouping - **Config:** Workflow-specific settings You can edit them in any text editor, but it's easier to use ComfyUI's visual interface! --- **Have fun creating amazing PBR materials!** 🎨🚀 For more workflows and examples, see: - `../WORKFLOWS.md` - Detailed workflow guide - `../README.md` - Complete node reference - `../QUICK_REFERENCE.md` - Fast parameter lookup