From a793c18978a778db894a09ec2c4f9b6f222d8153 Mon Sep 17 00:00:00 2001 From: Sirshendu Ganguly Date: Tue, 9 Jun 2026 17:41:31 +0530 Subject: [PATCH] Added Support for Draco Compression in 3D Inference --- __init__.py | 5 + clientlibs/main.js | 6 +- clientlibs/types.js | 10 ++ clientlibs/utils.js | 79 +++++++++++++ modules/threeDInference.py | 24 +--- modules/threeDInferenceInputs.py | 6 +- modules/threeDInferenceSettings.py | 11 +- ...threeDInferenceSettingsDracoCompression.py | 109 ++++++++++++++++++ modules/threeDModelSearch.py | 91 +++++++++++++++ ...Inference_Trellis_2_Draco_Compression.json | 1 + 10 files changed, 316 insertions(+), 26 deletions(-) create mode 100644 modules/threeDInferenceSettingsDracoCompression.py create mode 100644 modules/threeDModelSearch.py create mode 100644 workflows/Runware_3D_Inference_Trellis_2_Draco_Compression.json diff --git a/__init__.py b/__init__.py index c1c819e..0a38756 100644 --- a/__init__.py +++ b/__init__.py @@ -122,12 +122,14 @@ from .modules.saveImage import RunwareSaveImage from .modules.videoOutputs import RunwareVideoInferenceOutputs from .modules.threeDInference import threeDInference +from .modules.threeDModelSearch import Runware3DModelSearch from .modules.threeDInferenceInputs import threeDInferenceInputs from .modules.threeDInferenceSettings import Runware3DInferenceSettings from .modules.threeDInferenceSettingsSparseStructure import Runware3DInferenceSettingsSparseStructure from .modules.threeDInferenceSettingsShapeSlat import Runware3DInferenceSettingsShapeSlat from .modules.threeDInferenceSettingsTexSlat import Runware3DInferenceSettingsTexSlat from .modules.threeDInferenceSettingsMeshCluster import Runware3DInferenceSettingsMeshCluster +from .modules.threeDInferenceSettingsDracoCompression import Runware3DInferenceSettingsDracoCompression from .modules.save3D import RunwareSave3D from .modules.saveText import RunwareSaveText from .modules.loadMesh import RunwareLoadMesh @@ -267,12 +269,14 @@ "Runware Save Image": RunwareSaveImage, "Runware Video Inference Outputs": RunwareVideoInferenceOutputs, "Runware 3D Inference": threeDInference, + "Runware 3D Model Search": Runware3DModelSearch, "Runware 3D Inference Inputs": threeDInferenceInputs, "Runware 3D Inference Settings": Runware3DInferenceSettings, "Runware 3D Inference Settings Sparse Structure": Runware3DInferenceSettingsSparseStructure, "Runware 3D Inference Settings Shape Slat": Runware3DInferenceSettingsShapeSlat, "Runware 3D Inference Settings Tex Slat": Runware3DInferenceSettingsTexSlat, "Runware 3D Inference Settings Mesh Cluster": Runware3DInferenceSettingsMeshCluster, + "Runware 3D Inference Settings Draco Compression": Runware3DInferenceSettingsDracoCompression, "Runware Save 3D": RunwareSave3D, "Runware Save Text": RunwareSaveText, "Runware Load Mesh": RunwareLoadMesh, @@ -286,6 +290,7 @@ "Runware VAE Search": "Runware VAE", "Runware Multi Inference": "Runware Multi Inference [BETA]", "Runware Video Model Search": "Runware Video Model", + "Runware 3D Model Search": "Runware 3D Model", "Runware Audio Model Search": "Runware Audio Model", "Runware Text Model Search": "Runware Text Model", "Runware Image Inference Settings Color Palette": "Runware Image Inference Color Palette", diff --git a/clientlibs/main.js b/clientlibs/main.js index 3deef18..a7681ca 100644 --- a/clientlibs/main.js +++ b/clientlibs/main.js @@ -1,6 +1,6 @@ import { app } from "../../scripts/app.js"; import { api } from "../../scripts/api.js"; -import { promptEnhanceHandler, syncDimensionsNodeHandler, searchNodeHandler, APIKeyHandler, captionNodeHandler, saveTextHandler, mediaUUIDHandler, save3DFilepathHandler, videoTranscriptionHandler, videoOutputsHandler, handleCustomErrors, videoInferenceDimensionsHandler, videoModelSearchFilterHandler, audioModelSearchFilterHandler, textModelSearchFilterHandler, vectorizeModelSearchFilterHandler, vectorizeToggleHandler, useParameterToggleHandler, imageInferenceToggleHandler, imageInferenceAdvancedFeaturesToggleHandler, watermarkAdvancedFeatureToggleHandler, videoInferenceSpeechInputToggleHandler, regionalPromptingRegionsToggleHandler, upscalerToggleHandler, imageUpscalerSettingsToggleHandler, videoUpscalerToggleHandler, audioInferenceToggleHandler, audioInferenceSpeechToggleHandler, audioSettingsToggleHandler, textInferenceSettingsToggleHandler, videoSettingsToggleHandler, videoInferenceSettingsTtsToggleHandler, videoInferenceSettingsActiveSpeakerDetectionToggleHandler, videoInferenceSettingsActiveSpeakerBoundingBoxesToggleHandler, videoInferenceSettingsSegmentsToggleHandler, acceleratorOptionsToggleHandler, bytedanceProviderSettingsToggleHandler, xaiProviderSettingsToggleHandler, viduProviderSettingsToggleHandler, sourcefulProviderSettingsToggleHandler, sourcefulProviderSettingsFontsToggleHandler, threeDInferenceToggleHandler, threeDInferenceSettingsToggleHandler, threeDInferenceSettingsLatToggleHandler, threeDInferenceSettingsMeshClusterToggleHandler, ultralyticsProviderSettingsToggleHandler, openaiProviderSettingsToggleHandler, lightricksProviderSettingsToggleHandler, klingProviderSettingsToggleHandler, lumaProviderSettingsToggleHandler, briaProviderSettingsToggleHandler, pixverseProviderSettingsToggleHandler, alibabaProviderSettingsToggleHandler, mireloProviderSettingsToggleHandler, googleProviderSettingsToggleHandler, syncProviderSettingsToggleHandler, syncSegmentToggleHandler, settingsToggleHandler, outpaintSettingsToggleHandler, safetyInputsToggleHandler, imageInferenceSettingsColorPaletteToggleHandler, imageInferenceSettingsMoodboardsToggleHandler, imageInferenceSettingsStructuredPromptToggleHandler, imageInferenceSettingsPromptEnhanceToggleHandler, imageInferenceSettingsScoringRubricToggleHandler, audioInputToggleHandler, speechInputToggleHandler, briaProviderMaskToggleHandler, wanAnimateAdvancedFeatureSettingsToggleHandler, videoAdvancedFeatureInputsToggleHandler, audioInferenceInputsToggleHandler, audioInferenceReferenceVoiceToggleHandler, audioInferenceSpeechVoicesToggleHandler, videoInputsFrameToggleHandler, referenceVideosToggleHandler } from "./utils.js"; +import { promptEnhanceHandler, syncDimensionsNodeHandler, searchNodeHandler, APIKeyHandler, captionNodeHandler, saveTextHandler, mediaUUIDHandler, save3DFilepathHandler, videoTranscriptionHandler, videoOutputsHandler, handleCustomErrors, videoInferenceDimensionsHandler, videoModelSearchFilterHandler, threeDModelSearchFilterHandler, audioModelSearchFilterHandler, textModelSearchFilterHandler, vectorizeModelSearchFilterHandler, vectorizeToggleHandler, useParameterToggleHandler, imageInferenceToggleHandler, imageInferenceAdvancedFeaturesToggleHandler, watermarkAdvancedFeatureToggleHandler, videoInferenceSpeechInputToggleHandler, regionalPromptingRegionsToggleHandler, upscalerToggleHandler, imageUpscalerSettingsToggleHandler, videoUpscalerToggleHandler, audioInferenceToggleHandler, audioInferenceSpeechToggleHandler, audioSettingsToggleHandler, textInferenceSettingsToggleHandler, videoSettingsToggleHandler, videoInferenceSettingsTtsToggleHandler, videoInferenceSettingsActiveSpeakerDetectionToggleHandler, videoInferenceSettingsActiveSpeakerBoundingBoxesToggleHandler, videoInferenceSettingsSegmentsToggleHandler, acceleratorOptionsToggleHandler, bytedanceProviderSettingsToggleHandler, xaiProviderSettingsToggleHandler, viduProviderSettingsToggleHandler, sourcefulProviderSettingsToggleHandler, sourcefulProviderSettingsFontsToggleHandler, threeDInferenceToggleHandler, threeDInferenceSettingsToggleHandler, threeDInferenceSettingsLatToggleHandler, threeDInferenceSettingsMeshClusterToggleHandler, threeDInferenceSettingsDracoCompressionToggleHandler, ultralyticsProviderSettingsToggleHandler, openaiProviderSettingsToggleHandler, lightricksProviderSettingsToggleHandler, klingProviderSettingsToggleHandler, lumaProviderSettingsToggleHandler, briaProviderSettingsToggleHandler, pixverseProviderSettingsToggleHandler, alibabaProviderSettingsToggleHandler, mireloProviderSettingsToggleHandler, googleProviderSettingsToggleHandler, syncProviderSettingsToggleHandler, syncSegmentToggleHandler, settingsToggleHandler, outpaintSettingsToggleHandler, safetyInputsToggleHandler, imageInferenceSettingsColorPaletteToggleHandler, imageInferenceSettingsMoodboardsToggleHandler, imageInferenceSettingsStructuredPromptToggleHandler, imageInferenceSettingsPromptEnhanceToggleHandler, imageInferenceSettingsScoringRubricToggleHandler, audioInputToggleHandler, speechInputToggleHandler, briaProviderMaskToggleHandler, wanAnimateAdvancedFeatureSettingsToggleHandler, videoAdvancedFeatureInputsToggleHandler, audioInferenceInputsToggleHandler, audioInferenceReferenceVoiceToggleHandler, audioInferenceSpeechVoicesToggleHandler, videoInputsFrameToggleHandler, referenceVideosToggleHandler } from "./utils.js"; import { RUNWARE_NODE_TYPES, RUNWARE_NODE_PROPS, SEARCH_TERMS } from "./types.js"; const nodeInitList = []; @@ -188,6 +188,8 @@ app.registerExtension({ threeDInferenceSettingsLatToggleHandler(node); } else if(nodeClass === RUNWARE_NODE_TYPES.THREEDINFERENCESETTINGSMESHCLUSTER) { threeDInferenceSettingsMeshClusterToggleHandler(node); + } else if(nodeClass === RUNWARE_NODE_TYPES.THREEDINFERENCESETTINGSDRACOCOMPRESSION) { + threeDInferenceSettingsDracoCompressionToggleHandler(node); } if(crNodeProps.colorModeOnly === true) return; @@ -195,6 +197,8 @@ app.registerExtension({ if(nodeClass === RUNWARE_NODE_TYPES.VIDEOMODELSEARCH) { videoModelSearchFilterHandler(node); + } else if(nodeClass === RUNWARE_NODE_TYPES.THREEDMODELSEARCH) { + threeDModelSearchFilterHandler(node); } else if(nodeClass === RUNWARE_NODE_TYPES.AUDIOMODELSEARCH) { audioModelSearchFilterHandler(node); } else if(nodeClass === RUNWARE_NODE_TYPES.TEXTMODELSEARCH) { diff --git a/clientlibs/types.js b/clientlibs/types.js index 6efae1b..7cbe2ba 100644 --- a/clientlibs/types.js +++ b/clientlibs/types.js @@ -170,12 +170,14 @@ const RUNWARE_NODE_TYPES = { SAVETEXT: "Runware Save Text", VIDEOINFERENCEOUTPUTS: "Runware Video Inference Outputs", THREEDINFERENCE: "Runware 3D Inference", + THREEDMODELSEARCH: "Runware 3D Model Search", THREEDINFERENCEINPUTS: "Runware 3D Inference Inputs", THREEDINFERENCESETTINGS: "Runware 3D Inference Settings", THREEDINFERENCESETTINGSSPARSESTRUCTURE: "Runware 3D Inference Settings Sparse Structure", THREEDINFERENCESETTINGSSHAPESLAT: "Runware 3D Inference Settings Shape Slat", THREEDINFERENCESETTINGSTEXSLAT: "Runware 3D Inference Settings Tex Slat", THREEDINFERENCESETTINGSMESHCLUSTER: "Runware 3D Inference Settings Mesh Cluster", + THREEDINFERENCESETTINGSDRACOCOMPRESSION: "Runware 3D Inference Settings Draco Compression", SAVE3D: "Runware Save 3D", LOADMESH: "Runware Load Mesh", WATERMARKADVANCEDFEATURE: "Runware Watermark Advanced Feature", @@ -681,6 +683,10 @@ const RUNWARE_NODE_PROPS = { bgColor: DEFAULT_BGCOLOR, promptEnhancer: true, }, + [RUNWARE_NODE_TYPES.THREEDMODELSEARCH]: { + bgColor: DEFAULT_BGCOLOR, + liveSearch: false, + }, [RUNWARE_NODE_TYPES.THREEDINFERENCEINPUTS]: { bgColor: DEFAULT_BGCOLOR, colorModeOnly: true, @@ -705,6 +711,10 @@ const RUNWARE_NODE_PROPS = { bgColor: DEFAULT_BGCOLOR, colorModeOnly: true, }, + [RUNWARE_NODE_TYPES.THREEDINFERENCESETTINGSDRACOCOMPRESSION]: { + bgColor: DEFAULT_BGCOLOR, + colorModeOnly: true, + }, [RUNWARE_NODE_TYPES.SAVE3D]: { bgColor: DEFAULT_BGCOLOR, colorModeOnly: true, diff --git a/clientlibs/utils.js b/clientlibs/utils.js index f60d0f3..06de733 100644 --- a/clientlibs/utils.js +++ b/clientlibs/utils.js @@ -2324,6 +2324,28 @@ function threeDInferenceSettingsMeshClusterToggleHandler(node) { }); } +function threeDInferenceSettingsDracoCompressionToggleHandler(node) { + const pairs = [ + ["useEnabled", "enabled"], + ["useLevel", "level"], + ["useQuantizationPosition", "quantizationPosition"], + ["useQuantizationNormal", "quantizationNormal"], + ["useQuantizationTexCoord", "quantizationTexCoord"], + ]; + pairs.forEach(([useName, paramName]) => { + const useW = node.widgets.find(w => w.name === useName); + const paramW = node.widgets.find(w => w.name === paramName); + if (!useW || !paramW) return; + function toggleEnabled() { + const enabled = useW.value === true; + toggleWidgetEnabled(paramW, enabled, node); + node.setDirtyCanvas(true); + } + appendWidgetCB(useW, () => setTimeout(toggleEnabled, 50)); + setTimeout(toggleEnabled, 100); + }); +} + function openaiProviderSettingsToggleHandler(openaiNode) { // Find all "use" parameter widgets for OpenAI Provider Settings (these are COMBO widgets) const useBackgroundWidget = openaiNode.widgets.find(w => w.name === "useBackground"); @@ -3416,6 +3438,61 @@ function textModelSearchFilterHandler(textModelSearchNode) { filterModelList(); } +function threeDModelSearchFilterHandler(threeDModelSearchNode) { + const modelArchWidget = threeDModelSearchNode.widgets.find(w => w.name === "Model Architecture"); + const threeDListWidget = threeDModelSearchNode.widgets.find(w => w.name === "ThreeDList"); + + if (!modelArchWidget || !threeDListWidget) return; + + const THREED_MODELS = { + "Tencent": [ + "tencent:hunyuan-3d@3.1-pro (Tencent Hunyuan 3D 3.1 Pro)", + "tencent:hunyuan-3d@3.1-rapid (Tencent Hunyuan 3D 3.1 Rapid)", + ], + "Meta": [ + "meta:sam@3d (Meta SAM 3D)", + ], + "Microsoft": [ + "microsoft:trellis-2@4b (TRELLIS.2)", + ], + "Tripo": [ + "tripo:v3.1@0 (Tripo 3D v3.1)", + ], + "Hyper3D": [ + "hyper3d:rodin@gen-1 (Rodin Gen-1)", + "hyper3d:rodin@gen-2 (Rodin Gen-2)", + ], + "Meshy": [ + "meshy:meshy@6 (Meshy 6)", + ], + }; + + function filterModelList() { + const selectedArch = modelArchWidget.value; + let filteredModels = []; + + if (selectedArch === "All") { + Object.values(THREED_MODELS).forEach(models => filteredModels.push(...models)); + } else if (THREED_MODELS[selectedArch]) { + filteredModels = THREED_MODELS[selectedArch]; + } + + if (filteredModels.length > 0) { + const currentValue = threeDListWidget.value; + threeDListWidget.options.values = filteredModels; + + if (!filteredModels.includes(currentValue)) { + threeDListWidget.value = filteredModels[0]; + } + + threeDModelSearchNode.setDirtyCanvas(true); + } + } + + appendWidgetCB(modelArchWidget, filterModelList); + filterModelList(); +} + function audioModelSearchFilterHandler(audioModelSearchNode) { const modelProviderWidget = audioModelSearchNode.widgets.find(w => w.name === "Model Provider"); const audioListWidget = audioModelSearchNode.widgets.find(w => w.name === "AudioList"); @@ -5208,6 +5285,7 @@ export { APIKeyHandler, videoInferenceDimensionsHandler, videoModelSearchFilterHandler, + threeDModelSearchFilterHandler, audioModelSearchFilterHandler, textModelSearchFilterHandler, vectorizeModelSearchFilterHandler, @@ -5240,6 +5318,7 @@ export { threeDInferenceSettingsToggleHandler, threeDInferenceSettingsLatToggleHandler, threeDInferenceSettingsMeshClusterToggleHandler, + threeDInferenceSettingsDracoCompressionToggleHandler, ultralyticsProviderSettingsToggleHandler, openaiProviderSettingsToggleHandler, lightricksProviderSettingsToggleHandler, diff --git a/modules/threeDInference.py b/modules/threeDInference.py index 411b5e2..4f064e4 100644 --- a/modules/threeDInference.py +++ b/modules/threeDInference.py @@ -5,18 +5,6 @@ class threeDInference: """Runware 3D Inference node for generating 3D models from images""" - # Available 3D models - THREED_MODELS = { - "Tencent Hunyuan 3D 3.1 Pro": "tencent:hunyuan-3d@3.1-pro", - "Tencent Hunyuan 3D 3.1 Rapid": "tencent:hunyuan-3d@3.1-rapid", - "Meta SAM 3D": "meta:sam@3d", - "TRELLIS.2": "microsoft:trellis-2@4b", - "Tripo 3D v3.1": "tripo:v3.1@0", - "Rodin Gen-1": "hyper3d:rodin@gen-1", - "Rodin Gen-2": "hyper3d:rodin@gen-2", - "Meshy 6": "meshy:meshy@6", - } - # Output formats OUTPUT_FORMATS = ["GLB", "FBX", "PLY", "OBJ"] @@ -24,9 +12,8 @@ class threeDInference: def INPUT_TYPES(cls): return { "required": { - "Model": (list(cls.THREED_MODELS.keys()), { - "tooltip": "Select the 3D generation model to use.", - "default": "Meta SAM 3D", + "Model": ("RUNWARE3DMODEL", { + "tooltip": "Connect a Runware 3D Model from Runware 3D Model Search node.", }), "positivePrompt": ("STRING", { "multiline": True, @@ -66,7 +53,7 @@ def INPUT_TYPES(cls): "step": 1, }), "inputs": ("RUNWARE3DINFERENCEINPUTS", { - "tooltip": "Connect Runware 3D Inference Inputs for image, mask, meshFile, images (array from images_1…4), etc.", + "tooltip": "Connect Runware 3D Inference Inputs for image, mask, meshFile, images (array from Images 1…8), etc.", }), "settings": ("RUNWARE3DINFERENCESETTINGS", { "tooltip": "Connect Runware 3D Inference Settings for textureSize, decimationTarget, remesh, resolution, imageAutoFix, faceLimit, texture, pbr, quad, Tripo options, sparseStructure, shapeSlat, texSlat, etc.", @@ -82,7 +69,7 @@ def INPUT_TYPES(cls): def generate3D(self, **kwargs): """Generate 3D model from inputs""" - modelName = kwargs.get("Model", "Meta SAM 3D") + model = kwargs.get("Model", "meta:sam@3d") positivePrompt = kwargs.get("positivePrompt", "") negativePrompt = kwargs.get("negativePrompt", "") seed = kwargs.get("seed", 1) @@ -93,9 +80,6 @@ def generate3D(self, **kwargs): inputs = kwargs.get("inputs", None) settings = kwargs.get("settings", None) - # Get model AIR code - model = self.THREED_MODELS.get(modelName, "meta:sam@3d") - # Build generation config genConfig = [ { diff --git a/modules/threeDInferenceInputs.py b/modules/threeDInferenceInputs.py index 6808353..a0eff6d 100644 --- a/modules/threeDInferenceInputs.py +++ b/modules/threeDInferenceInputs.py @@ -21,7 +21,7 @@ def INPUT_TYPES(cls): }), } for i in range(1, _IMAGE_SLOTS + 1): - optional[f"images_{i}"] = ("IMAGE", { + optional[f"Images {i}"] = ("IMAGE", { "tooltip": f"Multi-view image slot {i}; merged in order into inputs.images as a list of data URIs.", }) return { @@ -30,7 +30,7 @@ def INPUT_TYPES(cls): } DESCRIPTION = ( - "Configure custom inputs for Runware 3D Inference: image, mask, meshFile, and images_1…images_8 " + "Configure custom inputs for Runware 3D Inference: image, mask, meshFile, and Images 1…Images 8 " "(merged into inputs.images as an array)." ) FUNCTION = "createInputs" @@ -57,7 +57,7 @@ def createInputs(self, **kwargs): images_list: list = [] for i in range(1, _IMAGE_SLOTS + 1): - slot = kwargs.get(f"images_{i}") + slot = kwargs.get(f"Images {i}") if slot is not None: images_list.append(rwUtils.convertTensor2IMG(slot)) if images_list: diff --git a/modules/threeDInferenceSettings.py b/modules/threeDInferenceSettings.py index 88e23c0..ae263d7 100644 --- a/modules/threeDInferenceSettings.py +++ b/modules/threeDInferenceSettings.py @@ -3,7 +3,7 @@ Main settings for 3D inference: textureSize, decimationTarget, remesh, remeshBand, remeshProject, resolution, imageAutoFix, faceLimit, texture, pbr, textureFormat, alphaMode, Tripo mesh/texture options, material/quality, polyCount, taPose, boundingBox, meshMode, addons, hdTexture, and sub-configs -sparseStructure, shapeSlat, texSlat, meshCluster from connected nodes. +sparseStructure, shapeSlat, texSlat, meshCluster, dracoCompression from connected nodes. """ from typing import Dict, Any @@ -466,6 +466,9 @@ def INPUT_TYPES(cls): "tooltip": "Material alpha mode. Only used when 'Use Alpha Mode' is enabled.", "default": "OPAQUE", }), + "dracoCompression": ("RUNWARE3DINFERENCESETTINGSLAT", { + "tooltip": "Connect Runware 3D Inference Settings Draco Compression node.", + }), } } @@ -478,7 +481,7 @@ def INPUT_TYPES(cls): "resolution, imageAutoFix, faceLimit, texture, pbr, textureSeed, textureAlignment, textureQuality, " "textureFormat, alphaMode, autoSize, orientation, quad, compress, " "smartLowPoly, generateParts, exportUv, geometryQuality, originalAlpha, material, quality, polyCount, " - "taPose, boundingBox, meshMode, addons, hdTexture, lat configs, and meshCluster." + "taPose, boundingBox, meshMode, addons, hdTexture, lat configs, meshCluster, and dracoCompression." ) def create(self, **kwargs) -> tuple[Dict[str, Any]]: @@ -610,6 +613,10 @@ def create(self, **kwargs) -> tuple[Dict[str, Any]]: if mesh_cluster is not None and isinstance(mesh_cluster, dict) and len(mesh_cluster) > 0: settings["meshCluster"] = mesh_cluster + draco_compression = kwargs.get("dracoCompression", None) + if draco_compression is not None and isinstance(draco_compression, dict) and len(draco_compression) > 0: + settings["dracoCompression"] = draco_compression + return (settings,) diff --git a/modules/threeDInferenceSettingsDracoCompression.py b/modules/threeDInferenceSettingsDracoCompression.py new file mode 100644 index 0000000..c5c4b97 --- /dev/null +++ b/modules/threeDInferenceSettingsDracoCompression.py @@ -0,0 +1,109 @@ +""" +Runware 3D Inference Settings Draco Compression Node +Outputs dracoCompression config: enabled, level, quantizationPosition, +quantizationNormal, quantizationTexCoord +""" + +from typing import Dict, Any + + +class Runware3DInferenceSettingsDracoCompression: + """Runware 3D Inference Settings Draco Compression Node""" + + @classmethod + def INPUT_TYPES(cls): + return { + "required": {}, + "optional": { + "useEnabled": ("BOOLEAN", { + "tooltip": "Enable to include enabled in dracoCompression", + "default": False, + }), + "enabled": ("BOOLEAN", { + "tooltip": ( + "If true, applies KHR_draco_mesh_compression to the output GLB " + "(5-10x geometry size reduction with no triangle loss). " + "Only used when 'Use Enabled' is on." + ), + "default": False, + "label_on": "true", + "label_off": "false", + }), + "useLevel": ("BOOLEAN", { + "tooltip": "Enable to include level in dracoCompression", + "default": False, + }), + "level": ("INT", { + "tooltip": "Draco compression level (0-10). Higher = better compression but slower encoding. Only used when enabled.", + "default": 7, + "min": 0, + "max": 10, + "step": 1, + }), + "useQuantizationPosition": ("BOOLEAN", { + "tooltip": "Enable to include quantizationPosition in dracoCompression", + "default": False, + }), + "quantizationPosition": ("INT", { + "tooltip": "Quantization bits for vertex positions (8-30). Higher = better quality, larger file. Only used when enabled.", + "default": 16, + "min": 8, + "max": 30, + "step": 1, + }), + "useQuantizationNormal": ("BOOLEAN", { + "tooltip": "Enable to include quantizationNormal in dracoCompression", + "default": False, + }), + "quantizationNormal": ("INT", { + "tooltip": "Quantization bits for vertex normals (8-30). Higher = smoother shading, larger file. Only used when enabled.", + "default": 14, + "min": 8, + "max": 30, + "step": 1, + }), + "useQuantizationTexCoord": ("BOOLEAN", { + "tooltip": "Enable to include quantizationTexCoord in dracoCompression", + "default": False, + }), + "quantizationTexCoord": ("INT", { + "tooltip": "Quantization bits for texture coordinates (8-30). Higher = sharper textures at UV seams. Only used when enabled.", + "default": 14, + "min": 8, + "max": 30, + "step": 1, + }), + } + } + + RETURN_TYPES = ("RUNWARE3DINFERENCESETTINGSLAT",) + RETURN_NAMES = ("Draco Compression",) + FUNCTION = "create" + CATEGORY = "Runware" + DESCRIPTION = ( + "Configure settings.dracoCompression for Runware 3D Inference " + "(enabled, level, quantizationPosition, quantizationNormal, quantizationTexCoord). " + "Connect to Runware 3D Inference Settings." + ) + + def create(self, **kwargs) -> tuple[Dict[str, Any]]: + out: Dict[str, Any] = {} + if kwargs.get("useEnabled", False): + out["enabled"] = bool(kwargs.get("enabled", False)) + if kwargs.get("useLevel", False): + out["level"] = int(kwargs.get("level", 7)) + if kwargs.get("useQuantizationPosition", False): + out["quantizationPosition"] = int(kwargs.get("quantizationPosition", 16)) + if kwargs.get("useQuantizationNormal", False): + out["quantizationNormal"] = int(kwargs.get("quantizationNormal", 14)) + if kwargs.get("useQuantizationTexCoord", False): + out["quantizationTexCoord"] = int(kwargs.get("quantizationTexCoord", 14)) + return (out,) + + +NODE_CLASS_MAPPINGS = { + "Runware3DInferenceSettingsDracoCompression": Runware3DInferenceSettingsDracoCompression, +} +NODE_DISPLAY_NAME_MAPPINGS = { + "Runware3DInferenceSettingsDracoCompression": "Runware 3D Inference Settings Draco Compression", +} diff --git a/modules/threeDModelSearch.py b/modules/threeDModelSearch.py new file mode 100644 index 0000000..712144b --- /dev/null +++ b/modules/threeDModelSearch.py @@ -0,0 +1,91 @@ +class Runware3DModelSearch: + """3D Model Search node for searching and selecting 3D generation models""" + + THREED_MODELS = { + "Tencent": [ + "tencent:hunyuan-3d@3.1-pro (Tencent Hunyuan 3D 3.1 Pro)", + "tencent:hunyuan-3d@3.1-rapid (Tencent Hunyuan 3D 3.1 Rapid)", + ], + "Meta": [ + "meta:sam@3d (Meta SAM 3D)", + ], + "Microsoft": [ + "microsoft:trellis-2@4b (TRELLIS.2)", + ], + "Tripo": [ + "tripo:v3.1@0 (Tripo 3D v3.1)", + ], + "Hyper3D": [ + "hyper3d:rodin@gen-1 (Rodin Gen-1)", + "hyper3d:rodin@gen-2 (Rodin Gen-2)", + ], + "Meshy": [ + "meshy:meshy@6 (Meshy 6)", + ], + } + + MODEL_ARCHITECTURES = [ + "All", + "Tencent", + "Meta", + "Microsoft", + "Tripo", + "Hyper3D", + "Meshy", + ] + + @classmethod + def INPUT_TYPES(cls): + allModels = cls._getAllModels() + defaultModel = "meta:sam@3d (Meta SAM 3D)" + + return { + "required": { + "Model Search": ("STRING", { + "tooltip": "Search for a specific 3D model by name or AIR code (e.g. hunyuan, trellis, tripo).", + }), + "Model Architecture": (cls.MODEL_ARCHITECTURES, { + "tooltip": "Choose 3D model architecture to filter results.", + "default": "Meta", + }), + "ThreeDList": (allModels, { + "tooltip": "3D model results will show up here so you can choose from.", + "default": defaultModel, + }), + "Use Search Value": ("BOOLEAN", { + "tooltip": "When enabled, the value in the search input is used instead of the selected list entry.\n\nUseful if you prefer to set the model manually.", + "default": False, + "label_on": "Enabled", + "label_off": "Disabled", + }), + }, + } + + @classmethod + def _getAllModels(cls): + allModels = [] + for models in cls.THREED_MODELS.values(): + allModels.extend(models) + return allModels + + DESCRIPTION = "Search and connect 3D models to Runware 3D Inference nodes in ComfyUI." + FUNCTION = "threeDModelSearch" + RETURN_TYPES = ("RUNWARE3DMODEL",) + RETURN_NAMES = ("Runware 3D Model",) + CATEGORY = "Runware" + + @classmethod + def VALIDATE_INPUTS(cls, ThreeDList): + return True + + def threeDModelSearch(self, **kwargs): + enableSearchValue = kwargs.get("Use Search Value", False) + searchInput = kwargs.get("Model Search") + + if enableSearchValue: + modelAirCode = searchInput + else: + currentModel = kwargs.get("ThreeDList") + modelAirCode = currentModel.split(" (")[0] + + return (modelAirCode,) diff --git a/workflows/Runware_3D_Inference_Trellis_2_Draco_Compression.json b/workflows/Runware_3D_Inference_Trellis_2_Draco_Compression.json new file mode 100644 index 0000000..3aeae96 --- /dev/null +++ b/workflows/Runware_3D_Inference_Trellis_2_Draco_Compression.json @@ -0,0 +1 @@ +{"id":"a8ec93d7-83a8-4901-84a1-7594822b0a1d","revision":0,"last_node_id":10,"last_link_id":7,"nodes":[{"id":2,"type":"Runware 3D Model Search","pos":[-372.46748367821084,778.1864197747724],"size":[272.111328125,130],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"Model Search","name":"Model Search","type":"STRING","widget":{"name":"Model Search"},"link":null},{"localized_name":"Model Architecture","name":"Model Architecture","type":"COMBO","widget":{"name":"Model Architecture"},"link":null},{"localized_name":"ThreeDList","name":"ThreeDList","type":"COMBO","widget":{"name":"ThreeDList"},"link":null},{"localized_name":"Use Search Value","name":"Use Search Value","type":"BOOLEAN","widget":{"name":"Use Search Value"},"link":null}],"outputs":[{"localized_name":"Runware 3D Model","name":"Runware 3D Model","type":"RUNWARE3DMODEL","links":[2]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"0bfe164c326ac5bee5b67e18d309a4169d0b2c8e","Node name for S&R":"Runware 3D Model Search"},"widgets_values":["","Microsoft","microsoft:trellis-2@4b (TRELLIS.2)",false],"bgcolor":"#5345bf"},{"id":6,"type":"LoadImage","pos":[-718.6165498613043,1039.1219209495316],"size":[282.798828125,314.0000000000001],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"image","name":"image","type":"COMBO","widget":{"name":"image"},"link":null},{"localized_name":"choose file to upload","name":"upload","type":"IMAGEUPLOAD","widget":{"name":"upload"},"link":null}],"outputs":[{"localized_name":"IMAGE","name":"IMAGE","type":"IMAGE","links":[4]},{"localized_name":"MASK","name":"MASK","type":"MASK","links":null}],"properties":{"cnr_id":"comfy-core","ver":"0.22.0","Node name for S&R":"LoadImage"},"widgets_values":["robot.jpeg","image"]},{"id":5,"type":"Runware 3D Inference Inputs","pos":[-365.32631731004255,1004.3203582691181],"size":[291.853125,398],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"image","name":"image","shape":7,"type":"IMAGE","link":4},{"localized_name":"mask","name":"mask","shape":7,"type":"IMAGE","link":null},{"localized_name":"Images 1","name":"Images 1","shape":7,"type":"IMAGE","link":null},{"localized_name":"Images 2","name":"Images 2","shape":7,"type":"IMAGE","link":null},{"localized_name":"Images 3","name":"Images 3","shape":7,"type":"IMAGE","link":null},{"localized_name":"Images 4","name":"Images 4","shape":7,"type":"IMAGE","link":null},{"localized_name":"Images 5","name":"Images 5","shape":7,"type":"IMAGE","link":null},{"localized_name":"Images 6","name":"Images 6","shape":7,"type":"IMAGE","link":null},{"localized_name":"Images 7","name":"Images 7","shape":7,"type":"IMAGE","link":null},{"localized_name":"Images 8","name":"Images 8","shape":7,"type":"IMAGE","link":null},{"localized_name":"meshFile","name":"meshFile","shape":7,"type":"STRING","widget":{"name":"meshFile"},"link":null},{"localized_name":"images_1","name":"images_1","shape":7,"type":"IMAGE","link":null},{"localized_name":"images_2","name":"images_2","shape":7,"type":"IMAGE","link":null},{"localized_name":"images_3","name":"images_3","shape":7,"type":"IMAGE","link":null},{"localized_name":"images_4","name":"images_4","shape":7,"type":"IMAGE","link":null},{"localized_name":"images_5","name":"images_5","shape":7,"type":"IMAGE","link":null},{"localized_name":"images_6","name":"images_6","shape":7,"type":"IMAGE","link":null},{"localized_name":"images_7","name":"images_7","shape":7,"type":"IMAGE","link":null},{"localized_name":"images_8","name":"images_8","shape":7,"type":"IMAGE","link":null}],"outputs":[{"localized_name":"Inputs","name":"Inputs","type":"RUNWARE3DINFERENCEINPUTS","links":[5]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"0bfe164c326ac5bee5b67e18d309a4169d0b2c8e","Node name for S&R":"Runware 3D Inference Inputs"},"widgets_values":[""],"bgcolor":"#5345bf"},{"id":3,"type":"Runware 3D Inference","pos":[-5.424267419772396,768.8038696960188],"size":[400,326],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"Model","name":"Model","type":"RUNWARE3DMODEL","link":2},{"localized_name":"inputs","name":"inputs","shape":7,"type":"RUNWARE3DINFERENCEINPUTS","link":5},{"localized_name":"settings","name":"settings","shape":7,"type":"RUNWARE3DINFERENCESETTINGS","link":7},{"localized_name":"positivePrompt","name":"positivePrompt","type":"STRING","widget":{"name":"positivePrompt"},"link":null},{"localized_name":"negativePrompt","name":"negativePrompt","type":"STRING","widget":{"name":"negativePrompt"},"link":null},{"localized_name":"useSeed","name":"useSeed","type":"BOOLEAN","widget":{"name":"useSeed"},"link":null},{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"link":null},{"localized_name":"outputFormat","name":"outputFormat","type":"COMBO","widget":{"name":"outputFormat"},"link":null},{"localized_name":"useOutputQuality","name":"useOutputQuality","shape":7,"type":"BOOLEAN","widget":{"name":"useOutputQuality"},"link":null},{"localized_name":"outputQuality","name":"outputQuality","shape":7,"type":"INT","widget":{"name":"outputQuality"},"link":null}],"outputs":[{"localized_name":"3dObject","name":"3dObject","type":"STRING","links":[3]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"0bfe164c326ac5bee5b67e18d309a4169d0b2c8e","Node name for S&R":"Runware 3D Inference"},"widgets_values":["","",true,886903472,"randomize","GLB",false,95],"bgcolor":"#5345bf"},{"id":4,"type":"Runware Save 3D","pos":[498.26139653858706,640.9237517258092],"size":[270,106],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"3dObject","name":"3dObject","type":"STRING","widget":{"name":"3dObject"},"link":3},{"localized_name":"filenamePrefix","name":"filenamePrefix","type":"STRING","widget":{"name":"filenamePrefix"},"link":null},{"localized_name":"filepath","name":"filepath","shape":7,"type":"STRING","widget":{"name":"filepath"},"link":null}],"outputs":[{"localized_name":"filepath","name":"filepath","type":"STRING","links":null}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"0bfe164c326ac5bee5b67e18d309a4169d0b2c8e","Node name for S&R":"Runware Save 3D"},"widgets_values":["","ComfyUI","/Users/sirshenduganguly/Downloads/Runware-codebase/ComfyUI/output/3d_models/ComfyUI_20260609_173920.glb"],"bgcolor":"#5345bf"},{"id":10,"type":"Runware 3D Inference Settings Draco Compression","pos":[20.51261124915332,1225.6372604923258],"size":[440.0767578125,274],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"useEnabled","name":"useEnabled","shape":7,"type":"BOOLEAN","widget":{"name":"useEnabled"},"link":null},{"localized_name":"enabled","name":"enabled","shape":7,"type":"BOOLEAN","widget":{"name":"enabled"},"link":null},{"localized_name":"useLevel","name":"useLevel","shape":7,"type":"BOOLEAN","widget":{"name":"useLevel"},"link":null},{"localized_name":"level","name":"level","shape":7,"type":"INT","widget":{"name":"level"},"link":null},{"localized_name":"useQuantizationPosition","name":"useQuantizationPosition","shape":7,"type":"BOOLEAN","widget":{"name":"useQuantizationPosition"},"link":null},{"localized_name":"quantizationPosition","name":"quantizationPosition","shape":7,"type":"INT","widget":{"name":"quantizationPosition"},"link":null},{"localized_name":"useQuantizationNormal","name":"useQuantizationNormal","shape":7,"type":"BOOLEAN","widget":{"name":"useQuantizationNormal"},"link":null},{"localized_name":"quantizationNormal","name":"quantizationNormal","shape":7,"type":"INT","widget":{"name":"quantizationNormal"},"link":null},{"localized_name":"useQuantizationTexCoord","name":"useQuantizationTexCoord","shape":7,"type":"BOOLEAN","widget":{"name":"useQuantizationTexCoord"},"link":null},{"localized_name":"quantizationTexCoord","name":"quantizationTexCoord","shape":7,"type":"INT","widget":{"name":"quantizationTexCoord"},"link":null}],"outputs":[{"localized_name":"Draco Compression","name":"Draco Compression","type":"RUNWARE3DINFERENCESETTINGSLAT","links":[6]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"0bfe164c326ac5bee5b67e18d309a4169d0b2c8e","Node name for S&R":"Runware 3D Inference Settings Draco Compression"},"widgets_values":[true,true,true,7,true,16,true,14,true,14],"bgcolor":"#5345bf"},{"id":9,"type":"Runware 3D Inference Settings","pos":[845.9030526828932,458.9434384192945],"size":[400,2400],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"sparseStructure","name":"sparseStructure","shape":7,"type":"RUNWARE3DINFERENCESETTINGSLAT","link":null},{"localized_name":"shapeSlat","name":"shapeSlat","shape":7,"type":"RUNWARE3DINFERENCESETTINGSLAT","link":null},{"localized_name":"texSlat","name":"texSlat","shape":7,"type":"RUNWARE3DINFERENCESETTINGSLAT","link":null},{"localized_name":"meshCluster","name":"meshCluster","shape":7,"type":"RUNWARE3DINFERENCESETTINGSLAT","link":null},{"localized_name":"dracoCompression","name":"dracoCompression","shape":7,"type":"RUNWARE3DINFERENCESETTINGSLAT","link":6},{"localized_name":"useTextureSize","name":"useTextureSize","shape":7,"type":"BOOLEAN","widget":{"name":"useTextureSize"},"link":null},{"localized_name":"textureSize","name":"textureSize","shape":7,"type":"INT","widget":{"name":"textureSize"},"link":null},{"localized_name":"useDecimationTarget","name":"useDecimationTarget","shape":7,"type":"BOOLEAN","widget":{"name":"useDecimationTarget"},"link":null},{"localized_name":"decimationTarget","name":"decimationTarget","shape":7,"type":"INT","widget":{"name":"decimationTarget"},"link":null},{"localized_name":"useRemesh","name":"useRemesh","shape":7,"type":"BOOLEAN","widget":{"name":"useRemesh"},"link":null},{"localized_name":"remesh","name":"remesh","shape":7,"type":"BOOLEAN","widget":{"name":"remesh"},"link":null},{"localized_name":"useResolution","name":"useResolution","shape":7,"type":"BOOLEAN","widget":{"name":"useResolution"},"link":null},{"localized_name":"resolution","name":"resolution","shape":7,"type":"COMBO","widget":{"name":"resolution"},"link":null},{"localized_name":"useImageAutoFix","name":"useImageAutoFix","shape":7,"type":"BOOLEAN","widget":{"name":"useImageAutoFix"},"link":null},{"localized_name":"imageAutoFix","name":"imageAutoFix","shape":7,"type":"BOOLEAN","widget":{"name":"imageAutoFix"},"link":null},{"localized_name":"useFaceLimit","name":"useFaceLimit","shape":7,"type":"BOOLEAN","widget":{"name":"useFaceLimit"},"link":null},{"localized_name":"faceLimit","name":"faceLimit","shape":7,"type":"INT","widget":{"name":"faceLimit"},"link":null},{"localized_name":"useTexture","name":"useTexture","shape":7,"type":"BOOLEAN","widget":{"name":"useTexture"},"link":null},{"localized_name":"texture","name":"texture","shape":7,"type":"BOOLEAN","widget":{"name":"texture"},"link":null},{"localized_name":"usePbr","name":"usePbr","shape":7,"type":"BOOLEAN","widget":{"name":"usePbr"},"link":null},{"localized_name":"pbr","name":"pbr","shape":7,"type":"BOOLEAN","widget":{"name":"pbr"},"link":null},{"localized_name":"useTextureSeed","name":"useTextureSeed","shape":7,"type":"BOOLEAN","widget":{"name":"useTextureSeed"},"link":null},{"localized_name":"textureSeed","name":"textureSeed","shape":7,"type":"INT","widget":{"name":"textureSeed"},"link":null},{"localized_name":"useTextureAlignment","name":"useTextureAlignment","shape":7,"type":"BOOLEAN","widget":{"name":"useTextureAlignment"},"link":null},{"localized_name":"textureAlignment","name":"textureAlignment","shape":7,"type":"COMBO","widget":{"name":"textureAlignment"},"link":null},{"localized_name":"useTextureQuality","name":"useTextureQuality","shape":7,"type":"BOOLEAN","widget":{"name":"useTextureQuality"},"link":null},{"localized_name":"textureQuality","name":"textureQuality","shape":7,"type":"COMBO","widget":{"name":"textureQuality"},"link":null},{"localized_name":"useAutoSize","name":"useAutoSize","shape":7,"type":"BOOLEAN","widget":{"name":"useAutoSize"},"link":null},{"localized_name":"autoSize","name":"autoSize","shape":7,"type":"BOOLEAN","widget":{"name":"autoSize"},"link":null},{"localized_name":"useOrientation","name":"useOrientation","shape":7,"type":"BOOLEAN","widget":{"name":"useOrientation"},"link":null},{"localized_name":"orientation","name":"orientation","shape":7,"type":"COMBO","widget":{"name":"orientation"},"link":null},{"localized_name":"useQuad","name":"useQuad","shape":7,"type":"BOOLEAN","widget":{"name":"useQuad"},"link":null},{"localized_name":"quad","name":"quad","shape":7,"type":"BOOLEAN","widget":{"name":"quad"},"link":null},{"localized_name":"useCompress","name":"useCompress","shape":7,"type":"BOOLEAN","widget":{"name":"useCompress"},"link":null},{"localized_name":"compress","name":"compress","shape":7,"type":"COMBO","widget":{"name":"compress"},"link":null},{"localized_name":"useSmartLowPoly","name":"useSmartLowPoly","shape":7,"type":"BOOLEAN","widget":{"name":"useSmartLowPoly"},"link":null},{"localized_name":"smartLowPoly","name":"smartLowPoly","shape":7,"type":"BOOLEAN","widget":{"name":"smartLowPoly"},"link":null},{"localized_name":"useGenerateParts","name":"useGenerateParts","shape":7,"type":"BOOLEAN","widget":{"name":"useGenerateParts"},"link":null},{"localized_name":"generateParts","name":"generateParts","shape":7,"type":"BOOLEAN","widget":{"name":"generateParts"},"link":null},{"localized_name":"useExportUv","name":"useExportUv","shape":7,"type":"BOOLEAN","widget":{"name":"useExportUv"},"link":null},{"localized_name":"exportUv","name":"exportUv","shape":7,"type":"BOOLEAN","widget":{"name":"exportUv"},"link":null},{"localized_name":"useGeometryQuality","name":"useGeometryQuality","shape":7,"type":"BOOLEAN","widget":{"name":"useGeometryQuality"},"link":null},{"localized_name":"geometryQuality","name":"geometryQuality","shape":7,"type":"COMBO","widget":{"name":"geometryQuality"},"link":null},{"localized_name":"useOriginalAlpha","name":"useOriginalAlpha","shape":7,"type":"BOOLEAN","widget":{"name":"useOriginalAlpha"},"link":null},{"localized_name":"originalAlpha","name":"originalAlpha","shape":7,"type":"BOOLEAN","widget":{"name":"originalAlpha"},"link":null},{"localized_name":"useMaterial","name":"useMaterial","shape":7,"type":"BOOLEAN","widget":{"name":"useMaterial"},"link":null},{"localized_name":"material","name":"material","shape":7,"type":"COMBO","widget":{"name":"material"},"link":null},{"localized_name":"useQuality","name":"useQuality","shape":7,"type":"BOOLEAN","widget":{"name":"useQuality"},"link":null},{"localized_name":"quality","name":"quality","shape":7,"type":"COMBO","widget":{"name":"quality"},"link":null},{"localized_name":"usePolyCount","name":"usePolyCount","shape":7,"type":"BOOLEAN","widget":{"name":"usePolyCount"},"link":null},{"localized_name":"polyCount","name":"polyCount","shape":7,"type":"FLOAT","widget":{"name":"polyCount"},"link":null},{"localized_name":"useTaPose","name":"useTaPose","shape":7,"type":"BOOLEAN","widget":{"name":"useTaPose"},"link":null},{"localized_name":"taPose","name":"taPose","shape":7,"type":"BOOLEAN","widget":{"name":"taPose"},"link":null},{"localized_name":"useBoundingBox","name":"useBoundingBox","shape":7,"type":"BOOLEAN","widget":{"name":"useBoundingBox"},"link":null},{"localized_name":"boundingBox","name":"boundingBox","shape":7,"type":"STRING","widget":{"name":"boundingBox"},"link":null},{"localized_name":"useMeshMode","name":"useMeshMode","shape":7,"type":"BOOLEAN","widget":{"name":"useMeshMode"},"link":null},{"localized_name":"meshMode","name":"meshMode","shape":7,"type":"COMBO","widget":{"name":"meshMode"},"link":null},{"localized_name":"useAddons","name":"useAddons","shape":7,"type":"BOOLEAN","widget":{"name":"useAddons"},"link":null},{"localized_name":"addons","name":"addons","shape":7,"type":"STRING","widget":{"name":"addons"},"link":null},{"localized_name":"useHdTexture","name":"useHdTexture","shape":7,"type":"BOOLEAN","widget":{"name":"useHdTexture"},"link":null},{"localized_name":"hdTexture","name":"hdTexture","shape":7,"type":"BOOLEAN","widget":{"name":"hdTexture"},"link":null},{"localized_name":"useMeshType","name":"useMeshType","shape":7,"type":"BOOLEAN","widget":{"name":"useMeshType"},"link":null},{"localized_name":"meshType","name":"meshType","shape":7,"type":"COMBO","widget":{"name":"meshType"},"link":null},{"localized_name":"useTopology","name":"useTopology","shape":7,"type":"BOOLEAN","widget":{"name":"useTopology"},"link":null},{"localized_name":"topology","name":"topology","shape":7,"type":"COMBO","widget":{"name":"topology"},"link":null},{"localized_name":"useDecimation","name":"useDecimation","shape":7,"type":"BOOLEAN","widget":{"name":"useDecimation"},"link":null},{"localized_name":"decimation","name":"decimation","shape":7,"type":"INT","widget":{"name":"decimation"},"link":null},{"localized_name":"useSymmetry","name":"useSymmetry","shape":7,"type":"BOOLEAN","widget":{"name":"useSymmetry"},"link":null},{"localized_name":"symmetry","name":"symmetry","shape":7,"type":"COMBO","widget":{"name":"symmetry"},"link":null},{"localized_name":"usePose","name":"usePose","shape":7,"type":"BOOLEAN","widget":{"name":"usePose"},"link":null},{"localized_name":"pose","name":"pose","shape":7,"type":"COMBO","widget":{"name":"pose"},"link":null},{"localized_name":"useImageEnhancement","name":"useImageEnhancement","shape":7,"type":"BOOLEAN","widget":{"name":"useImageEnhancement"},"link":null},{"localized_name":"imageEnhancement","name":"imageEnhancement","shape":7,"type":"BOOLEAN","widget":{"name":"imageEnhancement"},"link":null},{"localized_name":"useRemoveLighting","name":"useRemoveLighting","shape":7,"type":"BOOLEAN","widget":{"name":"useRemoveLighting"},"link":null},{"localized_name":"removeLighting","name":"removeLighting","shape":7,"type":"BOOLEAN","widget":{"name":"removeLighting"},"link":null},{"localized_name":"useOrigin","name":"useOrigin","shape":7,"type":"BOOLEAN","widget":{"name":"useOrigin"},"link":null},{"localized_name":"origin","name":"origin","shape":7,"type":"COMBO","widget":{"name":"origin"},"link":null},{"localized_name":"useModeration","name":"useModeration","shape":7,"type":"BOOLEAN","widget":{"name":"useModeration"},"link":null},{"localized_name":"moderation","name":"moderation","shape":7,"type":"BOOLEAN","widget":{"name":"moderation"},"link":null},{"localized_name":"useSavePreRemeshedModel","name":"useSavePreRemeshedModel","shape":7,"type":"BOOLEAN","widget":{"name":"useSavePreRemeshedModel"},"link":null},{"localized_name":"savePreRemeshedModel","name":"savePreRemeshedModel","shape":7,"type":"BOOLEAN","widget":{"name":"savePreRemeshedModel"},"link":null},{"localized_name":"useTexturePrompt","name":"useTexturePrompt","shape":7,"type":"BOOLEAN","widget":{"name":"useTexturePrompt"},"link":null},{"localized_name":"texturePrompt","name":"texturePrompt","shape":7,"type":"STRING","widget":{"name":"texturePrompt"},"link":null},{"localized_name":"useFaceCount","name":"useFaceCount","shape":7,"type":"BOOLEAN","widget":{"name":"useFaceCount"},"link":null},{"localized_name":"faceCount","name":"faceCount","shape":7,"type":"INT","widget":{"name":"faceCount"},"link":null},{"localized_name":"useGenerateType","name":"useGenerateType","shape":7,"type":"BOOLEAN","widget":{"name":"useGenerateType"},"link":null},{"localized_name":"generateType","name":"generateType","shape":7,"type":"COMBO","widget":{"name":"generateType"},"link":null},{"localized_name":"usePolygonType","name":"usePolygonType","shape":7,"type":"BOOLEAN","widget":{"name":"usePolygonType"},"link":null},{"localized_name":"polygonType","name":"polygonType","shape":7,"type":"COMBO","widget":{"name":"polygonType"},"link":null},{"localized_name":"useGeometryOnly","name":"useGeometryOnly","shape":7,"type":"BOOLEAN","widget":{"name":"useGeometryOnly"},"link":null},{"localized_name":"geometryOnly","name":"geometryOnly","shape":7,"type":"BOOLEAN","widget":{"name":"geometryOnly"},"link":null},{"localized_name":"useRemeshBand","name":"useRemeshBand","shape":7,"type":"BOOLEAN","widget":{"name":"useRemeshBand"},"link":null},{"localized_name":"remeshBand","name":"remeshBand","shape":7,"type":"FLOAT","widget":{"name":"remeshBand"},"link":null},{"localized_name":"useRemeshProject","name":"useRemeshProject","shape":7,"type":"BOOLEAN","widget":{"name":"useRemeshProject"},"link":null},{"localized_name":"remeshProject","name":"remeshProject","shape":7,"type":"FLOAT","widget":{"name":"remeshProject"},"link":null},{"localized_name":"useTextureFormat","name":"useTextureFormat","shape":7,"type":"BOOLEAN","widget":{"name":"useTextureFormat"},"link":null},{"localized_name":"textureFormat","name":"textureFormat","shape":7,"type":"COMBO","widget":{"name":"textureFormat"},"link":null},{"localized_name":"useAlphaMode","name":"useAlphaMode","shape":7,"type":"BOOLEAN","widget":{"name":"useAlphaMode"},"link":null},{"localized_name":"alphaMode","name":"alphaMode","shape":7,"type":"COMBO","widget":{"name":"alphaMode"},"link":null}],"outputs":[{"localized_name":"Settings","name":"Settings","type":"RUNWARE3DINFERENCESETTINGS","links":[7]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"0bfe164c326ac5bee5b67e18d309a4169d0b2c8e","Node name for S&R":"Runware 3D Inference Settings"},"widgets_values":[false,2048,false,500000,false,true,false,1024,false,false,false,10000,false,true,false,true,false,1,false,"original_image",false,"standard",false,false,false,"default",false,false,false,"meshopt",false,false,false,false,false,true,false,"standard",false,false,false,"PBR",false,"medium",false,18000,false,false,false,"",false,"Quad",false,"",false,false,false,"standard",false,"triangle",false,2,false,"auto",false,"none",false,true,false,true,false,"bottom",false,false,false,false,false,"",false,500000,false,"Normal",false,"triangle",false,false,false,1,false,0.01,false,"WEBP",false,"OPAQUE"],"bgcolor":"#5345bf"}],"links":[[2,2,0,3,0,"RUNWARE3DMODEL"],[3,3,0,4,0,"STRING"],[4,6,0,5,0,"IMAGE"],[5,5,0,3,1,"RUNWARE3DINFERENCEINPUTS"],[6,10,0,9,4,"RUNWARE3DINFERENCESETTINGSLAT"],[7,9,0,3,2,"RUNWARE3DINFERENCESETTINGS"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.5125039258664733,"offset":[1123.280026003696,-276.3609189772004]}},"version":0.4} \ No newline at end of file