diff --git a/__init__.py b/__init__.py index 531b990..12219fc 100644 --- a/__init__.py +++ b/__init__.py @@ -50,6 +50,7 @@ from .modules.providerSettings.klingProviderSettings import RunwareKlingProvider from .modules.providerSettings.runwayProviderSettings import RunwareRunwayProviderSettings from .modules.providerSettings.lumaProviderSettings import RunwareLumaProviderSettings from .modules.providerSettings.midjourneyProviderSettings import RunwareMidjourneyProviderSettings +from .modules.providerSettings.alibabaProviderSettings import RunwareAlibabaProviderSettings from .modules.vectorize import vectorize from .modules.videoBgRemoval import videoBgRemoval from .modules.videoUpscaler import videoUpscaler @@ -121,6 +122,7 @@ NODE_CLASS_MAPPINGS = { "Runware KlingAI Provider Settings": RunwareKlingProviderSettings, "Runware Runway Provider Settings": RunwareRunwayProviderSettings, "Runware Midjourney Provider Settings": RunwareMidjourneyProviderSettings, + "Runware Alibaba Provider Settings": RunwareAlibabaProviderSettings, "Runware Vectorize": vectorize, "Runware Video Background Removal": videoBgRemoval, "Runware Video Upscaler": videoUpscaler, diff --git a/clientlibs/main.js b/clientlibs/main.js index 953edaa..e0aa300 100644 --- a/clientlibs/main.js +++ b/clientlibs/main.js @@ -1,6 +1,6 @@ import { app } from "../../scripts/app.js"; import { api } from "../../scripts/api.js"; -import { promptEnhanceHandler, syncDimensionsNodeHandler, searchNodeHandler, APIKeyHandler, captionNodeHandler, mediaUUIDHandler, videoTranscriptionHandler, handleCustomErrors, videoInferenceDimensionsHandler, videoModelSearchFilterHandler, audioModelSearchFilterHandler, useParameterToggleHandler, imageInferenceToggleHandler, upscalerToggleHandler, videoUpscalerToggleHandler, audioInferenceToggleHandler, acceleratorOptionsToggleHandler, bytedanceProviderSettingsToggleHandler, openaiProviderSettingsToggleHandler, lightricksProviderSettingsToggleHandler, klingProviderSettingsToggleHandler, lumaProviderSettingsToggleHandler, briaProviderSettingsToggleHandler, pixverseProviderSettingsToggleHandler } from "./utils.js"; +import { promptEnhanceHandler, syncDimensionsNodeHandler, searchNodeHandler, APIKeyHandler, captionNodeHandler, mediaUUIDHandler, videoTranscriptionHandler, handleCustomErrors, videoInferenceDimensionsHandler, videoModelSearchFilterHandler, audioModelSearchFilterHandler, useParameterToggleHandler, imageInferenceToggleHandler, upscalerToggleHandler, videoUpscalerToggleHandler, audioInferenceToggleHandler, acceleratorOptionsToggleHandler, bytedanceProviderSettingsToggleHandler, openaiProviderSettingsToggleHandler, lightricksProviderSettingsToggleHandler, klingProviderSettingsToggleHandler, lumaProviderSettingsToggleHandler, briaProviderSettingsToggleHandler, pixverseProviderSettingsToggleHandler, alibabaProviderSettingsToggleHandler } from "./utils.js"; import { RUNWARE_NODE_TYPES, RUNWARE_NODE_PROPS, SEARCH_TERMS } from "./types.js"; const nodeInitList = []; @@ -71,6 +71,8 @@ app.registerExtension({ briaProviderSettingsToggleHandler(node); } else if(nodeClass === RUNWARE_NODE_TYPES.PIXVERSEPROVIDERSETTINGS) { pixverseProviderSettingsToggleHandler(node); + } else if(nodeClass === RUNWARE_NODE_TYPES.ALIBABAPROVIDERSETTINGS) { + alibabaProviderSettingsToggleHandler(node); } if(crNodeProps.colorModeOnly === true) return; diff --git a/clientlibs/types.js b/clientlibs/types.js index 1561993..974b0de 100644 --- a/clientlibs/types.js +++ b/clientlibs/types.js @@ -99,6 +99,7 @@ const RUNWARE_NODE_TYPES = { RUNWAYPROVIDERSETTINGS: "Runware Runway Provider Settings", LUMAPROVIDERSETTINGS: "Runware Luma Provider Settings", MIDJOURNEYPROVIDERSETTINGS: "Runware Midjourney Provider Settings", + ALIBABAPROVIDERSETTINGS: "Runware Alibaba Provider Settings", VECTORIZE: "Runware Vectorize", VIDEOBGREMOVAL: "Runware Video Background Removal", VIDEOUPSCALER: "Runware Video Upscaler", @@ -319,6 +320,10 @@ const RUNWARE_NODE_PROPS = { bgColor: DEFAULT_BGCOLOR, colorModeOnly: true, }, + [RUNWARE_NODE_TYPES.ALIBABAPROVIDERSETTINGS]: { + bgColor: DEFAULT_BGCOLOR, + colorModeOnly: true, + }, [RUNWARE_NODE_TYPES.VECTORIZE]: { bgColor: DEFAULT_BGCOLOR, }, diff --git a/clientlibs/utils.js b/clientlibs/utils.js index 9f65a42..d43987f 100644 --- a/clientlibs/utils.js +++ b/clientlibs/utils.js @@ -1662,6 +1662,8 @@ function videoModelSearchFilterHandler(videoModelSearchNode) { const widthWidget = videoModelSearchNode.widgets.find(w => w.name === "Width"); const heightWidget = videoModelSearchNode.widgets.find(w => w.name === "Height"); const useCustomDimensionsWidget = videoModelSearchNode.widgets.find(w => w.name === "useCustomDimensions"); + const useResolutionWidget = videoModelSearchNode.widgets.find(w => w.name === "useResolution"); + const resolutionWidget = videoModelSearchNode.widgets.find(w => w.name === "resolution"); if (!modelArchWidget || !videoListWidget) return; @@ -1776,6 +1778,60 @@ function videoModelSearchFilterHandler(videoModelSearchNode) { "lumaai:2@2": {"width": 1080, "height": 720}, }; + const MODEL_RESOLUTIONS = { + "klingai:1@2": "720p", + "klingai:1@1": "720p", + "klingai:2@2": "1080p", + "klingai:2@1": "720p", + "klingai:3@1": "720p", + "klingai:3@2": "1080p", + "klingai:4@3": "720p", + "klingai:5@1": "720p", + "klingai:5@2": "1080p", + "klingai:5@3": "1080p", + "klingai:6@1": "1080p", + "klingai:7@1": null, // No resolution support + "klingai:kling@o1": null, // No standard resolution + "google:2@0": "720p", + "google:3@0": "720p", + "google:3@1": "720p", + "google:3@2": "720p", + "google:3@3": "720p", + "bytedance:2@1": "480p", + "bytedance:1@1": "480p", + "bytedance:5@1": null, // No resolution support + "bytedance:5@2": null, // No resolution support + "minimax:1@1": "768p", + "minimax:2@1": "768p", + "minimax:2@3": "768p", + "minimax:3@1": "768p", + "minimax:4@1": "768p", + "minimax:4@2": "768p", + "pixverse:1@1": "360p", + "pixverse:1@2": "360p", + "pixverse:1@3": "360p", + "pixverse:1@6": "360p", + "pixverse:lipsync@1": "360p", + "vidu:1@0": "1080p", + "vidu:1@1": "1080p", + "vidu:1@5": "1080p", + "vidu:2@0": "1080p", + "runware:200@1": "480p", + "runware:200@2": "480p", + "runware:200@6": "720p", + "openai:3@1": "720p", + "openai:3@0": "720p", + "lightricks:2@0": "1080p", + "lightricks:2@1": "1080p", + "lightricks:3@1": null, // No resolution support + "runware:190@1": null, // No resolution support + "runway:2@1": "720p", + "runway:1@1": "720p", + "lumaai:1@1": "720p", + "lumaai:2@1": "720p", + "lumaai:2@2": "720p", + }; + const DEFAULT_DIMENSIONS = {"width": 1024, "height": 576}; function setWidthHeightEnabled(enabled) { @@ -1836,6 +1892,49 @@ function videoModelSearchFilterHandler(videoModelSearchNode) { } // For "Custom" mode, don't update - let user set their own values // For "Disabled" mode, already handled above (set to None and disabled) + + // Update resolution based on selected model + if (resolutionWidget && useResolutionWidget) { + const modelCode = selectedModel.split(" (")[0]; + const modelResolution = MODEL_RESOLUTIONS[modelCode]; + + // If model supports resolution + if (modelResolution !== null && modelResolution !== undefined) { + // Enable useResolution checkbox + if (useResolutionWidget.inputEl) { + useResolutionWidget.inputEl.disabled = false; + useResolutionWidget.inputEl.style.opacity = "1"; + } + useResolutionWidget.disabled = false; + + // Only update resolution value if useResolution is enabled + if (useResolutionWidget.value === true) { + // Set resolution value to model's default + if (resolutionWidget.callback) resolutionWidget.callback(modelResolution, "customSetOperation"); + resolutionWidget.value = modelResolution; + } + } else { + // Model doesn't support resolution, disable useResolution checkbox and resolution dropdown + if (useResolutionWidget.callback) useResolutionWidget.callback(false, "customSetOperation"); + useResolutionWidget.value = false; + + // Disable useResolution checkbox + if (useResolutionWidget.inputEl) { + useResolutionWidget.inputEl.disabled = true; + useResolutionWidget.inputEl.style.opacity = "0.5"; + } + useResolutionWidget.disabled = true; + + // Disable resolution dropdown + if (resolutionWidget.inputEl) { + resolutionWidget.inputEl.disabled = true; + resolutionWidget.inputEl.style.opacity = "0.5"; + resolutionWidget.inputEl.style.cursor = "not-allowed"; + } + resolutionWidget.disabled = true; + } + videoModelSearchNode.setDirtyCanvas(true); + } } function filterModelList() { @@ -1870,6 +1969,58 @@ function videoModelSearchFilterHandler(videoModelSearchNode) { updateDimensions(); }); } + + // Handle useResolution toggle + if (useResolutionWidget && resolutionWidget) { + function toggleResolutionState() { + // Check if current model supports resolution + const selectedModel = videoListWidget ? videoListWidget.value : null; + if (!selectedModel) return; + + const modelCode = selectedModel.split(" (")[0]; + const modelResolution = MODEL_RESOLUTIONS[modelCode]; + + // Only enable resolution if model supports it and useResolution is enabled + const enabled = useResolutionWidget.value === true && modelResolution !== null && modelResolution !== undefined; + + if (resolutionWidget.inputEl) { + resolutionWidget.inputEl.disabled = !enabled; + resolutionWidget.inputEl.style.opacity = enabled ? "1" : "0.5"; + resolutionWidget.inputEl.style.cursor = enabled ? "text" : "not-allowed"; + } + + resolutionWidget.disabled = !enabled; + + // Fallback: try to find input via DOM if inputEl is not available + if (!resolutionWidget.inputEl) { + const nodeElement = videoModelSearchNode.htmlElements?.widgetsContainer || videoModelSearchNode.htmlElements; + if (nodeElement) { + const input = nodeElement.querySelector(`select[name="resolution"]`); + if (input) { + input.disabled = !enabled; + input.style.opacity = enabled ? "1" : "0.5"; + input.style.pointerEvents = enabled ? "auto" : "none"; + } + } + } + + videoModelSearchNode.setDirtyCanvas(true); + } + + appendWidgetCB(useResolutionWidget, () => { + setTimeout(toggleResolutionState, 50); + }); + + // Also update when model changes + if (videoListWidget) { + appendWidgetCB(videoListWidget, () => { + setTimeout(toggleResolutionState, 50); + }); + } + + setTimeout(toggleResolutionState, 100); + } + filterModelList(); updateDimensions(); } @@ -2010,6 +2161,59 @@ function klingProviderSettingsToggleHandler(klingNode) { } } +function alibabaProviderSettingsToggleHandler(alibabaNode) { + // Find all "use" parameter widgets for Alibaba Provider Settings + const usePromptEnhancerWidget = alibabaNode.widgets.find(w => w.name === "usePromptEnhancer"); + const promptEnhancerWidget = alibabaNode.widgets.find(w => w.name === "promptEnhancer"); + + // Helper function to toggle widget enabled state + 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 = alibabaNode.htmlElements?.widgetsContainer || alibabaNode.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.cursor = enabled ? "text" : "not-allowed"; + input.readOnly = !enabled; + if (input.tagName === "SELECT") { + input.style.pointerEvents = enabled ? "auto" : "none"; + } + } + } + } + + alibabaNode.setDirtyCanvas(true); + } + + appendWidgetCB(useWidget, () => { + setTimeout(toggleEnabled, 50); + }); + + setTimeout(toggleEnabled, 100); + } + + // Set up toggle handler + if (usePromptEnhancerWidget && promptEnhancerWidget) { + toggleWidgetState(usePromptEnhancerWidget, promptEnhancerWidget, "promptEnhancer"); + } +} + function lumaProviderSettingsToggleHandler(lumaNode) { // Find all "use" parameter widgets for Luma Provider Settings const useLoopWidget = lumaNode.widgets.find(w => w.name === "useLoop"); @@ -2241,4 +2445,5 @@ export { lumaProviderSettingsToggleHandler, briaProviderSettingsToggleHandler, pixverseProviderSettingsToggleHandler, + alibabaProviderSettingsToggleHandler, }; \ No newline at end of file diff --git a/modules/providerSettings/alibabaProviderSettings.py b/modules/providerSettings/alibabaProviderSettings.py new file mode 100644 index 0000000..f2af687 --- /dev/null +++ b/modules/providerSettings/alibabaProviderSettings.py @@ -0,0 +1,67 @@ +""" +Runware Alibaba Provider Settings Node +Provides Alibaba-specific settings for image/video generation +""" + +from typing import Optional, Dict, Any + + +class RunwareAlibabaProviderSettings: + """Runware Alibaba Provider Settings Node""" + + @classmethod + def INPUT_TYPES(cls): + return { + "required": {}, + "optional": { + "usePromptEnhancer": ("BOOLEAN", { + "tooltip": "Enable to include promptEnhancer parameter in provider settings", + "default": False, + }), + "promptEnhancer": ("BOOLEAN", { + "tooltip": "Enable prompt enhancement for Alibaba generation. Only used when 'Use Prompt Enhancer' is enabled.", + "default": False, + "label_on": "Enabled", + "label_off": "Disabled", + }), + } + } + + RETURN_TYPES = ("RUNWAREPROVIDERSETTINGS",) + RETURN_NAMES = ("Provider Settings",) + FUNCTION = "createProviderSettings" + CATEGORY = "Runware/Provider Settings" + DESCRIPTION = "Configure Alibaba-specific provider settings for image/video generation including prompt enhancement." + + def createProviderSettings(self, **kwargs) -> tuple[Dict[str, Any]]: + """Create Alibaba provider settings""" + + # Get control parameters + usePromptEnhancer = kwargs.get("usePromptEnhancer", False) + + # Get value parameters + promptEnhancer = kwargs.get("promptEnhancer", False) + + # Build settings dictionary - only include what is enabled + alibabaSettings: Dict[str, Any] = {} + + # Add promptEnhancer only if usePromptEnhancer is enabled + if usePromptEnhancer: + alibabaSettings["promptEnhancer"] = promptEnhancer + + # Clean up None values + alibabaSettings = {k: v for k, v in alibabaSettings.items() if v is not None} + + # Return flat dictionary - will be wrapped by inference node with provider name + return (alibabaSettings,) + + +# Node class mappings +NODE_CLASS_MAPPINGS = { + "RunwareAlibabaProviderSettings": RunwareAlibabaProviderSettings, +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "RunwareAlibabaProviderSettings": "Runware Alibaba Provider Settings", +} + diff --git a/modules/videoInference.py b/modules/videoInference.py index 1a5d069..bfd560d 100644 --- a/modules/videoInference.py +++ b/modules/videoInference.py @@ -175,10 +175,14 @@ class txt2vid: model = runwareVideoModel.get("model", "") width = runwareVideoModel.get("width") height = runwareVideoModel.get("height") + useResolution = runwareVideoModel.get("useResolution", False) + resolution = runwareVideoModel.get("resolution", None) else: model = runwareVideoModel width = None height = None + useResolution = False + resolution = None genConfig = [ { @@ -190,6 +194,12 @@ class txt2vid: "includeCost": True, } ] + + # Add resolution if enabled + if useResolution and resolution: + genConfig[0]["resolution"] = resolution + + # Add width/height if not using resolution (or if resolution is not provided) if ( width is not None and height is not None and width > 0 and height > 0 diff --git a/modules/videoModelSearch.py b/modules/videoModelSearch.py index 384c316..0179f15 100644 --- a/modules/videoModelSearch.py +++ b/modules/videoModelSearch.py @@ -158,6 +158,84 @@ class videoModelSearch: "lumaai:2@2": {"width": 1080, "height": 720}, } + # Model resolutions mapping + MODEL_RESOLUTIONS = { + # KlingAI Models + "klingai:1@2": "720p", + "klingai:1@1": "720p", + "klingai:2@2": "1080p", + "klingai:2@1": "720p", + "klingai:3@1": "720p", + "klingai:3@2": "1080p", + "klingai:4@3": "720p", + "klingai:5@1": "720p", + "klingai:5@2": "1080p", + "klingai:5@3": "1080p", + "klingai:6@1": "1080p", + "klingai:7@1": None, # No resolution support + "klingai:kling@o1": None, # No standard resolution (1440x1440) + + # Veo Models + "google:2@0": "720p", + "google:3@0": "720p", + "google:3@1": "720p", + "google:3@2": "720p", + "google:3@3": "720p", + + # Bytedance Models + "bytedance:2@1": "480p", + "bytedance:1@1": "480p", + "bytedance:5@1": None, # No resolution support (fixed 1024x1024) + "bytedance:5@2": None, # No resolution support (fixed 1024x1024) + + # MiniMax Models (support both 768p and 720p, using 768p as primary) + "minimax:1@1": "768p", + "minimax:2@1": "768p", + "minimax:2@3": "768p", + "minimax:3@1": "768p", + "minimax:4@1": "768p", + "minimax:4@2": "768p", + + # PixVerse Models + "pixverse:1@1": "360p", + "pixverse:1@2": "360p", + "pixverse:1@3": "360p", + "pixverse:1@6": "360p", + "pixverse:lipsync@1": "360p", + + # Vidu Models + "vidu:1@0": "1080p", + "vidu:1@1": "1080p", + "vidu:1@5": "1080p", + "vidu:2@0": "1080p", + + # Wan Models + "runware:200@1": "480p", + "runware:200@2": "480p", + "runware:200@6": "720p", + + # OpenAI Models + "openai:3@1": "720p", + "openai:3@0": "720p", + + # Lightricks Models + "lightricks:2@0": "1080p", + "lightricks:2@1": "1080p", + "lightricks:3@1": None, # No resolution support + + # Ovi Models + "runware:190@1": None, # No resolution support + + # Runway Models + "runway:2@1": "720p", + "runway:1@1": "720p", + + # Luma Models + "lumaai:1@1": "720p", + "lumaai:2@1": "720p", + "lumaai:2@2": "720p", + } + MODEL_ARCHITECTURES = [ "All", "KlingAI", @@ -182,6 +260,7 @@ class videoModelSearch: defaultModel = "klingai:5@3 (KlingAI V2.0 Master)" defaultModelCode = defaultModel.split(" (")[0] defaultDims = cls.MODEL_DIMENSIONS.get(defaultModelCode, cls.DEFAULT_DIMENSIONS) + defaultResolution = cls.MODEL_RESOLUTIONS.get(defaultModelCode, None) return { "required": { @@ -220,6 +299,14 @@ class videoModelSearch: "step": 1, "tooltip": "Custom Height For The Selected Model. Defaults To Model's Recommended Height.", }), + "useResolution": ("BOOLEAN", { + "tooltip": "Enable to include resolution parameter in API request. Disable if your model doesn't support resolution.", + "default": False, + }), + "resolution": (["360p", "480p", "720p", "768p", "1080p"], { + "tooltip": "Select a standard resolution for Video Inference. Only used when 'Use Resolution' is enabled.", + "default": defaultResolution if defaultResolution else "720p", + }), }, } @@ -248,6 +335,8 @@ class videoModelSearch: customWidth = kwargs.get("Width", 0) customHeight = kwargs.get("Height", 0) useCustomDimensions = kwargs.get("useCustomDimensions", "Model Default") + useResolution = kwargs.get("useResolution", False) + resolution = kwargs.get("resolution", "720p") if enableSearchValue: modelAirCode = searchInput @@ -256,6 +345,7 @@ class videoModelSearch: modelAirCode = currentModel.split(" (")[0] dimensions = self.MODEL_DIMENSIONS.get(modelAirCode, self.DEFAULT_DIMENSIONS) + modelResolution = self.MODEL_RESOLUTIONS.get(modelAirCode, None) if useCustomDimensions == "Custom": # Use custom dimensions from Width/Height widgets @@ -276,9 +366,18 @@ class videoModelSearch: returnWidth = width returnHeight = height - return ({ + resultDict = { "model": modelAirCode, "useCustomDimensions": useCustomDimensions, "width": width, "height": height, - }, returnWidth, returnHeight) + } + + # Add resolution if enabled and model supports it + if useResolution and modelResolution is not None: + resultDict["resolution"] = resolution + resultDict["useResolution"] = True + else: + resultDict["useResolution"] = False + + return (resultDict, returnWidth, returnHeight) diff --git a/workflows/Runware_Image_to_Video_Kling_VIDEO_O1.json b/workflows/Runware_Image_to_Video_Kling_Omni_Video.json similarity index 100% rename from workflows/Runware_Image_to_Video_Kling_VIDEO_O1.json rename to workflows/Runware_Image_to_Video_Kling_Omni_Video.json diff --git a/workflows/Runware_Video_Inference_Minimax_Provider_Settings.json b/workflows/Runware_Video_Inference_Minimax_Provider_Settings.json index 47dc5bf..a97feef 100644 --- a/workflows/Runware_Video_Inference_Minimax_Provider_Settings.json +++ b/workflows/Runware_Video_Inference_Minimax_Provider_Settings.json @@ -1 +1 @@ -{"id":"839ae638-e137-4a05-bdcd-71b3d5f7132f","revision":0,"last_node_id":8,"last_link_id":13,"nodes":[{"id":4,"type":"SaveVideo","pos":[93.95779418945312,254.93186950683594],"size":[270,368],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"video","name":"video","type":"VIDEO","link":13},{"localized_name":"filename_prefix","name":"filename_prefix","type":"STRING","widget":{"name":"filename_prefix"},"link":null},{"localized_name":"format","name":"format","type":"COMBO","widget":{"name":"format"},"link":null},{"localized_name":"codec","name":"codec","type":"COMBO","widget":{"name":"codec"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfy-core","ver":"0.3.46","Node name for S&R":"SaveVideo"},"widgets_values":["video/ComfyUI","auto","auto"]},{"id":5,"type":"Runware Frame Images","pos":[-650.6224975585938,564.96875],"size":[270,190],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"image1","name":"image1","shape":7,"type":"IMAGE","link":5},{"localized_name":"image2","name":"image2","shape":7,"type":"IMAGE","link":null},{"localized_name":"image3","name":"image3","shape":7,"type":"IMAGE","link":null},{"localized_name":"image4","name":"image4","shape":7,"type":"IMAGE","link":null},{"localized_name":"frame1_position","name":"frame1_position","shape":7,"type":"COMBO","widget":{"name":"frame1_position"},"link":null},{"localized_name":"frame2_position","name":"frame2_position","shape":7,"type":"COMBO","widget":{"name":"frame2_position"},"link":null},{"localized_name":"frame3_position","name":"frame3_position","shape":7,"type":"COMBO","widget":{"name":"frame3_position"},"link":null},{"localized_name":"frame4_position","name":"frame4_position","shape":7,"type":"COMBO","widget":{"name":"frame4_position"},"link":null}],"outputs":[{"localized_name":"Frame Images","name":"Frame Images","type":"RUNWAREFRAMEIMAGES","links":[11]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"adeaf95d4599b3395b2ba4463177416f5e9deb8b","Node name for S&R":"Runware Frame Images"},"widgets_values":["auto","auto","auto","auto"],"bgcolor":"#5345bf"},{"id":3,"type":"Runware Video Model Search","pos":[-661.7725830078125,247.81033325195312],"size":[270,242],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"Model Search","name":"Model Search","type":"STRING","widget":{"name":"Model Search"},"link":null},{"localized_name":"Model Architecture","name":"Model Architecture","type":"COMBO","widget":{"name":"Model Architecture"},"link":null},{"localized_name":"VideoList","name":"VideoList","type":"COMBO","widget":{"name":"VideoList"},"link":null},{"localized_name":"Use Search Value","name":"Use Search Value","type":"BOOLEAN","widget":{"name":"Use Search Value"},"link":null},{"localized_name":"useCustomDimensions","name":"useCustomDimensions","type":"BOOLEAN","widget":{"name":"useCustomDimensions"},"link":null},{"localized_name":"Width","name":"Width","type":"INT","widget":{"name":"Width"},"link":null},{"localized_name":"Height","name":"Height","type":"INT","widget":{"name":"Height"},"link":null}],"outputs":[{"localized_name":"Runware Video Model","name":"Runware Video Model","type":"RUNWAREVIDEOMODEL","links":[12]},{"localized_name":"Width","name":"Width","type":"INT","links":null},{"localized_name":"Height","name":"Height","type":"INT","links":null}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"adeaf95d4599b3395b2ba4463177416f5e9deb8b","Node name for S&R":"Runware Video Model Search"},"widgets_values":["","MiniMax","minimax:4@2 (MiniMax Hailuo 2.3 Fast)",false,1366,768,0],"bgcolor":"#5345bf"},{"id":8,"type":"Runware Video Inference","pos":[-342.2615661621094,224.80838012695312],"size":[400,736],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"Model","name":"Model","type":"RUNWAREVIDEOMODEL","link":12},{"localized_name":"frameImages","name":"frameImages","shape":7,"type":"RUNWAREFRAMEIMAGES","link":11},{"localized_name":"referenceImages","name":"referenceImages","shape":7,"type":"RUNWAREREFERENCEIMAGES","link":null},{"localized_name":"providerSettings","name":"providerSettings","shape":7,"type":"RUNWAREPROVIDERSETTINGS","link":10},{"localized_name":"inputAudios","name":"inputAudios","shape":7,"type":"RUNWAREINPUTAUDIOS","link":null},{"localized_name":"referenceVideos","name":"referenceVideos","shape":7,"type":"RUNWAREREFERENCEVIDEOS","link":null},{"localized_name":"inputs","name":"inputs","shape":7,"type":"RUNWAREVIDEOINFERENCEINPUTS","link":null},{"localized_name":"safetyInputs","name":"safetyInputs","shape":7,"type":"RUNWARESAFETYINPUTS","link":null},{"localized_name":"videoAdvancedFeatureInputs","name":"videoAdvancedFeatureInputs","shape":7,"type":"RUNWAREVIDEOADVANCEDFEATUREINPUTS","link":null},{"localized_name":"Accelerator","name":"Accelerator","shape":7,"type":"RUNWAREACCELERATOR","link":null},{"localized_name":"Multi Inference Mode","name":"Multi Inference Mode","type":"BOOLEAN","widget":{"name":"Multi Inference Mode"},"link":null},{"localized_name":"Prompt Weighting","name":"Prompt Weighting","type":"COMBO","widget":{"name":"Prompt Weighting"},"link":null},{"localized_name":"useDuration","name":"useDuration","type":"BOOLEAN","widget":{"name":"useDuration"},"link":null},{"localized_name":"duration","name":"duration","type":"INT","widget":{"name":"duration"},"link":null},{"localized_name":"useFps","name":"useFps","type":"BOOLEAN","widget":{"name":"useFps"},"link":null},{"localized_name":"fps","name":"fps","type":"INT","widget":{"name":"fps"},"link":null},{"localized_name":"outputFormat","name":"outputFormat","type":"COMBO","widget":{"name":"outputFormat"},"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":"useSteps","name":"useSteps","type":"BOOLEAN","widget":{"name":"useSteps"},"link":null},{"localized_name":"steps","name":"steps","type":"INT","widget":{"name":"steps"},"link":null},{"localized_name":"batchSize","name":"batchSize","type":"INT","widget":{"name":"batchSize"},"link":null},{"localized_name":"acceleration","name":"acceleration","type":"COMBO","widget":{"name":"acceleration"},"link":null},{"localized_name":"positivePrompt","name":"positivePrompt","shape":7,"type":"STRING","widget":{"name":"positivePrompt"},"link":null},{"localized_name":"negativePrompt","name":"negativePrompt","shape":7,"type":"STRING","widget":{"name":"negativePrompt"},"link":null},{"localized_name":"speechVoice","name":"speechVoice","shape":7,"type":"STRING","widget":{"name":"speechVoice"},"link":null},{"localized_name":"speechText","name":"speechText","shape":7,"type":"STRING","widget":{"name":"speechText"},"link":null}],"outputs":[{"localized_name":"VIDEO","name":"VIDEO","type":"VIDEO","links":[13]},{"localized_name":"RW-Task","name":"RW-Task","type":"RUNWARETASK","links":null}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"55fd7e4e00753c570a436f653204cb84ed8e0ed7","Node name for S&R":"Runware Video Inference"},"widgets_values":[false,"Disabled",true,6,true,24,"mp4",false,2321184132,"randomize",false,20,1,"none","Man waving his hand!","","",""],"bgcolor":"#5345bf"},{"id":2,"type":"Runware MiniMax Provider Settings","pos":[-720.1251220703125,813.2280883789062],"size":[322.4302673339844,58],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"promptOptimizer","name":"promptOptimizer","shape":7,"type":"BOOLEAN","widget":{"name":"promptOptimizer"},"link":null}],"outputs":[{"localized_name":"providerSettings","name":"providerSettings","type":"RUNWAREPROVIDERSETTINGS","links":[10]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"adeaf95d4599b3395b2ba4463177416f5e9deb8b","Node name for S&R":"Runware MiniMax Provider Settings"},"widgets_values":[true],"bgcolor":"#5345bf"},{"id":6,"type":"LoadImage","pos":[-968.0850219726562,378.0044250488281],"size":[274.080078125,314],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"image","name":"image","type":"COMBO","widget":{"name":"image"},"link":null},{"localized_name":"choose file to upload","name":"upload","type":"IMAGEUPLOAD","widget":{"name":"upload"},"link":null}],"outputs":[{"localized_name":"IMAGE","name":"IMAGE","type":"IMAGE","links":[5]},{"localized_name":"MASK","name":"MASK","type":"MASK","links":null}],"properties":{"cnr_id":"comfy-core","ver":"0.3.46","Node name for S&R":"LoadImage"},"widgets_values":["human6.jpg","image"]}],"links":[[5,6,0,5,0,"IMAGE"],[10,2,0,8,3,"RUNWAREPROVIDERSETTINGS"],[11,5,0,8,1,"RUNWAREFRAMEIMAGES"],[12,3,0,8,0,"RUNWAREVIDEOMODEL"],[13,8,0,4,0,"VIDEO"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.84178320666651,"offset":[1121.3414184610624,-249.3425216533147]}},"version":0.4} \ No newline at end of file +{"id":"839ae638-e137-4a05-bdcd-71b3d5f7132f","revision":0,"last_node_id":10,"last_link_id":14,"nodes":[{"id":4,"type":"SaveVideo","pos":[93.95779418945312,254.93186950683594],"size":[270,368],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"video","name":"video","type":"VIDEO","link":13},{"localized_name":"filename_prefix","name":"filename_prefix","type":"STRING","widget":{"name":"filename_prefix"},"link":null},{"localized_name":"format","name":"format","type":"COMBO","widget":{"name":"format"},"link":null},{"localized_name":"codec","name":"codec","type":"COMBO","widget":{"name":"codec"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfy-core","ver":"0.3.46","Node name for S&R":"SaveVideo"},"widgets_values":["video/ComfyUI","auto","auto"]},{"id":5,"type":"Runware Frame Images","pos":[-650.6224975585938,564.96875],"size":[270,190],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"image1","name":"image1","shape":7,"type":"IMAGE","link":5},{"localized_name":"image2","name":"image2","shape":7,"type":"IMAGE","link":null},{"localized_name":"image3","name":"image3","shape":7,"type":"IMAGE","link":null},{"localized_name":"image4","name":"image4","shape":7,"type":"IMAGE","link":null},{"localized_name":"frame1_position","name":"frame1_position","shape":7,"type":"COMBO","widget":{"name":"frame1_position"},"link":null},{"localized_name":"frame2_position","name":"frame2_position","shape":7,"type":"COMBO","widget":{"name":"frame2_position"},"link":null},{"localized_name":"frame3_position","name":"frame3_position","shape":7,"type":"COMBO","widget":{"name":"frame3_position"},"link":null},{"localized_name":"frame4_position","name":"frame4_position","shape":7,"type":"COMBO","widget":{"name":"frame4_position"},"link":null}],"outputs":[{"localized_name":"Frame Images","name":"Frame Images","type":"RUNWAREFRAMEIMAGES","links":[11]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"adeaf95d4599b3395b2ba4463177416f5e9deb8b","Node name for S&R":"Runware Frame Images"},"widgets_values":["auto","auto","auto","auto"],"bgcolor":"#5345bf"},{"id":2,"type":"Runware MiniMax Provider Settings","pos":[-720.1251220703125,813.2280883789062],"size":[322.4302673339844,58],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"promptOptimizer","name":"promptOptimizer","shape":7,"type":"BOOLEAN","widget":{"name":"promptOptimizer"},"link":null}],"outputs":[{"localized_name":"providerSettings","name":"providerSettings","type":"RUNWAREPROVIDERSETTINGS","links":[10]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"adeaf95d4599b3395b2ba4463177416f5e9deb8b","Node name for S&R":"Runware MiniMax Provider Settings"},"widgets_values":[true],"bgcolor":"#5345bf"},{"id":6,"type":"LoadImage","pos":[-968.0850219726562,378.0044250488281],"size":[274.080078125,314],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"image","name":"image","type":"COMBO","widget":{"name":"image"},"link":null},{"localized_name":"choose file to upload","name":"upload","type":"IMAGEUPLOAD","widget":{"name":"upload"},"link":null}],"outputs":[{"localized_name":"IMAGE","name":"IMAGE","type":"IMAGE","links":[5]},{"localized_name":"MASK","name":"MASK","type":"MASK","links":null}],"properties":{"cnr_id":"comfy-core","ver":"0.3.46","Node name for S&R":"LoadImage"},"widgets_values":["human6.jpg","image"]},{"id":9,"type":"Runware Video Model Search","pos":[-657.9603271484375,221.95465087890625],"size":[287.380859375,290],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"Model Search","name":"Model Search","type":"STRING","widget":{"name":"Model Search"},"link":null},{"localized_name":"Model Architecture","name":"Model Architecture","type":"COMBO","widget":{"name":"Model Architecture"},"link":null},{"localized_name":"VideoList","name":"VideoList","type":"COMBO","widget":{"name":"VideoList"},"link":null},{"localized_name":"Use Search Value","name":"Use Search Value","type":"BOOLEAN","widget":{"name":"Use Search Value"},"link":null},{"localized_name":"useCustomDimensions","name":"useCustomDimensions","type":"COMBO","widget":{"name":"useCustomDimensions"},"link":null},{"localized_name":"Width","name":"Width","type":"INT","widget":{"name":"Width"},"link":null},{"localized_name":"Height","name":"Height","type":"INT","widget":{"name":"Height"},"link":null},{"localized_name":"useResolution","name":"useResolution","type":"BOOLEAN","widget":{"name":"useResolution"},"link":null},{"localized_name":"resolution","name":"resolution","type":"COMBO","widget":{"name":"resolution"},"link":null}],"outputs":[{"localized_name":"Runware Video Model","name":"Runware Video Model","type":"RUNWAREVIDEOMODEL","links":[14]},{"localized_name":"Width","name":"Width","type":"INT","links":null},{"localized_name":"Height","name":"Height","type":"INT","links":null}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"9e5d8e3d3d55929d742852a11b1c205291991951","Node name for S&R":"Runware Video Model Search"},"widgets_values":["","MiniMax","minimax:4@2 (MiniMax Hailuo 2.3 Fast)",false,"Disabled",0,0,true,"768p"],"bgcolor":"#5345bf"},{"id":8,"type":"Runware Video Inference","pos":[-342.2615661621094,224.80838012695312],"size":[400,736],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"Model","name":"Model","type":"RUNWAREVIDEOMODEL","link":14},{"localized_name":"frameImages","name":"frameImages","shape":7,"type":"RUNWAREFRAMEIMAGES","link":11},{"localized_name":"referenceImages","name":"referenceImages","shape":7,"type":"RUNWAREREFERENCEIMAGES","link":null},{"localized_name":"providerSettings","name":"providerSettings","shape":7,"type":"RUNWAREPROVIDERSETTINGS","link":10},{"localized_name":"inputAudios","name":"inputAudios","shape":7,"type":"RUNWAREINPUTAUDIOS","link":null},{"localized_name":"referenceVideos","name":"referenceVideos","shape":7,"type":"RUNWAREREFERENCEVIDEOS","link":null},{"localized_name":"inputs","name":"inputs","shape":7,"type":"RUNWAREVIDEOINFERENCEINPUTS","link":null},{"localized_name":"safetyInputs","name":"safetyInputs","shape":7,"type":"RUNWARESAFETYINPUTS","link":null},{"localized_name":"videoAdvancedFeatureInputs","name":"videoAdvancedFeatureInputs","shape":7,"type":"RUNWAREVIDEOADVANCEDFEATUREINPUTS","link":null},{"localized_name":"Accelerator","name":"Accelerator","shape":7,"type":"RUNWAREACCELERATOR","link":null},{"localized_name":"Multi Inference Mode","name":"Multi Inference Mode","type":"BOOLEAN","widget":{"name":"Multi Inference Mode"},"link":null},{"localized_name":"Prompt Weighting","name":"Prompt Weighting","type":"COMBO","widget":{"name":"Prompt Weighting"},"link":null},{"localized_name":"useDuration","name":"useDuration","type":"BOOLEAN","widget":{"name":"useDuration"},"link":null},{"localized_name":"duration","name":"duration","type":"INT","widget":{"name":"duration"},"link":null},{"localized_name":"useFps","name":"useFps","type":"BOOLEAN","widget":{"name":"useFps"},"link":null},{"localized_name":"fps","name":"fps","type":"INT","widget":{"name":"fps"},"link":null},{"localized_name":"outputFormat","name":"outputFormat","type":"COMBO","widget":{"name":"outputFormat"},"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":"useSteps","name":"useSteps","type":"BOOLEAN","widget":{"name":"useSteps"},"link":null},{"localized_name":"steps","name":"steps","type":"INT","widget":{"name":"steps"},"link":null},{"localized_name":"batchSize","name":"batchSize","type":"INT","widget":{"name":"batchSize"},"link":null},{"localized_name":"acceleration","name":"acceleration","type":"COMBO","widget":{"name":"acceleration"},"link":null},{"localized_name":"positivePrompt","name":"positivePrompt","shape":7,"type":"STRING","widget":{"name":"positivePrompt"},"link":null},{"localized_name":"negativePrompt","name":"negativePrompt","shape":7,"type":"STRING","widget":{"name":"negativePrompt"},"link":null},{"localized_name":"speechVoice","name":"speechVoice","shape":7,"type":"STRING","widget":{"name":"speechVoice"},"link":null},{"localized_name":"speechText","name":"speechText","shape":7,"type":"STRING","widget":{"name":"speechText"},"link":null}],"outputs":[{"localized_name":"VIDEO","name":"VIDEO","type":"VIDEO","links":[13]},{"localized_name":"RW-Task","name":"RW-Task","type":"RUNWARETASK","links":null}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"55fd7e4e00753c570a436f653204cb84ed8e0ed7","Node name for S&R":"Runware Video Inference"},"widgets_values":[false,"Disabled",true,6,true,24,"mp4",false,777487181,"randomize",false,20,1,"none","Man waving his hand!","","",""],"bgcolor":"#5345bf"}],"links":[[5,6,0,5,0,"IMAGE"],[10,2,0,8,3,"RUNWAREPROVIDERSETTINGS"],[11,5,0,8,1,"RUNWAREFRAMEIMAGES"],[13,8,0,4,0,"VIDEO"],[14,9,0,8,0,"RUNWAREVIDEOMODEL"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.84178320666651,"offset":[1121.3414184610624,-170.40388493099147]}},"version":0.4} \ No newline at end of file