Merge pull request #151 from Runware/feature-Krea2

Added support for creativity, moodboard in Runware Image Inference Settings
This commit is contained in:
Sirshendu Ganguly
2026-05-28 12:52:18 +05:30
committed by GitHub
6 changed files with 116 additions and 3 deletions
+2
View File
@@ -108,6 +108,7 @@ from .modules.videoInputsFrame import RunwareVideoInputsFrameImages
from .modules.safetyInputs import safetyInputs
from .modules.settings import RunwareSettings
from .modules.imageInferenceSettingsColorPalette import RunwareImageInferenceSettingsColorPalette
from .modules.imageInferenceSettingsMoodboards import RunwareImageInferenceSettingsMoodboards
from .modules.videoAdvancedFeatureInputs import videoAdvancedFeatureInputs
from .modules.advancedFeatureSettings.wanAnimateAdvancedFeatureSettings import RunwareWanAnimateAdvancedFeatureSettings
from .modules.saveImage import RunwareSaveImage
@@ -245,6 +246,7 @@ NODE_CLASS_MAPPINGS = {
"Runware Safety Inputs": safetyInputs,
"Runware Settings": RunwareSettings,
"Runware Image Inference Settings Color Palette": RunwareImageInferenceSettingsColorPalette,
"Runware Image Inference Settings Moodboards": RunwareImageInferenceSettingsMoodboards,
"Runware Video Advanced Feature Inputs": videoAdvancedFeatureInputs,
"Runware Wan Animate Advanced Feature Settings": RunwareWanAnimateAdvancedFeatureSettings,
"Runware Save Image": RunwareSaveImage,
+3 -1
View File
@@ -1,6 +1,6 @@
import { app } from "../../scripts/app.js";
import { api } from "../../scripts/api.js";
import { promptEnhanceHandler, syncDimensionsNodeHandler, searchNodeHandler, APIKeyHandler, captionNodeHandler, 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, outpaintSettingsToggleHandler, safetyInputsToggleHandler, imageInferenceSettingsColorPaletteToggleHandler, audioInputToggleHandler, speechInputToggleHandler, briaProviderMaskToggleHandler, wanAnimateAdvancedFeatureSettingsToggleHandler, videoAdvancedFeatureInputsToggleHandler, audioInferenceInputsToggleHandler, audioInferenceSpeechVoicesToggleHandler, referenceVideosToggleHandler } 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, outpaintSettingsToggleHandler, safetyInputsToggleHandler, imageInferenceSettingsColorPaletteToggleHandler, imageInferenceSettingsMoodboardsToggleHandler, 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 = [];
@@ -151,6 +151,8 @@ app.registerExtension({
safetyInputsToggleHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.IMAGEINFERENCESETTINGSCOLORPALETTE) {
imageInferenceSettingsColorPaletteToggleHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.IMAGEINFERENCESETTINGSMOODBOARDS) {
imageInferenceSettingsMoodboardsToggleHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.AUDIOINPUT) {
audioInputToggleHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.SPEECHINPUT) {
+5
View File
@@ -157,6 +157,7 @@ const RUNWARE_NODE_TYPES = {
SAFETYINPUTS: "Runware Safety Inputs",
SETTINGS: "Runware Settings",
IMAGEINFERENCESETTINGSCOLORPALETTE: "Runware Image Inference Settings Color Palette",
IMAGEINFERENCESETTINGSMOODBOARDS: "Runware Image Inference Settings Moodboards",
VIDEOADVANCEDFEATUREINPUTS: "Runware Video Advanced Feature Inputs",
WANANIMATEADVANCEDFEATURESETTINGS: "Runware Wan Animate Advanced Feature Settings",
SAVEIMAGE: "Runware Save Image",
@@ -621,6 +622,10 @@ const RUNWARE_NODE_PROPS = {
bgColor: DEFAULT_BGCOLOR,
colorModeOnly: true,
},
[RUNWARE_NODE_TYPES.IMAGEINFERENCESETTINGSMOODBOARDS]: {
bgColor: DEFAULT_BGCOLOR,
colorModeOnly: true,
},
[RUNWARE_NODE_TYPES.VIDEOADVANCEDFEATUREINPUTS]: {
bgColor: DEFAULT_BGCOLOR,
colorModeOnly: true,
+25
View File
@@ -5053,6 +5053,7 @@ export {
outpaintSettingsToggleHandler,
safetyInputsToggleHandler,
imageInferenceSettingsColorPaletteToggleHandler,
imageInferenceSettingsMoodboardsToggleHandler,
audioInputToggleHandler,
speechInputToggleHandler,
briaProviderMaskToggleHandler,
@@ -5169,6 +5170,8 @@ function settingsToggleHandler(settingsNode) {
const autoCropWidget = settingsNode.widgets.find(w => w.name === "autoCrop");
const useDilatePixelsWidget = settingsNode.widgets.find(w => w.name === "useDilatePixels");
const dilatePixelsWidget = settingsNode.widgets.find(w => w.name === "dilatePixels");
const useCreativityWidget = settingsNode.widgets.find(w => w.name === "useCreativity");
const creativityWidget = settingsNode.widgets.find(w => w.name === "creativity");
// Helper function to toggle widget enabled state
function toggleWidgetState(useWidget, paramWidget, paramName) {
@@ -5267,6 +5270,9 @@ function settingsToggleHandler(settingsNode) {
if (useDilatePixelsWidget && dilatePixelsWidget) {
toggleWidgetState(useDilatePixelsWidget, dilatePixelsWidget, "dilatePixels");
}
if (useCreativityWidget && creativityWidget) {
toggleWidgetState(useCreativityWidget, creativityWidget, "creativity");
}
}
function outpaintSettingsToggleHandler(settingsNode) {
@@ -5446,6 +5452,25 @@ function imageInferenceSettingsColorPaletteToggleHandler(paletteNode) {
}
}
function imageInferenceSettingsMoodboardsToggleHandler(moodboardsNode) {
if (!moodboardsNode?.widgets) return;
const useStrengthWidget = moodboardsNode.widgets.find((w) => w && w.name === "useStrength");
const strengthWidget = moodboardsNode.widgets.find((w) => w && w.name === "strength");
if (!useStrengthWidget || !strengthWidget) return;
function toggleStrengthState() {
const enabled = useStrengthWidget.value === true;
toggleWidgetEnabled(strengthWidget, enabled, moodboardsNode);
moodboardsNode.setDirtyCanvas(true);
}
appendWidgetCB(useStrengthWidget, () => {
setTimeout(toggleStrengthState, 50);
});
setTimeout(toggleStrengthState, 100);
}
function syncProviderSettingsToggleHandler(syncNode) {
// Find all "use" parameter widgets for Sync Provider Settings
const useEditRegionWidget = syncNode.widgets.find(w => w.name === "useEditRegion");
@@ -0,0 +1,56 @@
"""
Runware Image Inference Settings Moodboards
Builds settings.moodboards: list of { "id": "<uuid>", "strength": <number> }.
"""
from typing import Any, Dict, List, Tuple
class RunwareImageInferenceSettingsMoodboards:
"""Build moodboards list for image inference settings."""
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"id": ("STRING", {
"default": "",
"tooltip": "Moodboard UUID (settings.moodboards[].id).",
}),
},
"optional": {
"useStrength": ("BOOLEAN", {
"default": False,
"label_on": "Enabled",
"label_off": "Disabled",
"tooltip": "Include strength in moodboards entry.",
}),
"strength": ("FLOAT", {
"default": 0.35,
"min": -0.5,
"max": 1.5,
"step": 0.01,
"tooltip": "Moodboard strength (-0.5 to 1.5). Only used when useStrength is enabled.",
}),
},
}
RETURN_TYPES = ("RUNWAREIMAGEINFERENCEMOODBOARDS",)
RETURN_NAMES = ("moodboards",)
FUNCTION = "build_moodboards"
CATEGORY = "Runware"
DESCRIPTION = (
"Build settings.moodboards for image inference settings. "
"Outputs one-element array with required id and optional strength."
)
def build_moodboards(self, **kwargs) -> Tuple[List[Dict[str, Any]]]:
moodboard_id = str(kwargs.get("id") or "").strip()
if not moodboard_id:
return ([],)
entry: Dict[str, Any] = {"id": moodboard_id}
if kwargs.get("useStrength", False):
entry["strength"] = float(kwargs.get("strength", 0.35))
return ([entry],)
+25 -2
View File
@@ -3,7 +3,8 @@ Runware Image Inference Settings (registered as Runware Settings for workflow co
Provides settings for image generation including temperature, systemPrompt, topP, layers,
quality, background, style, search, promptExtend, editRegions, thinking (boolean),
thinkingLevel (high/medium/low), sequential, renderingSpeed (TURBO/DEFAULT/QUALITY),
magicPrompt (AUTO/ON/OFF), autoCrop, dilatePixels, and colorPalette
magicPrompt (AUTO/ON/OFF), autoCrop, dilatePixels, creativity (raw/low/medium/high), colorPalette,
and moodboards
(from Runware Image Inference Settings Color Palette).
"""
@@ -193,6 +194,17 @@ class RunwareSettings:
"max": 100,
"step": 1,
}),
"useCreativity": ("BOOLEAN", {
"tooltip": "Enable to include creativity in settings.",
"default": False,
}),
"creativity": (["raw", "low", "medium", "high"], {
"default": "medium",
"tooltip": "Creativity level. Only used when 'Use Creativity' is enabled.",
}),
"moodboards": ("RUNWAREIMAGEINFERENCEMOODBOARDS", {
"tooltip": "Connect Runware Image Inference Settings Moodboards. When connected with at least one entry, it is merged into settings.moodboards.",
}),
}
}
@@ -203,7 +215,8 @@ class RunwareSettings:
DESCRIPTION = (
"Configure general settings for image generation: temperature, system prompt, top-p, layers, quality, background, style, search, "
"promptExtend, editRegions (JSON), thinking (boolean), thinkingLevel (high/medium/low), sequential, "
"renderingSpeed (TURBO/DEFAULT/QUALITY), magicPrompt (AUTO/ON/OFF), autoCrop, dilatePixels, and optional colorPalette from the Color Palette node."
"renderingSpeed (TURBO/DEFAULT/QUALITY), magicPrompt (AUTO/ON/OFF), autoCrop, dilatePixels, "
"creativity (raw/low/medium/high), and optional colorPalette and moodboards from dedicated settings nodes."
)
def createSettings(self, **kwargs) -> tuple[Dict[str, Any]]:
@@ -229,6 +242,7 @@ class RunwareSettings:
useMagicPrompt = kwargs.get("useMagicPrompt", False)
useAutoCrop = kwargs.get("useAutoCrop", False)
useDilatePixels = kwargs.get("useDilatePixels", False)
useCreativity = kwargs.get("useCreativity", False)
# Get value parameters
temperature = kwargs.get("temperature", 1.0)
@@ -241,6 +255,7 @@ class RunwareSettings:
style = kwargs.get("style", "auto")
renderingSpeed = kwargs.get("renderingSpeed", "DEFAULT")
magicPrompt = kwargs.get("magicPrompt", "AUTO")
creativity = kwargs.get("creativity", "medium")
# Build settings dictionary - only include what is enabled
settings: Dict[str, Any] = {}
@@ -290,6 +305,9 @@ class RunwareSettings:
palette: Optional[List[Dict[str, Any]]] = kwargs.get("colorPalette")
if palette is not None and isinstance(palette, list) and len(palette) > 0:
settings["colorPalette"] = palette
moodboards: Optional[List[Dict[str, Any]]] = kwargs.get("moodboards")
if moodboards is not None and isinstance(moodboards, list) and len(moodboards) > 0:
settings["moodboards"] = moodboards
if useRenderingSpeed:
settings["renderingSpeed"] = str(renderingSpeed)
@@ -299,6 +317,11 @@ class RunwareSettings:
settings["autoCrop"] = bool(kwargs.get("autoCrop", False))
if useDilatePixels:
settings["dilatePixels"] = int(kwargs.get("dilatePixels", 10))
if useCreativity:
creativity = str(creativity)
if creativity not in ("raw", "low", "medium", "high"):
raise ValueError("creativity must be raw, low, medium, or high when useCreativity is enabled.")
settings["creativity"] = creativity
# Clean up None values
settings = {k: v for k, v in settings.items() if v is not None}