Added support for Flux outpaint
This commit is contained in:
+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, 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 = [];
|
||||
@@ -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) {
|
||||
|
||||
@@ -5042,6 +5042,7 @@ export {
|
||||
syncProviderSettingsToggleHandler,
|
||||
syncSegmentToggleHandler,
|
||||
settingsToggleHandler,
|
||||
outpaintSettingsToggleHandler,
|
||||
safetyInputsToggleHandler,
|
||||
imageInferenceSettingsColorPaletteToggleHandler,
|
||||
audioInputToggleHandler,
|
||||
@@ -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) {
|
||||
@@ -5248,6 +5251,46 @@ 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 applyState() {
|
||||
const enabled = useWidget.value === true;
|
||||
toggleWidgetEnabled(paramWidget, enabled, settingsNode);
|
||||
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";
|
||||
}
|
||||
settingsNode.setDirtyCanvas(true);
|
||||
}
|
||||
setTimeout(applyState, 100);
|
||||
appendWidgetCB(useWidget, () => setTimeout(applyState, 50));
|
||||
}
|
||||
|
||||
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) {
|
||||
|
||||
+40
-21
@@ -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": (
|
||||
"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. Must be a multiple of 64. Only used when 'Use Top' is enabled.",
|
||||
"default": 64,
|
||||
"min": 0,
|
||||
"max": 2048,
|
||||
"step": 64,
|
||||
"step": 1,
|
||||
},
|
||||
),
|
||||
"useRight": ("BOOLEAN", {
|
||||
"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. Must be a multiple of 64. 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. Must be a multiple of 64. 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. Must be a multiple of 64. 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,
|
||||
@@ -63,18 +83,17 @@ class outpaintSettings:
|
||||
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,)
|
||||
|
||||
+15
-2
@@ -3,7 +3,7 @@ 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), and colorPalette
|
||||
magicPrompt (AUTO/ON/OFF), autoCrop, and colorPalette
|
||||
(from Runware Image Inference Settings Color Palette).
|
||||
"""
|
||||
|
||||
@@ -172,6 +172,16 @@ class RunwareSettings:
|
||||
"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",
|
||||
}),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -182,7 +192,7 @@ 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), 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]]:
|
||||
@@ -206,6 +216,7 @@ class RunwareSettings:
|
||||
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)
|
||||
@@ -272,6 +283,8 @@ class RunwareSettings:
|
||||
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}
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user