Merge branch 'main' into feature-FishAudio

Resolve import conflict in clientlibs/main.js by combining handlers
from both branches (MeshCluster, Moodboards from main; ReferenceVoice
from feature-FishAudio).
This commit is contained in:
Sirshendu Ganguly
2026-06-03 14:42:20 +05:30
17 changed files with 366 additions and 24 deletions
+5 -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, audioInputToggleHandler, speechInputToggleHandler, briaProviderMaskToggleHandler, wanAnimateAdvancedFeatureSettingsToggleHandler, videoAdvancedFeatureInputsToggleHandler, audioInferenceInputsToggleHandler, audioInferenceReferenceVoiceToggleHandler, 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, audioInferenceReferenceVoiceToggleHandler, audioInferenceSpeechVoicesToggleHandler, referenceVideosToggleHandler } from "./utils.js";
import { RUNWARE_NODE_TYPES, RUNWARE_NODE_PROPS, SEARCH_TERMS } from "./types.js";
const nodeInitList = [];
@@ -151,6 +151,8 @@ app.registerExtension({
safetyInputsToggleHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.IMAGEINFERENCESETTINGSCOLORPALETTE) {
imageInferenceSettingsColorPaletteToggleHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.IMAGEINFERENCESETTINGSMOODBOARDS) {
imageInferenceSettingsMoodboardsToggleHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.AUDIOINPUT) {
audioInputToggleHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.SPEECHINPUT) {
@@ -176,6 +178,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;
+10
View File
@@ -158,6 +158,7 @@ const RUNWARE_NODE_TYPES = {
SAFETYINPUTS: "Runware Safety Inputs",
SETTINGS: "Runware Settings",
IMAGEINFERENCESETTINGSCOLORPALETTE: "Runware Image Inference Settings Color Palette",
IMAGEINFERENCESETTINGSMOODBOARDS: "Runware Image Inference Settings Moodboards",
VIDEOADVANCEDFEATUREINPUTS: "Runware Video Advanced Feature Inputs",
WANANIMATEADVANCEDFEATURESETTINGS: "Runware Wan Animate Advanced Feature Settings",
SAVEIMAGE: "Runware Save Image",
@@ -169,6 +170,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",
@@ -626,6 +628,10 @@ const RUNWARE_NODE_PROPS = {
bgColor: DEFAULT_BGCOLOR,
colorModeOnly: true,
},
[RUNWARE_NODE_TYPES.IMAGEINFERENCESETTINGSMOODBOARDS]: {
bgColor: DEFAULT_BGCOLOR,
colorModeOnly: true,
},
[RUNWARE_NODE_TYPES.VIDEOADVANCEDFEATUREINPUTS]: {
bgColor: DEFAULT_BGCOLOR,
colorModeOnly: true,
@@ -670,6 +676,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,
+62
View File
@@ -1426,6 +1426,8 @@ function videoSettingsToggleHandler(settingsNode) {
const draftWidget = settingsNode.widgets.find(w => w && w.name === "draft");
const useAudioWidget = settingsNode.widgets.find(w => w && w.name === "useAudio");
const audioWidget = settingsNode.widgets.find(w => w && w.name === "audio");
const usePreserveAudioWidget = settingsNode.widgets.find(w => w && w.name === "usePreserveAudio");
const preserveAudioWidget = settingsNode.widgets.find(w => w && w.name === "preserveAudio");
const useVoicePromptWidget = settingsNode.widgets.find(w => w && w.name === "useVoicePrompt");
const voicePromptWidget = settingsNode.widgets.find(w => w && w.name === "voicePrompt");
const useSafetyFilterWidget = settingsNode.widgets.find(w => w && w.name === "useSafetyFilter");
@@ -1485,6 +1487,7 @@ function videoSettingsToggleHandler(settingsNode) {
if (useDraftWidget && draftWidget) toggleWidgetState(useDraftWidget, draftWidget, "draft");
if (useAudioWidget && audioWidget) toggleWidgetState(useAudioWidget, audioWidget, "audio");
if (usePreserveAudioWidget && preserveAudioWidget) toggleWidgetState(usePreserveAudioWidget, preserveAudioWidget, "preserveAudio");
if (useVoicePromptWidget && voicePromptWidget) toggleWidgetState(useVoicePromptWidget, voicePromptWidget, "voicePrompt");
if (useSafetyFilterWidget && safetyFilterWidget) toggleWidgetState(useSafetyFilterWidget, safetyFilterWidget, "safetyFilter");
if (usePromptUpsamplingWidget && promptUpsamplingWidget) toggleWidgetState(usePromptUpsamplingWidget, promptUpsamplingWidget, "promptUpsampling");
@@ -1895,6 +1898,7 @@ function ultralyticsProviderSettingsToggleHandler(ultralyticsNode) {
["useSteps", "steps"],
["useCFGScale", "CFGScale"],
["useStrength", "strength"],
["useInpaintSize", "inpaintSize"],
];
function toggleWidgetState(useWidget, paramWidget, paramName) {
@@ -2250,6 +2254,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);
@@ -2286,6 +2298,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");
@@ -2908,6 +2941,7 @@ function videoModelSearchFilterHandler(videoModelSearchNode) {
"Pruna": [
"prunaai:p-video@0 (P-Video)",
"prunaai:p-video@avatar (P-Video Avatar)",
"prunaai:p-video@animate (P-Video Animate)",
],
"SkyReels": [
"skywork:skyreels@v4 (SkyReels V4)",
@@ -3007,6 +3041,7 @@ function videoModelSearchFilterHandler(videoModelSearchNode) {
"veed:fabric@1.0": {"width": 1280, "height": 720},
"prunaai:p-video@0": {"width": 1280, "height": 720},
"prunaai:p-video@avatar": {"width": 1280, "height": 720},
"prunaai:p-video@animate": {"width": 1280, "height": 720},
"heygen:avatar@4": {"width": 1280, "height": 720},
"heygen:video-agent@0": {"width": 1280, "height": 720},
"heygen:avatar@5": {"width": 1280, "height": 720},
@@ -3106,6 +3141,7 @@ function videoModelSearchFilterHandler(videoModelSearchNode) {
"veed:fabric@1.0": "720p",
"prunaai:p-video@0": "720p",
"prunaai:p-video@avatar": "720p",
"prunaai:p-video@animate": "720p",
"heygen:avatar@4": "720p",
"heygen:video-agent@0": "720p",
"heygen:avatar@5": "720p",
@@ -5106,6 +5142,7 @@ export {
threeDInferenceToggleHandler,
threeDInferenceSettingsToggleHandler,
threeDInferenceSettingsLatToggleHandler,
threeDInferenceSettingsMeshClusterToggleHandler,
ultralyticsProviderSettingsToggleHandler,
openaiProviderSettingsToggleHandler,
lightricksProviderSettingsToggleHandler,
@@ -5122,6 +5159,7 @@ export {
outpaintSettingsToggleHandler,
safetyInputsToggleHandler,
imageInferenceSettingsColorPaletteToggleHandler,
imageInferenceSettingsMoodboardsToggleHandler,
audioInputToggleHandler,
speechInputToggleHandler,
briaProviderMaskToggleHandler,
@@ -5239,6 +5277,8 @@ function settingsToggleHandler(settingsNode) {
const autoCropWidget = settingsNode.widgets.find(w => w.name === "autoCrop");
const useDilatePixelsWidget = settingsNode.widgets.find(w => w.name === "useDilatePixels");
const dilatePixelsWidget = settingsNode.widgets.find(w => w.name === "dilatePixels");
const useCreativityWidget = settingsNode.widgets.find(w => w.name === "useCreativity");
const creativityWidget = settingsNode.widgets.find(w => w.name === "creativity");
// Helper function to toggle widget enabled state
function toggleWidgetState(useWidget, paramWidget, paramName) {
@@ -5337,6 +5377,9 @@ function settingsToggleHandler(settingsNode) {
if (useDilatePixelsWidget && dilatePixelsWidget) {
toggleWidgetState(useDilatePixelsWidget, dilatePixelsWidget, "dilatePixels");
}
if (useCreativityWidget && creativityWidget) {
toggleWidgetState(useCreativityWidget, creativityWidget, "creativity");
}
}
function outpaintSettingsToggleHandler(settingsNode) {
@@ -5516,6 +5559,25 @@ function imageInferenceSettingsColorPaletteToggleHandler(paletteNode) {
}
}
function imageInferenceSettingsMoodboardsToggleHandler(moodboardsNode) {
if (!moodboardsNode?.widgets) return;
const useStrengthWidget = moodboardsNode.widgets.find((w) => w && w.name === "useStrength");
const strengthWidget = moodboardsNode.widgets.find((w) => w && w.name === "strength");
if (!useStrengthWidget || !strengthWidget) return;
function toggleStrengthState() {
const enabled = useStrengthWidget.value === true;
toggleWidgetEnabled(strengthWidget, enabled, moodboardsNode);
moodboardsNode.setDirtyCanvas(true);
}
appendWidgetCB(useStrengthWidget, () => {
setTimeout(toggleStrengthState, 50);
});
setTimeout(toggleStrengthState, 100);
}
function syncProviderSettingsToggleHandler(syncNode) {
// Find all "use" parameter widgets for Sync Provider Settings
const useEditRegionWidget = syncNode.widgets.find(w => w.name === "useEditRegion");