Added support for promptEnhance

This commit is contained in:
Sirshendu Ganguly
2026-06-04 23:44:20 +05:30
parent 527d07e69b
commit 282daf4149
8 changed files with 143 additions and 13 deletions
+3
View File
@@ -111,6 +111,7 @@ from .modules.settings import RunwareSettings
from .modules.imageInferenceSettingsColorPalette import RunwareImageInferenceSettingsColorPalette
from .modules.imageInferenceSettingsMoodboards import RunwareImageInferenceSettingsMoodboards
from .modules.imageInferenceSettingsStructuredPrompt import RunwareImageInferenceSettingsStructuredPrompt
from .modules.imageInferenceSettingsPromptEnhance import RunwareImageInferenceSettingsPromptEnhance
from .modules.videoAdvancedFeatureInputs import videoAdvancedFeatureInputs
from .modules.advancedFeatureSettings.wanAnimateAdvancedFeatureSettings import RunwareWanAnimateAdvancedFeatureSettings
from .modules.saveImage import RunwareSaveImage
@@ -252,6 +253,7 @@ NODE_CLASS_MAPPINGS = {
"Runware Image Inference Settings Color Palette": RunwareImageInferenceSettingsColorPalette,
"Runware Image Inference Settings Moodboards": RunwareImageInferenceSettingsMoodboards,
"Runware Image Inference Settings Structured Prompt": RunwareImageInferenceSettingsStructuredPrompt,
"Runware Image Inference Settings Prompt Enhance": RunwareImageInferenceSettingsPromptEnhance,
"Runware Video Advanced Feature Inputs": videoAdvancedFeatureInputs,
"Runware Wan Animate Advanced Feature Settings": RunwareWanAnimateAdvancedFeatureSettings,
"Runware Save Image": RunwareSaveImage,
@@ -280,6 +282,7 @@ NODE_DISPLAY_NAME_MAPPINGS = {
"Runware Text Model Search": "Runware Text Model",
"Runware Image Inference Settings Color Palette": "Runware Image Inference Color Palette",
"Runware Image Inference Settings Structured Prompt": "Runware Image Inference Structured Prompt",
"Runware Image Inference Settings Prompt Enhance": "Runware Image Inference Settings Prompt Enhance",
"Runware Video Transcription": "Runware Video Caption",
"Runware Video Inputs References": "Runware Video Inference Inputs Reference Images",
"Runware Video Inference Inputs Reference Images": "Runware Video Inference Inputs Reference Images",
+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, threeDInferenceSettingsMeshClusterToggleHandler, ultralyticsProviderSettingsToggleHandler, openaiProviderSettingsToggleHandler, lightricksProviderSettingsToggleHandler, klingProviderSettingsToggleHandler, lumaProviderSettingsToggleHandler, briaProviderSettingsToggleHandler, pixverseProviderSettingsToggleHandler, alibabaProviderSettingsToggleHandler, mireloProviderSettingsToggleHandler, googleProviderSettingsToggleHandler, syncProviderSettingsToggleHandler, syncSegmentToggleHandler, settingsToggleHandler, outpaintSettingsToggleHandler, safetyInputsToggleHandler, imageInferenceSettingsColorPaletteToggleHandler, imageInferenceSettingsMoodboardsToggleHandler, imageInferenceSettingsStructuredPromptToggleHandler, audioInputToggleHandler, speechInputToggleHandler, briaProviderMaskToggleHandler, wanAnimateAdvancedFeatureSettingsToggleHandler, videoAdvancedFeatureInputsToggleHandler, audioInferenceInputsToggleHandler, audioInferenceReferenceVoiceToggleHandler, audioInferenceSpeechVoicesToggleHandler, videoInputsFrameToggleHandler, 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, threeDInferenceSettingsMeshClusterToggleHandler, ultralyticsProviderSettingsToggleHandler, openaiProviderSettingsToggleHandler, lightricksProviderSettingsToggleHandler, klingProviderSettingsToggleHandler, lumaProviderSettingsToggleHandler, briaProviderSettingsToggleHandler, pixverseProviderSettingsToggleHandler, alibabaProviderSettingsToggleHandler, mireloProviderSettingsToggleHandler, googleProviderSettingsToggleHandler, syncProviderSettingsToggleHandler, syncSegmentToggleHandler, settingsToggleHandler, outpaintSettingsToggleHandler, safetyInputsToggleHandler, imageInferenceSettingsColorPaletteToggleHandler, imageInferenceSettingsMoodboardsToggleHandler, imageInferenceSettingsStructuredPromptToggleHandler, imageInferenceSettingsPromptEnhanceToggleHandler, audioInputToggleHandler, speechInputToggleHandler, briaProviderMaskToggleHandler, wanAnimateAdvancedFeatureSettingsToggleHandler, videoAdvancedFeatureInputsToggleHandler, audioInferenceInputsToggleHandler, audioInferenceReferenceVoiceToggleHandler, audioInferenceSpeechVoicesToggleHandler, videoInputsFrameToggleHandler, referenceVideosToggleHandler } from "./utils.js";
import { RUNWARE_NODE_TYPES, RUNWARE_NODE_PROPS, SEARCH_TERMS } from "./types.js";
const nodeInitList = [];
@@ -155,6 +155,8 @@ app.registerExtension({
imageInferenceSettingsMoodboardsToggleHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.IMAGEINFERENCESETTINGSSTRUCTUREDPROMPT) {
imageInferenceSettingsStructuredPromptToggleHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.IMAGEINFERENCESETTINGSPROMPTENHANCE) {
imageInferenceSettingsPromptEnhanceToggleHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.AUDIOINPUT) {
audioInputToggleHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.SPEECHINPUT) {
+5
View File
@@ -160,6 +160,7 @@ const RUNWARE_NODE_TYPES = {
IMAGEINFERENCESETTINGSCOLORPALETTE: "Runware Image Inference Settings Color Palette",
IMAGEINFERENCESETTINGSMOODBOARDS: "Runware Image Inference Settings Moodboards",
IMAGEINFERENCESETTINGSSTRUCTUREDPROMPT: "Runware Image Inference Settings Structured Prompt",
IMAGEINFERENCESETTINGSPROMPTENHANCE: "Runware Image Inference Settings Prompt Enhance",
VIDEOADVANCEDFEATUREINPUTS: "Runware Video Advanced Feature Inputs",
WANANIMATEADVANCEDFEATURESETTINGS: "Runware Wan Animate Advanced Feature Settings",
SAVEIMAGE: "Runware Save Image",
@@ -637,6 +638,10 @@ const RUNWARE_NODE_PROPS = {
bgColor: DEFAULT_BGCOLOR,
colorModeOnly: true,
},
[RUNWARE_NODE_TYPES.IMAGEINFERENCESETTINGSPROMPTENHANCE]: {
bgColor: DEFAULT_BGCOLOR,
colorModeOnly: true,
},
[RUNWARE_NODE_TYPES.VIDEOADVANCEDFEATUREINPUTS]: {
bgColor: DEFAULT_BGCOLOR,
colorModeOnly: true,
+27
View File
@@ -5259,6 +5259,7 @@ export {
imageInferenceSettingsColorPaletteToggleHandler,
imageInferenceSettingsMoodboardsToggleHandler,
imageInferenceSettingsStructuredPromptToggleHandler,
imageInferenceSettingsPromptEnhanceToggleHandler,
audioInputToggleHandler,
speechInputToggleHandler,
briaProviderMaskToggleHandler,
@@ -5659,6 +5660,32 @@ function imageInferenceSettingsColorPaletteToggleHandler(paletteNode) {
}
}
function imageInferenceSettingsPromptEnhanceToggleHandler(node) {
if (!node?.widgets) return;
const useTemperatureWidget = node.widgets.find((w) => w && w.name === "useTemperature");
const temperatureWidget = node.widgets.find((w) => w && w.name === "temperature");
const useTopPWidget = node.widgets.find((w) => w && w.name === "useTopP");
const topPWidget = node.widgets.find((w) => w && w.name === "topP");
function toggleWidgetState(useWidget, paramWidget) {
if (!useWidget || !paramWidget) return;
function toggleEnabled() {
toggleWidgetEnabled(paramWidget, useWidget.value === true, node);
node.setDirtyCanvas(true);
}
appendWidgetCB(useWidget, () => setTimeout(toggleEnabled, 50));
setTimeout(toggleEnabled, 100);
}
if (useTemperatureWidget && temperatureWidget) {
toggleWidgetState(useTemperatureWidget, temperatureWidget);
}
if (useTopPWidget && topPWidget) {
toggleWidgetState(useTopPWidget, topPWidget);
}
}
function imageInferenceSettingsMoodboardsToggleHandler(moodboardsNode) {
if (!moodboardsNode?.widgets) return;
+10 -10
View File
@@ -63,7 +63,7 @@ class txt2img:
}),
"useSteps": ("BOOLEAN", {
"tooltip": "Enable to include steps parameter in API request. Disable if your model doesn't support steps (like nano banana).",
"default": True,
"default": False,
}),
"steps": ("INT", {
"tooltip": "The number of steps is the number of iterations the model will perform to generate the image. Only used when 'Use Steps' is enabled.",
@@ -73,7 +73,7 @@ class txt2img:
}),
"useScheduler": ("BOOLEAN", {
"tooltip": "Enable to include scheduler parameter in API request. Disable if your model doesn't support scheduler.",
"default": True,
"default": False,
}),
"scheduler": (['Default', 'DDIM', 'DDIMScheduler', 'DDPMScheduler', 'DEISMultistepScheduler', 'DPMSolverSinglestepScheduler', 'DPMSolverMultistepScheduler', 'DPMSolverMultistepInverse', 'DPM++', 'DPM++ Karras', 'DPM++ 2M', 'DPM++ 2M Karras', 'DPM++ 2M SDE Karras', 'DPM++ 2M SDE', 'DPM++ 3M', 'DPM++ 3M Karras', 'DPM++ SDE Karras', 'DPM++ SDE', 'EDMEulerScheduler', 'EDMDPMSolverMultistepScheduler', 'Euler', 'EulerDiscreteScheduler', 'Euler Karras', 'Euler a', 'EulerAncestralDiscreteScheduler', 'FlowMatchEulerDiscreteScheduler', 'Heun', 'HeunDiscreteScheduler', 'Heun Karras', 'IPNDMScheduler', 'KDPM2DiscreteScheduler', 'KDPM2AncestralDiscreteScheduler', 'LCM', 'LCMScheduler', 'LMS', 'LMSDiscreteScheduler', 'LMS Karras', 'PNDMScheduler', 'TCDScheduler', 'UniPC', 'UniPCMultistepScheduler', 'UniPC Karras', 'UniPC 2M', 'UniPC 2M Karras', 'UniPC 3M', 'UniPC 3M Karras'], {
"tooltip": "An scheduler is a component that manages the inference process. Different schedulers can be used to achieve different results like more detailed images, faster inference, or more accurate results.",
@@ -81,7 +81,7 @@ class txt2img:
}),
"useCFGScale": ("BOOLEAN", {
"tooltip": "Enable to include CFG scale parameter in API request. Disable if your model doesn't support CFG scale (like nano banana).",
"default": True,
"default": False,
}),
"cfgScale": ("FLOAT", {
"tooltip": "Guidance scale represents how closely the images will resemble the prompt or how much freedom the AI model has. Only used when 'Use CFG Scale' is enabled.",
@@ -92,7 +92,7 @@ class txt2img:
}),
"useSeed": ("BOOLEAN", {
"tooltip": "Enable to include seed parameter in API request. Disable if your model doesn't support seed.",
"default": True,
"default": False,
}),
"seed": ("INT", {
"tooltip": "A value used to randomize the image generation. If you want to make images reproducible (generate the same image multiple times), you can use the same seed value.",
@@ -102,7 +102,7 @@ class txt2img:
}),
"useClipSkip": ("BOOLEAN", {
"tooltip": "Enable to include clipSkip parameter in API request. Disable if your model doesn't support clipSkip.",
"default": True,
"default": False,
}),
"clipSkip": ("INT", {
"tooltip": "Enables skipping layers of the CLIP embedding process, leading to quicker and more varied image generation. Only used when 'Use Clip Skip' is enabled.",
@@ -281,14 +281,14 @@ class txt2img:
height = kwargs.get("height", 512)
width = kwargs.get("width", 512)
steps = kwargs.get("steps", 4)
useSteps = kwargs.get("useSteps", True)
useSteps = kwargs.get("useSteps", False)
scheduler = kwargs.get("scheduler", "Default")
useScheduler = kwargs.get("useScheduler", True)
useScheduler = kwargs.get("useScheduler", False)
cfgScale = kwargs.get("cfgScale", 6.5)
useCFGScale = kwargs.get("useCFGScale", True)
useCFGScale = kwargs.get("useCFGScale", False)
seed = kwargs.get("seed")
useSeed = kwargs.get("useSeed", True)
useClipSkip = kwargs.get("useClipSkip", True)
useSeed = kwargs.get("useSeed", False)
useClipSkip = kwargs.get("useClipSkip", False)
dimensions = kwargs.get("dimensions", "Square (512x512)")
outputFormat = kwargs.get("outputFormat", rwUtils.getOutputFormat())
batchSize = kwargs.get("batchSize", 1)
@@ -0,0 +1,80 @@
"""
Runware Image Inference Settings Prompt Enhance
Builds settings.promptEnhance for image inference (e.g. Ernie).
Connect the output to Runware Image Inference Settings → promptEnhance.
"""
from typing import Any, Dict, Tuple
class RunwareImageInferenceSettingsPromptEnhance:
"""Build settings.promptEnhance object (temperature, topP)."""
@classmethod
def INPUT_TYPES(cls):
return {
"required": {},
"optional": {
"useTemperature": ("BOOLEAN", {
"default": False,
"label_on": "Enabled",
"label_off": "Disabled",
"tooltip": "Include temperature in settings.promptEnhance.",
}),
"temperature": ("FLOAT", {
"default": 1.2,
"min": 0.1,
"max": 5.0,
"step": 0.1,
"tooltip": (
"settings.promptEnhance.temperature (0.1–5). "
"Ernie-specific API default when omitted: 0.6."
),
}),
"useTopP": ("BOOLEAN", {
"default": False,
"label_on": "Enabled",
"label_off": "Disabled",
"tooltip": "Include topP in settings.promptEnhance.",
}),
"topP": ("FLOAT", {
"default": 0.95,
"min": 0.1,
"max": 1.0,
"step": 0.01,
"tooltip": (
"settings.promptEnhance.topP (0.1–1). "
"Ernie-specific API default when omitted: 0.95."
),
}),
},
}
RETURN_TYPES = ("RUNWAREIMAGEINFERENCEPROMPTENHANCE",)
RETURN_NAMES = ("promptEnhance",)
FUNCTION = "build_prompt_enhance"
CATEGORY = "Runware"
DESCRIPTION = (
"Build settings.promptEnhance (temperature, topP) for image inference. "
"Connect to Runware Image Inference Settings."
)
def build_prompt_enhance(self, **kwargs) -> Tuple[Dict[str, Any]]:
prompt_enhance: Dict[str, Any] = {}
if kwargs.get("useTemperature", False):
prompt_enhance["temperature"] = float(kwargs.get("temperature", 1.2))
if kwargs.get("useTopP", False):
prompt_enhance["topP"] = float(kwargs.get("topP", 0.95))
return (prompt_enhance,)
NODE_CLASS_MAPPINGS = {
"RunwareImageInferenceSettingsPromptEnhance": RunwareImageInferenceSettingsPromptEnhance,
}
NODE_DISPLAY_NAME_MAPPINGS = {
"RunwareImageInferenceSettingsPromptEnhance": "Runware Image Inference Settings Prompt Enhance",
}
+14 -2
View File
@@ -5,7 +5,8 @@ quality, background, style, search, promptExtend, editRegions, thinking (boolean
thinkingLevel (high/medium/low), sequential, renderingSpeed (TURBO/DEFAULT/QUALITY),
magicPrompt (AUTO/ON/OFF), autoCrop, dilatePixels, creativity (raw/low/medium/high), colorPalette,
moodboards (from Runware Image Inference Settings Moodboards),
and structuredPrompt (from Runware Image Inference Settings Structured Prompt; Ideogram 4.0).
structuredPrompt (from Runware Image Inference Settings Structured Prompt; Ideogram 4.0),
and promptEnhance (from Runware Image Inference Settings Prompt Enhance).
"""
import json
@@ -208,6 +209,9 @@ class RunwareSettings:
"structuredPrompt": ("RUNWAREIMAGEINFERENCESTRUCTUREDPROMPT", {
"tooltip": "Connect Runware Image Inference Settings Structured Prompt (Ideogram 4.0). Merged into settings.structuredPrompt. Mutually exclusive with positivePrompt on the same API request.",
}),
"promptEnhance": ("RUNWAREIMAGEINFERENCEPROMPTENHANCE", {
"tooltip": "Connect Runware Image Inference Settings Prompt Enhance. Merged into settings.promptEnhance (temperature, topP). Omit from API when not connected or empty.",
}),
}
}
@@ -219,7 +223,7 @@ class RunwareSettings:
"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, "
"creativity (raw/low/medium/high), and optional colorPalette, moodboards, and structuredPrompt from dedicated settings nodes."
"creativity (raw/low/medium/high), and optional colorPalette, moodboards, structuredPrompt, and promptEnhance from dedicated settings nodes."
)
def createSettings(self, **kwargs) -> tuple[Dict[str, Any]]:
@@ -320,6 +324,14 @@ class RunwareSettings:
):
settings["structuredPrompt"] = structured_prompt
prompt_enhance: Optional[Dict[str, Any]] = kwargs.get("promptEnhance")
if (
prompt_enhance is not None
and isinstance(prompt_enhance, dict)
and len(prompt_enhance) > 0
):
settings["promptEnhance"] = prompt_enhance
if useRenderingSpeed:
settings["renderingSpeed"] = str(renderingSpeed)
if useMagicPrompt:
File diff suppressed because one or more lines are too long