commit 03f0bc14dae3c40e4b0601302a48ba136fee326a Author: angree Date: Fri May 23 17:55:53 2025 +0200 Initial commit diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..0f3baa4 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..bcdb925 --- /dev/null +++ b/README.md @@ -0,0 +1,190 @@ +# ComfyUI-Q_GLB_Material_Modifier + +A ComfyUI custom node for enhancing GLB 3D models generated with Hunyuan 3D 2.0. This module helps solve the common "plastic look" problem by adding realistic materials and smart emissive elements. + +## Features + +- Transforms the default "plastic" appearance of Hunyuan 3D 2.0 models into realistic materials +- Automatically detects bright areas in textures and converts them to emissive parts +- Preserves the original colors of the emissive areas +- Properly embeds emissive textures directly into the GLB file +- Easy to use with presets for common materials +- Works with any GLB model from Hunyuan 3D 2.0 + +## Installation + +1. Clone this repository into your ComfyUI's `custom_nodes` directory: +```bash +cd ComfyUI/custom_nodes +git clone https://github.com/YOUR_USERNAME/ComfyUI-Q_GLB_Material_Modifier.git +``` + +2. Install required dependencies: +```bash +pip install -r requirements.txt +``` +or install manually: +```bash +pip install pygltflib>=1.16.1 opencv-python>=4.8.0 pillow>=10.0.0 numpy>=1.24.0 +``` + +3. Restart ComfyUI + +## Dependencies + +This module requires the following Python libraries: +- **pygltflib**: For GLB/GLTF file manipulation +- **opencv-python**: For image processing operations +- **pillow**: For image loading and conversion +- **numpy**: For array operations + +A `requirements.txt` file is included for easy installation. + +## Usage with Hunyuan 3D 2.0 + +The extension provides two main nodes specifically designed for enhancing Hunyuan 3D 2.0 outputs: + +### Q Manual GLB Material Modifier + +This node provides full control over material parameters: + +- **glb_path**: Path to your Hunyuan 3D 2.0 GLB file +- **texture_image**: Input texture from Hunyuan 3D 2.0 +- **output_suffix**: Suffix to add to the output filename (default: "_modified") +- **metallic_factor**: How metallic the surface should be (0-1) +- **smoothness**: How smooth the surface should be (0-1) +- **base_color_r/g/b**: Base color tint +- **emissive_brightness_threshold**: Threshold for detecting bright areas +- **emissive_percentage**: Percentage of the brightest pixels to make emissive +- **absolute_min_brightness**: Minimum brightness to consider emissive +- **emissive_strength**: Brightness multiplier for emissive areas +- **enable_smart_emissive**: Enable/disable emissive effect +- **render**: Enable/disable processing (when disabled, skips GLB generation) + +### Q Preset GLB Material Modifier + +This node provides convenient presets specifically designed for Hunyuan 3D 2.0 models: + +- **glb_path**: Path to your Hunyuan 3D 2.0 GLB file +- **texture_image**: Input texture from Hunyuan 3D 2.0 +- **preset**: Choose from predefined material presets: + - Spaceship Metal + - Brushed Steel + - Chrome Hull + - Titanium + - Combat Metal + - Alien Tech +- **output_suffix**: Suffix to add to the output filename (default: "_modified") +- **emissive_mode**: Smart Auto, Force On, or Force Off +- **absolute_min_brightness**: Minimum brightness to consider emissive +- **render**: Enable/disable processing (when disabled, skips GLB generation) + +## Hunyuan 3D 2.0 Workflows + +In the `workflows` subfolder, you'll find example ComfyUI workflows specifically for Hunyuan 3D 2.0: + +### Fixing the "Plastic Look" Problem + +Hunyuan 3D 2.0 models (using DIT 2.0 fp16) typically have a default "plastic" appearance: +- The preset modifiers are specifically designed to transform this plastic look into realistic materials +- Chrome Hull preset works well for sci-fi and mechanical objects +- Brushed Steel creates a more industrial look +- Titanium is good for high-tech and aerospace models +- Adjust the metallic_factor and smoothness in the Manual modifier for fine control + +### Batch Generation + +Generate multiple variants of a Hunyuan 3D 2.0 model with different materials: +- Connect multiple Q Preset GLB Material Modifier nodes to the same texture +- Set different output_suffix values for each variant (e.g., "_chrome", "_steel") +- Use the render parameter to selectively enable only the variants you want to generate +- This workflow is efficient for testing different material looks without regenerating the 3D model + +### Emission Map Generation + +Create glowing elements in your Hunyuan 3D 2.0 models: +- Adjust emissive_brightness_threshold to control which areas will glow +- Use emissive_percentage to fine-tune the amount of emissive areas +- The emissive texture preserves the original colors from the Hunyuan texture +- For sci-fi models, try the "Alien Tech" preset with emissive_mode set to "Force On" + +## License + +[MIT License](LICENSE) +# ComfyUI-Q_GLB_Material_Modifier + +A ComfyUI custom node for adding smart emissive materials to GLB 3D models. Perfect for adding glowing elements to your 3D models based on the brightest parts of textures generated with AI. + +## Features + +- Automatically detects bright areas in textures and converts them to emissive parts +- Preserves the original colors of the emissive areas +- Properly embeds emissive textures directly into the GLB file +- Easy to use with presets for common material types +- Works with any GLB model and any texture + +## Installation + +1. Clone this repository into your ComfyUI's `custom_nodes` directory: +```bash +cd ComfyUI/custom_nodes +git clone https://github.com/YOUR_USERNAME/ComfyUI-Q_GLB_Material_Modifier.git +``` + +2. Install required dependencies: +```bash +pip install pygltflib pillow opencv-python +``` + +3. Restart ComfyUI + +## Usage + +The extension provides two main nodes: + +### Q Manual GLB Material Modifier + +This node provides full control over material parameters: + +- **glb_path**: Path to your GLB file +- **texture_image**: Input texture (e.g. from AI generation) +- **output_suffix**: Suffix to add to the output filename (default: "_modified") +- **metallic_factor**: How metallic the surface should be (0-1) +- **smoothness**: How smooth the surface should be (0-1) +- **base_color_r/g/b**: Base color tint +- **emissive_brightness_threshold**: Threshold for detecting bright areas +- **emissive_percentage**: Percentage of the brightest pixels to make emissive +- **absolute_min_brightness**: Minimum brightness to consider emissive +- **render**: Enable/disable processing (when disabled, skips GLB generation) +- **emissive_strength**: Brightness multiplier for emissive areas +- **enable_smart_emissive**: Enable/disable emissive effect +- **render**: Enable/disable processing (when disabled, skips GLB generation) + +### Q Preset GLB Material Modifier + +This node provides convenient presets for common materials: + +- **glb_path**: Path to your GLB file +- **texture_image**: Input texture (e.g. from AI generation) +- **preset**: Choose from predefined material presets: + - Spaceship Metal + - Brushed Steel + - Chrome Hull + - Titanium + - Combat Metal + - Alien Tech +- **output_suffix**: Suffix to add to the output filename (default: "_modified") +- **emissive_mode**: Smart Auto, Force On, or Force Off +- **absolute_min_brightness**: Minimum brightness to consider emissive + +## Example Workflow + +1. Generate a texture using your favorite image generation node +2. Connect the generated image to the `texture_image` input of the Q Preset GLB Material Modifier node +3. Set the path to your GLB file +4. Choose a preset that matches your desired look +5. Run the workflow to get a modified GLB with emissive materials + +## License + +[MIT License](LICENSE) \ No newline at end of file diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..b4b2d48 --- /dev/null +++ b/__init__.py @@ -0,0 +1,11 @@ +from .q_glb_material_modifier import QManualGLBMaterialModifier, QPresetGLBMaterialModifier + +NODE_CLASS_MAPPINGS = { + "QManualGLBMaterialModifier": QManualGLBMaterialModifier, + "QPresetGLBMaterialModifier": QPresetGLBMaterialModifier, +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "QManualGLBMaterialModifier": "Q Manual GLB Material Modifier", + "QPresetGLBMaterialModifier": "Q Preset GLB Material Modifier", +} \ No newline at end of file diff --git a/__pycache__/__init__.cpython-312.pyc b/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..37ceddf Binary files /dev/null and b/__pycache__/__init__.cpython-312.pyc differ diff --git a/__pycache__/glb_material_modifier.cpython-312.pyc b/__pycache__/glb_material_modifier.cpython-312.pyc new file mode 100644 index 0000000..b4ae4e4 Binary files /dev/null and b/__pycache__/glb_material_modifier.cpython-312.pyc differ diff --git a/__pycache__/q_glb_material_modifier.cpython-312.pyc b/__pycache__/q_glb_material_modifier.cpython-312.pyc new file mode 100644 index 0000000..7e8ce31 Binary files /dev/null and b/__pycache__/q_glb_material_modifier.cpython-312.pyc differ diff --git a/q_glb_material_modifier.py b/q_glb_material_modifier.py new file mode 100644 index 0000000..6b13367 --- /dev/null +++ b/q_glb_material_modifier.py @@ -0,0 +1,430 @@ +import json +import os +from pathlib import Path +import shutil +import numpy as np +from PIL import Image, ImageEnhance, ImageFilter +import cv2 +import torch +from io import BytesIO +import base64 + +class QManualGLBMaterialModifier: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "glb_path": ("STRING", {"default": "", "multiline": False}), + "texture_image": ("IMAGE", {"forceInput": True}), + "output_suffix": ("STRING", {"default": "_modified", "multiline": False}), + "metallic_factor": ("FLOAT", {"default": 0.85, "min": 0.0, "max": 1.0, "step": 0.01}), + "smoothness": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "base_color_r": ("FLOAT", {"default": 0.7, "min": 0.0, "max": 1.0, "step": 0.01}), + "base_color_g": ("FLOAT", {"default": 0.8, "min": 0.0, "max": 1.0, "step": 0.01}), + "base_color_b": ("FLOAT", {"default": 0.9, "min": 0.0, "max": 1.0, "step": 0.01}), + "emissive_brightness_threshold": ("FLOAT", {"default": 0.2, "min": 0.05, "max": 0.5, "step": 0.01}), + "emissive_percentage": ("FLOAT", {"default": 0.05, "min": 0.01, "max": 0.15, "step": 0.01}), + "absolute_min_brightness": ("INT", {"default": 128, "min": 50, "max": 200, "step": 1}), + "emissive_strength": ("FLOAT", {"default": 0.8, "min": 0.0, "max": 2.0, "step": 0.1}), + "enable_smart_emissive": ("BOOLEAN", {"default": True}), + "render": ("BOOLEAN", {"default": True}), + } + } + + RETURN_TYPES = ("STRING", "IMAGE") + RETURN_NAMES = ("modified_glb_path", "emissive_mask_preview") + FUNCTION = "modify_material_smart" + CATEGORY = "3d/q_material" + + def create_emissive_texture(self, original_image, emissive_mask, emissive_strength): + """ + Creates a proper colored emissive texture that preserves original colors in emissive areas + """ + # Convert mask to 3-channel if needed + if len(emissive_mask.shape) == 2: + # Create a mask with 3 channels + emissive_mask_3d = np.stack([emissive_mask, emissive_mask, emissive_mask], axis=-1) + else: + emissive_mask_3d = emissive_mask + + # Normalize mask to [0,1] + mask_normalized = emissive_mask_3d.astype(np.float32) / 255.0 + + # Create colored emissive texture that preserves original colors in bright areas + # Use original colors where mask is bright, black where mask is dark + emissive_texture = original_image * mask_normalized * emissive_strength + + # Clip to valid range + emissive_texture = np.clip(emissive_texture, 0, 1) + + return emissive_texture + + def analyze_texture_brightness(self, image_tensor, brightness_threshold, percentage, absolute_min_threshold=128): + """ + Analyzes texture and creates smart emissive mask + """ + # Check if it's a tensor or already a numpy array + if hasattr(image_tensor, 'cpu'): + image_np_raw = image_tensor.cpu().numpy() + else: + image_np_raw = image_tensor + + # Remove batch dimension if it exists + if len(image_np_raw.shape) == 4: + image_np_raw = image_np_raw[0] + + # Convert from float [0,1] to uint8 [0,255] + image_np = (image_np_raw * 255).astype(np.uint8) + + # Create PIL Image + pil_image = Image.fromarray(image_np) + + # Convert to grayscale for brightness analysis + gray = pil_image.convert('L') + gray_np = np.array(gray) + + # Calculate brightness statistics + mean_brightness = np.mean(gray_np) / 255.0 + + # Find percentile for brightest pixels + bright_threshold_value = np.percentile(gray_np, (1.0 - percentage) * 100) + + # Use higher value from two thresholds + final_threshold = max(bright_threshold_value, absolute_min_threshold) + + # Check if brightest pixels are significantly brighter than average + brightness_contrast = (final_threshold / 255.0) - mean_brightness + + # Create emissive mask only if contrast is sufficient + if brightness_contrast >= brightness_threshold: + # Create mask for brightest pixels + emissive_mask = (gray_np >= final_threshold).astype(np.uint8) * 255 + + # Optional: slight blur of mask for smoother transition + emissive_mask = cv2.GaussianBlur(emissive_mask, (3, 3), 0) + + # Normalize mask + if np.max(emissive_mask) > 0: + emissive_mask = (emissive_mask / np.max(emissive_mask) * 255).astype(np.uint8) + else: + emissive_mask = np.zeros_like(gray_np, dtype=np.uint8) + return emissive_mask, False + + return emissive_mask, True + else: + return np.zeros_like(gray_np, dtype=np.uint8), False + + def image_to_data_uri(self, image_array, format='png'): + """Convert image array to data URI""" + if len(image_array.shape) == 3: + # Convert to PIL Image + if image_array.dtype == np.float32 or image_array.dtype == np.float64: + # Convert float [0,1] to uint8 [0,255] + image_array = (image_array * 255).astype(np.uint8) + pil_image = Image.fromarray(image_array) + + # Save to BytesIO + buffer = BytesIO() + pil_image.save(buffer, format=format) + buffer.seek(0) + + # Convert to base64 + mime_type = f"image/{format}" + encoded = base64.b64encode(buffer.read()).decode('ascii') + return f"data:{mime_type};base64,{encoded}" + return None + + def modify_material_smart(self, glb_path, texture_image, output_suffix, metallic_factor, smoothness, + base_color_r, base_color_g, base_color_b, + emissive_brightness_threshold, emissive_percentage, absolute_min_brightness, + emissive_strength, enable_smart_emissive, render): + + try: + from pygltflib import GLTF2, TextureInfo, Image as GLTFImage, Texture, Sampler + except ImportError: + print("ERROR: pygltflib not installed. Install with: pip install pygltflib") + black_mask = np.zeros((512, 512, 3), dtype=np.float32) + return ("PYGLTFLIB_NOT_INSTALLED", torch.from_numpy(black_mask[None, ...])) + + # Check if rendering is disabled + if not render: + print("Rendering disabled, skipping GLB processing") + # Return only the filename and a black preview + if hasattr(texture_image, 'cpu'): + shape = texture_image[0].cpu().numpy().shape + else: + shape = texture_image[0].shape if len(texture_image.shape) == 4 else texture_image.shape + + black_mask = np.zeros(shape, dtype=np.float32) + return ("RENDER_DISABLED", torch.from_numpy(black_mask[None, ...])) + + # Path validation and clean-up + if not glb_path or glb_path.strip() == "": + print("ERROR: No GLB file path provided") + black_mask = np.zeros((512, 512, 3), dtype=np.float32) + return ("NO_PATH_PROVIDED", torch.from_numpy(black_mask[None, ...])) + + # Clean up path - remove quotes and whitespace + glb_path = glb_path.strip().strip('"\'') + + # First check if the path exists directly as provided + if os.path.exists(glb_path) and os.path.isfile(glb_path): + actual_glb_path = glb_path + else: + # Check if this is a relative path or just a filename + if os.path.dirname(glb_path) == "": + # This is just a filename, check in output directories + possible_paths = [ + os.path.join(os.getcwd(), glb_path), # Current dir + filename + os.path.join("output", glb_path), # output/ + filename + os.path.join("ComfyUI", "output", glb_path), # ComfyUI/output/ + filename + os.path.join("..", "output", glb_path), # ../output/ + filename + ] + else: + # This is a path with directories, just normalize it + normalized_path = os.path.normpath(glb_path) + possible_paths = [normalized_path] + + # Also try some variations with .glb extension if not already there + if not normalized_path.lower().endswith('.glb'): + possible_paths.append(f"{normalized_path}.glb") + + # Check all possible locations + found_path = None + for path in possible_paths: + if os.path.exists(path) and os.path.isfile(path): + found_path = path + break + + if found_path: + actual_glb_path = found_path + else: + # Wait a bit and try again + import time + time.sleep(2) + + # Check again + for path in possible_paths: + if os.path.exists(path) and os.path.isfile(path): + found_path = path + break + + if found_path: + actual_glb_path = found_path + else: + print(f"File not found: {glb_path}") + black_preview = np.zeros((1, 512, 512, 3), dtype=np.float32) + return ("FILE_NOT_FOUND", torch.from_numpy(black_preview)) + + # Create a new path for the modified file + base_path, ext = os.path.splitext(actual_glb_path) + modified_glb_path = f"{base_path}{output_suffix}{ext}" + + # Load the GLB file + print(f"Loading GLB file: {actual_glb_path}") + gltf = GLTF2().load(actual_glb_path) + + # Process emissive map + emissive_mask = None + has_emissive = False + emissive_data_uri = None + + if enable_smart_emissive: + # Generate emissive mask + emissive_mask, has_emissive = self.analyze_texture_brightness( + texture_image, emissive_brightness_threshold, emissive_percentage, absolute_min_brightness + ) + + if has_emissive: + print(f"Creating emissive texture") + + # Get original texture for color reference + if hasattr(texture_image, 'cpu'): + original_rgb = texture_image[0].cpu().numpy() + else: + original_rgb = texture_image[0] if len(texture_image.shape) == 4 else texture_image + + # Create colored emissive texture + emissive_texture = self.create_emissive_texture( + original_rgb, emissive_mask, emissive_strength + ) + + # Convert to 8-bit for saving + emissive_texture_8bit = (emissive_texture * 255).astype(np.uint8) + + # Convert emissive texture to data URI + emissive_data_uri = self.image_to_data_uri(emissive_texture_8bit) + + # Save for preview - use the colored emissive texture, not just the mask + emissive_preview = emissive_texture[None, ...] # Add batch dimension + else: + print(f"No emissive areas detected") + emissive_preview = None + else: + print(f"Smart emissive disabled") + has_emissive = False + emissive_preview = None + + # Update materials in the GLTF + roughness_factor = 1.0 - smoothness # Convert Unity smoothness to glTF roughness + + # Add emissive texture to glTF if needed + emissive_texture_index = None + + if has_emissive and emissive_data_uri: + # Create an image for the emissive texture + emissive_image = GLTFImage() + emissive_image.uri = emissive_data_uri + emissive_image.mimeType = "image/png" + emissive_image_index = len(gltf.images) + gltf.images.append(emissive_image) + + # Make sure we have a sampler + if not gltf.samplers: + default_sampler = Sampler() + default_sampler.magFilter = 9729 # LINEAR + default_sampler.minFilter = 9987 # LINEAR_MIPMAP_LINEAR + default_sampler.wrapS = 10497 # REPEAT + default_sampler.wrapT = 10497 # REPEAT + gltf.samplers.append(default_sampler) + + # Create a texture referencing the image + emissive_texture = Texture() + emissive_texture.source = emissive_image_index + emissive_texture.sampler = 0 # Use first sampler + emissive_texture_index = len(gltf.textures) + gltf.textures.append(emissive_texture) + + print(f"Added emissive texture at index {emissive_texture_index}") + + # Update all materials + for i, material in enumerate(gltf.materials): + # Set base PBR properties + if not hasattr(material, 'pbrMetallicRoughness'): + from pygltflib import PbrMetallicRoughness + material.pbrMetallicRoughness = PbrMetallicRoughness() + + material.pbrMetallicRoughness.baseColorFactor = [ + base_color_r, base_color_g, base_color_b, 1.0 + ] + material.pbrMetallicRoughness.metallicFactor = metallic_factor + material.pbrMetallicRoughness.roughnessFactor = roughness_factor + + # Set emissive properties if we have them + if has_emissive and emissive_texture_index is not None: + # Create a TextureInfo for the emissive texture + emissive_texture_info = TextureInfo() + emissive_texture_info.index = emissive_texture_index + material.emissiveTexture = emissive_texture_info + + # Set emissive factor to white (1,1,1) to show full texture colors + material.emissiveFactor = [1.0, 1.0, 1.0] + + print(f"Applied emissive texture to material {i}") + else: + # No emissive + material.emissiveFactor = [0.0, 0.0, 0.0] + + # Save the modified GLB file + print(f"Saving modified GLB to {modified_glb_path}") + gltf.save(modified_glb_path) + + # Return only the filename of the modified GLB (not the full path) + output_filename = os.path.basename(modified_glb_path) + + # Return preview of emissive texture if available + if emissive_preview is not None: + return (output_filename, torch.from_numpy(emissive_preview)) + else: + # Create a black preview image + if hasattr(texture_image, 'cpu'): + shape = texture_image[0].cpu().numpy().shape + else: + shape = texture_image[0].shape if len(texture_image.shape) == 4 else texture_image.shape + + black_mask = np.zeros(shape, dtype=np.float32) + return (output_filename, torch.from_numpy(black_mask[None, ...])) + + +# Simplified presets for Unity-style +class QPresetGLBMaterialModifier: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "glb_path": ("STRING", {"default": "", "multiline": False}), + "texture_image": ("IMAGE", {"forceInput": True}), + "preset": (["Spaceship Metal", "Brushed Steel", "Chrome Hull", "Chrome Hull Lite", "Titanium", "Combat Metal", "Alien Tech"], {"default": "Spaceship Metal"}), + "output_suffix": ("STRING", {"default": "_modified", "multiline": False}), + "emissive_mode": (["Smart Auto", "Force On", "Force Off"], {"default": "Smart Auto"}), + "absolute_min_brightness": ("INT", {"default": 128, "min": 50, "max": 200, "step": 1}), + "render": ("BOOLEAN", {"default": True}), + } + } + + RETURN_TYPES = ("STRING", "IMAGE") + RETURN_NAMES = ("modified_glb_path", "emissive_mask_preview") + FUNCTION = "apply_material_preset" + CATEGORY = "3d/q_material" + + def apply_material_preset(self, glb_path, texture_image, preset, output_suffix, emissive_mode, absolute_min_brightness, render): + # Unity-style presets + presets = { + "Spaceship Metal": { + "metallic": 0.85, "smoothness": 0.5, + "color": [0.7, 0.8, 0.9], "emissive_strength": 0.8, + "brightness_threshold": 0.2, "percentage": 0.05 + }, + "Brushed Steel": { + "metallic": 0.9, "smoothness": 0.3, + "color": [0.8, 0.8, 0.8], "emissive_strength": 0.6, + "brightness_threshold": 0.25, "percentage": 0.03 + }, + "Chrome Hull": { + "metallic": 1.0, "smoothness": 0.9, + "color": [0.95, 0.95, 0.95], "emissive_strength": 0.9, + "brightness_threshold": 0.15, "percentage": 0.08 + }, + "Chrome Hull Lite": { + "metallic": 1.0, "smoothness": 0.72, + "color": [0.95, 0.95, 0.95], "emissive_strength": 0.9, + "brightness_threshold": 0.15, "percentage": 0.08 + }, + "Titanium": { + "metallic": 0.8, "smoothness": 0.4, + "color": [0.6, 0.6, 0.7], "emissive_strength": 0.7, + "brightness_threshold": 0.22, "percentage": 0.04 + }, + "Combat Metal": { + "metallic": 0.7, "smoothness": 0.2, + "color": [0.5, 0.5, 0.6], "emissive_strength": 1.0, + "brightness_threshold": 0.18, "percentage": 0.06 + }, + "Alien Tech": { + "metallic": 0.6, "smoothness": 0.7, + "color": [0.4, 0.8, 0.6], "emissive_strength": 1.2, + "brightness_threshold": 0.12, "percentage": 0.1 + } + } + + settings = presets[preset] + enable_emissive = emissive_mode != "Force Off" + + # Use the main node - pass all parameters + modifier = QManualGLBMaterialModifier() + return modifier.modify_material_smart( + glb_path=glb_path, + texture_image=texture_image, + output_suffix=output_suffix, + metallic_factor=settings["metallic"], + smoothness=settings["smoothness"], + base_color_r=settings["color"][0], + base_color_g=settings["color"][1], + base_color_b=settings["color"][2], + emissive_brightness_threshold=settings["brightness_threshold"], + emissive_percentage=settings["percentage"], + absolute_min_brightness=absolute_min_brightness, + emissive_strength=settings["emissive_strength"], + enable_smart_emissive=enable_emissive, + render=render + ) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..4a7123b --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +pygltflib>=1.16.1 +opencv-python>=4.8.0 +pillow>=10.0.0 +numpy>=1.24.0 \ No newline at end of file diff --git a/workflows/Hunyuan3d_20_Batch_Cropping_Emmision.json b/workflows/Hunyuan3d_20_Batch_Cropping_Emmision.json new file mode 100644 index 0000000..cc3e846 --- /dev/null +++ b/workflows/Hunyuan3d_20_Batch_Cropping_Emmision.json @@ -0,0 +1,5370 @@ +{ + "id": "d9b75989-e038-4d3f-a6a1-0cff181dd1e7", + "revision": 0, + "last_node_id": 257, + "last_link_id": 468, + "nodes": [ + { + "id": 64, + "type": "ImageCompositeMasked", + "pos": [ + -940, + 1040 + ], + "size": [ + 315, + 146 + ], + "flags": {}, + "order": 54, + "mode": 0, + "inputs": [ + { + "name": "destination", + "type": "IMAGE", + "link": 227 + }, + { + "name": "source", + "type": "IMAGE", + "link": 241 + }, + { + "name": "mask", + "shape": 7, + "type": "MASK", + "link": 231 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 99 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "ImageCompositeMasked" + }, + "widgets_values": [ + 0, + 0, + false + ] + }, + { + "id": 116, + "type": "PreviewImage", + "pos": [ + 909.302734375, + 1139.4097900390625 + ], + "size": [ + 534.0819091796875, + 375.8153991699219 + ], + "flags": {}, + "order": 64, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 199 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [ + "" + ] + }, + { + "id": 126, + "type": "PreviewImage", + "pos": [ + 3212.875244140625, + 445.8319091796875 + ], + "size": [ + 491.2337341308594, + 523.9635620117188 + ], + "flags": {}, + "order": 70, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 221 + } + ], + "outputs": [], + "title": "Preview Image: vertex inpainted texture", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [ + "" + ] + }, + { + "id": 120, + "type": "Note", + "pos": [ + 2739.469970703125, + -194.1682891845703 + ], + "size": [ + 354.4071044921875, + 125.7635726928711 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "You can upscale the multiviews at this point for more texture details" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 133, + "type": "MaskToImage", + "pos": [ + -910, + 1270 + ], + "size": [ + 264.5999755859375, + 26 + ], + "flags": { + "collapsed": true + }, + "order": 32, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 226 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 227 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "MaskToImage" + }, + "widgets_values": [] + }, + { + "id": 90, + "type": "PreviewImage", + "pos": [ + 332.64825439453125, + 1135.0362548828125 + ], + "size": [ + 534.0819091796875, + 375.8153991699219 + ], + "flags": {}, + "order": 62, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 148 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [ + "" + ] + }, + { + "id": 92, + "type": "Hy3DBakeFromMultiview", + "pos": [ + 2677.26318359375, + 295.8318176269531 + ], + "size": [ + 302.4000244140625, + 66 + ], + "flags": {}, + "order": 67, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 281 + }, + { + "name": "renderer", + "type": "MESHRENDER", + "link": 151 + }, + { + "name": "camera_config", + "shape": 7, + "type": "HY3DCAMERA", + "link": 274 + } + ], + "outputs": [ + { + "name": "texture", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 207, + 217 + ] + }, + { + "name": "mask", + "type": "MASK", + "slot_index": 1, + "links": [ + 218 + ] + }, + { + "name": "renderer", + "type": "MESHRENDER", + "slot_index": 2, + "links": [ + 219 + ] + } + ], + "properties": { + "cnr_id": "comfyui-hunyan3dwrapper", + "ver": "c1f95d9a6e15ab5cf0bf301725c7849d4a6ee5f0", + "Node name for S&R": "Hy3DBakeFromMultiview", + "aux_id": "kijai/ComfyUI-Hunyuan3DWrapper" + }, + "widgets_values": [] + }, + { + "id": 129, + "type": "Hy3DMeshVerticeInpaintTexture", + "pos": [ + 3074.865478515625, + 294.6327209472656 + ], + "size": [ + 277.20001220703125, + 66 + ], + "flags": {}, + "order": 69, + "mode": 0, + "inputs": [ + { + "name": "texture", + "type": "IMAGE", + "link": 217 + }, + { + "name": "mask", + "type": "MASK", + "link": 218 + }, + { + "name": "renderer", + "type": "MESHRENDER", + "link": 219 + } + ], + "outputs": [ + { + "name": "texture", + "type": "IMAGE", + "links": [ + 220, + 221 + ] + }, + { + "name": "mask", + "type": "MASK", + "links": [ + 222 + ] + }, + { + "name": "renderer", + "type": "MESHRENDER", + "links": [ + 223 + ] + } + ], + "properties": { + "cnr_id": "comfyui-hunyan3dwrapper", + "ver": "c1f95d9a6e15ab5cf0bf301725c7849d4a6ee5f0", + "Node name for S&R": "Hy3DMeshVerticeInpaintTexture", + "aux_id": "kijai/ComfyUI-Hunyuan3DWrapper" + }, + "widgets_values": [] + }, + { + "id": 136, + "type": "Reroute", + "pos": [ + -1060, + 1060 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 45, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 240 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 241 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 135, + "type": "Reroute", + "pos": [ + -1050, + 1100 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 52, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 261 + } + ], + "outputs": [ + { + "name": "", + "type": "MASK", + "slot_index": 0, + "links": [ + 231 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 142, + "type": "Reroute", + "pos": [ + -649.8002319335938, + -400.6730651855469 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 46, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 256 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 257, + 258 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 132, + "type": "SolidMask", + "pos": [ + -590, + 1310 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "slot_index": 0, + "links": [ + 226 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "SolidMask" + }, + "widgets_values": [ + 0.8, + 512, + 512 + ] + }, + { + "id": 144, + "type": "PrimitiveNode", + "pos": [ + 1638.97119140625, + -187.0076904296875 + ], + "size": [ + 260.3999938964844, + 84.1800765991211 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "widget": { + "name": "width" + }, + "slot_index": 0, + "links": [ + 262, + 263, + 264 + ] + } + ], + "title": "Primitive: reference image size", + "properties": { + "Run widget replace on values": false + }, + "widgets_values": [ + 512, + "fixed" + ] + }, + { + "id": 73, + "type": "Note", + "pos": [ + -540, + 1140 + ], + "size": [ + 259.3616943359375, + 99.84209442138672 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "The level of the background affects the delighting a lot, fully black generally doesn't work, too dark makes the image red, fully white can be overbright, adjust the background level to your liking with the mask value level" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 146, + "type": "Note", + "pos": [ + -1097.3349609375, + -139.42422485351562 + ], + "size": [ + 312.0663146972656, + 88 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "The image encoder used works at 518x518, every input is resized to that automatically, but better to do it here first in controlled fashion" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 125, + "type": "PreviewImage", + "pos": [ + 2672.875244140625, + 445.8319091796875 + ], + "size": [ + 503.22430419921875, + 521.7835083007812 + ], + "flags": {}, + "order": 68, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 207 + } + ], + "outputs": [], + "title": "Preview Image: Initial baked texture", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [ + "" + ] + }, + { + "id": 127, + "type": "PreviewImage", + "pos": [ + 3752.875244140625, + 445.8319091796875 + ], + "size": [ + 471.61279296875, + 520.6934204101562 + ], + "flags": {}, + "order": 73, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 209 + } + ], + "outputs": [], + "title": "Preview Image: fully inpainted texture", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [ + "" + ] + }, + { + "id": 28, + "type": "DownloadAndLoadHy3DDelightModel", + "pos": [ + -940, + 870 + ], + "size": [ + 307.71990966796875, + 58 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "compile_args", + "shape": 7, + "type": "HY3DCOMPILEARGS", + "link": null + } + ], + "outputs": [ + { + "name": "delight_pipe", + "type": "HY3DDIFFUSERSPIPE", + "slot_index": 0, + "links": [ + 30, + 266 + ] + } + ], + "properties": { + "cnr_id": "comfyui-hunyan3dwrapper", + "ver": "c1f95d9a6e15ab5cf0bf301725c7849d4a6ee5f0", + "Node name for S&R": "DownloadAndLoadHy3DDelightModel", + "aux_id": "kijai/ComfyUI-Hunyuan3DWrapper" + }, + "widgets_values": [ + "hunyuan3d-delight-v2-0" + ] + }, + { + "id": 45, + "type": "PreviewImage", + "pos": [ + -230, + 1110 + ], + "size": [ + 370.2379455566406, + 396.4273376464844 + ], + "flags": {}, + "order": 59, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 57 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [ + "" + ] + }, + { + "id": 148, + "type": "Hy3DDiffusersSchedulerConfig", + "pos": [ + -567.3681640625, + 726.651611328125 + ], + "size": [ + 288.13494873046875, + 82 + ], + "flags": {}, + "order": 33, + "mode": 0, + "inputs": [ + { + "name": "pipeline", + "type": "HY3DDIFFUSERSPIPE", + "link": 266 + } + ], + "outputs": [ + { + "name": "diffusers_scheduler", + "type": "NOISESCHEDULER", + "links": [ + 265 + ] + } + ], + "properties": { + "cnr_id": "comfyui-hunyan3dwrapper", + "ver": "c1f95d9a6e15ab5cf0bf301725c7849d4a6ee5f0", + "Node name for S&R": "Hy3DDiffusersSchedulerConfig", + "aux_id": "kijai/ComfyUI-Hunyuan3DWrapper" + }, + "widgets_values": [ + "Euler A", + "default" + ] + }, + { + "id": 117, + "type": "ImageResize+", + "pos": [ + 2302.875244140625, + 25.83180809020996 + ], + "size": [ + 315, + 218 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": null + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [] + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "cnr_id": "comfyui_essentials", + "ver": "9d9f4bedfc9f0321c19faf71855e228c93bd0dc9", + "Node name for S&R": "ImageResize+", + "aux_id": "cubiq/ComfyUI_essentials" + }, + "widgets_values": [ + 2048, + 2048, + "lanczos", + "stretch", + "always", + 0 + ] + }, + { + "id": 61, + "type": "Hy3DCameraConfig", + "pos": [ + 570.689453125, + 934.6206665039062 + ], + "size": [ + 342.9443054199219, + 154 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "camera_config", + "type": "HY3DCAMERA", + "slot_index": 0, + "links": [ + 272, + 273, + 274 + ] + } + ], + "properties": { + "cnr_id": "comfyui-hunyan3dwrapper", + "ver": "c1f95d9a6e15ab5cf0bf301725c7849d4a6ee5f0", + "Node name for S&R": "Hy3DCameraConfig", + "aux_id": "kijai/ComfyUI-Hunyuan3DWrapper" + }, + "widgets_values": [ + "0, 90, 180, 270, 0, 180", + "0, 0, 0, 0, 90, -90", + "1, 0.1, 0.5, 0.1, 0.05, 0.05", + 1.45, + 1.2 + ] + }, + { + "id": 52, + "type": "ImageResize+", + "pos": [ + -1104.0650634765625, + -401.0750427246094 + ], + "size": [ + 315, + 218 + ], + "flags": {}, + "order": 44, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 293 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 240, + 256, + 310 + ] + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "cnr_id": "comfyui_essentials", + "ver": "9d9f4bedfc9f0321c19faf71855e228c93bd0dc9", + "Node name for S&R": "ImageResize+", + "aux_id": "cubiq/ComfyUI_essentials" + }, + "widgets_values": [ + 518, + 518, + "lanczos", + "pad", + "always", + 2 + ] + }, + { + "id": 173, + "type": "OptimalCropCalculator", + "pos": [ + 529.9173583984375, + -1161.17578125 + ], + "size": [ + 315, + 166 + ], + "flags": {}, + "order": 40, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 309 + } + ], + "outputs": [ + { + "name": "width", + "type": "INT", + "links": [ + 303, + 307 + ] + }, + { + "name": "height", + "type": "INT", + "links": [ + 304, + 308 + ] + }, + { + "name": "x_offset", + "type": "INT", + "links": [ + 305 + ] + }, + { + "name": "y_offset", + "type": "INT", + "links": [ + 306 + ] + } + ], + "properties": { + "Node name for S&R": "OptimalCropCalculator", + "widget_ue_connectable": {} + }, + "widgets_values": [ + 8, + 8, + 520 + ] + }, + { + "id": 118, + "type": "ImageUpscaleWithModel", + "pos": [ + 2298.2734375, + -94.7900619506836 + ], + "size": [ + 340.20001220703125, + 46 + ], + "flags": {}, + "order": 66, + "mode": 0, + "inputs": [ + { + "name": "upscale_model", + "type": "UPSCALE_MODEL", + "link": 204 + }, + { + "name": "image", + "type": "IMAGE", + "link": 205 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 281 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "ImageUpscaleWithModel" + }, + "widgets_values": [] + }, + { + "id": 35, + "type": "Hy3DDelightImage", + "pos": [ + -560, + 870 + ], + "size": [ + 278.7183837890625, + 258 + ], + "flags": {}, + "order": 56, + "mode": 0, + "inputs": [ + { + "name": "delight_pipe", + "type": "HY3DDIFFUSERSPIPE", + "link": 30 + }, + { + "name": "image", + "type": "IMAGE", + "link": 99 + }, + { + "name": "scheduler", + "shape": 7, + "type": "NOISESCHEDULER", + "link": 265 + }, + { + "name": "width", + "type": "INT", + "widget": { + "name": "width" + }, + "link": 262 + }, + { + "name": "height", + "type": "INT", + "widget": { + "name": "height" + }, + "link": 263 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 57, + 196 + ] + } + ], + "properties": { + "cnr_id": "comfyui-hunyan3dwrapper", + "ver": "c1f95d9a6e15ab5cf0bf301725c7849d4a6ee5f0", + "Node name for S&R": "Hy3DDelightImage", + "aux_id": "kijai/ComfyUI-Hunyuan3DWrapper" + }, + "widgets_values": [ + 50, + 512, + 512, + 1, + 0, + "fixed" + ] + }, + { + "id": 88, + "type": "Hy3DSampleMultiView", + "pos": [ + 1931.8062744140625, + -35.47873306274414 + ], + "size": [ + 311.7241516113281, + 286 + ], + "flags": {}, + "order": 63, + "mode": 0, + "inputs": [ + { + "name": "pipeline", + "type": "HY3DDIFFUSERSPIPE", + "link": 139 + }, + { + "name": "ref_image", + "type": "IMAGE", + "link": 196 + }, + { + "name": "normal_maps", + "type": "IMAGE", + "link": 193 + }, + { + "name": "position_maps", + "type": "IMAGE", + "link": 142 + }, + { + "name": "camera_config", + "shape": 7, + "type": "HY3DCAMERA", + "link": 273 + }, + { + "name": "scheduler", + "shape": 7, + "type": "NOISESCHEDULER", + "link": 267 + }, + { + "name": "view_size", + "type": "INT", + "widget": { + "name": "view_size" + }, + "link": 264 + }, + { + "name": "samples", + "shape": 7, + "type": "LATENT", + "link": null + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 192, + 205 + ] + } + ], + "properties": { + "cnr_id": "comfyui-hunyan3dwrapper", + "ver": "c1f95d9a6e15ab5cf0bf301725c7849d4a6ee5f0", + "Node name for S&R": "Hy3DSampleMultiView", + "aux_id": "kijai/ComfyUI-Hunyuan3DWrapper" + }, + "widgets_values": [ + 512, + 25, + 1024, + "fixed", + 1 + ] + }, + { + "id": 168, + "type": "MaskPreview+", + "pos": [ + 228.18722534179688, + -1170.0869140625 + ], + "size": [ + 270.70751953125, + 246 + ], + "flags": {}, + "order": 39, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 290 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfyui_essentials", + "ver": "9d9f4bedfc9f0321c19faf71855e228c93bd0dc9", + "Node name for S&R": "MaskPreview+", + "aux_id": "cubiq/ComfyUI_essentials", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "" + ] + }, + { + "id": 170, + "type": "Display Int (rgthree)", + "pos": [ + 967.0818481445312, + -1198.6170654296875 + ], + "size": [ + 315, + 112 + ], + "flags": {}, + "order": 41, + "mode": 0, + "inputs": [ + { + "dir": 3, + "name": "input", + "type": "INT", + "widget": { + "name": "input" + }, + "link": 307 + } + ], + "outputs": [], + "title": "X Cropped", + "properties": { + "cnr_id": "rgthree-comfy", + "ver": "1.0.2505212136", + "Node name for S&R": "Display Int (rgthree)", + "widget_ue_connectable": {} + }, + "widgets_values": [ + 0, + "" + ] + }, + { + "id": 171, + "type": "Display Int (rgthree)", + "pos": [ + 968.6837158203125, + -1027.257568359375 + ], + "size": [ + 315, + 112 + ], + "flags": {}, + "order": 42, + "mode": 0, + "inputs": [ + { + "dir": 3, + "name": "input", + "type": "INT", + "widget": { + "name": "input" + }, + "link": 308 + } + ], + "outputs": [], + "title": "Y Cropped", + "properties": { + "cnr_id": "rgthree-comfy", + "ver": "1.0.2505212136", + "Node name for S&R": "Display Int (rgthree)", + "widget_ue_connectable": {} + }, + "widgets_values": [ + 0, + "" + ] + }, + { + "id": 201, + "type": "PreviewImage", + "pos": [ + 5327.0166015625, + -440.7585754394531 + ], + "size": [ + 259.6498718261719, + 258 + ], + "flags": {}, + "order": 91, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 424 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "PreviewImage", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 195, + "type": "Note", + "pos": [ + 5288.5673828125, + -1030.6578369140625 + ], + "size": [ + 424.035400390625, + 88 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "EMISSION 1 VARIANT" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 196, + "type": "PreviewImage", + "pos": [ + 5357.81103515625, + -906.7869873046875 + ], + "size": [ + 263.5549011230469, + 264.25262451171875 + ], + "flags": {}, + "order": 89, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 421 + } + ], + "outputs": [], + "title": "Emission Texture", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "PreviewImage", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 209, + "type": "Note", + "pos": [ + 5337.9931640625, + -1343.491455078125 + ], + "size": [ + 255.73280334472656, + 228.2096405029297 + ], + "flags": { + "collapsed": false + }, + "order": 9, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "Emission Texture", + "properties": {}, + "widgets_values": [ + "No EMUSSION MAP for this model" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 194, + "type": "Note", + "pos": [ + 5281.224609375, + -1481.518798828125 + ], + "size": [ + 419.6430969238281, + 88 + ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "NO EMISSION VARIANT" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 211, + "type": "Note", + "pos": [ + 5267.37255859375, + 400.9737243652344 + ], + "size": [ + 212.285400390625, + 176.3300018310547 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "PRESET \"BRUSHED STEEL\" VARIANT" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 208, + "type": "Note", + "pos": [ + 5266.46533203125, + 21.737382888793945 + ], + "size": [ + 212.285400390625, + 176.3300018310547 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "PRESET \"SPACESHIP METAL\" VARIANT" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 219, + "type": "Note", + "pos": [ + 5280.27734375, + 1676.8887939453125 + ], + "size": [ + 212.285400390625, + 176.3300018310547 + ], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "PRESET \"TITANIUM\" VARIANT" + ], + "color": "#323", + "bgcolor": "#535" + }, + { + "id": 199, + "type": "Note", + "pos": [ + 5261.509765625, + -568.2102661132812 + ], + "size": [ + 424.035400390625, + 88 + ], + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "EMISSION 2 VARIANT" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 56, + "type": "ImageRemoveBackground+", + "pos": [ + -684.3390502929688, + -457.51605224609375 + ], + "size": [ + 327.5999755859375, + 46 + ], + "flags": {}, + "order": 48, + "mode": 0, + "inputs": [ + { + "name": "rembg_session", + "type": "REMBG_SESSION", + "link": 74 + }, + { + "name": "image", + "type": "IMAGE", + "link": 257 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [] + }, + { + "name": "MASK", + "type": "MASK", + "slot_index": 1, + "links": [ + 244, + 259 + ] + } + ], + "properties": { + "cnr_id": "comfyui_essentials", + "ver": "9d9f4bedfc9f0321c19faf71855e228c93bd0dc9", + "Node name for S&R": "ImageRemoveBackground+", + "aux_id": "cubiq/ComfyUI_essentials" + }, + "widgets_values": [] + }, + { + "id": 55, + "type": "TransparentBGSession+", + "pos": [ + -694.5762939453125, + -597.4197387695312 + ], + "size": [ + 340.20001220703125, + 82 + ], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "REMBG_SESSION", + "type": "REMBG_SESSION", + "slot_index": 0, + "links": [ + 74 + ] + } + ], + "properties": { + "cnr_id": "comfyui_essentials", + "ver": "9d9f4bedfc9f0321c19faf71855e228c93bd0dc9", + "Node name for S&R": "TransparentBGSession+", + "aux_id": "cubiq/ComfyUI_essentials" + }, + "widgets_values": [ + "base", + true + ] + }, + { + "id": 137, + "type": "Note", + "pos": [ + -683.5238647460938, + -314.4945983886719 + ], + "size": [ + 312.0663146972656, + 88 + ], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "https://huggingface.co/Kijai/Hunyuan3D-2_safetensors/blob/main/hunyuan3d-dit-v2-0-fp16.safetensors" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 140, + "type": "Hy3DVAEDecode", + "pos": [ + -322.4228515625, + -58.48441696166992 + ], + "size": [ + 315, + 222 + ], + "flags": {}, + "order": 53, + "mode": 0, + "inputs": [ + { + "name": "vae", + "type": "HY3DVAE", + "link": 250 + }, + { + "name": "latents", + "type": "HY3DLATENT", + "link": 255 + } + ], + "outputs": [ + { + "name": "trimesh", + "type": "TRIMESH", + "slot_index": 0, + "links": [ + 251 + ] + } + ], + "properties": { + "cnr_id": "comfyui-hunyan3dwrapper", + "ver": "c1f95d9a6e15ab5cf0bf301725c7849d4a6ee5f0", + "Node name for S&R": "Hy3DVAEDecode", + "aux_id": "kijai/ComfyUI-Hunyuan3DWrapper" + }, + "widgets_values": [ + 1.01, + 384, + 32000, + 0, + "mc", + true, + true + ] + }, + { + "id": 10, + "type": "Hy3DModelLoader", + "pos": [ + -737.0077514648438, + -178.9892120361328 + ], + "size": [ + 372.8913269042969, + 126 + ], + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [ + { + "name": "compile_args", + "shape": 7, + "type": "HY3DCOMPILEARGS", + "link": null + } + ], + "outputs": [ + { + "name": "pipeline", + "type": "HY3DMODEL", + "slot_index": 0, + "links": [ + 252 + ] + }, + { + "name": "vae", + "type": "HY3DVAE", + "slot_index": 1, + "links": [ + 250 + ] + } + ], + "properties": { + "cnr_id": "comfyui-hunyan3dwrapper", + "ver": "c1f95d9a6e15ab5cf0bf301725c7849d4a6ee5f0", + "Node name for S&R": "Hy3DModelLoader", + "aux_id": "kijai/ComfyUI-Hunyuan3DWrapper" + }, + "widgets_values": [ + "hunyuan3d-dit-v2-0-fp16.safetensors", + "sdpa", + false + ] + }, + { + "id": 138, + "type": "MaskPreview+", + "pos": [ + -304.9519958496094, + -371.05218505859375 + ], + "size": [ + 270.70751953125, + 246 + ], + "flags": {}, + "order": 49, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 244 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfyui_essentials", + "ver": "9d9f4bedfc9f0321c19faf71855e228c93bd0dc9", + "Node name for S&R": "MaskPreview+", + "aux_id": "cubiq/ComfyUI_essentials" + }, + "widgets_values": [ + "" + ] + }, + { + "id": 174, + "type": "PreviewImage", + "pos": [ + -289.44549560546875, + -672.3742065429688 + ], + "size": [ + 248.90452575683594, + 246 + ], + "flags": {}, + "order": 47, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 310 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "PreviewImage", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "" + ] + }, + { + "id": 59, + "type": "Hy3DPostprocessMesh", + "pos": [ + 55.46484375, + -785.1419677734375 + ], + "size": [ + 315, + 174 + ], + "flags": {}, + "order": 55, + "mode": 0, + "inputs": [ + { + "name": "trimesh", + "type": "TRIMESH", + "link": 251 + }, + { + "name": "mask", + "shape": 7, + "type": "MASK", + "link": null + } + ], + "outputs": [ + { + "name": "trimesh", + "type": "TRIMESH", + "slot_index": 0, + "links": [ + 86, + 133 + ] + } + ], + "properties": { + "cnr_id": "comfyui-hunyan3dwrapper", + "ver": "c1f95d9a6e15ab5cf0bf301725c7849d4a6ee5f0", + "Node name for S&R": "Hy3DPostprocessMesh", + "aux_id": "kijai/ComfyUI-Hunyuan3DWrapper" + }, + "widgets_values": [ + true, + true, + true, + 50000, + false + ] + }, + { + "id": 17, + "type": "Hy3DExportMesh", + "pos": [ + 398.43450927734375, + -763.18359375 + ], + "size": [ + 315.6768493652344, + 106 + ], + "flags": {}, + "order": 57, + "mode": 0, + "inputs": [ + { + "name": "trimesh", + "type": "TRIMESH", + "link": 86 + } + ], + "outputs": [ + { + "name": "glb_path", + "type": "STRING", + "slot_index": 0, + "links": [ + 277 + ] + } + ], + "properties": { + "cnr_id": "comfyui-hunyan3dwrapper", + "ver": "c1f95d9a6e15ab5cf0bf301725c7849d4a6ee5f0", + "Node name for S&R": "Hy3DExportMesh", + "aux_id": "kijai/ComfyUI-Hunyuan3DWrapper" + }, + "widgets_values": [ + "3D/Hy3D", + "glb", + true + ] + }, + { + "id": 155, + "type": "Note", + "pos": [ + 746.8792114257812, + -752.7561645507812 + ], + "size": [ + 317.4715270996094, + 108.64700317382812 + ], + "flags": {}, + "order": 18, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "If the Preview3D node doesn't work, right click on it and select \"fix node\" or re-create the whole node. It's part of ComfyUI and often gets updated causing mismatch with the version that's in the workflow." + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 143, + "type": "Reroute", + "pos": [ + -668.747802734375, + -28.749713897705078 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 50, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 259 + } + ], + "outputs": [ + { + "name": "", + "type": "MASK", + "slot_index": 0, + "links": [ + 260, + 261 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 104, + "type": "CV2InpaintTexture", + "pos": [ + 3436.747802734375, + 291.1744689941406 + ], + "size": [ + 239.40000915527344, + 102 + ], + "flags": {}, + "order": 71, + "mode": 0, + "inputs": [ + { + "name": "texture", + "type": "IMAGE", + "link": 220 + }, + { + "name": "mask", + "type": "MASK", + "link": 222 + } + ], + "outputs": [ + { + "name": "texture", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 185, + 209, + 387 + ] + } + ], + "properties": { + "cnr_id": "comfyui-hunyan3dwrapper", + "ver": "c1f95d9a6e15ab5cf0bf301725c7849d4a6ee5f0", + "Node name for S&R": "CV2InpaintTexture", + "aux_id": "kijai/ComfyUI-Hunyuan3DWrapper" + }, + "widgets_values": [ + 3, + "ns" + ] + }, + { + "id": 79, + "type": "Hy3DRenderMultiView", + "pos": [ + 573.1918334960938, + 714.05322265625 + ], + "size": [ + 342.5999755859375, + 170 + ], + "flags": {}, + "order": 61, + "mode": 0, + "inputs": [ + { + "name": "trimesh", + "type": "TRIMESH", + "link": 134 + }, + { + "name": "camera_config", + "shape": 7, + "type": "HY3DCAMERA", + "link": 272 + } + ], + "outputs": [ + { + "name": "normal_maps", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 148, + 193 + ] + }, + { + "name": "position_maps", + "type": "IMAGE", + "slot_index": 1, + "links": [ + 142, + 199 + ] + }, + { + "name": "renderer", + "type": "MESHRENDER", + "links": [ + 151 + ] + }, + { + "name": "masks", + "type": "MASK", + "links": null + } + ], + "properties": { + "cnr_id": "comfyui-hunyan3dwrapper", + "ver": "c1f95d9a6e15ab5cf0bf301725c7849d4a6ee5f0", + "Node name for S&R": "Hy3DRenderMultiView", + "aux_id": "kijai/ComfyUI-Hunyuan3DWrapper" + }, + "widgets_values": [ + 1024, + 2048, + "world" + ] + }, + { + "id": 115, + "type": "Note", + "pos": [ + 302.29296875, + 940.1256713867188 + ], + "size": [ + 244.82861328125, + 119.78506469726562 + ], + "flags": {}, + "order": 19, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "These are the default camera views used, customizing is fully experimental. To customize." + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 83, + "type": "Hy3DMeshUVWrap", + "pos": [ + 283.91644287109375, + 709.8867797851562 + ], + "size": [ + 214.20001220703125, + 26 + ], + "flags": {}, + "order": 58, + "mode": 0, + "inputs": [ + { + "name": "trimesh", + "type": "TRIMESH", + "link": 133 + } + ], + "outputs": [ + { + "name": "trimesh", + "type": "TRIMESH", + "slot_index": 0, + "links": [ + 134 + ] + } + ], + "properties": { + "cnr_id": "comfyui-hunyan3dwrapper", + "ver": "c1f95d9a6e15ab5cf0bf301725c7849d4a6ee5f0", + "Node name for S&R": "Hy3DMeshUVWrap", + "aux_id": "kijai/ComfyUI-Hunyuan3DWrapper" + }, + "widgets_values": [] + }, + { + "id": 111, + "type": "PreviewImage", + "pos": [ + 1835.9698486328125, + 438.5705871582031 + ], + "size": [ + 801.6017456054688, + 562.7461547851562 + ], + "flags": {}, + "order": 65, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 192 + } + ], + "outputs": [], + "title": "Preview Image: Multiview results", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [ + "" + ] + }, + { + "id": 13, + "type": "LoadImage", + "pos": [ + -1018.7398071289062, + -1266.8526611328125 + ], + "size": [ + 315, + 314.0000305175781 + ], + "flags": {}, + "order": 20, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 411 + ] + }, + { + "name": "MASK", + "type": "MASK", + "slot_index": 1, + "links": [] + } + ], + "title": "Load Image (for single file)", + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "corv_00016_runecaster_00001_.png", + "image", + "" + ] + }, + { + "id": 167, + "type": "TransparentBGSession+", + "pos": [ + -133.59591674804688, + -1273.64013671875 + ], + "size": [ + 340.20001220703125, + 82 + ], + "flags": {}, + "order": 21, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "REMBG_SESSION", + "type": "REMBG_SESSION", + "slot_index": 0, + "links": [ + 289 + ] + } + ], + "properties": { + "cnr_id": "comfyui_essentials", + "ver": "9d9f4bedfc9f0321c19faf71855e228c93bd0dc9", + "Node name for S&R": "TransparentBGSession+", + "aux_id": "cubiq/ComfyUI_essentials", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "base", + true + ] + }, + { + "id": 166, + "type": "ImageRemoveBackground+", + "pos": [ + -123.37053680419922, + -1149.9547119140625 + ], + "size": [ + 327.5999755859375, + 46 + ], + "flags": {}, + "order": 38, + "mode": 0, + "inputs": [ + { + "name": "rembg_session", + "type": "REMBG_SESSION", + "link": 289 + }, + { + "name": "image", + "type": "IMAGE", + "link": 409 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": null + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 290, + 291, + 309 + ] + } + ], + "properties": { + "cnr_id": "comfyui_essentials", + "ver": "9d9f4bedfc9f0321c19faf71855e228c93bd0dc9", + "Node name for S&R": "ImageRemoveBackground+", + "widget_ue_connectable": {} + }, + "widgets_values": [] + }, + { + "id": 165, + "type": "ImageCrop", + "pos": [ + -124.26599884033203, + -1061.829833984375 + ], + "size": [ + 315, + 130 + ], + "flags": {}, + "order": 43, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 410 + }, + { + "name": "x", + "type": "INT", + "widget": { + "name": "x" + }, + "link": 305 + }, + { + "name": "y", + "type": "INT", + "widget": { + "name": "y" + }, + "link": 306 + }, + { + "name": "height", + "type": "INT", + "widget": { + "name": "height" + }, + "link": 304 + }, + { + "name": "width", + "type": "INT", + "widget": { + "name": "width" + }, + "link": 303 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 293 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "ImageCrop", + "widget_ue_connectable": {} + }, + "widgets_values": [ + 512, + 512, + 0, + 0 + ] + }, + { + "id": 232, + "type": "Reroute", + "pos": [ + -240.107177734375, + -1210.0545654296875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 37, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 468 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 409, + 410 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 233, + "type": "Note", + "pos": [ + -367.4198913574219, + -1338.4853515625 + ], + "size": [ + 210, + 88 + ], + "flags": {}, + "order": 22, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "1. (upper) connect LOAD IMAGE if want to gen single image instead of a batch\n2. (lower) connect the load image batch for batch generation" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 234, + "type": "Reroute", + "pos": [ + -341.7342224121094, + -1235.740966796875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 34, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 411 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 224, + "type": "Note", + "pos": [ + 5286.18408203125, + 2059.0908203125 + ], + "size": [ + 212.285400390625, + 176.3300018310547 + ], + "flags": {}, + "order": 23, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "PRESET \"COBALT METAL\" VARIANT" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 228, + "type": "Note", + "pos": [ + 5298.45263671875, + 2431.325439453125 + ], + "size": [ + 212.285400390625, + 176.3300018310547 + ], + "flags": { + "collapsed": false + }, + "order": 24, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "PRESET \"ALIEN TECH\" VARIANT" + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 215, + "type": "Note", + "pos": [ + 5269.0419921875, + 812.7933349609375 + ], + "size": [ + 212.285400390625, + 176.3300018310547 + ], + "flags": {}, + "order": 25, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "PRESET \"CHROME HULL\" VARIANT" + ], + "color": "#233", + "bgcolor": "#355" + }, + { + "id": 229, + "type": "PreviewImage", + "pos": [ + 5525.94140625, + 2436.582275390625 + ], + "size": [ + 211.3091278076172, + 246 + ], + "flags": {}, + "order": 93, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 449 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "PreviewImage", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "" + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 225, + "type": "PreviewImage", + "pos": [ + 5513.6728515625, + 2064.34765625 + ], + "size": [ + 214.01174926757812, + 246 + ], + "flags": {}, + "order": 95, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 448 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "PreviewImage", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 220, + "type": "PreviewImage", + "pos": [ + 5507.76611328125, + 1682.1456298828125 + ], + "size": [ + 207.25521850585938, + 246 + ], + "flags": {}, + "order": 97, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 447 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "PreviewImage", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "" + ], + "color": "#323", + "bgcolor": "#535" + }, + { + "id": 216, + "type": "PreviewImage", + "pos": [ + 5496.53076171875, + 807.8975830078125 + ], + "size": [ + 211.3091278076172, + 246 + ], + "flags": {}, + "order": 99, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 446 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "PreviewImage", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "" + ], + "color": "#233", + "bgcolor": "#355" + }, + { + "id": 206, + "type": "PreviewImage", + "pos": [ + 5493.9541015625, + 26.994245529174805 + ], + "size": [ + 200.49868774414062, + 246 + ], + "flags": {}, + "order": 103, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 444 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "PreviewImage", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 247, + "type": "Note", + "pos": [ + 5277.30712890625, + 1249.2191162109375 + ], + "size": [ + 212.285400390625, + 176.3300018310547 + ], + "flags": {}, + "order": 26, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "PRESET \"CHROME HULL LITE\" VARIANT" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 248, + "type": "PreviewImage", + "pos": [ + 5504.7958984375, + 1244.3233642578125 + ], + "size": [ + 211.3091278076172, + 246 + ], + "flags": {}, + "order": 105, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 450 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "PreviewImage", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 203, + "type": "Preview3D", + "pos": [ + 5725.62646484375, + -559.3807983398438 + ], + "size": [ + 457.7725830078125, + 418.9330139160156 + ], + "flags": {}, + "order": 90, + "mode": 0, + "inputs": [ + { + "name": "model_file", + "type": "STRING", + "widget": { + "name": "model_file" + }, + "link": 423 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "Preview3D", + "widget_ue_connectable": {}, + "Camera Info": { + "position": { + "x": 9.662173140940727, + "y": 9.662173140940729, + "z": 9.662173140940729 + }, + "target": { + "x": 0, + "y": 0, + "z": 0 + }, + "zoom": 1, + "cameraType": "perspective" + }, + "Show Grid": true, + "Light Intensity": 1 + }, + "widgets_values": [ + "RENDER_DISABLED", + "" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 187, + "type": "Preview3D", + "pos": [ + 5745.41357421875, + -1022.8450927734375 + ], + "size": [ + 432.34149169921875, + 399.877197265625 + ], + "flags": {}, + "order": 88, + "mode": 0, + "inputs": [ + { + "name": "model_file", + "type": "STRING", + "widget": { + "name": "model_file" + }, + "link": 422 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "Preview3D", + "widget_ue_connectable": {}, + "Camera Info": { + "position": { + "x": 6.145970935777887, + "y": 3.256987832732286, + "z": -3.7373252345871846 + }, + "target": { + "x": 0, + "y": 0.5349758375503816, + "z": 0 + }, + "zoom": 1, + "cameraType": "perspective" + }, + "Show Grid": true, + "Light Intensity": 1 + }, + "widgets_values": [ + "corv_00001_shadowthorn_00003_.png_00001_emmision2.glb", + "" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 154, + "type": "Preview3D", + "pos": [ + 5738.81787109375, + -1471.4542236328125 + ], + "size": [ + 440.6356506347656, + 409.1581726074219 + ], + "flags": {}, + "order": 87, + "mode": 0, + "inputs": [ + { + "name": "model_file", + "type": "STRING", + "widget": { + "name": "model_file" + }, + "link": 415 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "Preview3D", + "Camera Info": { + "position": { + "x": 5.513148437852794, + "y": 4.5530634844170415, + "z": -2.61590479436194 + }, + "target": { + "x": 0, + "y": 0.5349758375503816, + "z": 0 + }, + "zoom": 1, + "cameraType": "perspective" + }, + "Show Grid": true, + "Light Intensity": 1 + }, + "widgets_values": [ + "corv_00001_shadowthorn_00003_.png_00001_noemission.glb", + "" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 250, + "type": "Reroute", + "pos": [ + 5737.68994140625, + 35.80877685546875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 102, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 454 + } + ], + "outputs": [ + { + "name": "", + "type": "STRING", + "links": [] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 251, + "type": "Reroute", + "pos": [ + 5765.388671875, + 413.6921081542969 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 100, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 456 + } + ], + "outputs": [ + { + "name": "", + "type": "STRING", + "links": [] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 252, + "type": "Reroute", + "pos": [ + 5768.26611328125, + 817.8348388671875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 98, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 458 + } + ], + "outputs": [ + { + "name": "", + "type": "STRING", + "links": [] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 253, + "type": "Reroute", + "pos": [ + 5765.56787109375, + 1253.0931396484375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 104, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 460 + } + ], + "outputs": [ + { + "name": "", + "type": "STRING", + "links": [] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 254, + "type": "Reroute", + "pos": [ + 5766.64697265625, + 1687.6319580078125 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 96, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 462 + } + ], + "outputs": [ + { + "name": "", + "type": "STRING", + "links": [] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 255, + "type": "Reroute", + "pos": [ + 5776.53857421875, + 2075.2275390625 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 94, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 464 + } + ], + "outputs": [ + { + "name": "", + "type": "STRING", + "links": [] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 245, + "type": "QPresetGLBMaterialModifier", + "pos": [ + 4825.275390625, + 2433.439697265625 + ], + "size": [ + 443.4000244140625, + 198 + ], + "flags": {}, + "order": 80, + "mode": 0, + "inputs": [ + { + "name": "texture_image", + "type": "IMAGE", + "link": 431 + }, + { + "name": "glb_path", + "type": "STRING", + "widget": { + "name": "glb_path" + }, + "link": 432 + } + ], + "outputs": [ + { + "name": "modified_glb_path", + "type": "STRING", + "links": [ + 466 + ] + }, + { + "name": "emissive_mask_preview", + "type": "IMAGE", + "links": [ + 449 + ] + } + ], + "properties": { + "Node name for S&R": "QPresetGLBMaterialModifier", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "preset_alien_tech", + "Alien Tech", + "preset_alien_tech", + "Smart Auto", + 128, + 128 + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 256, + "type": "Reroute", + "pos": [ + 5792.72705078125, + 2447.535400390625 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 92, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 466 + } + ], + "outputs": [ + { + "name": "", + "type": "STRING", + "links": [] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 85, + "type": "DownloadAndLoadHy3DPaintModel", + "pos": [ + 1923.3720703125, + -166.0024871826172 + ], + "size": [ + 327.5999755859375, + 58 + ], + "flags": {}, + "order": 27, + "mode": 0, + "inputs": [ + { + "name": "compile_args", + "shape": 7, + "type": "HY3DCOMPILEARGS", + "link": null + } + ], + "outputs": [ + { + "name": "multiview_pipe", + "type": "HY3DDIFFUSERSPIPE", + "links": [ + 139, + 268 + ] + } + ], + "properties": { + "cnr_id": "comfyui-hunyan3dwrapper", + "ver": "c1f95d9a6e15ab5cf0bf301725c7849d4a6ee5f0", + "Node name for S&R": "DownloadAndLoadHy3DPaintModel", + "aux_id": "kijai/ComfyUI-Hunyuan3DWrapper" + }, + "widgets_values": [ + "hunyuan3d-paint-v2-0" + ] + }, + { + "id": 230, + "type": "Reroute", + "pos": [ + 4366.806640625, + 647.37451171875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 74, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 387 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 416, + 417, + 419, + 426, + 427, + 428, + 429, + 430, + 431, + 452 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 231, + "type": "Reroute", + "pos": [ + 4369.908203125, + 790.8531494140625 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 76, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "widget": { + "name": "value" + }, + "link": 397 + } + ], + "outputs": [ + { + "name": "", + "type": "STRING", + "links": [ + 414, + 418, + 420, + 432, + 433, + 434, + 435, + 436, + 437, + 453 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 141, + "type": "Hy3DGenerateMesh", + "pos": [ + -706.2314453125, + 52.41744613647461 + ], + "size": [ + 315, + 218 + ], + "flags": {}, + "order": 51, + "mode": 0, + "inputs": [ + { + "name": "pipeline", + "type": "HY3DMODEL", + "link": 252 + }, + { + "name": "image", + "type": "IMAGE", + "link": 258 + }, + { + "name": "mask", + "shape": 7, + "type": "MASK", + "link": 260 + } + ], + "outputs": [ + { + "name": "latents", + "type": "HY3DLATENT", + "links": [ + 255 + ] + } + ], + "properties": { + "cnr_id": "comfyui-hunyan3dwrapper", + "ver": "c1f95d9a6e15ab5cf0bf301725c7849d4a6ee5f0", + "Node name for S&R": "Hy3DGenerateMesh", + "aux_id": "kijai/ComfyUI-Hunyuan3DWrapper" + }, + "widgets_values": [ + 5.5, + 50, + 123, + "fixed", + "FlowMatchEulerDiscreteScheduler", + true + ] + }, + { + "id": 237, + "type": "QManualGLBMaterialModifier", + "pos": [ + 4803.4150390625, + -1474.973388671875 + ], + "size": [ + 443.4000244140625, + 366 + ], + "flags": {}, + "order": 77, + "mode": 0, + "inputs": [ + { + "name": "texture_image", + "type": "IMAGE", + "link": 416 + }, + { + "name": "glb_path", + "type": "STRING", + "widget": { + "name": "glb_path" + }, + "link": 414 + } + ], + "outputs": [ + { + "name": "modified_glb_path", + "type": "STRING", + "links": [ + 415 + ] + }, + { + "name": "emissive_mask_preview", + "type": "IMAGE", + "links": null + } + ], + "properties": { + "Node name for S&R": "QManualGLBMaterialModifier", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "", + "noemission", + 0.8000000000000002, + 0.5000000000000001, + 1, + 1, + 1, + 0.20000000000000004, + 0.12000000000000002, + 128, + 0, + false, + true + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 238, + "type": "QManualGLBMaterialModifier", + "pos": [ + 4775.3427734375, + -1016.2594604492188 + ], + "size": [ + 443.4000244140625, + 366 + ], + "flags": {}, + "order": 78, + "mode": 0, + "inputs": [ + { + "name": "texture_image", + "type": "IMAGE", + "link": 417 + }, + { + "name": "glb_path", + "type": "STRING", + "widget": { + "name": "glb_path" + }, + "link": 418 + } + ], + "outputs": [ + { + "name": "modified_glb_path", + "type": "STRING", + "links": [ + 422 + ] + }, + { + "name": "emissive_mask_preview", + "type": "IMAGE", + "links": [ + 421 + ] + } + ], + "properties": { + "Node name for S&R": "QManualGLBMaterialModifier", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "", + "emmision2", + 1, + 0.8000000000000002, + 1, + 1, + 1, + 0.30000000000000004, + 0.05000000000000001, + 128, + 1, + true, + true + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 157, + "type": "Preview3D", + "pos": [ + 126.29827117919922, + -547.6575927734375 + ], + "size": [ + 952.0661010742188, + 1055.78515625 + ], + "flags": {}, + "order": 60, + "mode": 0, + "inputs": [ + { + "name": "model_file", + "type": "STRING", + "widget": { + "name": "model_file" + }, + "link": 277 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "Preview3D", + "FOV": 91, + "Camera Info": { + "position": { + "x": 6.302494097246089, + "y": 6.302494097246089, + "z": 6.30249409724609 + }, + "target": { + "x": 0, + "y": 0, + "z": 0 + }, + "zoom": 1, + "cameraType": "perspective" + } + }, + "widgets_values": [ + "3D/Hy3D_00048_.glb", + "" + ] + }, + { + "id": 246, + "type": "QPresetGLBMaterialModifier", + "pos": [ + 4800.81201171875, + 1251.7720947265625 + ], + "size": [ + 443.4000244140625, + 198 + ], + "flags": {}, + "order": 86, + "mode": 0, + "inputs": [ + { + "name": "texture_image", + "type": "IMAGE", + "link": 452 + }, + { + "name": "glb_path", + "type": "STRING", + "widget": { + "name": "glb_path" + }, + "link": 453 + } + ], + "outputs": [ + { + "name": "modified_glb_path", + "type": "STRING", + "links": [ + 460 + ] + }, + { + "name": "emissive_mask_preview", + "type": "IMAGE", + "links": [ + 450 + ] + } + ], + "properties": { + "Node name for S&R": "QPresetGLBMaterialModifier", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "preset_chrome_hull", + "Chrome Hull Lite", + "preset_chrome_hull_lite", + "Smart Auto", + 128, + true + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 242, + "type": "QPresetGLBMaterialModifier", + "pos": [ + 4792.546875, + 815.3463745117188 + ], + "size": [ + 443.4000244140625, + 198 + ], + "flags": {}, + "order": 83, + "mode": 0, + "inputs": [ + { + "name": "texture_image", + "type": "IMAGE", + "link": 428 + }, + { + "name": "glb_path", + "type": "STRING", + "widget": { + "name": "glb_path" + }, + "link": 435 + } + ], + "outputs": [ + { + "name": "modified_glb_path", + "type": "STRING", + "links": [ + 458 + ] + }, + { + "name": "emissive_mask_preview", + "type": "IMAGE", + "links": [ + 446 + ] + } + ], + "properties": { + "Node name for S&R": "QPresetGLBMaterialModifier", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "preset_chrome_hull", + "Chrome Hull", + "preset_chrome_hull", + "Smart Auto", + 128, + true + ], + "color": "#233", + "bgcolor": "#355" + }, + { + "id": 240, + "type": "QPresetGLBMaterialModifier", + "pos": [ + 4781.1611328125, + 41.859107971191406 + ], + "size": [ + 443.4000244140625, + 198 + ], + "flags": {}, + "order": 85, + "mode": 0, + "inputs": [ + { + "name": "texture_image", + "type": "IMAGE", + "link": 426 + }, + { + "name": "glb_path", + "type": "STRING", + "widget": { + "name": "glb_path" + }, + "link": 437 + } + ], + "outputs": [ + { + "name": "modified_glb_path", + "type": "STRING", + "links": [ + 454 + ] + }, + { + "name": "emissive_mask_preview", + "type": "IMAGE", + "links": [ + 444 + ] + } + ], + "properties": { + "Node name for S&R": "QPresetGLBMaterialModifier", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "", + "Spaceship Metal", + "preset_spaceship_metal", + "Smart Auto", + 128, + true + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 235, + "type": "Reroute", + "pos": [ + -341.73419189453125, + -1184.3692626953125 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 36, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 412 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 468 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 119, + "type": "UpscaleModelLoader", + "pos": [ + 2298.1923828125, + -202.7042236328125 + ], + "size": [ + 315, + 58 + ], + "flags": {}, + "order": 28, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "UPSCALE_MODEL", + "type": "UPSCALE_MODEL", + "links": [ + 204 + ] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "UpscaleModelLoader" + }, + "widgets_values": [ + "4x_foolhardy_Remacri.pth" + ] + }, + { + "id": 149, + "type": "Hy3DDiffusersSchedulerConfig", + "pos": [ + 1951.2161865234375, + 315.6119689941406 + ], + "size": [ + 288.13494873046875, + 82 + ], + "flags": {}, + "order": 35, + "mode": 0, + "inputs": [ + { + "name": "pipeline", + "type": "HY3DDIFFUSERSPIPE", + "link": 268 + } + ], + "outputs": [ + { + "name": "diffusers_scheduler", + "type": "NOISESCHEDULER", + "slot_index": 0, + "links": [ + 267 + ] + } + ], + "properties": { + "cnr_id": "comfyui-hunyan3dwrapper", + "ver": "c1f95d9a6e15ab5cf0bf301725c7849d4a6ee5f0", + "Node name for S&R": "Hy3DDiffusersSchedulerConfig", + "aux_id": "kijai/ComfyUI-Hunyuan3DWrapper" + }, + "widgets_values": [ + "Euler A", + "default" + ] + }, + { + "id": 212, + "type": "PreviewImage", + "pos": [ + 5512.05322265625, + 401.6458435058594 + ], + "size": [ + 201.84999084472656, + 246 + ], + "flags": {}, + "order": 101, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 445 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.27", + "Node name for S&R": "PreviewImage", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "" + ] + }, + { + "id": 239, + "type": "QManualGLBMaterialModifier", + "pos": [ + 4789.51904296875, + -556.613037109375 + ], + "size": [ + 443.4000244140625, + 366 + ], + "flags": {}, + "order": 79, + "mode": 0, + "inputs": [ + { + "name": "texture_image", + "type": "IMAGE", + "link": 419 + }, + { + "name": "glb_path", + "type": "STRING", + "widget": { + "name": "glb_path" + }, + "link": 420 + } + ], + "outputs": [ + { + "name": "modified_glb_path", + "type": "STRING", + "links": [ + 423 + ] + }, + { + "name": "emissive_mask_preview", + "type": "IMAGE", + "links": [ + 424 + ] + } + ], + "properties": { + "Node name for S&R": "QManualGLBMaterialModifier", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "", + "emmision1", + 0.9000000000000001, + 0.6000000000000001, + 1, + 1, + 1, + 0.20000000000000004, + 0.10000000000000002, + 160, + 1.5, + true, + true + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 241, + "type": "QPresetGLBMaterialModifier", + "pos": [ + 4786.45556640625, + 412.383544921875 + ], + "size": [ + 443.4000244140625, + 198 + ], + "flags": {}, + "order": 84, + "mode": 0, + "inputs": [ + { + "name": "texture_image", + "type": "IMAGE", + "link": 427 + }, + { + "name": "glb_path", + "type": "STRING", + "widget": { + "name": "glb_path" + }, + "link": 436 + } + ], + "outputs": [ + { + "name": "modified_glb_path", + "type": "STRING", + "links": [ + 456 + ] + }, + { + "name": "emissive_mask_preview", + "type": "IMAGE", + "links": [ + 445 + ] + } + ], + "properties": { + "Node name for S&R": "QPresetGLBMaterialModifier", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "preset_brushed_steel", + "Brushed Steel", + "preset_brushed_steel", + "Smart Auto", + 128, + true + ] + }, + { + "id": 243, + "type": "QPresetGLBMaterialModifier", + "pos": [ + 4803.2119140625, + 1683.4366455078125 + ], + "size": [ + 443.4000244140625, + 198 + ], + "flags": {}, + "order": 82, + "mode": 0, + "inputs": [ + { + "name": "texture_image", + "type": "IMAGE", + "link": 429 + }, + { + "name": "glb_path", + "type": "STRING", + "widget": { + "name": "glb_path" + }, + "link": 434 + } + ], + "outputs": [ + { + "name": "modified_glb_path", + "type": "STRING", + "links": [ + 462 + ] + }, + { + "name": "emissive_mask_preview", + "type": "IMAGE", + "links": [ + 447 + ] + } + ], + "properties": { + "Node name for S&R": "QPresetGLBMaterialModifier", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "preset_titanium", + "Titanium", + "preset_titanium", + "Smart Auto", + 128, + true + ], + "color": "#323", + "bgcolor": "#535" + }, + { + "id": 244, + "type": "QPresetGLBMaterialModifier", + "pos": [ + 4816.21533203125, + 2064.520263671875 + ], + "size": [ + 443.4000244140625, + 198 + ], + "flags": {}, + "order": 81, + "mode": 0, + "inputs": [ + { + "name": "texture_image", + "type": "IMAGE", + "link": 430 + }, + { + "name": "glb_path", + "type": "STRING", + "widget": { + "name": "glb_path" + }, + "link": 433 + } + ], + "outputs": [ + { + "name": "modified_glb_path", + "type": "STRING", + "links": [ + 464 + ] + }, + { + "name": "emissive_mask_preview", + "type": "IMAGE", + "links": [ + 448 + ] + } + ], + "properties": { + "Node name for S&R": "QPresetGLBMaterialModifier", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "preset_combat_metal", + "Combat Metal", + "preset_combat_metal", + "Smart Auto", + 128, + true + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 161, + "type": "Load Image Batch", + "pos": [ + -675.1030883789062, + -1181.7628173828125 + ], + "size": [ + 315, + 270 + ], + "flags": {}, + "order": 29, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 412 + ] + }, + { + "name": "filename_text", + "type": "STRING", + "links": [ + 279, + 340, + 343 + ] + } + ], + "properties": { + "cnr_id": "was-node-suite-comfyui", + "ver": "1cd8d304eda256c412b8589ce1f00be3c61cf9ec", + "Node name for S&R": "Load Image Batch", + "aux_id": "WASasquatch/was-node-suite-comfyui" + }, + "widgets_values": [ + "incremental_image", + 451958508491, + "randomize", + 0, + "Batch 001l", + "I:\\GFX\\!!!NOWE_Statki\\001_2000_corv_Corvette\\selected", + "*.png", + "true", + "true" + ] + }, + { + "id": 98, + "type": "Hy3DApplyTexture", + "pos": [ + 3776.238037109375, + 316.1305236816406 + ], + "size": [ + 226.79998779296875, + 46 + ], + "flags": {}, + "order": 72, + "mode": 0, + "inputs": [ + { + "name": "texture", + "type": "IMAGE", + "link": 185 + }, + { + "name": "renderer", + "type": "MESHRENDER", + "link": 223 + } + ], + "outputs": [ + { + "name": "trimesh", + "type": "TRIMESH", + "slot_index": 0, + "links": [ + 163 + ] + } + ], + "properties": { + "cnr_id": "comfyui-hunyan3dwrapper", + "ver": "c1f95d9a6e15ab5cf0bf301725c7849d4a6ee5f0", + "Node name for S&R": "Hy3DApplyTexture", + "aux_id": "kijai/ComfyUI-Hunyuan3DWrapper" + }, + "widgets_values": [] + }, + { + "id": 99, + "type": "Hy3DExportMesh", + "pos": [ + 4095.458740234375, + 279.1615905761719 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 75, + "mode": 0, + "inputs": [ + { + "name": "trimesh", + "type": "TRIMESH", + "link": 163 + }, + { + "name": "filename_prefix", + "type": "STRING", + "widget": { + "name": "filename_prefix" + }, + "link": 279 + } + ], + "outputs": [ + { + "name": "glb_path", + "type": "STRING", + "slot_index": 0, + "links": [ + 323, + 397 + ] + } + ], + "properties": { + "cnr_id": "comfyui-hunyan3dwrapper", + "ver": "c1f95d9a6e15ab5cf0bf301725c7849d4a6ee5f0", + "Node name for S&R": "Hy3DExportMesh", + "aux_id": "kijai/ComfyUI-Hunyuan3DWrapper" + }, + "widgets_values": [ + "3D/Hy3D_textured", + "glb", + true + ] + }, + { + "id": 156, + "type": "Note", + "pos": [ + 6241.04736328125, + -104.53691101074219 + ], + "size": [ + 317.4715270996094, + 108.64700317382812 + ], + "flags": {}, + "order": 30, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "If the Preview3D node doesn't work, right click on it and select \"fix node\" or re-create the whole node. It's part of ComfyUI and often gets updated causing mismatch with the version that's in the workflow." + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 257, + "type": "Note", + "pos": [ + 5891.02734375, + 249.18521118164062 + ], + "size": [ + 317.4715270996094, + 108.64700317382812 + ], + "flags": {}, + "order": 31, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "Previews removed to save VRAM" + ], + "color": "#432", + "bgcolor": "#653" + } + ], + "links": [ + [ + 30, + 28, + 0, + 35, + 0, + "DELIGHTMODEL" + ], + [ + 57, + 35, + 0, + 45, + 0, + "IMAGE" + ], + [ + 74, + 55, + 0, + 56, + 0, + "REMBG_SESSION" + ], + [ + 86, + 59, + 0, + 17, + 0, + "HY3DMESH" + ], + [ + 99, + 64, + 0, + 35, + 1, + "IMAGE" + ], + [ + 133, + 59, + 0, + 83, + 0, + "HY3DMESH" + ], + [ + 134, + 83, + 0, + 79, + 0, + "HY3DMESH" + ], + [ + 139, + 85, + 0, + 88, + 0, + "HY3DPAINTMODEL" + ], + [ + 142, + 79, + 1, + 88, + 3, + "IMAGE" + ], + [ + 148, + 79, + 0, + 90, + 0, + "IMAGE" + ], + [ + 151, + 79, + 2, + 92, + 1, + "MESHRENDER" + ], + [ + 163, + 98, + 0, + 99, + 0, + "HY3DMESH" + ], + [ + 185, + 104, + 0, + 98, + 0, + "IMAGE" + ], + [ + 192, + 88, + 0, + 111, + 0, + "IMAGE" + ], + [ + 193, + 79, + 0, + 88, + 2, + "IMAGE" + ], + [ + 196, + 35, + 0, + 88, + 1, + "IMAGE" + ], + [ + 199, + 79, + 1, + 116, + 0, + "IMAGE" + ], + [ + 204, + 119, + 0, + 118, + 0, + "UPSCALE_MODEL" + ], + [ + 205, + 88, + 0, + 118, + 1, + "IMAGE" + ], + [ + 207, + 92, + 0, + 125, + 0, + "IMAGE" + ], + [ + 209, + 104, + 0, + 127, + 0, + "IMAGE" + ], + [ + 217, + 92, + 0, + 129, + 0, + "IMAGE" + ], + [ + 218, + 92, + 1, + 129, + 1, + "MASK" + ], + [ + 219, + 92, + 2, + 129, + 2, + "MESHRENDER" + ], + [ + 220, + 129, + 0, + 104, + 0, + "IMAGE" + ], + [ + 221, + 129, + 0, + 126, + 0, + "IMAGE" + ], + [ + 222, + 129, + 1, + 104, + 1, + "MASK" + ], + [ + 223, + 129, + 2, + 98, + 1, + "MESHRENDER" + ], + [ + 226, + 132, + 0, + 133, + 0, + "MASK" + ], + [ + 227, + 133, + 0, + 64, + 0, + "IMAGE" + ], + [ + 231, + 135, + 0, + 64, + 2, + "MASK" + ], + [ + 240, + 52, + 0, + 136, + 0, + "*" + ], + [ + 241, + 136, + 0, + 64, + 1, + "IMAGE" + ], + [ + 244, + 56, + 1, + 138, + 0, + "MASK" + ], + [ + 250, + 10, + 1, + 140, + 0, + "HY3DVAE" + ], + [ + 251, + 140, + 0, + 59, + 0, + "HY3DMESH" + ], + [ + 252, + 10, + 0, + 141, + 0, + "HY3DMODEL" + ], + [ + 255, + 141, + 0, + 140, + 1, + "HY3DLATENT" + ], + [ + 256, + 52, + 0, + 142, + 0, + "*" + ], + [ + 257, + 142, + 0, + 56, + 1, + "IMAGE" + ], + [ + 258, + 142, + 0, + 141, + 1, + "IMAGE" + ], + [ + 259, + 56, + 1, + 143, + 0, + "*" + ], + [ + 260, + 143, + 0, + 141, + 2, + "MASK" + ], + [ + 261, + 143, + 0, + 135, + 0, + "*" + ], + [ + 262, + 144, + 0, + 35, + 3, + "INT" + ], + [ + 263, + 144, + 0, + 35, + 4, + "INT" + ], + [ + 264, + 144, + 0, + 88, + 6, + "INT" + ], + [ + 265, + 148, + 0, + 35, + 2, + "NOISESCHEDULER" + ], + [ + 266, + 28, + 0, + 148, + 0, + "HY3DDIFFUSERSPIPE" + ], + [ + 267, + 149, + 0, + 88, + 5, + "NOISESCHEDULER" + ], + [ + 268, + 85, + 0, + 149, + 0, + "HY3DDIFFUSERSPIPE" + ], + [ + 272, + 61, + 0, + 79, + 1, + "HY3DCAMERA" + ], + [ + 273, + 61, + 0, + 88, + 4, + "HY3DCAMERA" + ], + [ + 274, + 61, + 0, + 92, + 2, + "HY3DCAMERA" + ], + [ + 277, + 17, + 0, + 157, + 0, + "STRING" + ], + [ + 279, + 161, + 1, + 99, + 1, + "STRING" + ], + [ + 281, + 118, + 0, + 92, + 0, + "IMAGE" + ], + [ + 289, + 167, + 0, + 166, + 0, + "REMBG_SESSION" + ], + [ + 290, + 166, + 1, + 168, + 0, + "MASK" + ], + [ + 293, + 165, + 0, + 52, + 0, + "IMAGE" + ], + [ + 303, + 173, + 0, + 165, + 4, + "INT" + ], + [ + 304, + 173, + 1, + 165, + 3, + "INT" + ], + [ + 305, + 173, + 2, + 165, + 1, + "INT" + ], + [ + 306, + 173, + 3, + 165, + 2, + "INT" + ], + [ + 307, + 173, + 0, + 170, + 0, + "INT" + ], + [ + 308, + 173, + 1, + 171, + 0, + "INT" + ], + [ + 309, + 166, + 1, + 173, + 0, + "MASK" + ], + [ + 310, + 52, + 0, + 174, + 0, + "IMAGE" + ], + [ + 387, + 104, + 0, + 230, + 0, + "*" + ], + [ + 397, + 99, + 0, + 231, + 0, + "*" + ], + [ + 409, + 232, + 0, + 166, + 1, + "IMAGE" + ], + [ + 410, + 232, + 0, + 165, + 0, + "IMAGE" + ], + [ + 411, + 13, + 0, + 234, + 0, + "*" + ], + [ + 412, + 161, + 0, + 235, + 0, + "*" + ], + [ + 414, + 231, + 0, + 237, + 1, + "STRING" + ], + [ + 415, + 237, + 0, + 154, + 0, + "STRING" + ], + [ + 416, + 230, + 0, + 237, + 0, + "IMAGE" + ], + [ + 417, + 230, + 0, + 238, + 0, + "IMAGE" + ], + [ + 418, + 231, + 0, + 238, + 1, + "STRING" + ], + [ + 419, + 230, + 0, + 239, + 0, + "IMAGE" + ], + [ + 420, + 231, + 0, + 239, + 1, + "STRING" + ], + [ + 421, + 238, + 1, + 196, + 0, + "IMAGE" + ], + [ + 422, + 238, + 0, + 187, + 0, + "STRING" + ], + [ + 423, + 239, + 0, + 203, + 0, + "STRING" + ], + [ + 424, + 239, + 1, + 201, + 0, + "IMAGE" + ], + [ + 426, + 230, + 0, + 240, + 0, + "IMAGE" + ], + [ + 427, + 230, + 0, + 241, + 0, + "IMAGE" + ], + [ + 428, + 230, + 0, + 242, + 0, + "IMAGE" + ], + [ + 429, + 230, + 0, + 243, + 0, + "IMAGE" + ], + [ + 430, + 230, + 0, + 244, + 0, + "IMAGE" + ], + [ + 431, + 230, + 0, + 245, + 0, + "IMAGE" + ], + [ + 432, + 231, + 0, + 245, + 1, + "STRING" + ], + [ + 433, + 231, + 0, + 244, + 1, + "STRING" + ], + [ + 434, + 231, + 0, + 243, + 1, + "STRING" + ], + [ + 435, + 231, + 0, + 242, + 1, + "STRING" + ], + [ + 436, + 231, + 0, + 241, + 1, + "STRING" + ], + [ + 437, + 231, + 0, + 240, + 1, + "STRING" + ], + [ + 444, + 240, + 1, + 206, + 0, + "IMAGE" + ], + [ + 445, + 241, + 1, + 212, + 0, + "IMAGE" + ], + [ + 446, + 242, + 1, + 216, + 0, + "IMAGE" + ], + [ + 447, + 243, + 1, + 220, + 0, + "IMAGE" + ], + [ + 448, + 244, + 1, + 225, + 0, + "IMAGE" + ], + [ + 449, + 245, + 1, + 229, + 0, + "IMAGE" + ], + [ + 450, + 246, + 1, + 248, + 0, + "IMAGE" + ], + [ + 452, + 230, + 0, + 246, + 0, + "IMAGE" + ], + [ + 453, + 231, + 0, + 246, + 1, + "STRING" + ], + [ + 454, + 240, + 0, + 250, + 0, + "*" + ], + [ + 456, + 241, + 0, + 251, + 0, + "*" + ], + [ + 458, + 242, + 0, + 252, + 0, + "*" + ], + [ + 460, + 246, + 0, + 253, + 0, + "*" + ], + [ + 462, + 243, + 0, + 254, + 0, + "*" + ], + [ + 464, + 244, + 0, + 255, + 0, + "*" + ], + [ + 466, + 245, + 0, + 256, + 0, + "*" + ], + [ + 468, + 235, + 0, + 232, + 0, + "*" + ] + ], + "groups": [ + { + "id": 1, + "title": "Mesh Generation", + "bounding": [ + -1168.8038330078125, + -876.5914306640625, + 2719.3046875, + 1466.4122314453125 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 2, + "title": "Delight", + "bounding": [ + -1166.68408203125, + 627.7207641601562, + 1369.6767578125, + 888.11328125 + ], + "color": "#b58b2a", + "font_size": 24, + "flags": {} + }, + { + "id": 3, + "title": "RenderTextures", + "bounding": [ + 216.74928283691406, + 632.1493530273438, + 1333.16455078125, + 916.5001831054688 + ], + "color": "#b06634", + "font_size": 24, + "flags": {} + }, + { + "id": 4, + "title": "TextureSampling", + "bounding": [ + 1605.7823486328125, + -299.359130859375, + 2970.46240234375, + 1484.4820556640625 + ], + "color": "#a1309b", + "font_size": 24, + "flags": {} + }, + { + "id": 5, + "title": "GLB File Variants (emission)", + "bounding": [ + 4741.15478515625, + -1567.878173828125, + 1627.8533935546875, + 4404.68408203125 + ], + "color": "#88A", + "font_size": 24, + "flags": {} + }, + { + "id": 6, + "title": "Pre-Processing (cropping empty space)", + "bounding": [ + -1166.7333984375, + -1359.9298095703125, + 2857.34619140625, + 468.60882568359375 + ], + "color": "#a1309b", + "font_size": 24, + "flags": {} + }, + { + "id": 7, + "title": "Preset Vaiants", + "bounding": [ + 4775.396484375, + -96.4512939453125, + 1371.196044921875, + 80 + ], + "color": "#A88", + "font_size": 24, + "flags": {} + } + ], + "config": {}, + "extra": { + "ds": { + "scale": 1.1918176537727443, + "offset": [ + -5313.366289800138, + 208.59704353286776 + ] + }, + "node_versions": { + "comfy-core": "0.3.26", + "ComfyUI-Hunyuan3DWrapper": "26a57e86b02a174e6045ab2e07d3060356fdb717", + "comfyui_essentials": "1.1.0" + }, + "VHS_latentpreview": false, + "VHS_latentpreviewrate": 0, + "ue_links": [], + "links_added_by_ue": [] + }, + "version": 0.4 +} \ No newline at end of file