Add support for Trellis 2

This commit is contained in:
Sirshendu Ganguly
2026-05-29 23:12:40 +05:30
parent fec0623cc1
commit dde8589886
6 changed files with 190 additions and 7 deletions
+2
View File
@@ -119,6 +119,7 @@ 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.save3D import RunwareSave3D
from .modules.saveText import RunwareSaveText
from .modules.loadMesh import RunwareLoadMesh
@@ -257,6 +258,7 @@ NODE_CLASS_MAPPINGS = {
"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 Save 3D": RunwareSave3D,
"Runware Save Text": RunwareSaveText,
"Runware Load Mesh": RunwareLoadMesh,
+3 -1
View File
@@ -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, ultralyticsProviderSettingsToggleHandler, openaiProviderSettingsToggleHandler, lightricksProviderSettingsToggleHandler, klingProviderSettingsToggleHandler, lumaProviderSettingsToggleHandler, briaProviderSettingsToggleHandler, pixverseProviderSettingsToggleHandler, alibabaProviderSettingsToggleHandler, mireloProviderSettingsToggleHandler, googleProviderSettingsToggleHandler, syncProviderSettingsToggleHandler, syncSegmentToggleHandler, settingsToggleHandler, outpaintSettingsToggleHandler, safetyInputsToggleHandler, imageInferenceSettingsColorPaletteToggleHandler, imageInferenceSettingsMoodboardsToggleHandler, audioInputToggleHandler, speechInputToggleHandler, briaProviderMaskToggleHandler, wanAnimateAdvancedFeatureSettingsToggleHandler, videoAdvancedFeatureInputsToggleHandler, audioInferenceInputsToggleHandler, audioInferenceSpeechVoicesToggleHandler, referenceVideosToggleHandler } from "./utils.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, audioInputToggleHandler, speechInputToggleHandler, briaProviderMaskToggleHandler, wanAnimateAdvancedFeatureSettingsToggleHandler, videoAdvancedFeatureInputsToggleHandler, audioInferenceInputsToggleHandler, audioInferenceSpeechVoicesToggleHandler, referenceVideosToggleHandler } from "./utils.js";
import { RUNWARE_NODE_TYPES, RUNWARE_NODE_PROPS, SEARCH_TERMS } from "./types.js";
const nodeInitList = [];
@@ -176,6 +176,8 @@ app.registerExtension({
nodeClass === RUNWARE_NODE_TYPES.THREEDINFERENCESETTINGSSHAPESLAT ||
nodeClass === RUNWARE_NODE_TYPES.THREEDINFERENCESETTINGSTEXSLAT) {
threeDInferenceSettingsLatToggleHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.THREEDINFERENCESETTINGSMESHCLUSTER) {
threeDInferenceSettingsMeshClusterToggleHandler(node);
}
if(crNodeProps.colorModeOnly === true) return;
+5
View File
@@ -169,6 +169,7 @@ const RUNWARE_NODE_TYPES = {
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",
SAVE3D: "Runware Save 3D",
LOADMESH: "Runware Load Mesh",
WATERMARKADVANCEDFEATURE: "Runware Watermark Advanced Feature",
@@ -670,6 +671,10 @@ const RUNWARE_NODE_PROPS = {
bgColor: DEFAULT_BGCOLOR,
colorModeOnly: true,
},
[RUNWARE_NODE_TYPES.THREEDINFERENCESETTINGSMESHCLUSTER]: {
bgColor: DEFAULT_BGCOLOR,
colorModeOnly: true,
},
[RUNWARE_NODE_TYPES.SAVE3D]: {
bgColor: DEFAULT_BGCOLOR,
colorModeOnly: true,
+30
View File
@@ -2224,6 +2224,14 @@ function threeDInferenceSettingsToggleHandler(node) {
["useModeration", "moderation"],
["useSavePreRemeshedModel", "savePreRemeshedModel"],
["useTexturePrompt", "texturePrompt"],
["useFaceCount", "faceCount"],
["useGenerateType", "generateType"],
["usePolygonType", "polygonType"],
["useGeometryOnly", "geometryOnly"],
["useRemeshBand", "remeshBand"],
["useRemeshProject", "remeshProject"],
["useTextureFormat", "textureFormat"],
["useAlphaMode", "alphaMode"],
];
pairs.forEach(([useName, paramName]) => {
const useW = node.widgets.find(w => w.name === useName);
@@ -2260,6 +2268,27 @@ function threeDInferenceSettingsLatToggleHandler(node) {
});
}
function threeDInferenceSettingsMeshClusterToggleHandler(node) {
const pairs = [
["useThresholdConeHalfAngleRad", "thresholdConeHalfAngleRad"],
["useRefineIterations", "refineIterations"],
["useGlobalIterations", "globalIterations"],
["useSmoothStrength", "smoothStrength"],
];
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");
@@ -5043,6 +5072,7 @@ export {
threeDInferenceToggleHandler,
threeDInferenceSettingsToggleHandler,
threeDInferenceSettingsLatToggleHandler,
threeDInferenceSettingsMeshClusterToggleHandler,
ultralyticsProviderSettingsToggleHandler,
openaiProviderSettingsToggleHandler,
lightricksProviderSettingsToggleHandler,
+60 -6
View File
@@ -1,9 +1,9 @@
"""
Runware 3D Inference Settings Node
Main settings for 3D inference: textureSize, decimationTarget, remesh, resolution,
imageAutoFix, faceLimit, texture, pbr, Tripo mesh/texture options, material/quality,
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 from connected nodes.
sparseStructure, shapeSlat, texSlat, meshCluster from connected nodes.
"""
from typing import Dict, Any
@@ -425,6 +425,47 @@ class Runware3DInferenceSettings:
"label_on": "true",
"label_off": "false",
}),
"meshCluster": ("RUNWARE3DINFERENCESETTINGSLAT", {
"tooltip": "Connect Runware 3D Inference Settings Mesh Cluster node.",
}),
"useRemeshBand": ("BOOLEAN", {
"tooltip": "Enable to include remeshBand in settings.",
"default": False,
}),
"remeshBand": ("FLOAT", {
"tooltip": "Narrow-band width (in voxels) for dual-contouring remeshing. Must be greater than 0 when remesh is true. Only used when enabled.",
"default": 1.0,
"min": 0.0,
"max": 16.0,
"step": 0.1,
}),
"useRemeshProject": ("BOOLEAN", {
"tooltip": "Enable to include remeshProject in settings.",
"default": False,
}),
"remeshProject": ("FLOAT", {
"tooltip": "Projection factor for snapping remeshed vertices back to the original surface. Must be greater than 0 when remesh is true. Only used when enabled.",
"default": 0.0,
"min": 0.0,
"max": 1.0,
"step": 0.01,
}),
"useTextureFormat": ("BOOLEAN", {
"tooltip": "Enable to include textureFormat in settings.",
"default": False,
}),
"textureFormat": (["WEBP", "PNG"], {
"tooltip": "Texture format stored in the GLB output: WEBP or PNG. Only used when 'Use Texture Format' is enabled.",
"default": "WEBP",
}),
"useAlphaMode": ("BOOLEAN", {
"tooltip": "Enable to include alphaMode in settings.",
"default": False,
}),
"alphaMode": (["OPAQUE", "BLEND", "MASK"], {
"tooltip": "Material alpha mode. Only used when 'Use Alpha Mode' is enabled.",
"default": "OPAQUE",
}),
}
}
@@ -433,10 +474,11 @@ class Runware3DInferenceSettings:
FUNCTION = "create"
CATEGORY = "Runware"
DESCRIPTION = (
"Configure Runware 3D Inference settings: textureSize, decimationTarget, remesh, resolution, imageAutoFix, faceLimit, "
"texture, pbr, textureSeed, textureAlignment, textureQuality, autoSize, orientation, quad, compress, "
"Configure Runware 3D Inference settings: textureSize, decimationTarget, remesh, remeshBand, remeshProject, "
"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, and lat configs."
"taPose, boundingBox, meshMode, addons, hdTexture, lat configs, and meshCluster."
)
def create(self, **kwargs) -> tuple[Dict[str, Any]]:
@@ -448,6 +490,10 @@ class Runware3DInferenceSettings:
settings["decimationTarget"] = int(kwargs.get("decimationTarget", 500000))
if kwargs.get("useRemesh", False):
settings["remesh"] = bool(kwargs.get("remesh", True))
if kwargs.get("useRemeshBand", False):
settings["remeshBand"] = float(kwargs.get("remeshBand", 1.0))
if kwargs.get("useRemeshProject", False):
settings["remeshProject"] = float(kwargs.get("remeshProject", 0.0))
if kwargs.get("useResolution", False):
settings["resolution"] = int(kwargs.get("resolution", 1024))
@@ -473,6 +519,10 @@ class Runware3DInferenceSettings:
settings["textureAlignment"] = kwargs.get("textureAlignment", "original_image")
if kwargs.get("useTextureQuality", False):
settings["textureQuality"] = kwargs.get("textureQuality", "standard")
if kwargs.get("useTextureFormat", False):
settings["textureFormat"] = kwargs.get("textureFormat", "WEBP")
if kwargs.get("useAlphaMode", False):
settings["alphaMode"] = kwargs.get("alphaMode", "OPAQUE")
if kwargs.get("useAutoSize", False):
settings["autoSize"] = bool(kwargs.get("autoSize", False))
if kwargs.get("useOrientation", False):
@@ -556,6 +606,10 @@ class Runware3DInferenceSettings:
if tex is not None and isinstance(tex, dict) and len(tex) > 0:
settings["texSlat"] = tex
mesh_cluster = kwargs.get("meshCluster", None)
if mesh_cluster is not None and isinstance(mesh_cluster, dict) and len(mesh_cluster) > 0:
settings["meshCluster"] = mesh_cluster
return (settings,)
@@ -0,0 +1,90 @@
"""
Runware 3D Inference Settings Mesh Cluster Node
Outputs meshCluster config: thresholdConeHalfAngleRad, refineIterations,
globalIterations, smoothStrength
"""
import math
from typing import Dict, Any
class Runware3DInferenceSettingsMeshCluster:
"""Runware 3D Inference Settings Mesh Cluster Node"""
@classmethod
def INPUT_TYPES(cls):
return {
"required": {},
"optional": {
"useThresholdConeHalfAngleRad": ("BOOLEAN", {
"tooltip": "Enable to include thresholdConeHalfAngleRad in meshCluster",
"default": False,
}),
"thresholdConeHalfAngleRad": ("FLOAT", {
"tooltip": "Cone half-angle threshold (radians) used during UV chart clustering. Only used when enabled.",
"default": math.pi / 2,
"min": 0.0,
"max": math.pi,
"step": 0.01,
}),
"useRefineIterations": ("BOOLEAN", {
"tooltip": "Enable to include refineIterations in meshCluster",
"default": False,
}),
"refineIterations": ("INT", {
"tooltip": "Local refinement iterations for chart clustering. Only used when enabled.",
"default": 0,
"min": 0,
"max": 64,
"step": 1,
}),
"useGlobalIterations": ("BOOLEAN", {
"tooltip": "Enable to include globalIterations in meshCluster",
"default": False,
}),
"globalIterations": ("INT", {
"tooltip": "Global iterations for chart clustering. Only used when enabled.",
"default": 1,
"min": 0,
"max": 64,
"step": 1,
}),
"useSmoothStrength": ("BOOLEAN", {
"tooltip": "Enable to include smoothStrength in meshCluster",
"default": False,
}),
"smoothStrength": ("INT", {
"tooltip": "Smoothing strength applied during chart clustering. Only used when enabled.",
"default": 1,
"min": 0,
"max": 10,
"step": 1,
}),
}
}
RETURN_TYPES = ("RUNWARE3DINFERENCESETTINGSLAT",)
RETURN_NAMES = ("Mesh Cluster",)
FUNCTION = "create"
CATEGORY = "Runware"
DESCRIPTION = "Configure mesh cluster parameters for Runware 3D Inference settings."
def create(self, **kwargs) -> tuple[Dict[str, Any]]:
out: Dict[str, Any] = {}
if kwargs.get("useThresholdConeHalfAngleRad", False):
out["thresholdConeHalfAngleRad"] = float(kwargs.get("thresholdConeHalfAngleRad", math.pi / 2))
if kwargs.get("useRefineIterations", False):
out["refineIterations"] = int(kwargs.get("refineIterations", 0))
if kwargs.get("useGlobalIterations", False):
out["globalIterations"] = int(kwargs.get("globalIterations", 1))
if kwargs.get("useSmoothStrength", False):
out["smoothStrength"] = int(kwargs.get("smoothStrength", 1))
return (out,)
NODE_CLASS_MAPPINGS = {
"Runware3DInferenceSettingsMeshCluster": Runware3DInferenceSettingsMeshCluster,
}
NODE_DISPLAY_NAME_MAPPINGS = {
"Runware3DInferenceSettingsMeshCluster": "Runware 3D Inference Settings Mesh Cluster",
}