From 2f6e3bf28aeb81fed542b102ab38d5595b43563c Mon Sep 17 00:00:00 2001 From: Sirshendu Ganguly Date: Fri, 24 Apr 2026 15:26:45 +0530 Subject: [PATCH] Added support for SkyReels --- __init__.py | 8 ++ clientlibs/main.js | 5 +- clientlibs/utils.js | 74 +++++++++++++++++++ modules/referenceVideos.py | 51 +++++++++++-- modules/utils/runwareUtils.py | 2 +- modules/videoInputsReferences.py | 54 +++++++++++--- modules/videoModelSearch.py | 10 +++ .../Runware_Video_Inference_Skyreels.json | 1 + 8 files changed, 184 insertions(+), 21 deletions(-) create mode 100644 workflows/Runware_Video_Inference_Skyreels.json diff --git a/__init__.py b/__init__.py index 16f4d7f..5f63e3a 100644 --- a/__init__.py +++ b/__init__.py @@ -260,6 +260,14 @@ NODE_DISPLAY_NAME_MAPPINGS = { "Runware Text Model Search": "Runware Text Model", "Runware Image Inference Settings Color Palette": "Runware Image Inference Color Palette", "Runware Video Transcription": "Runware Video Caption", + "Runware Video Inputs References": "Runware Video Inference Inputs Reference Images", + "Runware Video Inference Inputs Reference Images": "Runware Video Inference Inputs Reference Images", + "Runware Reference Voices": "Runware Video Inference Inputs Reference Voices", + "Runware Video Inference Inputs Reference Voices": "Runware Video Inference Inputs Reference Voices", + "Runware Reference Videos": "Runware Video Inference Inputs Reference Videos", + "Runware Video Inference Inputs Reference Videos": "Runware Video Inference Inputs Reference Videos", + "Runware Reference Audios": "Runware Video Inference Inputs Reference Audios", + "Runware Video Inference Inputs Reference Audios": "Runware Video Inference Inputs Reference Audios", } WEB_DIRECTORY = "./clientlibs" diff --git a/clientlibs/main.js b/clientlibs/main.js index 22815f0..78a74bb 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, 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, safetyInputsToggleHandler, imageInferenceSettingsColorPaletteToggleHandler, audioInputToggleHandler, speechInputToggleHandler, briaProviderMaskToggleHandler, wanAnimateAdvancedFeatureSettingsToggleHandler, videoAdvancedFeatureInputsToggleHandler, audioInferenceInputsToggleHandler, audioInferenceSpeechVoicesToggleHandler } 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, ultralyticsProviderSettingsToggleHandler, openaiProviderSettingsToggleHandler, lightricksProviderSettingsToggleHandler, klingProviderSettingsToggleHandler, lumaProviderSettingsToggleHandler, briaProviderSettingsToggleHandler, pixverseProviderSettingsToggleHandler, alibabaProviderSettingsToggleHandler, mireloProviderSettingsToggleHandler, googleProviderSettingsToggleHandler, syncProviderSettingsToggleHandler, syncSegmentToggleHandler, settingsToggleHandler, safetyInputsToggleHandler, imageInferenceSettingsColorPaletteToggleHandler, 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 = []; @@ -161,6 +161,9 @@ app.registerExtension({ videoAdvancedFeatureInputsToggleHandler(node); } else if(nodeClass === RUNWARE_NODE_TYPES.AUDIOINFERENCEINPUTS) { audioInferenceInputsToggleHandler(node); + } else if(nodeClass === RUNWARE_NODE_TYPES.REFERENCEVIDEOS || + nodeClass === RUNWARE_NODE_TYPES.REFERENCEVIDEOS_LEGACY) { + referenceVideosToggleHandler(node); } else if(nodeClass === RUNWARE_NODE_TYPES.THREEDINFERENCE) { threeDInferenceToggleHandler(node); } else if(nodeClass === RUNWARE_NODE_TYPES.THREEDINFERENCESETTINGS) { diff --git a/clientlibs/utils.js b/clientlibs/utils.js index 7d6caaa..fc6454c 100644 --- a/clientlibs/utils.js +++ b/clientlibs/utils.js @@ -2838,6 +2838,9 @@ function videoModelSearchFilterHandler(videoModelSearchNode) { "Pruna": [ "prunaai:p-video@0 (P-Video)", ], + "SkyReels": [ + "skywork:skyreels@v4 (SkyReels V4)", + ], }; const MODEL_DIMENSIONS = { @@ -2930,6 +2933,7 @@ function videoModelSearchFilterHandler(videoModelSearchNode) { "prunaai:p-video@0": {"width": 1280, "height": 720}, "heygen:avatar@4": {"width": 1280, "height": 720}, "heygen:video-agent@0": {"width": 1280, "height": 720}, + "skywork:skyreels@v4": {"width": 1280, "height": 720}, }; const MODEL_RESOLUTIONS = { @@ -3022,6 +3026,7 @@ function videoModelSearchFilterHandler(videoModelSearchNode) { "prunaai:p-video@0": "720p", "heygen:avatar@4": "720p", "heygen:video-agent@0": "720p", + "skywork:skyreels@v4": "720p", }; const DEFAULT_DIMENSIONS = {"width": 1024, "height": 576}; @@ -4851,6 +4856,74 @@ function audioInferenceSpeechVoicesToggleHandler(voicesNode) { } } +function referenceVideosToggleHandler(referenceVideosNode) { + if (!referenceVideosNode?.widgets) return; + + 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; + } + + 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"; + } + + paramWidget.disabled = !enabled; + + if (!paramWidget.inputEl && paramName) { + const nodeElement = referenceVideosNode.htmlElements?.widgetsContainer || referenceVideosNode.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"; + } + } + } + } + + referenceVideosNode.setDirtyCanvas(true); + } + + appendWidgetCB(useWidget, () => { + setTimeout(toggleEnabled, 50); + }); + + setTimeout(toggleEnabled, 100); + } + + for (let i = 1; i <= 4; i++) { + const useVideoWidget = referenceVideosNode.widgets.find((w) => w && w.name === `useVideo${i}`); + const videoWidget = referenceVideosNode.widgets.find((w) => w && w.name === `Video${i}`); + const tagWidget = referenceVideosNode.widgets.find((w) => w && w.name === `Tag${i}`); + const typeWidget = referenceVideosNode.widgets.find((w) => w && w.name === `Type${i}`); + + if (useVideoWidget && videoWidget) { + toggleWidgetState(useVideoWidget, videoWidget, `Video${i}`); + } + if (useVideoWidget && tagWidget) { + toggleWidgetState(useVideoWidget, tagWidget, `Tag${i}`); + } + if (useVideoWidget && typeWidget) { + toggleWidgetState(useVideoWidget, typeWidget, `Type${i}`); + } + } +} + export { notifyUser, promptEnhanceHandler, @@ -4919,6 +4992,7 @@ export { videoAdvancedFeatureInputsToggleHandler, audioInferenceInputsToggleHandler, audioInferenceSpeechVoicesToggleHandler, + referenceVideosToggleHandler, }; function googleProviderSettingsToggleHandler(googleNode) { diff --git a/modules/referenceVideos.py b/modules/referenceVideos.py index 6249a3b..187a40a 100644 --- a/modules/referenceVideos.py +++ b/modules/referenceVideos.py @@ -1,4 +1,4 @@ -from typing import List +from typing import Any, Dict, List from .utils import runwareUtils as rwUtils @@ -13,30 +13,67 @@ class referenceVideos: for i in range(1, cls.MAX_VIDEOS + 1): ordinal = rwUtils.getOrdinal(i) + optionalInputs[f"useVideo{i}"] = ("BOOLEAN", { + "default": False, + "tooltip": f"Enable to include the {ordinal} reference video.", + }) optionalInputs[f"Video{i}"] = ("STRING", { "tooltip": f"MediaUUID for the {ordinal} reference video from Runware Media Upload node.", }) + optionalInputs[f"Tag{i}"] = ("STRING", { + "default": "", + "tooltip": f"Optional tag for the {ordinal} reference video (e.g., @video{i}). Must be used in the prompt.", + }) + optionalInputs[f"Type{i}"] = ("STRING", { + "default": "reference", + "tooltip": ( + f"Optional type for the {ordinal} reference video. " + "For example: reference or extend." + ), + }) return { "required": {}, "optional": optionalInputs } - DESCRIPTION = "Configure multiple reference video inputs (mediaUUIDs) for video generation." + DESCRIPTION = ( + "Configure multiple reference video inputs (mediaUUIDs) for video generation, " + "with optional tag and type per reference." + ) FUNCTION = "createReferenceVideos" RETURN_TYPES = ("RUNWAREREFERENCEVIDEOS",) RETURN_NAMES = ("Reference Videos",) CATEGORY = "Runware" - def createReferenceVideos(self, **kwargs) -> tuple[List[str]]: - """Create list of reference video UUIDs""" - videoList = [] + def createReferenceVideos(self, **kwargs) -> tuple[List[Any]]: + """Create list of reference video entries (string UUIDs or objects with tag/type).""" + videoList: List[Any] = [] for i in range(1, self.MAX_VIDEOS + 1): + useKey = f"useVideo{i}" videoKey = f"Video{i}" + tagKey = f"Tag{i}" + typeKey = f"Type{i}" + useVideo = bool(kwargs.get(useKey, False)) videoUuid = kwargs.get(videoKey) + tagValue = (kwargs.get(tagKey) or "").strip() + typeValue = (kwargs.get(typeKey) or "reference").strip() - if videoUuid and videoUuid.strip() != "": - videoList.append(videoUuid.strip()) + if useVideo and videoUuid and videoUuid.strip() != "": + normalized_video = videoUuid.strip() + + # Backward compatible payload: + # - If tag/type are not provided, keep legacy string entry. + # - If tag or non-default type is provided, emit object entry. + if tagValue or typeValue != "reference": + entry: Dict[str, str] = {"video": normalized_video} + if tagValue: + entry["tag"] = tagValue + if typeValue: + entry["type"] = typeValue + videoList.append(entry) + else: + videoList.append(normalized_video) return (videoList,) diff --git a/modules/utils/runwareUtils.py b/modules/utils/runwareUtils.py index 0c97b0f..75ba920 100644 --- a/modules/utils/runwareUtils.py +++ b/modules/utils/runwareUtils.py @@ -158,7 +158,7 @@ def getCustomEndpoint(): custom_endpoint = os.getenv("RUNWARE_CUSTOM_ENDPOINT") if custom_endpoint and isinstance(custom_endpoint, str): return custom_endpoint - return "https://api.runware.ai/v1" + return "https://api.runware.dev/v1" SESSION_TIMEOUT = getTimeout() RUNWARE_API_KEY = getAPIKey() diff --git a/modules/videoInputsReferences.py b/modules/videoInputsReferences.py index 449697a..f8169ee 100644 --- a/modules/videoInputsReferences.py +++ b/modules/videoInputsReferences.py @@ -14,10 +14,18 @@ class videoInputsReferences: for i in range(1, cls.MAX_REFERENCES + 1): ordinal = rwUtils.getOrdinal(i) optionalInputs[f"Image{i}"] = ("IMAGE", { - "tooltip": f"{ordinal.capitalize()} reference image.", + "tooltip": f"{ordinal.capitalize()} reference image (primary image for this reference entry).", + }) + optionalInputs[f"Tag{i}"] = ("STRING", { + "tooltip": f"Optional tag for the {ordinal} reference (e.g., @image{i}, @Actor-1).", + "default": "", }) optionalInputs[f"Type{i}"] = ("STRING", { - "tooltip": f"Type for the {ordinal} reference (e.g., 'asset'). Leave empty to omit.", + "tooltip": f"Type for the {ordinal} reference (e.g., grid or image).", + "default": "", + }) + optionalInputs[f"Audio{i}"] = ("STRING", { + "tooltip": f"Optional audio URL/mediaUUID for the {ordinal} reference (supported for type=image).", "default": "", }) @@ -26,35 +34,57 @@ class videoInputsReferences: "optional": optionalInputs } - DESCRIPTION = "Configure multiple reference images with optional types for video inference inputs." + DESCRIPTION = ( + "Configure multiple reference image entries for video inference inputs, " + "with optional tag, type, images list, and audio per entry." + ) FUNCTION = "createReferences" RETURN_TYPES = ("RUNWAREVIDEOINPUTSREFERENCEIMAGES",) RETURN_NAMES = ("Video Inputs Reference Images",) CATEGORY = "Runware" - def createReferences(self, **kwargs) -> tuple[List[Dict[str, Any]]]: - """Create list of reference objects from provided parameters""" + def createReferences(self, **kwargs) -> tuple[List[Any]]: + """Create list of reference entries from provided parameters.""" references = [] for i in range(1, self.MAX_REFERENCES + 1): imageKey = f"Image{i}" + tagKey = f"Tag{i}" typeKey = f"Type{i}" + audioKey = f"Audio{i}" image = kwargs.get(imageKey) - refType = kwargs.get(typeKey, "") + refTag = (kwargs.get(tagKey) or "").strip() + refType = (kwargs.get(typeKey) or "").strip() + refAudio = (kwargs.get(audioKey) or "").strip() if image is not None: - reference = self._createReference(image, refType) + reference = self._createReference(image, refTag, refType, refAudio) references.append(reference) return (references,) - def _createReference(self, image, refType): - """Create reference entry (API expects direct strings)""" + def _createReference(self, image, refTag: str, refType: str, refAudio: str): + """ + Backward compatible behavior: + - If no extra metadata is provided, return legacy string entry. + - If tag/type/images/audio are provided, return object entry. + """ imageUrl = rwUtils.convertTensor2IMG(image) - # API expects referenceImages to be a list of strings (UUID/URL/data URI) - # so we return the converted string directly. - return imageUrl + images = [imageUrl] + + has_extended_fields = bool(refTag or refType or refAudio or len(images) > 1) + if not has_extended_fields: + return imageUrl + + entry: Dict[str, Any] = {"images": images} + if refTag: + entry["tag"] = refTag + if refType: + entry["type"] = refType + if refAudio: + entry["audio"] = refAudio + return entry # Node class mappings diff --git a/modules/videoModelSearch.py b/modules/videoModelSearch.py index 0c36d2e..16503b6 100644 --- a/modules/videoModelSearch.py +++ b/modules/videoModelSearch.py @@ -134,6 +134,9 @@ class videoModelSearch: "Pruna": [ "prunaai:p-video@0 (P-Video)", ], + "SkyReels": [ + "skywork:skyreels@v4 (SkyReels V4)", + ], } # Model dimensions mapping @@ -268,6 +271,9 @@ class videoModelSearch: # HeyGen Models (Model ID: heygen-avatar-iv) "heygen:avatar@4": {"width": 1280, "height": 720}, "heygen:video-agent@0": {"width": 1280, "height": 720}, + + # SkyReels Models + "skywork:skyreels@v4": {"width": 1280, "height": 720}, } # Model resolutions mapping @@ -402,6 +408,9 @@ class videoModelSearch: # HeyGen Models "heygen:avatar@4": "720p", "heygen:video-agent@0": "720p", + + # SkyReels Models + "skywork:skyreels@v4": "720p", } MODEL_ARCHITECTURES = [ @@ -427,6 +436,7 @@ class videoModelSearch: "xAI", "VEED", "Pruna", + "SkyReels", ] DEFAULT_DIMENSIONS = {"width": 1024, "height": 576} diff --git a/workflows/Runware_Video_Inference_Skyreels.json b/workflows/Runware_Video_Inference_Skyreels.json new file mode 100644 index 0000000..84e6652 --- /dev/null +++ b/workflows/Runware_Video_Inference_Skyreels.json @@ -0,0 +1 @@ +{"id":"060883ac-23f5-4182-8eb3-de6584318ea5","revision":0,"last_node_id":8,"last_link_id":6,"nodes":[{"id":4,"type":"SaveVideo","pos":[1362.9873571417286,-156.86135083910136],"size":[270,251],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"video","name":"video","type":"VIDEO","link":5},{"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.19.3"},"widgets_values":["video/ComfyUI","auto","auto"]},{"id":1,"type":"Runware Video Inference","pos":[400.08449596206253,-170.43007921081468],"size":[400,818],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"Model","name":"Model","type":"RUNWAREVIDEOMODEL","link":4},{"localized_name":"frameImages","name":"frameImages","shape":7,"type":"RUNWAREFRAMEIMAGES","link":null},{"localized_name":"referenceImages","name":"referenceImages","shape":7,"type":"RUNWAREREFERENCEIMAGES","link":null},{"localized_name":"providerSettings","name":"providerSettings","shape":7,"type":"RUNWAREPROVIDERSETTINGS","link":null},{"localized_name":"inputAudios","name":"inputAudios","shape":7,"type":"RUNWAREINPUTAUDIOS","link":null},{"localized_name":"referenceVideos","name":"referenceVideos","shape":7,"type":"RUNWAREREFERENCEVIDEOS","link":null},{"localized_name":"speech","name":"speech","shape":7,"type":"RUNWAREVIDEOINFERENCESPEECHINPUT","link":null},{"localized_name":"inputs","name":"inputs","shape":7,"type":"RUNWAREVIDEOINFERENCEINPUTS","link":6},{"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":"settings","name":"settings","shape":7,"type":"RUNWAREVIDEOSETTINGS","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":"useBatchSize","name":"useBatchSize","type":"BOOLEAN","widget":{"name":"useBatchSize"},"link":null},{"localized_name":"batchSize","name":"batchSize","type":"INT","widget":{"name":"batchSize"},"link":null},{"localized_name":"useSchedulers","name":"useSchedulers","type":"BOOLEAN","widget":{"name":"useSchedulers"},"link":null},{"localized_name":"scheduler","name":"scheduler","type":"COMBO","widget":{"name":"scheduler"},"link":null},{"localized_name":"useCFGScale","name":"useCFGScale","type":"BOOLEAN","widget":{"name":"useCFGScale"},"link":null},{"localized_name":"cfgScale","name":"cfgScale","type":"FLOAT","widget":{"name":"cfgScale"},"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}],"outputs":[{"localized_name":"VIDEO","name":"VIDEO","type":"VIDEO","links":[5]},{"localized_name":"RW-Task","name":"RW-Task","type":"RUNWARETASK","links":null},{"localized_name":"OUTPUT","name":"OUTPUT","type":"RUNWARETASK","links":null}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"a5766fe47d9a5131ba2d715d9f1cee382ab530d9","Node name for S&R":"Runware Video Inference"},"widgets_values":[false,"Disabled",true,5,false,24,"mp4",true,1975263735,"randomize",false,20,false,1,false,"euler",false,5,"none","@Actor-1 walks confidently down a neon-lit street at night.",""],"bgcolor":"#5345bf"},{"id":6,"type":"Runware Video Inference Inputs Reference Images","pos":[908.0724648668347,-180.92262724350365],"size":[434.710546875,934],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"Image1","name":"Image1","shape":7,"type":"IMAGE","link":2},{"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":"Image5","name":"Image5","shape":7,"type":"IMAGE","link":null},{"localized_name":"Image6","name":"Image6","shape":7,"type":"IMAGE","link":null},{"localized_name":"Image7","name":"Image7","shape":7,"type":"IMAGE","link":null},{"localized_name":"Image8","name":"Image8","shape":7,"type":"IMAGE","link":null},{"localized_name":"Image9","name":"Image9","shape":7,"type":"IMAGE","link":null},{"localized_name":"Image10","name":"Image10","shape":7,"type":"IMAGE","link":null},{"localized_name":"Tag1","name":"Tag1","shape":7,"type":"STRING","widget":{"name":"Tag1"},"link":null},{"localized_name":"Type1","name":"Type1","shape":7,"type":"STRING","widget":{"name":"Type1"},"link":null},{"localized_name":"Audio1","name":"Audio1","shape":7,"type":"STRING","widget":{"name":"Audio1"},"link":null},{"localized_name":"Tag2","name":"Tag2","shape":7,"type":"STRING","widget":{"name":"Tag2"},"link":null},{"localized_name":"Type2","name":"Type2","shape":7,"type":"STRING","widget":{"name":"Type2"},"link":null},{"localized_name":"Audio2","name":"Audio2","shape":7,"type":"STRING","widget":{"name":"Audio2"},"link":null},{"localized_name":"Tag3","name":"Tag3","shape":7,"type":"STRING","widget":{"name":"Tag3"},"link":null},{"localized_name":"Type3","name":"Type3","shape":7,"type":"STRING","widget":{"name":"Type3"},"link":null},{"localized_name":"Audio3","name":"Audio3","shape":7,"type":"STRING","widget":{"name":"Audio3"},"link":null},{"localized_name":"Tag4","name":"Tag4","shape":7,"type":"STRING","widget":{"name":"Tag4"},"link":null},{"localized_name":"Type4","name":"Type4","shape":7,"type":"STRING","widget":{"name":"Type4"},"link":null},{"localized_name":"Audio4","name":"Audio4","shape":7,"type":"STRING","widget":{"name":"Audio4"},"link":null},{"localized_name":"Tag5","name":"Tag5","shape":7,"type":"STRING","widget":{"name":"Tag5"},"link":null},{"localized_name":"Type5","name":"Type5","shape":7,"type":"STRING","widget":{"name":"Type5"},"link":null},{"localized_name":"Audio5","name":"Audio5","shape":7,"type":"STRING","widget":{"name":"Audio5"},"link":null},{"localized_name":"Tag6","name":"Tag6","shape":7,"type":"STRING","widget":{"name":"Tag6"},"link":null},{"localized_name":"Type6","name":"Type6","shape":7,"type":"STRING","widget":{"name":"Type6"},"link":null},{"localized_name":"Audio6","name":"Audio6","shape":7,"type":"STRING","widget":{"name":"Audio6"},"link":null},{"localized_name":"Tag7","name":"Tag7","shape":7,"type":"STRING","widget":{"name":"Tag7"},"link":null},{"localized_name":"Type7","name":"Type7","shape":7,"type":"STRING","widget":{"name":"Type7"},"link":null},{"localized_name":"Audio7","name":"Audio7","shape":7,"type":"STRING","widget":{"name":"Audio7"},"link":null},{"localized_name":"Tag8","name":"Tag8","shape":7,"type":"STRING","widget":{"name":"Tag8"},"link":null},{"localized_name":"Type8","name":"Type8","shape":7,"type":"STRING","widget":{"name":"Type8"},"link":null},{"localized_name":"Audio8","name":"Audio8","shape":7,"type":"STRING","widget":{"name":"Audio8"},"link":null},{"localized_name":"Tag9","name":"Tag9","shape":7,"type":"STRING","widget":{"name":"Tag9"},"link":null},{"localized_name":"Type9","name":"Type9","shape":7,"type":"STRING","widget":{"name":"Type9"},"link":null},{"localized_name":"Audio9","name":"Audio9","shape":7,"type":"STRING","widget":{"name":"Audio9"},"link":null},{"localized_name":"Tag10","name":"Tag10","shape":7,"type":"STRING","widget":{"name":"Tag10"},"link":null},{"localized_name":"Type10","name":"Type10","shape":7,"type":"STRING","widget":{"name":"Type10"},"link":null},{"localized_name":"Audio10","name":"Audio10","shape":7,"type":"STRING","widget":{"name":"Audio10"},"link":null}],"outputs":[{"localized_name":"Video Inputs Reference Images","name":"Video Inputs Reference Images","type":"RUNWAREVIDEOINPUTSREFERENCEIMAGES","links":[3]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"a5766fe47d9a5131ba2d715d9f1cee382ab530d9","Node name for S&R":"Runware Video Inference Inputs Reference Images"},"widgets_values":["@Actor-1","image","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"bgcolor":"#5345bf"},{"id":2,"type":"Runware Video Inference Inputs","pos":[-70.33493935337036,275.0356585629964],"size":[341.783203125,374],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"Image","name":"Image","shape":7,"type":"IMAGE","link":null},{"localized_name":"Frame Images","name":"Frame Images","shape":7,"type":"RUNWAREVIDEOINPUTSFRAMEIMAGES","link":null},{"localized_name":"Audio Inputs","name":"Audio Inputs","shape":7,"type":"RUNWAREAUDIOINPUT","link":null},{"localized_name":"Speech Inputs","name":"Speech Inputs","shape":7,"type":"RUNWARESPEECHINPUT","link":null},{"localized_name":"Mask","name":"Mask","shape":7,"type":"IMAGE","link":null},{"localized_name":"Frame","name":"Frame","shape":7,"type":"IMAGE","link":null},{"localized_name":"Background","name":"Background","shape":7,"type":"IMAGE","link":null},{"localized_name":"References Images","name":"References Images","shape":7,"type":"RUNWAREVIDEOINPUTSREFERENCEIMAGES","link":3},{"localized_name":"Reference Videos","name":"Reference Videos","shape":7,"type":"RUNWAREREFERENCEVIDEOS","link":null},{"localized_name":"Reference Voices","name":"Reference Voices","shape":7,"type":"RUNWAREREFERENCEVOICES","link":null},{"localized_name":"Elements","name":"Elements","shape":7,"type":"RUNWAREVIDEOINFERENCEELEMENTS","link":null},{"localized_name":"Reference Audios","name":"Reference Audios","shape":7,"type":"RUNWAREINPUTAUDIOS","link":null},{"localized_name":"Avatar","name":"Avatar","shape":7,"type":"STRING","widget":{"name":"Avatar"},"link":null},{"localized_name":"Audio","name":"Audio","shape":7,"type":"STRING","widget":{"name":"Audio"},"link":null},{"localized_name":"Video","name":"Video","shape":7,"type":"STRING","widget":{"name":"Video"},"link":null},{"localized_name":"draftId","name":"draftId","shape":7,"type":"STRING","widget":{"name":"draftId"},"link":null},{"localized_name":"videoId","name":"videoId","shape":7,"type":"STRING","widget":{"name":"videoId"},"link":null}],"outputs":[{"localized_name":"Video Inference Inputs","name":"Video Inference Inputs","type":"RUNWAREVIDEOINFERENCEINPUTS","links":[6]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"a5766fe47d9a5131ba2d715d9f1cee382ab530d9","Node name for S&R":"Runware Video Inference Inputs"},"widgets_values":["","","","",""],"bgcolor":"#5345bf"},{"id":8,"type":"Runware Video Model Search","pos":[55.69992696437102,-139.41031520513926],"size":[294.16015625,250],"flags":{},"order":0,"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":[4]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"a5766fe47d9a5131ba2d715d9f1cee382ab530d9","Node name for S&R":"Runware Video Model Search"},"widgets_values":["","SkyReels","skywork:skyreels@v4 (SkyReels V4)",false,"Disabled",0,0,false,"1080p"],"bgcolor":"#5345bf"},{"id":7,"type":"LoadImage","pos":[1379.6496220988333,230.04732723168806],"size":[282.798828125,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":[2]},{"localized_name":"MASK","name":"MASK","type":"MASK","links":null}],"properties":{"cnr_id":"comfy-core","ver":"0.19.3","Node name for S&R":"LoadImage"},"widgets_values":["1004_mo2v_0.jpg","image"]}],"links":[[2,7,0,6,0,"IMAGE"],[3,6,0,2,7,"RUNWAREVIDEOINPUTSREFERENCEIMAGES"],[4,8,0,1,0,"RUNWAREVIDEOMODEL"],[5,1,0,4,0,"VIDEO"],[6,2,0,1,7,"RUNWAREVIDEOINFERENCEINPUTS"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.6057126191083312,"offset":[346.7019018419323,324.71390043721306]}},"version":0.4} \ No newline at end of file