Merge pull request #151 from Runware/feature-Krea2
Added support for creativity, moodboard in Runware Image Inference Settings
This commit is contained in:
@@ -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
@@ -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) {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user