2024-07-26 17:04:48 +00:00
|
|
|
class CLIPTextEncodeHunyuanDiT:
|
|
|
|
@classmethod
|
|
|
|
def INPUT_TYPES(s):
|
|
|
|
return {"required": {
|
|
|
|
"clip": ("CLIP", ),
|
|
|
|
"bert": ("STRING", {"multiline": True, "dynamicPrompts": True}),
|
|
|
|
"mt5xl": ("STRING", {"multiline": True, "dynamicPrompts": True}),
|
|
|
|
}}
|
|
|
|
RETURN_TYPES = ("CONDITIONING",)
|
|
|
|
FUNCTION = "encode"
|
|
|
|
|
|
|
|
CATEGORY = "advanced/conditioning"
|
|
|
|
|
|
|
|
def encode(self, clip, bert, mt5xl):
|
|
|
|
tokens = clip.tokenize(bert)
|
|
|
|
tokens["mt5xl"] = clip.tokenize(mt5xl)["mt5xl"]
|
|
|
|
|
|
|
|
output = clip.encode_from_tokens(tokens, return_pooled=True, return_dict=True)
|
|
|
|
cond = output.pop("cond")
|
|
|
|
return ([[cond, output]], )
|
|
|
|
|
2024-08-09 06:59:24 +00:00
|
|
|
|
|
|
|
class ControlNetApplyAdvancedHunYuan:
|
|
|
|
@classmethod
|
|
|
|
def INPUT_TYPES(s):
|
|
|
|
return {"required": {"positive": ("CONDITIONING", ),
|
|
|
|
"negative": ("CONDITIONING", ),
|
|
|
|
"control_net": ("CONTROL_NET", ),
|
|
|
|
"image": ("IMAGE", ),
|
|
|
|
"vae": ("VAE", ),
|
|
|
|
"strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}),
|
|
|
|
"control_weight": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 2.0, "step": 0.001}),
|
|
|
|
"start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}),
|
|
|
|
"end_percent": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001})
|
|
|
|
}}
|
|
|
|
|
|
|
|
RETURN_TYPES = ("CONDITIONING","CONDITIONING")
|
|
|
|
RETURN_NAMES = ("positive", "negative")
|
|
|
|
FUNCTION = "apply_controlnet"
|
|
|
|
|
|
|
|
CATEGORY = "conditioning/controlnet"
|
|
|
|
|
|
|
|
def apply_controlnet(self, positive, negative, control_net, image, strength, control_weight, start_percent, end_percent, vae=None):
|
|
|
|
if strength == 0:
|
|
|
|
return (positive, negative)
|
|
|
|
|
|
|
|
control_hint = image.movedim(-1,1)
|
|
|
|
cnets = {}
|
|
|
|
|
|
|
|
out = []
|
|
|
|
for conditioning in [positive, negative]:
|
|
|
|
c = []
|
|
|
|
for t in conditioning:
|
|
|
|
d = t[1].copy()
|
|
|
|
|
|
|
|
prev_cnet = d.get('control', None)
|
|
|
|
if prev_cnet in cnets:
|
|
|
|
c_net = cnets[prev_cnet]
|
|
|
|
else:
|
|
|
|
c_net = control_net.copy().set_cond_hint(control_hint, strength, (start_percent, end_percent), vae)
|
|
|
|
c_net.set_extra_arg('control_weight', control_weight)
|
|
|
|
|
|
|
|
c_net.set_previous_controlnet(prev_cnet)
|
|
|
|
cnets[prev_cnet] = c_net
|
|
|
|
|
|
|
|
d['control'] = c_net
|
|
|
|
d['control_apply_to_uncond'] = False
|
|
|
|
n = [t[0], d]
|
|
|
|
c.append(n)
|
|
|
|
out.append(c)
|
|
|
|
return (out[0], out[1])
|
|
|
|
|
2024-07-26 17:04:48 +00:00
|
|
|
NODE_CLASS_MAPPINGS = {
|
|
|
|
"CLIPTextEncodeHunyuanDiT": CLIPTextEncodeHunyuanDiT,
|
2024-08-09 06:59:24 +00:00
|
|
|
"ControlNetApplyAdvancedHunYuan": ControlNetApplyAdvancedHunYuan,
|
2024-07-26 17:04:48 +00:00
|
|
|
}
|