Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion clientlibs/main.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { app } from "../../scripts/app.js";
import { api } from "../../scripts/api.js";
import { promptEnhanceHandler, syncDimensionsNodeHandler, searchNodeHandler, APIKeyHandler, captionNodeHandler, saveTextHandler, mediaUUIDHandler, save3DFilepathHandler, videoTranscriptionHandler, videoOutputsHandler, handleCustomErrors, videoInferenceDimensionsHandler, videoModelSearchFilterHandler, audioModelSearchFilterHandler, textModelSearchFilterHandler, vectorizeModelSearchFilterHandler, vectorizeToggleHandler, useParameterToggleHandler, imageInferenceToggleHandler, imageInferenceAdvancedFeaturesToggleHandler, watermarkAdvancedFeatureToggleHandler, videoInferenceSpeechInputToggleHandler, regionalPromptingRegionsToggleHandler, upscalerToggleHandler, imageUpscalerSettingsToggleHandler, videoUpscalerToggleHandler, audioInferenceToggleHandler, audioInferenceSpeechToggleHandler, audioSettingsToggleHandler, textInferenceSettingsToggleHandler, videoSettingsToggleHandler, videoInferenceSettingsTtsToggleHandler, videoInferenceSettingsActiveSpeakerDetectionToggleHandler, videoInferenceSettingsActiveSpeakerBoundingBoxesToggleHandler, videoInferenceSettingsSegmentsToggleHandler, acceleratorOptionsToggleHandler, bytedanceProviderSettingsToggleHandler, xaiProviderSettingsToggleHandler, viduProviderSettingsToggleHandler, sourcefulProviderSettingsToggleHandler, sourcefulProviderSettingsFontsToggleHandler, threeDInferenceToggleHandler, threeDInferenceSettingsToggleHandler, threeDInferenceSettingsLatToggleHandler, ultralyticsProviderSettingsToggleHandler, openaiProviderSettingsToggleHandler, lightricksProviderSettingsToggleHandler, klingProviderSettingsToggleHandler, lumaProviderSettingsToggleHandler, briaProviderSettingsToggleHandler, pixverseProviderSettingsToggleHandler, alibabaProviderSettingsToggleHandler, mireloProviderSettingsToggleHandler, googleProviderSettingsToggleHandler, syncProviderSettingsToggleHandler, syncSegmentToggleHandler, settingsToggleHandler, safetyInputsToggleHandler, imageInferenceSettingsColorPaletteToggleHandler, audioInputToggleHandler, speechInputToggleHandler, briaProviderMaskToggleHandler, wanAnimateAdvancedFeatureSettingsToggleHandler, videoAdvancedFeatureInputsToggleHandler, audioInferenceInputsToggleHandler, audioInferenceSpeechVoicesToggleHandler, 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, 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 = [];
Expand Down Expand Up @@ -145,6 +145,8 @@ app.registerExtension({
sourcefulProviderSettingsFontsToggleHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.SETTINGS) {
settingsToggleHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.OUTPAINT) {
outpaintSettingsToggleHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.SAFETYINPUTS) {
safetyInputsToggleHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.IMAGEINFERENCESETTINGSCOLORPALETTE) {
Expand Down
68 changes: 68 additions & 0 deletions clientlibs/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -5042,6 +5042,7 @@ export {
syncProviderSettingsToggleHandler,
syncSegmentToggleHandler,
settingsToggleHandler,
outpaintSettingsToggleHandler,
safetyInputsToggleHandler,
imageInferenceSettingsColorPaletteToggleHandler,
audioInputToggleHandler,
Expand Down Expand Up @@ -5156,6 +5157,8 @@ function settingsToggleHandler(settingsNode) {
const renderingSpeedWidget = settingsNode.widgets.find(w => w.name === "renderingSpeed");
const useMagicPromptWidget = settingsNode.widgets.find(w => w.name === "useMagicPrompt");
const magicPromptWidget = settingsNode.widgets.find(w => w.name === "magicPrompt");
const useAutoCropWidget = settingsNode.widgets.find(w => w.name === "useAutoCrop");
const autoCropWidget = settingsNode.widgets.find(w => w.name === "autoCrop");

// Helper function to toggle widget enabled state
function toggleWidgetState(useWidget, paramWidget, paramName) {
Expand Down Expand Up @@ -5248,6 +5251,71 @@ function settingsToggleHandler(settingsNode) {
if (useMagicPromptWidget && magicPromptWidget) {
toggleWidgetState(useMagicPromptWidget, magicPromptWidget, "magicPrompt");
}
if (useAutoCropWidget && autoCropWidget) {
toggleWidgetState(useAutoCropWidget, autoCropWidget, "autoCrop");
}
}

function outpaintSettingsToggleHandler(settingsNode) {
if (!settingsNode?.widgets) return;

const useTopWidget = settingsNode.widgets.find(w => w && w.name === "useTop");
const topWidget = settingsNode.widgets.find(w => w && w.name === "Top");
const useRightWidget = settingsNode.widgets.find(w => w && w.name === "useRight");
const rightWidget = settingsNode.widgets.find(w => w && w.name === "Right");
const useBottomWidget = settingsNode.widgets.find(w => w && w.name === "useBottom");
const bottomWidget = settingsNode.widgets.find(w => w && w.name === "Bottom");
const useLeftWidget = settingsNode.widgets.find(w => w && w.name === "useLeft");
const leftWidget = settingsNode.widgets.find(w => w && w.name === "Left");
const useBlurWidget = settingsNode.widgets.find(w => w && w.name === "useBlur");
const blurWidget = settingsNode.widgets.find(w => w && w.name === "Blur");

function toggleWidgetState(useWidget, paramWidget, paramName) {
if (!useWidget || !paramWidget) return;

function toggleEnabled() {
const enabled = useWidget.value === true;

if (paramWidget.inputEl) {
paramWidget.inputEl.disabled = !enabled;
paramWidget.inputEl.style.opacity = enabled ? "1" : "0.5";
paramWidget.inputEl.style.cursor = enabled ? "text" : "not-allowed";
paramWidget.inputEl.readOnly = !enabled;
}

paramWidget.disabled = !enabled;

if (!paramWidget.inputEl) {
const nodeElement = settingsNode.htmlElements?.widgetsContainer || settingsNode.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";
}
}
}
}

settingsNode.setDirtyCanvas(true);
}

appendWidgetCB(useWidget, () => {
setTimeout(toggleEnabled, 50);
});

setTimeout(toggleEnabled, 100);
}

if (useTopWidget && topWidget) toggleWidgetState(useTopWidget, topWidget, "Top");
if (useRightWidget && rightWidget) toggleWidgetState(useRightWidget, rightWidget, "Right");
if (useBottomWidget && bottomWidget) toggleWidgetState(useBottomWidget, bottomWidget, "Bottom");
if (useLeftWidget && leftWidget) toggleWidgetState(useLeftWidget, leftWidget, "Left");
if (useBlurWidget && blurWidget) toggleWidgetState(useBlurWidget, blurWidget, "Blur");
}

function safetyInputsToggleHandler(safetyNode) {
Expand Down
2 changes: 1 addition & 1 deletion modules/imageInference.py
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,7 @@ def generateImage(self, **kwargs):
genConfig[0]["embeddings"] = runwareEmbedding
elif (isinstance(runwareEmbedding, dict)):
genConfig[0]["embeddings"] = [runwareEmbedding]
if (runwareOutpainting is not None):
if runwareOutpainting:
genConfig[0]["outpaint"] = runwareOutpainting
if (runwareVAE is not None):
genConfig[0]["vae"] = runwareVAE
Expand Down
63 changes: 41 additions & 22 deletions modules/outpaintSettings.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,50 +3,70 @@ class outpaintSettings:
def INPUT_TYPES(cls):
return {
"required": {
"useTop": ("BOOLEAN", {
"tooltip": "Enable to include top extension in outpaint settings.",
"default": False,
}),
"Top": (
Comment thread
Sirsho1997 marked this conversation as resolved.
Comment thread
Sirsho1997 marked this conversation as resolved.
"INT",
{
"tooltip": "Number of pixels to extend at the top of the image. Must be a multiple of 64.",
"tooltip": "Number of pixels to extend at the top of the image. Only used when 'Use Top' is enabled.",
"default": 64,
"min": 0,
"max": 2048,
"step": 64,
"step": 1,
},
),
Comment thread
Sirsho1997 marked this conversation as resolved.
Comment thread
Sirsho1997 marked this conversation as resolved.
"useRight": ("BOOLEAN", {
Comment thread
Sirsho1997 marked this conversation as resolved.
"tooltip": "Enable to include right extension in outpaint settings.",
"default": False,
}),
"Right": (
"INT",
{
"tooltip": "Number of pixels to extend at the right of the image. Must be a multiple of 64.",
"tooltip": "Number of pixels to extend at the right of the image. Only used when 'Use Right' is enabled.",
"default": 64,
"min": 0,
"max": 2048,
"step": 64,
"step": 1,
},
),
"useBottom": ("BOOLEAN", {
"tooltip": "Enable to include bottom extension in outpaint settings.",
"default": False,
}),
"Bottom": (
"INT",
{
"tooltip": "Number of pixels to extend at the bottom of the image. Must be a multiple of 64.",
"tooltip": "Number of pixels to extend at the bottom of the image. Only used when 'Use Bottom' is enabled.",
"default": 64,
"min": 0,
"max": 2048,
"step": 64,
"step": 1,
},
),
"useLeft": ("BOOLEAN", {
"tooltip": "Enable to include left extension in outpaint settings.",
"default": False,
}),
"Left": (
"INT",
{
"tooltip": "Number of pixels to extend at the left of the image. Must be a multiple of 64.",
"tooltip": "Number of pixels to extend at the left of the image. Only used when 'Use Left' is enabled.",
"default": 64,
"min": 0,
"max": 2048,
"step": 64,
"step": 1,
},
),
"useBlur": ("BOOLEAN", {
"tooltip": "Enable to include blur in outpaint settings.",
"default": False,
}),
"Blur": (
"INT",
{
"tooltip": "The amount of blur to apply at the boundaries between the original image and the extended areas, measured in pixels.",
"tooltip": "The amount of blur to apply at the boundaries between the original image and the extended areas, measured in pixels. Only used when 'Use Blur' is enabled.",
"default": 0,
"min": 0,
"max": 32,
Expand All @@ -63,18 +83,17 @@ def INPUT_TYPES(cls):
CATEGORY = "Runware"

def outpaintSettings(self, **kwargs):
top = kwargs.get("Top", 0)
right = kwargs.get("Right", 0)
bottom = kwargs.get("Bottom", 0)
left = kwargs.get("Left", 0)
blur = kwargs.get("Blur", 0)
outpaint = {}

outpaint = {
"top": top,
"right": right,
"bottom": bottom,
"left": left,
"blur": blur,
}
if kwargs.get("useTop", False):
outpaint["top"] = int(kwargs.get("Top", 0))
if kwargs.get("useRight", False):
outpaint["right"] = int(kwargs.get("Right", 0))
if kwargs.get("useBottom", False):
outpaint["bottom"] = int(kwargs.get("Bottom", 0))
if kwargs.get("useLeft", False):
outpaint["left"] = int(kwargs.get("Left", 0))
if kwargs.get("useBlur", False):
outpaint["blur"] = int(kwargs.get("Blur", 0))

return (outpaint,)
return (outpaint if outpaint else None,)
17 changes: 15 additions & 2 deletions modules/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
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), and colorPalette
magicPrompt (AUTO/ON/OFF), autoCrop, and colorPalette
(from Runware Image Inference Settings Color Palette).
"""

Expand Down Expand Up @@ -172,6 +172,16 @@ def INPUT_TYPES(cls):
"default": "AUTO",
"tooltip": "Determine if MagicPrompt should be used. Only used when 'Use Magic Prompt' is enabled.",
}),
"useAutoCrop": ("BOOLEAN", {
"tooltip": "Enable to include autoCrop in settings.",
"default": False,
}),
"autoCrop": ("BOOLEAN", {
"tooltip": "If true, crop the reference image to the canvas bounds when it extends beyond the edges. Defaults to false. Only used when 'Use Auto Crop' is enabled.",
"default": False,
"label_on": "true",
"label_off": "false",
}),
}
}

Expand All @@ -182,7 +192,7 @@ def INPUT_TYPES(cls):
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), and optional colorPalette from the Color Palette node."
"renderingSpeed (TURBO/DEFAULT/QUALITY), magicPrompt (AUTO/ON/OFF), autoCrop, and optional colorPalette from the Color Palette node."
)

def createSettings(self, **kwargs) -> tuple[Dict[str, Any]]:
Expand All @@ -206,6 +216,7 @@ def createSettings(self, **kwargs) -> tuple[Dict[str, Any]]:
useSequential = kwargs.get("useSequential", False)
useRenderingSpeed = kwargs.get("useRenderingSpeed", False)
useMagicPrompt = kwargs.get("useMagicPrompt", False)
useAutoCrop = kwargs.get("useAutoCrop", False)

# Get value parameters
temperature = kwargs.get("temperature", 1.0)
Expand Down Expand Up @@ -272,6 +283,8 @@ def createSettings(self, **kwargs) -> tuple[Dict[str, Any]]:
settings["renderingSpeed"] = str(renderingSpeed)
if useMagicPrompt:
settings["magicPrompt"] = str(magicPrompt)
if useAutoCrop:
settings["autoCrop"] = bool(kwargs.get("autoCrop", False))

# Clean up None values
settings = {k: v for k, v in settings.items() if v is not None}
Expand Down
1 change: 1 addition & 0 deletions workflows/Runware_Image_Inference_Flux_Outpaint.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions workflows/Runware_Image_Inference_Imagineart_2.json

Large diffs are not rendered by default.

Loading