Merge pull request #89 from Runware/addViduModel
Add workflows, and Update Vidu Provider Settings
This commit is contained in:
+3
-1
@@ -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, acceleratorOptionsToggleHandler, bytedanceProviderSettingsToggleHandler, xaiProviderSettingsToggleHandler, 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, useParameterToggleHandler, imageInferenceToggleHandler, upscalerToggleHandler, videoUpscalerToggleHandler, audioInferenceToggleHandler, acceleratorOptionsToggleHandler, bytedanceProviderSettingsToggleHandler, xaiProviderSettingsToggleHandler, viduProviderSettingsToggleHandler, 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 = [];
|
||||
@@ -108,6 +108,8 @@ app.registerExtension({
|
||||
syncProviderSettingsToggleHandler(node);
|
||||
} else if(nodeClass === RUNWARE_NODE_TYPES.SYNCSEGMENT) {
|
||||
syncSegmentToggleHandler(node);
|
||||
} else if(nodeClass === RUNWARE_NODE_TYPES.VIDUPROVIDERSETTINGS) {
|
||||
viduProviderSettingsToggleHandler(node);
|
||||
} else if(nodeClass === RUNWARE_NODE_TYPES.SETTINGS) {
|
||||
settingsToggleHandler(node);
|
||||
} else if(nodeClass === RUNWARE_NODE_TYPES.AUDIOINPUT) {
|
||||
|
||||
@@ -1374,6 +1374,81 @@ function xaiProviderSettingsToggleHandler(xaiNode) {
|
||||
}
|
||||
}
|
||||
|
||||
function viduProviderSettingsToggleHandler(viduNode) {
|
||||
const useAudioWidget = viduNode.widgets.find(w => w.name === "useAudio");
|
||||
const audioWidget = viduNode.widgets.find(w => w.name === "audio");
|
||||
const useBgmWidget = viduNode.widgets.find(w => w.name === "useBgm");
|
||||
const bgmWidget = viduNode.widgets.find(w => w.name === "bgm");
|
||||
const useStyleWidget = viduNode.widgets.find(w => w.name === "useStyle");
|
||||
const styleWidget = viduNode.widgets.find(w => w.name === "style");
|
||||
const useMovementAmplitudeWidget = viduNode.widgets.find(w => w.name === "useMovementAmplitude");
|
||||
const movementAmplitudeWidget = viduNode.widgets.find(w => w.name === "movementAmplitude");
|
||||
const useTemplateNameWidget = viduNode.widgets.find(w => w.name === "useTemplateName");
|
||||
const templateNameWidget = viduNode.widgets.find(w => w.name === "templateName");
|
||||
const useTemplateAreaWidget = viduNode.widgets.find(w => w.name === "useTemplateArea");
|
||||
const templateAreaWidget = viduNode.widgets.find(w => w.name === "templateArea");
|
||||
const useTemplateBeastWidget = viduNode.widgets.find(w => w.name === "useTemplateBeast");
|
||||
const templateBeastWidget = viduNode.widgets.find(w => w.name === "templateBeast");
|
||||
|
||||
function toggleWidgetState(useWidget, paramWidget, paramName) {
|
||||
if (!useWidget || !paramWidget) return;
|
||||
|
||||
function toggleEnabled() {
|
||||
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";
|
||||
paramWidget.inputEl.readOnly = !enabled;
|
||||
}
|
||||
paramWidget.disabled = !enabled;
|
||||
|
||||
if (!paramWidget.inputEl) {
|
||||
const nodeElement = viduNode.htmlElements?.widgetsContainer || viduNode.htmlElements;
|
||||
if (nodeElement) {
|
||||
const input = nodeElement.querySelector(`input[name="${paramName}"], textarea[name="${paramName}"], select[name="${paramName}"]`);
|
||||
if (input) {
|
||||
input.disabled = !enabled;
|
||||
input.style.opacity = enabled ? "1" : "0.5";
|
||||
input.style.pointerEvents = enabled ? "auto" : "none";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
viduNode.setDirtyCanvas(true);
|
||||
}
|
||||
|
||||
appendWidgetCB(useWidget, () => {
|
||||
setTimeout(toggleEnabled, 50);
|
||||
});
|
||||
|
||||
setTimeout(toggleEnabled, 100);
|
||||
}
|
||||
|
||||
if (useAudioWidget && audioWidget) {
|
||||
toggleWidgetState(useAudioWidget, audioWidget, "audio");
|
||||
}
|
||||
if (useBgmWidget && bgmWidget) {
|
||||
toggleWidgetState(useBgmWidget, bgmWidget, "bgm");
|
||||
}
|
||||
if (useStyleWidget && styleWidget) {
|
||||
toggleWidgetState(useStyleWidget, styleWidget, "style");
|
||||
}
|
||||
if (useMovementAmplitudeWidget && movementAmplitudeWidget) {
|
||||
toggleWidgetState(useMovementAmplitudeWidget, movementAmplitudeWidget, "movementAmplitude");
|
||||
}
|
||||
if (useTemplateNameWidget && templateNameWidget) {
|
||||
toggleWidgetState(useTemplateNameWidget, templateNameWidget, "templateName");
|
||||
}
|
||||
if (useTemplateAreaWidget && templateAreaWidget) {
|
||||
toggleWidgetState(useTemplateAreaWidget, templateAreaWidget, "templateArea");
|
||||
}
|
||||
if (useTemplateBeastWidget && templateBeastWidget) {
|
||||
toggleWidgetState(useTemplateBeastWidget, templateBeastWidget, "templateBeast");
|
||||
}
|
||||
}
|
||||
|
||||
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");
|
||||
@@ -1903,6 +1978,7 @@ function videoModelSearchFilterHandler(videoModelSearchNode) {
|
||||
"Vidu": [
|
||||
"vidu:1@0 (Vidu Q1 Classic)", "vidu:1@1 (Vidu Q1)",
|
||||
"vidu:1@5 (Vidu 1.5)", "vidu:2@0 (Vidu 2.0)",
|
||||
"vidu:4@1 (Vidu Q3)",
|
||||
],
|
||||
"Wan": [
|
||||
"runware:200@1 (Wan 2.1 1.3B)", "runware:200@2 (Wan 2.1 14B)",
|
||||
@@ -1924,6 +2000,7 @@ function videoModelSearchFilterHandler(videoModelSearchNode) {
|
||||
"Runway": [
|
||||
"runway:2@1 (Runway Aleph)",
|
||||
"runway:1@1 (Runway Gen-4 Turbo)",
|
||||
"runway:1@2 (Runway Gen-4.5)",
|
||||
],
|
||||
"Luma": [
|
||||
"lumaai:1@1 (Luma Ray 1.6)",
|
||||
@@ -1996,6 +2073,7 @@ function videoModelSearchFilterHandler(videoModelSearchNode) {
|
||||
"vidu:1@1": {"width": 1920, "height": 1080},
|
||||
"vidu:1@5": {"width": 1920, "height": 1080},
|
||||
"vidu:2@0": {"width": 1920, "height": 1080},
|
||||
"vidu:4@1": {"width": 1920, "height": 1080},
|
||||
"runware:200@1": {"width": 853, "height": 480},
|
||||
"runware:200@2": {"width": 853, "height": 480},
|
||||
"runware:200@6": {"width": 1280, "height": 720},
|
||||
@@ -2010,6 +2088,7 @@ function videoModelSearchFilterHandler(videoModelSearchNode) {
|
||||
"runware:190@1": {"width": 0, "height": 0},
|
||||
"runway:2@1": {"width": 1280, "height": 720},
|
||||
"runway:1@1": {"width": 1280, "height": 720},
|
||||
"runway:1@2": {"width": 1280, "height": 720},
|
||||
"lumaai:1@1": {"width": 1080, "height": 720},
|
||||
"lumaai:2@1": {"width": 1080, "height": 720},
|
||||
"lumaai:2@2": {"width": 1080, "height": 720},
|
||||
@@ -2067,6 +2146,7 @@ function videoModelSearchFilterHandler(videoModelSearchNode) {
|
||||
"vidu:1@1": "1080p",
|
||||
"vidu:1@5": "1080p",
|
||||
"vidu:2@0": "1080p",
|
||||
"vidu:4@1": "1080p",
|
||||
"runware:200@1": "480p",
|
||||
"runware:200@2": "480p",
|
||||
"runware:200@6": "720p",
|
||||
@@ -2081,6 +2161,7 @@ function videoModelSearchFilterHandler(videoModelSearchNode) {
|
||||
"runware:190@1": null, // No resolution support
|
||||
"runway:2@1": "720p",
|
||||
"runway:1@1": "720p",
|
||||
"runway:1@2": "720p",
|
||||
"lumaai:1@1": "720p",
|
||||
"lumaai:2@1": "720p",
|
||||
"lumaai:2@2": "720p",
|
||||
@@ -3358,6 +3439,7 @@ export {
|
||||
acceleratorOptionsToggleHandler,
|
||||
bytedanceProviderSettingsToggleHandler,
|
||||
xaiProviderSettingsToggleHandler,
|
||||
viduProviderSettingsToggleHandler,
|
||||
ultralyticsProviderSettingsToggleHandler,
|
||||
openaiProviderSettingsToggleHandler,
|
||||
lightricksProviderSettingsToggleHandler,
|
||||
|
||||
@@ -6,35 +6,65 @@ class RunwareViduProviderSettings:
|
||||
return {
|
||||
"required": {},
|
||||
"optional": {
|
||||
# Audio parameter
|
||||
"useAudio": ("BOOLEAN", {
|
||||
"tooltip": "Enable to include audio parameter in API request",
|
||||
"default": False,
|
||||
}),
|
||||
"audio": ("BOOLEAN", {
|
||||
"tooltip": "Enable audio for video generation. Only used when 'Use Audio' is enabled.",
|
||||
"default": True,
|
||||
}),
|
||||
# BGM parameter
|
||||
"useBgm": ("BOOLEAN", {
|
||||
"tooltip": "Enable to include bgm parameter in API request",
|
||||
"default": False,
|
||||
}),
|
||||
"bgm": ("BOOLEAN", {
|
||||
"tooltip": "Enable background music for video generation",
|
||||
"tooltip": "Enable background music for video generation. Only used when 'Use BGM' is enabled.",
|
||||
"default": False,
|
||||
}),
|
||||
|
||||
# Style parameter
|
||||
"useStyle": ("BOOLEAN", {
|
||||
"tooltip": "Enable to include style parameter in API request",
|
||||
"default": False,
|
||||
}),
|
||||
"style": ("STRING", {
|
||||
"tooltip": "Video style configuration for Vidu models",
|
||||
"tooltip": "Video style configuration for Vidu models. Only used when 'Use Style' is enabled.",
|
||||
"default": "",
|
||||
}),
|
||||
|
||||
# Movement amplitude parameter
|
||||
"useMovementAmplitude": ("BOOLEAN", {
|
||||
"tooltip": "Enable to include movementAmplitude parameter in API request",
|
||||
"default": False,
|
||||
}),
|
||||
"movementAmplitude": ("STRING", {
|
||||
"tooltip": "Controls the amplitude/intensity of movement in the generated video",
|
||||
"tooltip": "Controls the amplitude/intensity of movement in the generated video. Only used when 'Use Movement Amplitude' is enabled.",
|
||||
"default": "",
|
||||
}),
|
||||
|
||||
# Template parameters
|
||||
"useTemplateName": ("BOOLEAN", {
|
||||
"tooltip": "Enable to include template name in API request",
|
||||
"default": False,
|
||||
}),
|
||||
"templateName": ("STRING", {
|
||||
"tooltip": "Template name for video generation",
|
||||
"tooltip": "Template name for video generation. Only used when 'Use Template Name' is enabled.",
|
||||
"default": "",
|
||||
}),
|
||||
"useTemplateArea": ("BOOLEAN", {
|
||||
"tooltip": "Enable to include template area in API request",
|
||||
"default": False,
|
||||
}),
|
||||
"templateArea": ("STRING", {
|
||||
"tooltip": "Template area configuration",
|
||||
"tooltip": "Template area configuration. Only used when 'Use Template Area' is enabled.",
|
||||
"default": "",
|
||||
}),
|
||||
"useTemplateBeast": ("BOOLEAN", {
|
||||
"tooltip": "Enable to include template beast in API request",
|
||||
"default": False,
|
||||
}),
|
||||
"templateBeast": ("STRING", {
|
||||
"tooltip": "Template beast configuration",
|
||||
"tooltip": "Template beast configuration. Only used when 'Use Template Beast' is enabled.",
|
||||
"default": "",
|
||||
}),
|
||||
},
|
||||
@@ -48,34 +78,41 @@ class RunwareViduProviderSettings:
|
||||
|
||||
def viduProviderSettings(self, **kwargs):
|
||||
# Get all optional parameters
|
||||
bgm = kwargs.get("bgm")
|
||||
useAudio = kwargs.get("useAudio", False)
|
||||
audio = kwargs.get("audio", True)
|
||||
useBgm = kwargs.get("useBgm", False)
|
||||
bgm = kwargs.get("bgm", False)
|
||||
useStyle = kwargs.get("useStyle", False)
|
||||
style = kwargs.get("style", "")
|
||||
useMovementAmplitude = kwargs.get("useMovementAmplitude", False)
|
||||
movementAmplitude = kwargs.get("movementAmplitude", "")
|
||||
useTemplateName = kwargs.get("useTemplateName", False)
|
||||
templateName = kwargs.get("templateName", "")
|
||||
useTemplateArea = kwargs.get("useTemplateArea", False)
|
||||
templateArea = kwargs.get("templateArea", "")
|
||||
useTemplateBeast = kwargs.get("useTemplateBeast", False)
|
||||
templateBeast = kwargs.get("templateBeast", "")
|
||||
|
||||
# Build provider settings dictionary
|
||||
providerSettings = {}
|
||||
|
||||
# Add basic parameters if specified
|
||||
if bgm is not None:
|
||||
if useAudio:
|
||||
providerSettings["audio"] = audio
|
||||
if useBgm:
|
||||
providerSettings["bgm"] = bgm
|
||||
if style:
|
||||
providerSettings["style"] = style
|
||||
if movementAmplitude:
|
||||
providerSettings["movementAmplitude"] = movementAmplitude
|
||||
if useStyle and style and style.strip():
|
||||
providerSettings["style"] = style.strip()
|
||||
if useMovementAmplitude and movementAmplitude and movementAmplitude.strip():
|
||||
providerSettings["movementAmplitude"] = movementAmplitude.strip()
|
||||
|
||||
# Build template object if any template parameters are provided
|
||||
# Build template object if any template parameters are enabled and provided
|
||||
template = {}
|
||||
if templateName:
|
||||
template["name"] = templateName
|
||||
if templateArea:
|
||||
template["area"] = templateArea
|
||||
if templateBeast:
|
||||
template["beast"] = templateBeast
|
||||
|
||||
# Add template to provider settings if any template parameters were specified
|
||||
if useTemplateName and templateName and templateName.strip():
|
||||
template["name"] = templateName.strip()
|
||||
if useTemplateArea and templateArea and templateArea.strip():
|
||||
template["area"] = templateArea.strip()
|
||||
if useTemplateBeast and templateBeast and templateBeast.strip():
|
||||
template["beast"] = templateBeast.strip()
|
||||
if template:
|
||||
providerSettings["template"] = template
|
||||
|
||||
|
||||
@@ -55,6 +55,7 @@ class videoModelSearch:
|
||||
"vidu:1@1 (Vidu Q1)",
|
||||
"vidu:1@5 (Vidu 1.5)",
|
||||
"vidu:2@0 (Vidu 2.0)",
|
||||
"vidu:4@1 (Vidu Q3)",
|
||||
],
|
||||
"Wan": [
|
||||
"runware:200@1 (Wan 2.1 1.3B)",
|
||||
@@ -80,6 +81,7 @@ class videoModelSearch:
|
||||
"Runway": [
|
||||
"runway:2@1 (Runway Aleph)",
|
||||
"runway:1@1 (Runway Gen-4 Turbo)",
|
||||
"runway:1@2 (Runway Gen-4.5)",
|
||||
],
|
||||
"Luma": [
|
||||
"lumaai:1@1 (Luma Ray 1.6)",
|
||||
@@ -163,6 +165,7 @@ class videoModelSearch:
|
||||
"vidu:1@1": {"width": 1920, "height": 1080},
|
||||
"vidu:1@5": {"width": 1920, "height": 1080},
|
||||
"vidu:2@0": {"width": 1920, "height": 1080},
|
||||
"vidu:4@1": {"width": 1920, "height": 1080},
|
||||
|
||||
# Wan Models
|
||||
"runware:200@1": {"width": 853, "height": 480},
|
||||
@@ -188,6 +191,7 @@ class videoModelSearch:
|
||||
# Runway Models
|
||||
"runway:2@1": {"width": 1280, "height": 720},
|
||||
"runway:1@1": {"width": 1280, "height": 720},
|
||||
"runway:1@2": {"width": 1280, "height": 720},
|
||||
|
||||
# Luma Models
|
||||
"lumaai:1@1": {"width": 1080, "height": 720},
|
||||
@@ -270,6 +274,7 @@ class videoModelSearch:
|
||||
"vidu:1@1": "1080p",
|
||||
"vidu:1@5": "1080p",
|
||||
"vidu:2@0": "1080p",
|
||||
"vidu:4@1": "1080p",
|
||||
|
||||
# Wan Models
|
||||
"runware:200@1": "480p",
|
||||
@@ -295,6 +300,7 @@ class videoModelSearch:
|
||||
# Runway Models
|
||||
"runway:2@1": "720p",
|
||||
"runway:1@1": "720p",
|
||||
"runway:1@2": "720p",
|
||||
|
||||
# Luma Models
|
||||
"lumaai:1@1": "720p",
|
||||
@@ -319,7 +325,7 @@ class videoModelSearch:
|
||||
# xAI Models
|
||||
"xai:grok-imagine@video": "480p",
|
||||
|
||||
# VEED Models (480p or 720p)
|
||||
# VEED Models
|
||||
"veed:fabric@1.0": "720p",
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user