From 8a1ff27e43e4e73ea0793d17df2b70a1773f413b Mon Sep 17 00:00:00 2001 From: Sirshendu Ganguly Date: Wed, 12 Nov 2025 15:49:34 -0500 Subject: [PATCH 1/2] add support for midjourney provider settings --- __init__.py | 2 + clientlibs/main.js | 4 +- clientlibs/types.js | 5 + clientlibs/utils.js | 23 ++++ .../midjourneyProviderSettings.py | 120 ++++++++++++++++++ modules/utils/runwareUtils.py | 2 +- modules/videoUpscaler.py | 50 +++++--- 7 files changed, 185 insertions(+), 21 deletions(-) create mode 100644 modules/providerSettings/midjourneyProviderSettings.py diff --git a/__init__.py b/__init__.py index 192cec1..531b990 100644 --- a/__init__.py +++ b/__init__.py @@ -49,6 +49,7 @@ from .modules.providerSettings.minimaxProviderSettings import RunwareMiniMaxProv from .modules.providerSettings.klingProviderSettings import RunwareKlingProviderSettings from .modules.providerSettings.runwayProviderSettings import RunwareRunwayProviderSettings from .modules.providerSettings.lumaProviderSettings import RunwareLumaProviderSettings +from .modules.providerSettings.midjourneyProviderSettings import RunwareMidjourneyProviderSettings from .modules.vectorize import vectorize from .modules.videoBgRemoval import videoBgRemoval from .modules.videoUpscaler import videoUpscaler @@ -119,6 +120,7 @@ NODE_CLASS_MAPPINGS = { "Runware Luma Provider Settings": RunwareLumaProviderSettings, "Runware KlingAI Provider Settings": RunwareKlingProviderSettings, "Runware Runway Provider Settings": RunwareRunwayProviderSettings, + "Runware Midjourney Provider Settings": RunwareMidjourneyProviderSettings, "Runware Vectorize": vectorize, "Runware Video Background Removal": videoBgRemoval, "Runware Video Upscaler": videoUpscaler, diff --git a/clientlibs/main.js b/clientlibs/main.js index a7cfa05..1d68aef 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, audioInferenceToggleHandler, acceleratorOptionsToggleHandler, bytedanceProviderSettingsToggleHandler, openaiProviderSettingsToggleHandler, klingProviderSettingsToggleHandler, lumaProviderSettingsToggleHandler } from "./utils.js"; +import { promptEnhanceHandler, syncDimensionsNodeHandler, searchNodeHandler, APIKeyHandler, captionNodeHandler, mediaUUIDHandler, videoTranscriptionHandler, handleCustomErrors, videoInferenceDimensionsHandler, videoModelSearchFilterHandler, audioModelSearchFilterHandler, useParameterToggleHandler, imageInferenceToggleHandler, upscalerToggleHandler, videoUpscalerToggleHandler, audioInferenceToggleHandler, acceleratorOptionsToggleHandler, bytedanceProviderSettingsToggleHandler, openaiProviderSettingsToggleHandler, klingProviderSettingsToggleHandler, lumaProviderSettingsToggleHandler } from "./utils.js"; import { RUNWARE_NODE_TYPES, RUNWARE_NODE_PROPS, SEARCH_TERMS } from "./types.js"; const nodeInitList = []; @@ -51,6 +51,8 @@ app.registerExtension({ videoInferenceDimensionsHandler(node); } else if(nodeClass === RUNWARE_NODE_TYPES.UPSCALER) { upscalerToggleHandler(node); + } else if(nodeClass === RUNWARE_NODE_TYPES.VIDEOUPSCALER) { + videoUpscalerToggleHandler(node); } else if(nodeClass === RUNWARE_NODE_TYPES.AUDIOINFERENCE) { audioInferenceToggleHandler(node); } else if(nodeClass === RUNWARE_NODE_TYPES.ACCELERATOROPTIONS) { diff --git a/clientlibs/types.js b/clientlibs/types.js index ef7bc0d..1561993 100644 --- a/clientlibs/types.js +++ b/clientlibs/types.js @@ -98,6 +98,7 @@ const RUNWARE_NODE_TYPES = { KLINGPROVIDERSETTINGS: "Runware KlingAI Provider Settings", RUNWAYPROVIDERSETTINGS: "Runware Runway Provider Settings", LUMAPROVIDERSETTINGS: "Runware Luma Provider Settings", + MIDJOURNEYPROVIDERSETTINGS: "Runware Midjourney Provider Settings", VECTORIZE: "Runware Vectorize", VIDEOBGREMOVAL: "Runware Video Background Removal", VIDEOUPSCALER: "Runware Video Upscaler", @@ -314,6 +315,10 @@ const RUNWARE_NODE_PROPS = { bgColor: DEFAULT_BGCOLOR, colorModeOnly: true, }, + [RUNWARE_NODE_TYPES.MIDJOURNEYPROVIDERSETTINGS]: { + bgColor: DEFAULT_BGCOLOR, + colorModeOnly: true, + }, [RUNWARE_NODE_TYPES.VECTORIZE]: { bgColor: DEFAULT_BGCOLOR, }, diff --git a/clientlibs/utils.js b/clientlibs/utils.js index 93e34c4..771746e 100644 --- a/clientlibs/utils.js +++ b/clientlibs/utils.js @@ -657,6 +657,28 @@ function toggleWidgetEnabled(widget, enabled, node) { } } +function videoUpscalerToggleHandler(videoUpscalerNode) { + if (!videoUpscalerNode?.widgets) return; + + const useUpscaleFactorWidget = videoUpscalerNode.widgets.find(w => w && w.name === "useUpscaleFactor"); + const upscaleFactorWidget = videoUpscalerNode.widgets.find(w => w && w.name === "upscaleFactor"); + + if (!useUpscaleFactorWidget || !upscaleFactorWidget) return; + + function applyToggleState() { + const enabled = useUpscaleFactorWidget.value === true; + toggleWidgetEnabled(upscaleFactorWidget, enabled, videoUpscalerNode); + videoUpscalerNode.setDirtyCanvas(true); + } + + // Initialize state once widgets are rendered + setTimeout(applyToggleState, 100); + + appendWidgetCB(useUpscaleFactorWidget, () => { + setTimeout(applyToggleState, 50); + }); +} + function useParameterToggleHandler(node) { // Prevent double registration if (node._useParameterToggleHandlerRegistered) return; @@ -1947,6 +1969,7 @@ export { useParameterToggleHandler, imageInferenceToggleHandler, upscalerToggleHandler, + videoUpscalerToggleHandler, audioInferenceToggleHandler, acceleratorOptionsToggleHandler, bytedanceProviderSettingsToggleHandler, diff --git a/modules/providerSettings/midjourneyProviderSettings.py b/modules/providerSettings/midjourneyProviderSettings.py new file mode 100644 index 0000000..1aefb68 --- /dev/null +++ b/modules/providerSettings/midjourneyProviderSettings.py @@ -0,0 +1,120 @@ +""" +Runware Midjourney Provider Settings Node +Provides Midjourney-specific settings for image generation workflows. +""" + +from typing import Any, Dict, Optional, Tuple + + +class RunwareMidjourneyProviderSettings: + """Runware Midjourney Provider Settings Node""" + + QUALITY_STEP = 0.25 + QUALITY_MIN = 0.25 + QUALITY_MAX = 2.0 + DEFAULT_QUALITY = 1.0 + + DEFAULT_STYLIZE = 0 + STYLIZE_MIN = 0 + STYLIZE_MAX = 1000 + + DEFAULT_CHAOS = 0 + CHAOS_MIN = 0 + CHAOS_MAX = 100 + + DEFAULT_WEIRD = 0 + WEIRD_MIN = 0 + WEIRD_MAX = 3000 + + NIJI_OPTIONS = [ + "", # Allow provider default when omitted + "close", + "0", + "5", + "6", + ] + + @classmethod + def INPUT_TYPES(cls): + return { + "required": {}, + "optional": { + "quality": ("FLOAT", { + "tooltip": "Midjourney quality multiplier (provider key: providerSettings.midjourney.quality).", + "default": cls.DEFAULT_QUALITY, + "min": cls.QUALITY_MIN, + "max": cls.QUALITY_MAX, + "step": cls.QUALITY_STEP, + }), + "stylize": ("INT", { + "tooltip": "Controls how strongly Midjourney's artistic style is applied (provider key: providerSettings.midjourney.stylize).", + "default": cls.DEFAULT_STYLIZE, + "min": cls.STYLIZE_MIN, + "max": cls.STYLIZE_MAX, + }), + "chaos": ("INT", { + "tooltip": "Controls variation and unpredictability (provider key: providerSettings.midjourney.chaos).", + "default": cls.DEFAULT_CHAOS, + "min": cls.CHAOS_MIN, + "max": cls.CHAOS_MAX, + }), + "weird": ("INT", { + "tooltip": "Adds surreal, experimental characteristics (provider key: providerSettings.midjourney.weird).", + "default": cls.DEFAULT_WEIRD, + "min": cls.WEIRD_MIN, + "max": cls.WEIRD_MAX, + }), + "niji": (cls.NIJI_OPTIONS, { + "tooltip": "Select the Midjourney anime-focused rendering engine (provider key: providerSettings.midjourney.niji).", + "default": "close", + }), + } + } + + RETURN_TYPES = ("RUNWAREPROVIDERSETTINGS",) + RETURN_NAMES = ("Provider Settings",) + FUNCTION = "create_provider_settings" + CATEGORY = "Runware/Provider Settings" + DESCRIPTION = "Configure Midjourney-specific provider settings such as quality, stylize, chaos, weird, and niji options for image generation." + + def create_provider_settings(self, **kwargs) -> Tuple[Optional[Dict[str, Any]],]: + """Build Midjourney provider settings payload.""" + + quality = kwargs.get("quality", self.DEFAULT_QUALITY) + stylize = kwargs.get("stylize", self.DEFAULT_STYLIZE) + chaos = kwargs.get("chaos", self.DEFAULT_CHAOS) + weird = kwargs.get("weird", self.DEFAULT_WEIRD) + niji = kwargs.get("niji", "close") + + settings: Dict[str, Any] = {} + + if quality is not None: + settings["quality"] = float(quality) + + if stylize is not None: + settings["stylize"] = int(stylize) + + if chaos is not None: + settings["chaos"] = int(chaos) + + if weird is not None: + settings["weird"] = int(weird) + + if isinstance(niji, str) and niji.strip(): + settings["niji"] = niji.strip() + + # Clean None values so the inference request only includes populated options. + settings = {k: v for k, v in settings.items() if v is not None} + + return (settings if settings else None,) + + +NODE_CLASS_MAPPINGS = { + "RunwareMidjourneyProviderSettings": RunwareMidjourneyProviderSettings, +} + + +NODE_DISPLAY_NAME_MAPPINGS = { + "RunwareMidjourneyProviderSettings": "Runware Midjourney Provider Settings", +} + diff --git a/modules/utils/runwareUtils.py b/modules/utils/runwareUtils.py index 8c2a4d5..76b392b 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/videoUpscaler.py b/modules/videoUpscaler.py index c3acf17..4380801 100644 --- a/modules/videoUpscaler.py +++ b/modules/videoUpscaler.py @@ -14,16 +14,22 @@ class videoUpscaler: "Video": ("STRING", { "tooltip": "MediaUUID from Runware Media Upload node for the video to upscale." }), - "upscaleFactor": ([2, 4], { - "tooltip": "Integer scale factor for upscaling (2x or 4x).", - "default": 2, - }), "Model": (list(cls.RUNWARE_VUPSCALER_MODELS.keys()), { "tooltip": "Select the video upscaler model to use.", "default": "Bria Video Upscaler", }), + "useUpscaleFactor": ("BOOLEAN", { + "label_on": "Yes", + "label_off": "No", + "tooltip": "Enable to explicitly set the upscale factor for the request.", + "default": False, + }), }, "optional": { + "upscaleFactor": ([2, 4], { + "tooltip": "Integer scale factor for upscaling (2x or 4x).", + "default": 2, + }), "Output Format": (["mp4", "webm"], { "default": "mp4", "tooltip": "Choose the output video format.", @@ -39,7 +45,8 @@ class videoUpscaler: def upscale(self, **kwargs): video_uuid = kwargs.get("Video") - upscaleFactor = kwargs.get("upscaleFactor", 2) + useUpscaleFactor = kwargs.get("useUpscaleFactor", False) + upscaleFactor = kwargs.get("upscaleFactor") modelName = kwargs.get("Model", "Bria Video Upscaler") outputFormat = kwargs.get("Output Format", "mp4") @@ -51,20 +58,25 @@ class videoUpscaler: modelAIR = self.RUNWARE_VUPSCALER_MODELS.get(modelName, "bria:50@1") # Build the API request - genConfig = [ - { - "taskType": "upscale", - "taskUUID": rwUtils.genRandUUID(), - "upscaleFactor": upscaleFactor, - "inputs": { - "video": video_uuid - }, - "outputType": "URL", - "outputFormat": outputFormat.upper(), - "model": modelAIR, - "includeCost": True - } - ] + task_payload = { + "taskType": "upscale", + "taskUUID": rwUtils.genRandUUID(), + "inputs": { + "video": video_uuid + }, + "outputType": "URL", + "outputFormat": outputFormat.upper(), + "model": modelAIR, + "includeCost": True + } + + if useUpscaleFactor: + if upscaleFactor in (2, 4): + task_payload["upscaleFactor"] = upscaleFactor + else: + raise ValueError("upscaleFactor must be 2 or 4 when useUpscaleFactor is enabled.") + + genConfig = [task_payload] try: # Debug: Print the request being sent From 8c4cbd5ee6fc998680ff84e72f34d5f2ee1d13bf Mon Sep 17 00:00:00 2001 From: Sirshendu Ganguly Date: Fri, 14 Nov 2025 18:30:10 -0500 Subject: [PATCH 2/2] feat: Add Bria Image Replace Background provider settings - Added new Bria provider settings for Background Replace feature (bria:11@1) - Implemented 5 new parameters: mode, enhanceReferenceImages, refinePrompt, originalQuality, forceBackgroundDetection - Added useParams for all 12 Bria parameters to control parameter inclusion - Implemented UI enable/disable toggle handler for better UX - Updated clientlibs to handle Bria provider settings in UI - Added workflow examples and model search updates --- clientlibs/main.js | 4 +- clientlibs/utils.js | 132 ++++++++++++++ .../briaImageProviderSettings.py | 165 +++++++++++++++--- modules/utils/runwareUtils.py | 2 +- modules/videoModelSearch.py | 11 +- ..._Basic_Image_Inference_Midjourney_I2V.json | 1 + workflows/Runware_Video_Inference_Luma.json | 2 +- 7 files changed, 282 insertions(+), 35 deletions(-) create mode 100644 workflows/Runware_Basic_Image_Inference_Midjourney_I2V.json diff --git a/clientlibs/main.js b/clientlibs/main.js index 1d68aef..d8e6aaa 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, klingProviderSettingsToggleHandler, lumaProviderSettingsToggleHandler } from "./utils.js"; +import { promptEnhanceHandler, syncDimensionsNodeHandler, searchNodeHandler, APIKeyHandler, captionNodeHandler, mediaUUIDHandler, videoTranscriptionHandler, handleCustomErrors, videoInferenceDimensionsHandler, videoModelSearchFilterHandler, audioModelSearchFilterHandler, useParameterToggleHandler, imageInferenceToggleHandler, upscalerToggleHandler, videoUpscalerToggleHandler, audioInferenceToggleHandler, acceleratorOptionsToggleHandler, bytedanceProviderSettingsToggleHandler, openaiProviderSettingsToggleHandler, klingProviderSettingsToggleHandler, lumaProviderSettingsToggleHandler, briaProviderSettingsToggleHandler } from "./utils.js"; import { RUNWARE_NODE_TYPES, RUNWARE_NODE_PROPS, SEARCH_TERMS } from "./types.js"; const nodeInitList = []; @@ -65,6 +65,8 @@ app.registerExtension({ klingProviderSettingsToggleHandler(node); } else if(nodeClass === RUNWARE_NODE_TYPES.LUMAPROVIDERSETTINGS) { lumaProviderSettingsToggleHandler(node); + } else if(nodeClass === RUNWARE_NODE_TYPES.BRIAPROVIDERSETTINGS) { + briaProviderSettingsToggleHandler(node); } if(crNodeProps.colorModeOnly === true) return; diff --git a/clientlibs/utils.js b/clientlibs/utils.js index 771746e..f056eaf 100644 --- a/clientlibs/utils.js +++ b/clientlibs/utils.js @@ -1953,6 +1953,137 @@ function lumaProviderSettingsToggleHandler(lumaNode) { } } +function briaProviderSettingsToggleHandler(briaNode) { + // Find all "use" parameter widgets for Bria Provider Settings + const useMediumWidget = briaNode.widgets.find(w => w.name === "useMedium"); + const mediumWidget = briaNode.widgets.find(w => w.name === "medium"); + const usePromptEnhancementWidget = briaNode.widgets.find(w => w.name === "usePromptEnhancement"); + const promptEnhancementWidget = briaNode.widgets.find(w => w.name === "promptEnhancement"); + const useEnhanceImageWidget = briaNode.widgets.find(w => w.name === "useEnhanceImage"); + const enhanceImageWidget = briaNode.widgets.find(w => w.name === "enhanceImage"); + const usePromptContentModerationWidget = briaNode.widgets.find(w => w.name === "usePromptContentModeration"); + const promptContentModerationWidget = briaNode.widgets.find(w => w.name === "promptContentModeration"); + const useContentModerationWidget = briaNode.widgets.find(w => w.name === "useContentModeration"); + const contentModerationWidget = briaNode.widgets.find(w => w.name === "contentModeration"); + const useIpSignalWidget = briaNode.widgets.find(w => w.name === "useIpSignal"); + const ipSignalWidget = briaNode.widgets.find(w => w.name === "ipSignal"); + const usePreserveAlphaWidget = briaNode.widgets.find(w => w.name === "usePreserveAlpha"); + const preserveAlphaWidget = briaNode.widgets.find(w => w.name === "preserveAlpha"); + const useModeWidget = briaNode.widgets.find(w => w.name === "useMode"); + const modeWidget = briaNode.widgets.find(w => w.name === "mode"); + const useEnhanceReferenceImagesWidget = briaNode.widgets.find(w => w.name === "useEnhanceReferenceImages"); + const enhanceReferenceImagesWidget = briaNode.widgets.find(w => w.name === "enhanceReferenceImages"); + const useRefinePromptWidget = briaNode.widgets.find(w => w.name === "useRefinePrompt"); + const refinePromptWidget = briaNode.widgets.find(w => w.name === "refinePrompt"); + const useOriginalQualityWidget = briaNode.widgets.find(w => w.name === "useOriginalQuality"); + const originalQualityWidget = briaNode.widgets.find(w => w.name === "originalQuality"); + const useForceBackgroundDetectionWidget = briaNode.widgets.find(w => w.name === "useForceBackgroundDetection"); + const forceBackgroundDetectionWidget = briaNode.widgets.find(w => w.name === "forceBackgroundDetection"); + + // Helper function to toggle widget enabled state (exact same pattern) + function toggleWidgetState(useWidget, paramWidget, paramName) { + if (!useWidget || !paramWidget) return; + + function toggleEnabled() { + const enabled = useWidget.value === true; + + // Disable/enable widgets using inputEl if available (exact same pattern) + 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; + } + + // Handle dropdown widgets (for medium and mode) + 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"; + } + + // Also set widget property + paramWidget.disabled = !enabled; + + // Fallback: try to find inputs via DOM if inputEl is not available + if (!paramWidget.inputEl) { + const nodeElement = briaNode.htmlElements?.widgetsContainer || briaNode.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"; + } + } + } + } + + briaNode.setDirtyCanvas(true); + } + + // Set up callback (exact same pattern) + appendWidgetCB(useWidget, () => { + setTimeout(toggleEnabled, 50); + }); + + // Initial call to set initial state + setTimeout(toggleEnabled, 100); + } + + // Set up all toggle handlers + if (useMediumWidget && mediumWidget) { + toggleWidgetState(useMediumWidget, mediumWidget, "medium"); + } + + if (usePromptEnhancementWidget && promptEnhancementWidget) { + toggleWidgetState(usePromptEnhancementWidget, promptEnhancementWidget, "promptEnhancement"); + } + + if (useEnhanceImageWidget && enhanceImageWidget) { + toggleWidgetState(useEnhanceImageWidget, enhanceImageWidget, "enhanceImage"); + } + + if (usePromptContentModerationWidget && promptContentModerationWidget) { + toggleWidgetState(usePromptContentModerationWidget, promptContentModerationWidget, "promptContentModeration"); + } + + if (useContentModerationWidget && contentModerationWidget) { + toggleWidgetState(useContentModerationWidget, contentModerationWidget, "contentModeration"); + } + + if (useIpSignalWidget && ipSignalWidget) { + toggleWidgetState(useIpSignalWidget, ipSignalWidget, "ipSignal"); + } + + if (usePreserveAlphaWidget && preserveAlphaWidget) { + toggleWidgetState(usePreserveAlphaWidget, preserveAlphaWidget, "preserveAlpha"); + } + + if (useModeWidget && modeWidget) { + toggleWidgetState(useModeWidget, modeWidget, "mode"); + } + + if (useEnhanceReferenceImagesWidget && enhanceReferenceImagesWidget) { + toggleWidgetState(useEnhanceReferenceImagesWidget, enhanceReferenceImagesWidget, "enhanceReferenceImages"); + } + + if (useRefinePromptWidget && refinePromptWidget) { + toggleWidgetState(useRefinePromptWidget, refinePromptWidget, "refinePrompt"); + } + + if (useOriginalQualityWidget && originalQualityWidget) { + toggleWidgetState(useOriginalQualityWidget, originalQualityWidget, "originalQuality"); + } + + if (useForceBackgroundDetectionWidget && forceBackgroundDetectionWidget) { + toggleWidgetState(useForceBackgroundDetectionWidget, forceBackgroundDetectionWidget, "forceBackgroundDetection"); + } +} + export { notifyUser, promptEnhanceHandler, @@ -1976,4 +2107,5 @@ export { openaiProviderSettingsToggleHandler, klingProviderSettingsToggleHandler, lumaProviderSettingsToggleHandler, + briaProviderSettingsToggleHandler, }; \ No newline at end of file diff --git a/modules/providerSettings/briaImageProviderSettings.py b/modules/providerSettings/briaImageProviderSettings.py index 9307f54..8728ca3 100644 --- a/modules/providerSettings/briaImageProviderSettings.py +++ b/modules/providerSettings/briaImageProviderSettings.py @@ -14,43 +14,119 @@ class RunwareBriaProviderSettings: return { "required": {}, "optional": { + "useMedium": ("BOOLEAN", { + "tooltip": "Enable to include medium parameter in API request. Disable if not needed.", + "default": False, + }), "medium": (["None", "photography", "art"], { - "tooltip": "Select the medium type for image generation", + "tooltip": "Select the medium type for image generation. Only used when 'Use Medium' is enabled.", "default": "photography", }), + "usePromptEnhancement": ("BOOLEAN", { + "tooltip": "Enable to include promptEnhancement parameter in API request.", + "default": False, + }), "promptEnhancement": ("BOOLEAN", { - "tooltip": "When set to true, enhances the provided prompt by generating additional, more descriptive variations, resulting in more diverse and creative output images. Note that turning this flag on may result in a few additional seconds to the inference time.", + "tooltip": "When set to true, enhances the provided prompt by generating additional, more descriptive variations, resulting in more diverse and creative output images. Note that turning this flag on may result in a few additional seconds to the inference time. Only used when 'Use Prompt Enhancement' is enabled.", "default": False, "label_on": "Enabled", "label_off": "Disabled", }), + "useEnhanceImage": ("BOOLEAN", { + "tooltip": "Enable to include enhanceImage parameter in API request.", + "default": False, + }), "enhanceImage": ("BOOLEAN", { - "tooltip": "When set to true, generates images with richer details, sharper textures, and enhanced clarity. Slightly increases generation time per image.", + "tooltip": "When set to true, generates images with richer details, sharper textures, and enhanced clarity. Slightly increases generation time per image. Only used when 'Use Enhance Image' is enabled.", "default": False, "label_on": "Enabled", "label_off": "Disabled", }), + "usePromptContentModeration": ("BOOLEAN", { + "tooltip": "Enable to include promptContentModeration parameter in API request.", + "default": False, + }), "promptContentModeration": ("BOOLEAN", { - "tooltip": "When enabled (default: true), the input prompt is scanned for NSFW or ethically restricted terms before image generation. If the prompt violates Bria's ethical guidelines, the request will be rejected with a 408 error.", + "tooltip": "When enabled (default: true), the input prompt is scanned for NSFW or ethically restricted terms before image generation. If the prompt violates Bria's ethical guidelines, the request will be rejected with a 408 error. Only used when 'Use Prompt Content Moderation' is enabled.", "default": True, "label_on": "Enabled", "label_off": "Disabled", }), + "useContentModeration": ("BOOLEAN", { + "tooltip": "Enable to include contentModeration parameter in API request.", + "default": False, + }), "contentModeration": ("BOOLEAN", { - "tooltip": "When enabled, applies content moderation to both input visuals and generated outputs.", + "tooltip": "When enabled, applies content moderation to both input visuals and generated outputs. Only used when 'Use Content Moderation' is enabled.", "default": True, "label_on": "Enabled", "label_off": "Disabled", }), + "useIpSignal": ("BOOLEAN", { + "tooltip": "Enable to include ipSignal parameter in API request.", + "default": False, + }), "ipSignal": ("BOOLEAN", { - "tooltip": "Flags prompts with potential IP content. If detected, a warning will be included in the response.", + "tooltip": "Flags prompts with potential IP content. If detected, a warning will be included in the response. Only used when 'Use IP Signal' is enabled.", "default": False, "label_on": "Enabled", "label_off": "Disabled", }), + "usePreserveAlpha": ("BOOLEAN", { + "tooltip": "Enable to include preserveAlpha parameter in API request.", + "default": False, + }), "preserveAlpha": ("BOOLEAN", { - "tooltip": "Preserve alpha channel in the image.", - "default": None, + "tooltip": "Preserve alpha channel in the image. Only used when 'Use Preserve Alpha' is enabled.", + "default": False, + "label_on": "Enabled", + "label_off": "Disabled", + }), + "useMode": ("BOOLEAN", { + "tooltip": "Enable to include mode parameter in API request for Background Replace.", + "default": False, + }), + "mode": (["None", "base", "high_control", "fast"], { + "tooltip": "Selects the background-generation mode for Background Replace. Base: clean, high quality backgrounds. High_control: stronger prompt adherence and scene context, finer control over layout and details. Fast: same core capabilities as base, optimal speed and quality balance. Only used when 'Use Mode' is enabled.", + "default": "base", + }), + "useEnhanceReferenceImages": ("BOOLEAN", { + "tooltip": "Enable to include enhanceReferenceImages parameter in API request.", + "default": False, + }), + "enhanceReferenceImages": ("BOOLEAN", { + "tooltip": "When set to true, additional logic processes the included reference image to make adjustments for optimal results. Only used when 'Use Enhance Reference Images' is enabled.", + "default": True, + "label_on": "Enabled", + "label_off": "Disabled", + }), + "useRefinePrompt": ("BOOLEAN", { + "tooltip": "Enable to include refinePrompt parameter in API request.", + "default": False, + }), + "refinePrompt": ("BOOLEAN", { + "tooltip": "When true, an additional logic takes the prompt that was included and adjusts it to achieve optimal results. Only used when 'Use Refine Prompt' is enabled.", + "default": True, + "label_on": "Enabled", + "label_off": "Disabled", + }), + "useOriginalQuality": ("BOOLEAN", { + "tooltip": "Enable to include originalQuality parameter in API request.", + "default": False, + }), + "originalQuality": ("BOOLEAN", { + "tooltip": "When true, the output image retains the original input image's size; otherwise, the image is scaled to 1 megapixel (1MP) while preserving its aspect ratio. Only used when 'Use Original Quality' is enabled.", + "default": True, + "label_on": "Enabled", + "label_off": "Disabled", + }), + "useForceBackgroundDetection": ("BOOLEAN", { + "tooltip": "Enable to include forceBackgroundDetection parameter in API request.", + "default": False, + }), + "forceBackgroundDetection": ("BOOLEAN", { + "tooltip": "When true, forces background detection and removal, even if the original image already contains an alpha channel. Useful for refining existing foreground/background separation or ignoring unnecessary alpha channels. Only used when 'Use Force Background Detection' is enabled.", + "default": False, "label_on": "Enabled", "label_off": "Disabled", }), @@ -61,51 +137,90 @@ class RunwareBriaProviderSettings: RETURN_NAMES = ("providerSettings",) FUNCTION = "create_provider_settings" CATEGORY = "Runware/Provider Settings" - DESCRIPTION = "Configure Bria-specific provider settings for image generation including medium type, prompt enhancement, image enhancement, and content moderation options." + DESCRIPTION = "Configure Bria-specific provider settings for image generation and background replacement including medium type, prompt enhancement, image enhancement, content moderation options, and background replace mode settings." def create_provider_settings(self, **kwargs) -> tuple[Dict[str, Any]]: """Create Bria provider settings""" - # Get parameters + # Get use parameters + useMedium = kwargs.get("useMedium", False) + usePromptEnhancement = kwargs.get("usePromptEnhancement", False) + useEnhanceImage = kwargs.get("useEnhanceImage", False) + usePromptContentModeration = kwargs.get("usePromptContentModeration", False) + useContentModeration = kwargs.get("useContentModeration", False) + useIpSignal = kwargs.get("useIpSignal", False) + usePreserveAlpha = kwargs.get("usePreserveAlpha", False) + useMode = kwargs.get("useMode", False) + useEnhanceReferenceImages = kwargs.get("useEnhanceReferenceImages", False) + useRefinePrompt = kwargs.get("useRefinePrompt", False) + useOriginalQuality = kwargs.get("useOriginalQuality", False) + useForceBackgroundDetection = kwargs.get("useForceBackgroundDetection", False) + + # Get actual parameters medium = kwargs.get("medium", "photography") promptEnhancement = kwargs.get("promptEnhancement", False) enhanceImage = kwargs.get("enhanceImage", False) promptContentModeration = kwargs.get("promptContentModeration", True) contentModeration = kwargs.get("contentModeration", True) ipSignal = kwargs.get("ipSignal", False) - preserveAlpha = kwargs.get("preserveAlpha", None) + preserveAlpha = kwargs.get("preserveAlpha", False) + mode = kwargs.get("mode", "base") + enhanceReferenceImages = kwargs.get("enhanceReferenceImages", True) + refinePrompt = kwargs.get("refinePrompt", True) + originalQuality = kwargs.get("originalQuality", True) + forceBackgroundDetection = kwargs.get("forceBackgroundDetection", False) # Build settings dictionary settings = {} - # Add medium - if medium is not None and medium != "None": + # Add medium only if useMedium is enabled + if useMedium and medium is not None and medium != "None": settings["medium"] = medium - # Add promptEnhancement - if promptEnhancement is not None: + # Add promptEnhancement only if usePromptEnhancement is enabled + if usePromptEnhancement: settings["promptEnhancement"] = promptEnhancement - # Add enhanceImage - if enhanceImage is not None: + # Add enhanceImage only if useEnhanceImage is enabled + if useEnhanceImage: settings["enhanceImage"] = enhanceImage - # Add promptContentModeration - if promptContentModeration is not None: + # Add promptContentModeration only if usePromptContentModeration is enabled + if usePromptContentModeration: settings["promptContentModeration"] = promptContentModeration - # Add contentModeration - if contentModeration is not None: + # Add contentModeration only if useContentModeration is enabled + if useContentModeration: settings["contentModeration"] = contentModeration - # Add ipSignal - if ipSignal is not None: + # Add ipSignal only if useIpSignal is enabled + if useIpSignal: settings["ipSignal"] = ipSignal - # Add preserveAlpha - if preserveAlpha is not None: + # Add preserveAlpha only if usePreserveAlpha is enabled + if usePreserveAlpha: settings["preserveAlpha"] = preserveAlpha + # Add mode only if useMode is enabled (for Background Replace) + if useMode and mode is not None and mode != "None": + settings["mode"] = mode + + # Add enhanceReferenceImages only if useEnhanceReferenceImages is enabled + if useEnhanceReferenceImages: + settings["enhanceReferenceImages"] = enhanceReferenceImages + + # Add refinePrompt only if useRefinePrompt is enabled + if useRefinePrompt: + settings["refinePrompt"] = refinePrompt + + # Add originalQuality only if useOriginalQuality is enabled + if useOriginalQuality: + settings["originalQuality"] = originalQuality + + # Add forceBackgroundDetection only if useForceBackgroundDetection is enabled + if useForceBackgroundDetection: + settings["forceBackgroundDetection"] = forceBackgroundDetection + # Clean up None values settings = {k: v for k, v in settings.items() if v is not None} diff --git a/modules/utils/runwareUtils.py b/modules/utils/runwareUtils.py index 76b392b..8c2a4d5 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.dev/v1" + return "https://api.runware.ai/v1" SESSION_TIMEOUT = getTimeout() RUNWARE_API_KEY = getAPIKey() diff --git a/modules/videoModelSearch.py b/modules/videoModelSearch.py index 393442b..cb53edf 100644 --- a/modules/videoModelSearch.py +++ b/modules/videoModelSearch.py @@ -252,15 +252,12 @@ class videoModelSearch: dimensions = self.MODEL_DIMENSIONS.get(modelAirCode, self.DEFAULT_DIMENSIONS) if useResolution: - width = customWidth if customWidth > 0 else dimensions["width"] - height = customHeight if customHeight > 0 else dimensions["height"] + width = dimensions["width"] + height = dimensions["height"] - if width == 0 and height == 0: - width = None - height = None else: - width = 0 - height = 0 + width = None + height = None return ({ "model": modelAirCode, diff --git a/workflows/Runware_Basic_Image_Inference_Midjourney_I2V.json b/workflows/Runware_Basic_Image_Inference_Midjourney_I2V.json new file mode 100644 index 0000000..dc593d8 --- /dev/null +++ b/workflows/Runware_Basic_Image_Inference_Midjourney_I2V.json @@ -0,0 +1 @@ +{"id":"0685c977-b8ed-4ce4-8b4c-d8463ed12b69","revision":0,"last_node_id":87,"last_link_id":65,"nodes":[{"id":76,"type":"PreviewImage","pos":[898.580322265625,-254.4684295654297],"size":[442.2727355957031,469.6363525390625],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":64}],"outputs":[],"properties":{"cnr_id":"comfy-core","ver":"0.3.46","Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":80,"type":"Runware Model Search","pos":[10.674552917480469,-324.2225646972656],"size":[270,154],"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":"ModelType","name":"ModelType","type":"COMBO","widget":{"name":"ModelType"},"link":null},{"localized_name":"ModelList","name":"ModelList","type":"COMBO","widget":{"name":"ModelList"},"link":null},{"localized_name":"Use Search Value","name":"Use Search Value","type":"BOOLEAN","widget":{"name":"Use Search Value"},"link":null}],"outputs":[{"localized_name":"Runware Model","name":"Runware Model","type":"RUNWAREMODEL","links":[63]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"de0a4c2e258a1f3a104d0f9994f9b7ea66e56736","Node name for S&R":"Runware Model Search"},"widgets_values":["midjourney:1@1","All","Base Model","midjourney:1@1 (Midjourney V6 6.0)",true],"bgcolor":"#5345bf"},{"id":86,"type":"Runware Image Inference","pos":[417.0735168457031,-344.9656066894531],"size":[400,930],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"Model","name":"Model","type":"RUNWAREMODEL","link":63},{"localized_name":"Accelerator","name":"Accelerator","shape":7,"type":"RUNWAREACCELERATOR","link":null},{"localized_name":"Lora","name":"Lora","shape":7,"type":"RUNWARELORA","link":null},{"localized_name":"Outpainting","name":"Outpainting","shape":7,"type":"RUNWAREOUTPAINT","link":null},{"localized_name":"IPAdapters","name":"IPAdapters","shape":7,"type":"RUNWAREIPAdapter","link":null},{"localized_name":"ControlNet","name":"ControlNet","shape":7,"type":"RUNWARECONTROLNET","link":null},{"localized_name":"Refiner","name":"Refiner","shape":7,"type":"RUNWAREREFINER","link":null},{"localized_name":"seedImage","name":"seedImage","shape":7,"type":"IMAGE","link":null},{"localized_name":"maskImage","name":"maskImage","shape":7,"type":"MASK","link":null},{"localized_name":"Embeddings","name":"Embeddings","shape":7,"type":"RUNWAREEMBEDDING","link":null},{"localized_name":"VAE","name":"VAE","shape":7,"type":"RUNWAREVAE","link":null},{"localized_name":"referenceImages","name":"referenceImages","shape":7,"type":"RUNWAREREFERENCEIMAGES","link":null},{"localized_name":"inputs","name":"inputs","shape":7,"type":"RUNWAREIMAGEINFERENCEINPUTS","link":null},{"localized_name":"providerSettings","name":"providerSettings","shape":7,"type":"RUNWAREPROVIDERSETTINGS","link":65},{"localized_name":"positivePrompt","name":"positivePrompt","type":"STRING","widget":{"name":"positivePrompt"},"link":null},{"localized_name":"negativePrompt","name":"negativePrompt","type":"STRING","widget":{"name":"negativePrompt"},"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":"dimensions","name":"dimensions","type":"COMBO","widget":{"name":"dimensions"},"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":"useSteps","name":"useSteps","type":"BOOLEAN","widget":{"name":"useSteps"},"link":null},{"localized_name":"steps","name":"steps","type":"INT","widget":{"name":"steps"},"link":null},{"localized_name":"useScheduler","name":"useScheduler","type":"BOOLEAN","widget":{"name":"useScheduler"},"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":"useSeed","name":"useSeed","type":"BOOLEAN","widget":{"name":"useSeed"},"link":null},{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"link":null},{"localized_name":"useClipSkip","name":"useClipSkip","type":"BOOLEAN","widget":{"name":"useClipSkip"},"link":null},{"localized_name":"clipSkip","name":"clipSkip","type":"INT","widget":{"name":"clipSkip"},"link":null},{"localized_name":"strength","name":"strength","type":"FLOAT","widget":{"name":"strength"},"link":null},{"localized_name":"Mask Margin","name":"Mask Margin","type":"BOOLEAN","widget":{"name":"Mask Margin"},"link":null},{"localized_name":"maskMargin","name":"maskMargin","type":"INT","widget":{"name":"maskMargin"},"link":null},{"localized_name":"outputFormat","name":"outputFormat","type":"COMBO","widget":{"name":"outputFormat"},"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}],"outputs":[{"localized_name":"IMAGE","name":"IMAGE","type":"IMAGE","links":[64]},{"localized_name":"RW-Task","name":"RW-Task","type":"RUNWARETASK","links":null}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"b75f0803ad2a5b5624f97d4025927744329e0c31","Node name for S&R":"Runware Image Inference"},"widgets_values":["Cinematic action frame capturing the climax of a wizard duel. Two mages, one cloaked in shadow wielding green necrotic energy, the other in white robes wielding golden divine light, clash their spells in the center of a crumbling cathedral interior. Sparks, debris, and magical particles explode outwards. Dynamic Dutch angle, motion blur, high fantasy art, style of Magic the Gathering illustration","",false,"Disabled","Custom",1680,720,false,4,false,"Default",false,6.5,true,2947187131,"randomize",false,0,0.8,false,32,"WEBP",4,"none"],"bgcolor":"#5345bf"},{"id":87,"type":"Runware Midjourney Provider Settings","pos":[11.46731185913086,-51.5975456237793],"size":[338.7886657714844,154],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"quality","name":"quality","shape":7,"type":"FLOAT","widget":{"name":"quality"},"link":null},{"localized_name":"stylize","name":"stylize","shape":7,"type":"INT","widget":{"name":"stylize"},"link":null},{"localized_name":"chaos","name":"chaos","shape":7,"type":"INT","widget":{"name":"chaos"},"link":null},{"localized_name":"weird","name":"weird","shape":7,"type":"INT","widget":{"name":"weird"},"link":null},{"localized_name":"niji","name":"niji","shape":7,"type":"COMBO","widget":{"name":"niji"},"link":null}],"outputs":[{"localized_name":"Provider Settings","name":"Provider Settings","type":"RUNWAREPROVIDERSETTINGS","links":[65]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"8a1ff27e43e4e73ea0793d17df2b70a1773f413b","Node name for S&R":"Runware Midjourney Provider Settings"},"widgets_values":[1,50,0,15,"5"],"bgcolor":"#5345bf"}],"links":[[63,80,0,86,0,"RUNWAREMODEL"],[64,86,0,76,0,"IMAGE"],[65,87,0,86,13,"RUNWAREPROVIDERSETTINGS"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.6056173280796183,"offset":[571.8540981784273,415.8240987330342]}},"version":0.4} \ No newline at end of file diff --git a/workflows/Runware_Video_Inference_Luma.json b/workflows/Runware_Video_Inference_Luma.json index 68e8f4f..ad718c7 100644 --- a/workflows/Runware_Video_Inference_Luma.json +++ b/workflows/Runware_Video_Inference_Luma.json @@ -1 +1 @@ -{"id":"a3fa6131-3e00-4fb3-8cbe-3450bbcb0559","revision":0,"last_node_id":19,"last_link_id":16,"nodes":[{"id":10,"type":"SaveVideo","pos":[987.3607177734375,-435.8999328613281],"size":[270,456.26922607421875],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"video","name":"video","type":"VIDEO","link":7},{"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 Video Inference Inputs","pos":[142.3061065673828,-159.09922790527344],"size":[299.6597595214844,162],"flags":{},"order":5,"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":14},{"localized_name":"Mask","name":"Mask","shape":7,"type":"IMAGE","link":null},{"localized_name":"Frame","name":"Frame","shape":7,"type":"IMAGE","link":null},{"localized_name":"References","name":"References","shape":7,"type":"RUNWAREVIDEOINPUTSREFERENCEIMAGES","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}],"outputs":[{"localized_name":"Video Inference Inputs","name":"Video Inference Inputs","type":"RUNWAREVIDEOINFERENCEINPUTS","links":[8]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"056ade066187313b5c2f9a3afa5cbbee19227d3e","Node name for S&R":"Runware Video Inference Inputs"},"widgets_values":["",""],"bgcolor":"#5345bf"},{"id":14,"type":"LoadImage","pos":[-192.14349365234375,-443.0803527832031],"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":[13]},{"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":["bird_1024_1024.png","image"]},{"id":18,"type":"Runware Video Inputs Frame Images","pos":[118.67174530029297,105.7341079711914],"size":[331.5357360839844,190],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"image1","name":"image1","shape":7,"type":"IMAGE","link":13},{"localized_name":"image2","name":"image2","shape":7,"type":"IMAGE","link":16},{"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":"STRING","widget":{"name":"frame1 position"},"link":null},{"localized_name":"frame2 position","name":"frame2 position","shape":7,"type":"STRING","widget":{"name":"frame2 position"},"link":null},{"localized_name":"frame3 position","name":"frame3 position","shape":7,"type":"STRING","widget":{"name":"frame3 position"},"link":null},{"localized_name":"frame4 position","name":"frame4 position","shape":7,"type":"STRING","widget":{"name":"frame4 position"},"link":null}],"outputs":[{"localized_name":"Video Inputs Frame Images","name":"Video Inputs Frame Images","type":"RUNWAREVIDEOINPUTSFRAMEIMAGES","links":[14]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"056ade066187313b5c2f9a3afa5cbbee19227d3e","Node name for S&R":"Runware Video Inputs Frame Images"},"widgets_values":["","","",""],"bgcolor":"#5345bf"},{"id":19,"type":"LoadImage","pos":[-217.40785217285156,-76.47771453857422],"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":[16]},{"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":["bird_1024_1024.png","image"]},{"id":1,"type":"Runware Video Inference","pos":[494.5824279785156,-469.24542236328125],"size":[400,808],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"Model","name":"Model","type":"RUNWAREVIDEOMODEL","link":1},{"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":15},{"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":8},{"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":"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},{"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":[7]},{"localized_name":"RW-Task","name":"RW-Task","type":"RUNWARETASK","links":null}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"056ade066187313b5c2f9a3afa5cbbee19227d3e","Node name for S&R":"Runware Video Inference"},"widgets_values":[false,"Disabled",false,1024,576,false,5,false,24,"mp4",false,2657004422,"randomize",false,20,1,"none","A flying bird in the forest","","",""],"bgcolor":"#5345bf"},{"id":16,"type":"Runware Luma Provider Settings","pos":[978.2157592773438,106.0344467163086],"size":[305.3335876464844,274],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"useLoop","name":"useLoop","shape":7,"type":"BOOLEAN","widget":{"name":"useLoop"},"link":null},{"localized_name":"loop","name":"loop","shape":7,"type":"BOOLEAN","widget":{"name":"loop"},"link":null},{"localized_name":"useConcept1","name":"useConcept1","shape":7,"type":"BOOLEAN","widget":{"name":"useConcept1"},"link":null},{"localized_name":"concept1","name":"concept1","shape":7,"type":"COMBO","widget":{"name":"concept1"},"link":null},{"localized_name":"useConcept2","name":"useConcept2","shape":7,"type":"BOOLEAN","widget":{"name":"useConcept2"},"link":null},{"localized_name":"concept2","name":"concept2","shape":7,"type":"COMBO","widget":{"name":"concept2"},"link":null},{"localized_name":"useConcept3","name":"useConcept3","shape":7,"type":"BOOLEAN","widget":{"name":"useConcept3"},"link":null},{"localized_name":"concept3","name":"concept3","shape":7,"type":"COMBO","widget":{"name":"concept3"},"link":null},{"localized_name":"useConcept4","name":"useConcept4","shape":7,"type":"BOOLEAN","widget":{"name":"useConcept4"},"link":null},{"localized_name":"concept4","name":"concept4","shape":7,"type":"COMBO","widget":{"name":"concept4"},"link":null}],"outputs":[{"localized_name":"Provider Settings","name":"Provider Settings","type":"RUNWAREPROVIDERSETTINGS","links":[15]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"056ade066187313b5c2f9a3afa5cbbee19227d3e","Node name for S&R":"Runware Luma Provider Settings"},"widgets_values":[false,true,true,"aerial",true,"bolt_cam",false,"",false,""],"bgcolor":"#5345bf"},{"id":3,"type":"Runware Video Model Search","pos":[120.75635528564453,-435.5396423339844],"size":[270,242],"flags":{},"order":3,"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":"useResolution","name":"useResolution","type":"BOOLEAN","widget":{"name":"useResolution"},"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":[1]},{"localized_name":"Width","name":"Width","type":"INT","links":null},{"localized_name":"Height","name":"Height","type":"INT","links":null}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"056ade066187313b5c2f9a3afa5cbbee19227d3e","Node name for S&R":"Runware Video Model Search"},"widgets_values":["","Luma","lumaai:2@2 (Luma Ray 2 Flash)",false,true,1080,720],"bgcolor":"#5345bf"}],"links":[[1,3,0,1,0,"RUNWAREVIDEOMODEL"],[7,1,0,10,0,"VIDEO"],[8,5,0,1,6,"RUNWAREVIDEOINFERENCEINPUTS"],[13,14,0,18,0,"IMAGE"],[14,18,0,5,1,"RUNWAREVIDEOINPUTSFRAMEIMAGES"],[15,16,0,1,3,"RUNWAREPROVIDERSETTINGS"],[16,19,0,18,1,"IMAGE"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.6830134553650705,"offset":[648.2221264295404,647.2250773593215]}},"version":0.4} \ No newline at end of file +{"id":"a3fa6131-3e00-4fb3-8cbe-3450bbcb0559","revision":0,"last_node_id":19,"last_link_id":16,"nodes":[{"id":10,"type":"SaveVideo","pos":[987.3607177734375,-435.8999328613281],"size":[270,456.26922607421875],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"video","name":"video","type":"VIDEO","link":7},{"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 Video Inference Inputs","pos":[142.3061065673828,-159.09922790527344],"size":[299.6597595214844,162],"flags":{},"order":5,"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":14},{"localized_name":"Mask","name":"Mask","shape":7,"type":"IMAGE","link":null},{"localized_name":"Frame","name":"Frame","shape":7,"type":"IMAGE","link":null},{"localized_name":"References","name":"References","shape":7,"type":"RUNWAREVIDEOINPUTSREFERENCEIMAGES","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}],"outputs":[{"localized_name":"Video Inference Inputs","name":"Video Inference Inputs","type":"RUNWAREVIDEOINFERENCEINPUTS","links":[8]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"056ade066187313b5c2f9a3afa5cbbee19227d3e","Node name for S&R":"Runware Video Inference Inputs"},"widgets_values":["",""],"bgcolor":"#5345bf"},{"id":14,"type":"LoadImage","pos":[-192.14349365234375,-443.0803527832031],"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":[13]},{"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":["bird_1024_1024.png","image"]},{"id":18,"type":"Runware Video Inputs Frame Images","pos":[118.67174530029297,105.7341079711914],"size":[331.5357360839844,190],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"image1","name":"image1","shape":7,"type":"IMAGE","link":13},{"localized_name":"image2","name":"image2","shape":7,"type":"IMAGE","link":16},{"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":"STRING","widget":{"name":"frame1 position"},"link":null},{"localized_name":"frame2 position","name":"frame2 position","shape":7,"type":"STRING","widget":{"name":"frame2 position"},"link":null},{"localized_name":"frame3 position","name":"frame3 position","shape":7,"type":"STRING","widget":{"name":"frame3 position"},"link":null},{"localized_name":"frame4 position","name":"frame4 position","shape":7,"type":"STRING","widget":{"name":"frame4 position"},"link":null}],"outputs":[{"localized_name":"Video Inputs Frame Images","name":"Video Inputs Frame Images","type":"RUNWAREVIDEOINPUTSFRAMEIMAGES","links":[14]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"056ade066187313b5c2f9a3afa5cbbee19227d3e","Node name for S&R":"Runware Video Inputs Frame Images"},"widgets_values":["","","",""],"bgcolor":"#5345bf"},{"id":19,"type":"LoadImage","pos":[-217.40785217285156,-76.47771453857422],"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":[16]},{"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":["bird_1024_1024.png","image"]},{"id":3,"type":"Runware Video Model Search","pos":[120.75635528564453,-435.5396423339844],"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":"useResolution","name":"useResolution","type":"BOOLEAN","widget":{"name":"useResolution"},"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":[1]},{"localized_name":"Width","name":"Width","type":"INT","links":null},{"localized_name":"Height","name":"Height","type":"INT","links":null}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"056ade066187313b5c2f9a3afa5cbbee19227d3e","Node name for S&R":"Runware Video Model Search"},"widgets_values":["","Luma","lumaai:2@1 (Luma Ray 2)",false,false,0,0],"bgcolor":"#5345bf"},{"id":16,"type":"Runware Luma Provider Settings","pos":[947.1322631835938,77.9364013671875],"size":[305.3335876464844,274],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"useLoop","name":"useLoop","shape":7,"type":"BOOLEAN","widget":{"name":"useLoop"},"link":null},{"localized_name":"loop","name":"loop","shape":7,"type":"BOOLEAN","widget":{"name":"loop"},"link":null},{"localized_name":"useConcept1","name":"useConcept1","shape":7,"type":"BOOLEAN","widget":{"name":"useConcept1"},"link":null},{"localized_name":"concept1","name":"concept1","shape":7,"type":"COMBO","widget":{"name":"concept1"},"link":null},{"localized_name":"useConcept2","name":"useConcept2","shape":7,"type":"BOOLEAN","widget":{"name":"useConcept2"},"link":null},{"localized_name":"concept2","name":"concept2","shape":7,"type":"COMBO","widget":{"name":"concept2"},"link":null},{"localized_name":"useConcept3","name":"useConcept3","shape":7,"type":"BOOLEAN","widget":{"name":"useConcept3"},"link":null},{"localized_name":"concept3","name":"concept3","shape":7,"type":"COMBO","widget":{"name":"concept3"},"link":null},{"localized_name":"useConcept4","name":"useConcept4","shape":7,"type":"BOOLEAN","widget":{"name":"useConcept4"},"link":null},{"localized_name":"concept4","name":"concept4","shape":7,"type":"COMBO","widget":{"name":"concept4"},"link":null}],"outputs":[{"localized_name":"Provider Settings","name":"Provider Settings","type":"RUNWAREPROVIDERSETTINGS","links":[15]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"056ade066187313b5c2f9a3afa5cbbee19227d3e","Node name for S&R":"Runware Luma Provider Settings"},"widgets_values":[false,true,true,"aerial",true,"bolt_cam",false,"",false,""],"bgcolor":"#5345bf"},{"id":1,"type":"Runware Video Inference","pos":[494.5824279785156,-469.24542236328125],"size":[400,808],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"Model","name":"Model","type":"RUNWAREVIDEOMODEL","link":1},{"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":15},{"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":8},{"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":"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},{"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":[7]},{"localized_name":"RW-Task","name":"RW-Task","type":"RUNWARETASK","links":null}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"056ade066187313b5c2f9a3afa5cbbee19227d3e","Node name for S&R":"Runware Video Inference"},"widgets_values":[false,"Disabled",false,566,1024,false,5,false,24,"mp4",false,1101312962,"randomize",false,20,1,"none","A flying bird in the forest","","",""],"bgcolor":"#5345bf"}],"links":[[1,3,0,1,0,"RUNWAREVIDEOMODEL"],[7,1,0,10,0,"VIDEO"],[8,5,0,1,6,"RUNWAREVIDEOINFERENCEINPUTS"],[13,14,0,18,0,"IMAGE"],[14,18,0,5,1,"RUNWAREVIDEOINPUTSFRAMEIMAGES"],[15,16,0,1,3,"RUNWAREPROVIDERSETTINGS"],[16,19,0,18,1,"IMAGE"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.6830134553650705,"offset":[449.96811666391534,552.693401968696]}},"version":0.4} \ No newline at end of file