155 lines
7.4 KiB
Python
155 lines
7.4 KiB
Python
from .utils import runwareUtils as rwUtils
|
|
|
|
class controlNet:
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"Guide Image": ("IMAGE", {
|
|
"tooltip": "Specifies the preprocessed image to be used as guide to control the image generation process."
|
|
}),
|
|
"ControlNet Search": ("STRING", {
|
|
"tooltip": "Searchg For Specific ControlNet By Name Or Civit AIR Code (eg: Canny).",
|
|
}),
|
|
"Model Architecture": ([
|
|
"All",
|
|
"FLUX.1-Schnell",
|
|
"FLUX.1-Dev",
|
|
"Pony",
|
|
"SD 1.5",
|
|
"SD 1.5 Hyper",
|
|
"SD 1.5 LCM",
|
|
"SD 3",
|
|
"SDXL 1.0",
|
|
"SDXL 1.0 LCM",
|
|
"SDXL Distilled",
|
|
"SDXL Hyper",
|
|
"SDXL Lightning",
|
|
"SDXL Turbo",
|
|
], {
|
|
"tooltip": "Choose ControlNet Model Architecture To Filter Results.",
|
|
"default": "All",
|
|
}),
|
|
"ControlNetType": ([
|
|
"All",
|
|
"Canny",
|
|
"Depth",
|
|
"MLSD",
|
|
"Normal BAE",
|
|
"Open Pose",
|
|
"Tile",
|
|
"Seg",
|
|
"Line Art",
|
|
"Line Art Anime",
|
|
"Shuffle",
|
|
"Scribble",
|
|
"Soft Edge",
|
|
], {
|
|
"tooltip": "Choose ControlNet Type To Filter Results.",
|
|
"default": "All",
|
|
}),
|
|
"ControlNetList": ([
|
|
"civitai:38784@44716 (SD1.5 Canny)",
|
|
"civitai:38784@44876 (SD1.5 Inpaint)",
|
|
"civitai:38784@44877 (SD1.5 Lineart)",
|
|
"civitai:38784@44795 (SD1.5 MLSD)",
|
|
"civitai:38784@44774 (SD1.5 NormalBAE)",
|
|
"runware:20@1 (SDXL Canny)",
|
|
"runware:25@1 (Flux Dev Canny)",
|
|
"runware:26@1 (Flux Dev Tile)",
|
|
"runware:28@1 (Flux Dev Blur)",
|
|
"runware:29@1 (Flux Dev OpenPose)",
|
|
"runware:30@1 (Flux Dev Gray)",
|
|
"runware:31@1 (Flux Dev Low Quality)",
|
|
], {
|
|
"tooltip": "ControlNet Results Will Show UP Here So You Could Choose From.",
|
|
"default": "civitai:38784@44716 (SD1.5 Canny)",
|
|
}),
|
|
"startStep": ("INT", {
|
|
"tooltip": "Represents the step number at which the ControlNet model starts to control the inference process. (Enter -1 To Disable)",
|
|
"min": -1,
|
|
"max": 99,
|
|
"default": -1,
|
|
}),
|
|
"startStepPercentage": ("INT", {
|
|
"tooltip": "Represents the percentage of steps at which the ControlNet model starts to control the inference process. (Enter -1 To Disable)",
|
|
"min": -1,
|
|
"max": 99,
|
|
"default": 0,
|
|
}),
|
|
"endStep": ("INT", {
|
|
"tooltip": "Represents the step number at which the ControlNet preprocessor ends to control the inference process. (Enter -1 To Disable)",
|
|
"min": -1,
|
|
"max": 100,
|
|
"default": -1,
|
|
}),
|
|
"endStepPercentage": ("INT", {
|
|
"tooltip": "Represents the percentage of steps at which the ControlNet model ends to control the inference process. (Enter -1 To Disable)",
|
|
"min": -1,
|
|
"max": 100,
|
|
"default": 80,
|
|
}),
|
|
"Control Mode": (["prompt", "controlnet", "balanced"], {
|
|
"tooltip": "Choose Control Mode To Control The Inference Process.",
|
|
"default": "balanced",
|
|
}),
|
|
"weight": ("FLOAT", {
|
|
"tooltip": "Represents the weight (strength) of the ControlNet model in the image.",
|
|
"default": 1.0,
|
|
"min": 0,
|
|
"max": 1.0,
|
|
"step": 0.1,
|
|
}),
|
|
},
|
|
}
|
|
|
|
DESCRIPTION = "Directly Search and Configure ControlNet Guidance to Connect It With Runware Image Inference Nodes In ComfyUI."
|
|
FUNCTION = "controlNet"
|
|
RETURN_TYPES = ("RUNWARECONTROLNET",)
|
|
RETURN_NAMES = ("Runware ControlNet",)
|
|
CATEGORY = "Runware"
|
|
|
|
@classmethod
|
|
def VALIDATE_INPUTS(cls, ControlNetList, startStep, startStepPercentage, endStep, endStepPercentage):
|
|
if((startStep == -1 and startStepPercentage == -1) or (startStep != -1 and startStepPercentage != -1)):
|
|
raise Exception("Error: Please Provide Either Start Step or Start Step Percentage!")
|
|
if((endStep == -1 and endStepPercentage == -1) or (endStep != -1 and endStepPercentage != -1)):
|
|
raise Exception("Error: Please Provide Either End Step or End Step Percentage!")
|
|
if((startStep != -1 and endStep != -1) and (startStep > endStep)):
|
|
raise Exception("Error: Start Step Cannot Be Greater Than End Step!")
|
|
elif((startStep != -1 and endStep != -1) and (startStep == endStep)):
|
|
raise Exception("Error: Start Step Cannot Be Equal To End Step!")
|
|
if((startStepPercentage != -1 and endStepPercentage != -1) and (startStepPercentage > endStepPercentage)):
|
|
raise Exception("Error: Start Step Percentage Cannot Be Greater Than End Step Percentage!")
|
|
elif((startStepPercentage != -1 and endStepPercentage != -1) and (startStepPercentage == endStepPercentage)):
|
|
raise Exception("Error: Start Step Percentage Cannot Be Equal To End Step Percentage!")
|
|
return True
|
|
|
|
def controlNet(self, **kwargs):
|
|
guideImage = kwargs.get("Guide Image")
|
|
currentModel = kwargs.get("ControlNetList")
|
|
controlNetAIRCode = currentModel.split(" ")[0]
|
|
startStep = kwargs.get("startStep")
|
|
startStepPercentage = kwargs.get("startStepPercentage")
|
|
endStep = kwargs.get("endStep")
|
|
endStepPercentage = kwargs.get("endStepPercentage")
|
|
controlMode = kwargs.get("Control Mode")
|
|
weight = kwargs.get("weight")
|
|
|
|
controlNetGuideOBJ = [{
|
|
"model": controlNetAIRCode,
|
|
"guideImage": rwUtils.convertTensor2IMG(guideImage),
|
|
"weight": round(weight, 2),
|
|
"controlMode": controlMode,
|
|
}]
|
|
|
|
if(startStep != -1):
|
|
controlNetGuideOBJ[0]["startStep"] = startStep
|
|
elif(startStepPercentage != -1):
|
|
controlNetGuideOBJ[0]["startStepPercentage"] = startStepPercentage
|
|
if(endStep != -1):
|
|
controlNetGuideOBJ[0]["endStep"] = endStep
|
|
elif(endStepPercentage != -1):
|
|
controlNetGuideOBJ[0]["endStepPercentage"] = endStepPercentage
|
|
|
|
return (controlNetGuideOBJ,) |