from comfy import node_helpers import comfy.utils from comfy_extras.constants.resolutions import KONTEXT_RESOLUTIONS class CLIPTextEncodeFlux: @classmethod def INPUT_TYPES(s): return {"required": { "clip": ("CLIP",), "clip_l": ("STRING", {"multiline": True, "dynamicPrompts": True}), "t5xxl": ("STRING", {"multiline": True, "dynamicPrompts": True}), "guidance": ("FLOAT", {"default": 3.5, "min": 0.0, "max": 100.0, "step": 0.1}), }} RETURN_TYPES = ("CONDITIONING",) FUNCTION = "encode" CATEGORY = "advanced/conditioning/flux" def encode(self, clip, clip_l, t5xxl, guidance): tokens = clip.tokenize(clip_l) tokens["t5xxl"] = clip.tokenize(t5xxl)["t5xxl"] return (clip.encode_from_tokens_scheduled(tokens, add_dict={"guidance": guidance}),) class FluxGuidance: @classmethod def INPUT_TYPES(s): return {"required": { "conditioning": ("CONDITIONING",), "guidance": ("FLOAT", {"default": 3.5, "min": -100.0, "max": 100.0, "step": 0.1}), }} RETURN_TYPES = ("CONDITIONING",) FUNCTION = "append" CATEGORY = "advanced/conditioning/flux" def append(self, conditioning, guidance): c = node_helpers.conditioning_set_values(conditioning, {"guidance": guidance}) return (c,) class FluxDisableGuidance: @classmethod def INPUT_TYPES(s): return {"required": { "conditioning": ("CONDITIONING",), }} RETURN_TYPES = ("CONDITIONING",) FUNCTION = "append" CATEGORY = "advanced/conditioning/flux" DESCRIPTION = "This node completely disables the guidance embed on Flux and Flux like models" def append(self, conditioning): c = node_helpers.conditioning_set_values(conditioning, {"guidance": None}) return (c,) class FluxKontextImageScale: @classmethod def INPUT_TYPES(s): return {"required": {"image": ("IMAGE",), }, } RETURN_TYPES = ("IMAGE",) FUNCTION = "scale" CATEGORY = "advanced/conditioning/flux" DESCRIPTION = "This node resizes the image to one that is more optimal for flux kontext." def scale(self, image): width = image.shape[2] height = image.shape[1] aspect_ratio = width / height _, width, height = min((abs(aspect_ratio - w / h), w, h) for w, h in KONTEXT_RESOLUTIONS) image = comfy.utils.common_upscale(image.movedim(-1, 1), width, height, "lanczos", "center").movedim(1, -1) return (image,) NODE_CLASS_MAPPINGS = { "CLIPTextEncodeFlux": CLIPTextEncodeFlux, "FluxGuidance": FluxGuidance, "FluxDisableGuidance": FluxDisableGuidance, "FluxKontextImageScale": FluxKontextImageScale, }