add workflows, etc

This commit is contained in:
Sirshendu Ganguly
2026-02-25 22:35:30 -05:00
parent dee0949f78
commit bc7b906bbd
12 changed files with 445 additions and 48 deletions
+6 -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, mediaUUIDHandler, save3DFilepathHandler, videoTranscriptionHandler, videoOutputsHandler, handleCustomErrors, videoInferenceDimensionsHandler, videoModelSearchFilterHandler, audioModelSearchFilterHandler, useParameterToggleHandler, imageInferenceToggleHandler, upscalerToggleHandler, videoUpscalerToggleHandler, audioInferenceToggleHandler, audioInferenceSpeechToggleHandler, audioSettingsToggleHandler, acceleratorOptionsToggleHandler, bytedanceProviderSettingsToggleHandler, xaiProviderSettingsToggleHandler, viduProviderSettingsToggleHandler, sourcefulProviderSettingsToggleHandler, sourcefulProviderSettingsFontsToggleHandler, threeDInferenceToggleHandler, threeDInferenceSettingsToggleHandler, threeDInferenceSettingsLatToggleHandler, ultralyticsProviderSettingsToggleHandler, openaiProviderSettingsToggleHandler, lightricksProviderSettingsToggleHandler, klingProviderSettingsToggleHandler, lumaProviderSettingsToggleHandler, briaProviderSettingsToggleHandler, pixverseProviderSettingsToggleHandler, alibabaProviderSettingsToggleHandler, mireloProviderSettingsToggleHandler, googleProviderSettingsToggleHandler, syncProviderSettingsToggleHandler, syncSegmentToggleHandler, settingsToggleHandler, audioInputToggleHandler, speechInputToggleHandler, briaProviderMaskToggleHandler, wanAnimateAdvancedFeatureSettingsToggleHandler, videoAdvancedFeatureInputsToggleHandler, audioInferenceInputsToggleHandler } from "./utils.js";
import { promptEnhanceHandler, syncDimensionsNodeHandler, searchNodeHandler, APIKeyHandler, captionNodeHandler, mediaUUIDHandler, save3DFilepathHandler, videoTranscriptionHandler, videoOutputsHandler, handleCustomErrors, videoInferenceDimensionsHandler, videoModelSearchFilterHandler, audioModelSearchFilterHandler, vectorizeModelSearchFilterHandler, vectorizeToggleHandler, useParameterToggleHandler, imageInferenceToggleHandler, upscalerToggleHandler, videoUpscalerToggleHandler, audioInferenceToggleHandler, audioInferenceSpeechToggleHandler, audioSettingsToggleHandler, videoSettingsToggleHandler, acceleratorOptionsToggleHandler, bytedanceProviderSettingsToggleHandler, xaiProviderSettingsToggleHandler, viduProviderSettingsToggleHandler, sourcefulProviderSettingsToggleHandler, sourcefulProviderSettingsFontsToggleHandler, threeDInferenceToggleHandler, threeDInferenceSettingsToggleHandler, threeDInferenceSettingsLatToggleHandler, ultralyticsProviderSettingsToggleHandler, openaiProviderSettingsToggleHandler, lightricksProviderSettingsToggleHandler, klingProviderSettingsToggleHandler, lumaProviderSettingsToggleHandler, briaProviderSettingsToggleHandler, pixverseProviderSettingsToggleHandler, alibabaProviderSettingsToggleHandler, mireloProviderSettingsToggleHandler, googleProviderSettingsToggleHandler, syncProviderSettingsToggleHandler, syncSegmentToggleHandler, settingsToggleHandler, audioInputToggleHandler, speechInputToggleHandler, briaProviderMaskToggleHandler, wanAnimateAdvancedFeatureSettingsToggleHandler, videoAdvancedFeatureInputsToggleHandler, audioInferenceInputsToggleHandler } from "./utils.js";
import { RUNWARE_NODE_TYPES, RUNWARE_NODE_PROPS, SEARCH_TERMS } from "./types.js";
const nodeInitList = [];
@@ -82,6 +82,8 @@ app.registerExtension({
audioInferenceSpeechToggleHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.AUDIOSETTINGS) {
audioSettingsToggleHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.VIDEOSETTINGS) {
videoSettingsToggleHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.ACCELERATOROPTIONS) {
acceleratorOptionsToggleHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.BYTEDANCEPROVIDERSETTINGS) {
@@ -149,6 +151,9 @@ app.registerExtension({
videoModelSearchFilterHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.AUDIOMODELSEARCH) {
audioModelSearchFilterHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.VECTORIZE) {
vectorizeModelSearchFilterHandler(node);
vectorizeToggleHandler(node);
}
for(const nodeWidget of nodeWidgets) {
+5
View File
@@ -101,6 +101,7 @@ const RUNWARE_NODE_TYPES = {
REFERENCEVIDEOS: "Runware Reference Videos",
REFERENCEVOICES: "Runware Reference Voices",
VIDEOINFERENCEINPUTS: "Runware Video Inference Inputs",
VIDEOSETTINGS: "Runware Video Inference Settings",
LIGHTRICKSPROVIDERSETTINGS: "Runware Lightricks Provider Settings",
KLINGPROVIDERSETTINGS: "Runware KlingAI Provider Settings",
KLINGMULTIPROMPTSEGMENT: "Runware Kling MultiPrompt Segment",
@@ -427,6 +428,7 @@ const RUNWARE_NODE_PROPS = {
},
[RUNWARE_NODE_TYPES.VECTORIZE]: {
bgColor: DEFAULT_BGCOLOR,
liveDimensions: true,
},
[RUNWARE_NODE_TYPES.VIDEOBGREMOVAL]: {
bgColor: DEFAULT_BGCOLOR,
@@ -452,6 +454,9 @@ const RUNWARE_NODE_PROPS = {
[RUNWARE_NODE_TYPES.AUDIOSETTINGSVOICEMODIFY]: {
bgColor: DEFAULT_BGCOLOR,
},
[RUNWARE_NODE_TYPES.VIDEOSETTINGS]: {
bgColor: DEFAULT_BGCOLOR,
},
[RUNWARE_NODE_TYPES.ACCELERATOROPTIONS]: {
bgColor: DEFAULT_BGCOLOR,
colorModeOnly: true,
+140 -1
View File
@@ -419,8 +419,9 @@ async function syncDimensionsNodeHandler(node, dimensionsWidget) {
appendWidgetCB(dimensionsWidget, function(...args) {
const chosenDimension = args[0];
if(chosenDimension === "Custom") return;
if(chosenDimension === "Custom" || chosenDimension === "None") return;
const dimensionValue = DEFAULT_DIMENSIONS_LIST[chosenDimension];
if(!dimensionValue) return;
const [width, height] = dimensionValue.split("x");
widthWidget.callback(width, "customSetOperation");
heightWidget.callback(height, "customSetOperation");
@@ -1162,6 +1163,37 @@ function audioSettingsToggleHandler(settingsNode) {
if (useTurboWidget && turboWidget) toggleWidgetState(useTurboWidget, turboWidget, "turbo");
}
function videoSettingsToggleHandler(settingsNode) {
if (!settingsNode?.widgets) return;
const useDraftWidget = settingsNode.widgets.find(w => w && w.name === "useDraft");
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 usePromptUpsamplingWidget = settingsNode.widgets.find(w => w && w.name === "usePromptUpsampling");
const promptUpsamplingWidget = settingsNode.widgets.find(w => w && w.name === "promptUpsampling");
function toggleWidgetState(useWidget, paramWidget, paramName) {
if (!useWidget || !paramWidget) return;
function applyState() {
const enabled = useWidget.value === true;
toggleWidgetEnabled(paramWidget, enabled, settingsNode);
if (paramWidget.options && paramWidget.options.element) {
paramWidget.options.element.disabled = !enabled;
paramWidget.options.element.style.opacity = enabled ? "1" : "0.5";
paramWidget.options.element.style.pointerEvents = enabled ? "auto" : "none";
}
settingsNode.setDirtyCanvas(true);
}
setTimeout(applyState, 100);
appendWidgetCB(useWidget, () => setTimeout(applyState, 50));
}
if (useDraftWidget && draftWidget) toggleWidgetState(useDraftWidget, draftWidget, "draft");
if (useAudioWidget && audioWidget) toggleWidgetState(useAudioWidget, audioWidget, "audio");
if (usePromptUpsamplingWidget && promptUpsamplingWidget) toggleWidgetState(usePromptUpsamplingWidget, promptUpsamplingWidget, "promptUpsampling");
}
function audioInferenceSpeechToggleHandler(speechNode) {
if (!speechNode?.widgets) return;
@@ -2323,6 +2355,9 @@ function videoModelSearchFilterHandler(videoModelSearchNode) {
"VEED": [
"veed:fabric@1.0 (VEED Fabric 1.0)",
],
"Pruna": [
"prunaai:p-video@0 (P-Video)",
],
};
const MODEL_DIMENSIONS = {
@@ -2402,6 +2437,7 @@ function videoModelSearchFilterHandler(videoModelSearchNode) {
"runware:210@1": {"width": 512, "height": 512},
"xai:grok-imagine@video": {"width": 480, "height": 480},
"veed:fabric@1.0": {"width": 1280, "height": 720},
"prunaai:p-video@0": {"width": 1280, "height": 720},
};
const MODEL_RESOLUTIONS = {
@@ -2481,6 +2517,7 @@ function videoModelSearchFilterHandler(videoModelSearchNode) {
"runware:210@1": null, // No resolution support (fixed 512x512)
"xai:grok-imagine@video": "480p",
"veed:fabric@1.0": "720p",
"prunaai:p-video@0": "720p",
};
const DEFAULT_DIMENSIONS = {"width": 1024, "height": 576};
@@ -2728,6 +2765,105 @@ function audioModelSearchFilterHandler(audioModelSearchNode) {
filterModelList();
}
function vectorizeModelSearchFilterHandler(vectorizeNode) {
const modelArchWidget = vectorizeNode.widgets.find(w => w.name === "Model Architecture");
const vectorListWidget = vectorizeNode.widgets.find(w => w.name === "Vector Model List");
if (!modelArchWidget || !vectorListWidget) return;
const VECTORIZE_MODELS = {
"Recraft": [
"recraft:1@1 (Recraft 1)",
"recraft:v4-pro@vector (Recraft V4 Pro Vector)",
"recraft:v4@vector (Recraft V4 Vector)",
],
"Picsart": [
"picsart:1@1 (Picsart 1)",
],
};
function filterModelList() {
const selectedArch = modelArchWidget.value;
let filteredModels = [];
if (selectedArch === "All") {
Object.values(VECTORIZE_MODELS).forEach(models => filteredModels.push(...models));
} else if (VECTORIZE_MODELS[selectedArch]) {
filteredModels = VECTORIZE_MODELS[selectedArch];
}
if (filteredModels.length > 0) {
const currentValue = vectorListWidget.value;
vectorListWidget.options.values = filteredModels;
if (!filteredModels.includes(currentValue)) {
vectorListWidget.value = filteredModels[0];
}
vectorizeNode.setDirtyCanvas(true);
}
}
appendWidgetCB(modelArchWidget, filterModelList);
filterModelList();
}
function vectorizeToggleHandler(vectorizeNode) {
const usePositivePromptWidget = vectorizeNode.widgets.find(w => w.name === "Use Positive Prompt");
const positivePromptWidget = vectorizeNode.widgets.find(w => w.name === "positivePrompt");
const dimensionsWidget = vectorizeNode.widgets.find(w => w.name === "dimensions");
const widthWidget = vectorizeNode.widgets.find(w => w.name === "width");
const heightWidget = vectorizeNode.widgets.find(w => w.name === "height");
function toggleWidgetState(useWidget, paramWidget, paramName) {
if (!useWidget || !paramWidget) return;
function applyState() {
const enabled = useWidget.value === true;
if (paramWidget.inputEl) {
paramWidget.inputEl.disabled = !enabled;
paramWidget.inputEl.style.opacity = enabled ? "1" : "0.5";
paramWidget.inputEl.style.cursor = enabled ? "text" : "not-allowed";
}
}
applyState();
appendWidgetCB(useWidget, applyState);
}
if (usePositivePromptWidget && positivePromptWidget) {
toggleWidgetState(usePositivePromptWidget, positivePromptWidget, "positivePrompt");
}
// Disable width/height when dimensions is "None" (same as image inference)
if (dimensionsWidget && widthWidget && heightWidget) {
function toggleDimensionsState() {
const dimensionsValue = dimensionsWidget.value;
const enabled = dimensionsValue !== "None";
if (widthWidget.inputEl) {
widthWidget.inputEl.disabled = !enabled;
widthWidget.inputEl.style.opacity = enabled ? "1" : "0.5";
widthWidget.inputEl.style.cursor = enabled ? "text" : "not-allowed";
widthWidget.inputEl.readOnly = !enabled;
}
widthWidget.disabled = !enabled;
if (heightWidget.inputEl) {
heightWidget.inputEl.disabled = !enabled;
heightWidget.inputEl.style.opacity = enabled ? "1" : "0.5";
heightWidget.inputEl.style.cursor = enabled ? "text" : "not-allowed";
heightWidget.inputEl.readOnly = !enabled;
}
heightWidget.disabled = !enabled;
vectorizeNode.setDirtyCanvas(true);
}
appendWidgetCB(dimensionsWidget, () => {
setTimeout(toggleDimensionsState, 50);
});
setTimeout(toggleDimensionsState, 100);
}
}
function klingProviderSettingsToggleHandler(klingNode) {
// Find all "use" parameter widgets for KlingAI Provider Settings (EXACT same pattern as imageInferenceToggleHandler)
const useCameraControlWidget = klingNode.widgets.find(w => w.name === "useCameraControl");
@@ -3794,6 +3930,8 @@ export {
videoInferenceDimensionsHandler,
videoModelSearchFilterHandler,
audioModelSearchFilterHandler,
vectorizeModelSearchFilterHandler,
vectorizeToggleHandler,
useParameterToggleHandler,
imageInferenceToggleHandler,
upscalerToggleHandler,
@@ -3801,6 +3939,7 @@ export {
audioInferenceToggleHandler,
audioInferenceSpeechToggleHandler,
audioSettingsToggleHandler,
videoSettingsToggleHandler,
acceleratorOptionsToggleHandler,
bytedanceProviderSettingsToggleHandler,
xaiProviderSettingsToggleHandler,