From 573b0e2ec9f6fab9804f4101b56afec366f026fc Mon Sep 17 00:00:00 2001 From: Sirshendu Ganguly Date: Fri, 10 Apr 2026 15:08:05 +0530 Subject: [PATCH] Updated 3D Inference Settings node --- clientlibs/utils.js | 9 ++ modules/threeDInference.py | 2 + modules/threeDInferenceSettings.py | 121 +++++++++++++++++++++- workflows/Runware_3D_Inference_Hyper.json | 1 + 4 files changed, 131 insertions(+), 2 deletions(-) create mode 100644 workflows/Runware_3D_Inference_Hyper.json diff --git a/clientlibs/utils.js b/clientlibs/utils.js index b0c4ab8..ece0fd4 100644 --- a/clientlibs/utils.js +++ b/clientlibs/utils.js @@ -1987,6 +1987,15 @@ function threeDInferenceSettingsToggleHandler(node) { ["useGenerateParts", "generateParts"], ["useExportUv", "exportUv"], ["useGeometryQuality", "geometryQuality"], + ["useOriginalAlpha", "originalAlpha"], + ["useMaterial", "material"], + ["useQuality", "quality"], + ["usePolyCount", "polyCount"], + ["useTaPose", "taPose"], + ["useBoundingBox", "boundingBox"], + ["useMeshMode", "meshMode"], + ["useAddons", "addons"], + ["useHdTexture", "hdTexture"], ]; pairs.forEach(([useName, paramName]) => { const useW = node.widgets.find(w => w.name === useName); diff --git a/modules/threeDInference.py b/modules/threeDInference.py index 8184e54..22362c1 100644 --- a/modules/threeDInference.py +++ b/modules/threeDInference.py @@ -10,6 +10,8 @@ class threeDInference: "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", } # Output formats diff --git a/modules/threeDInferenceSettings.py b/modules/threeDInferenceSettings.py index d3c3993..754a02a 100644 --- a/modules/threeDInferenceSettings.py +++ b/modules/threeDInferenceSettings.py @@ -1,7 +1,8 @@ """ Runware 3D Inference Settings Node Main settings for 3D inference: textureSize, decimationTarget, remesh, resolution, -imageAutoFix, faceLimit, texture, pbr, Tripo mesh/texture options, and sub-configs +imageAutoFix, faceLimit, texture, pbr, Tripo mesh/texture options, material/quality, +polyCount, taPose, boundingBox, meshMode, addons, hdTexture, and sub-configs sparseStructure, shapeSlat, texSlat from connected nodes. """ @@ -195,6 +196,89 @@ class Runware3DInferenceSettings: "tooltip": "standard: balanced (default). detailed: maximum detail (ultra mode). Only used when 'Use Geometry Quality' is enabled.", "default": "standard", }), + "useOriginalAlpha": ("BOOLEAN", { + "tooltip": "Enable to include useOriginalAlpha in settings.", + "default": False, + }), + "originalAlpha": ("BOOLEAN", { + "tooltip": "If true, use the original transparency channel while processing the image. Only used when 'Use Original Alpha' is enabled.", + "default": False, + "label_on": "true", + "label_off": "false", + }), + "useMaterial": ("BOOLEAN", { + "tooltip": "Enable to include material in settings.", + "default": False, + }), + "material": (["PBR", "Shaded", "All"], { + "tooltip": "Material type. PBR: physically based textures. Shaded: base color with baked lighting. All: return both. Only used when 'Use Material' is enabled.", + "default": "PBR", + }), + "useQuality": ("BOOLEAN", { + "tooltip": "Enable to include quality in settings.", + "default": False, + }), + "quality": (["high", "medium", "low", "extra-low"], { + "tooltip": "Generation quality. For Raw defaults to high; for Quad defaults to medium. Ignored when polyCount is used.", + "default": "medium", + }), + "usePolyCount": ("BOOLEAN", { + "tooltip": "Enable to include polyCount in settings.", + "default": False, + }), + "polyCount": ("FLOAT", { + "tooltip": "Advanced face-count control. Raw: 500-1000000 (default 500000). Quad: 1000-200000 (default 18000). Overrides quality.", + "default": 18000.0, + "min": 500.0, + "max": 1000000.0, + "step": 100.0, + }), + "useTaPose": ("BOOLEAN", { + "tooltip": "Enable to include taPose in settings.", + "default": False, + }), + "taPose": ("BOOLEAN", { + "tooltip": "When true, human-like models are generated in T/A pose. Only used when 'Use Ta Pose' is enabled.", + "default": False, + "label_on": "true", + "label_off": "false", + }), + "useBoundingBox": ("BOOLEAN", { + "tooltip": "Enable to include boundingBox in settings.", + "default": False, + }), + "boundingBox": ("STRING", { + "multiline": False, + "tooltip": "Comma-separated integers in fixed order y,z,x (width,height,length), e.g. 2,3,4. Only used when 'Use Bounding Box' is enabled.", + "default": "", + }), + "useMeshMode": ("BOOLEAN", { + "tooltip": "Enable to include meshMode in settings.", + "default": False, + }), + "meshMode": (["Raw", "Quad"], { + "tooltip": "Raw: triangular faces. Quad: quadrilateral faces. If Raw, addons is forced to []. Only used when 'Use Mesh Mode' is enabled.", + "default": "Quad", + }), + "useAddons": ("BOOLEAN", { + "tooltip": "Enable to include addons in settings.", + "default": False, + }), + "addons": ("STRING", { + "multiline": False, + "tooltip": "Comma-separated addon values, e.g. HighPack. Leave empty for []. Only used when 'Use Addons' is enabled.", + "default": "", + }), + "useHdTexture": ("BOOLEAN", { + "tooltip": "Enable to include hdTexture in settings.", + "default": False, + }), + "hdTexture": ("BOOLEAN", { + "tooltip": "If true, provides high-quality texture output. Only used when 'Use Hd Texture' is enabled.", + "default": False, + "label_on": "true", + "label_off": "false", + }), "sparseStructure": ("RUNWARE3DINFERENCESETTINGSLAT", { "tooltip": "Connect Runware 3D Inference Settings Sparse Structure node.", }), @@ -214,7 +298,8 @@ class Runware3DInferenceSettings: DESCRIPTION = ( "Configure Runware 3D Inference settings: textureSize, decimationTarget, remesh, resolution, imageAutoFix, faceLimit, " "texture, pbr, textureSeed, textureAlignment, textureQuality, autoSize, orientation, quad, compress, " - "smartLowPoly, generateParts, exportUv, geometryQuality, and lat configs." + "smartLowPoly, generateParts, exportUv, geometryQuality, useOriginalAlpha, material, quality, polyCount, " + "taPose, boundingBox, meshMode, addons, hdTexture, and lat configs." ) def create(self, **kwargs) -> tuple[Dict[str, Any]]: @@ -259,6 +344,38 @@ class Runware3DInferenceSettings: settings["exportUv"] = bool(kwargs.get("exportUv", True)) if kwargs.get("useGeometryQuality", False): settings["geometryQuality"] = kwargs.get("geometryQuality", "standard") + if kwargs.get("useOriginalAlpha", False): + settings["useOriginalAlpha"] = bool(kwargs.get("originalAlpha", False)) + if kwargs.get("useMaterial", False): + settings["material"] = kwargs.get("material", "PBR") + if kwargs.get("useQuality", False): + settings["quality"] = kwargs.get("quality", "medium") + if kwargs.get("usePolyCount", False): + settings["polyCount"] = float(kwargs.get("polyCount", 18000.0)) + if kwargs.get("useTaPose", False): + settings["taPose"] = bool(kwargs.get("taPose", False)) + if kwargs.get("useBoundingBox", False): + raw_bounding_box = (kwargs.get("boundingBox") or "").strip() + if raw_bounding_box: + parts = [part.strip() for part in raw_bounding_box.split(",") if part.strip()] + if len(parts) != 3: + raise ValueError("boundingBox must contain exactly 3 comma-separated integers in y,z,x order.") + try: + settings["boundingBox"] = [int(parts[0]), int(parts[1]), int(parts[2])] + except ValueError as exc: + raise ValueError("boundingBox values must be integers (y,z,x).") from exc + if kwargs.get("useMeshMode", False): + settings["meshMode"] = kwargs.get("meshMode", "Quad") + if kwargs.get("useAddons", False): + raw_addons = (kwargs.get("addons") or "").strip() + addons = [addon.strip() for addon in raw_addons.split(",") if addon.strip()] if raw_addons else [] + settings["addons"] = addons + if kwargs.get("useHdTexture", False): + settings["hdTexture"] = bool(kwargs.get("hdTexture", False)) + + # API requirement: Raw mesh mode fixes addons to an empty list. + if settings.get("meshMode") == "Raw": + settings["addons"] = [] sparse = kwargs.get("sparseStructure", None) if sparse is not None and isinstance(sparse, dict) and len(sparse) > 0: diff --git a/workflows/Runware_3D_Inference_Hyper.json b/workflows/Runware_3D_Inference_Hyper.json new file mode 100644 index 0000000..33c879e --- /dev/null +++ b/workflows/Runware_3D_Inference_Hyper.json @@ -0,0 +1 @@ +{"id":"92dc56db-c666-467b-8131-b6d0ffffc78f","revision":0,"last_node_id":7,"last_link_id":8,"nodes":[{"id":3,"type":"Runware Save 3D","pos":[703.1738891601562,594.8554077148438],"size":[270,106],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"3dObject","name":"3dObject","type":"STRING","widget":{"name":"3dObject"},"link":7},{"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":"ede22eee5eec7908ce8998fb649c50db5b4f0b7b","Node name for S&R":"Runware Save 3D"},"widgets_values":["","ComfyUI","/Users/sirshenduganguly/Downloads/Runware-codebase/ComfyUI/output/3d_models/ComfyUI_20260410_150453.glb"],"bgcolor":"#5345bf"},{"id":7,"type":"Runware 3D Inference","pos":[202.0921173095703,512.4961547851562],"size":[400,276],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"inputs","name":"inputs","shape":7,"type":"RUNWARE3DINFERENCEINPUTS","link":null},{"localized_name":"settings","name":"settings","shape":7,"type":"RUNWARE3DINFERENCESETTINGS","link":6},{"localized_name":"Model","name":"Model","type":"COMBO","widget":{"name":"Model"},"link":null},{"localized_name":"positivePrompt","name":"positivePrompt","type":"STRING","widget":{"name":"positivePrompt"},"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":[7]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"61dfd039455493e460fde11825222cf9eb4be58b","Node name for S&R":"Runware 3D Inference"},"widgets_values":["Rodin Gen-2","a sci-fi helmet, hard surface",false,1402198696,"randomize","GLB",false,95],"bgcolor":"#5345bf"},{"id":2,"type":"Runware 3D Inference Settings","pos":[-187.21949768066406,510.6214904785156],"size":[294.4507751464844,1418],"flags":{},"order":0,"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":"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}],"outputs":[{"localized_name":"Settings","name":"Settings","type":"RUNWARE3DINFERENCESETTINGS","links":[6]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"ede22eee5eec7908ce8998fb649c50db5b4f0b7b","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,true,"PBR",false,"medium",true,18000,false,false,false,"",true,"Quad",false,"",false,false],"bgcolor":"#5345bf"}],"links":[[6,2,0,7,1,"RUNWARE3DINFERENCESETTINGS"],[7,7,0,3,0,"STRING"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.9182230163043725,"offset":[539.156684706895,-373.25387314803527]}},"version":0.4} \ No newline at end of file