From 1f4af86c16b77ac876dafeb23f09ef151f5c123e Mon Sep 17 00:00:00 2001 From: numz Date: Sat, 19 Oct 2024 21:28:41 +0200 Subject: [PATCH] fix input bug --- workflow_nodes.py | 299 +++++----------------------------------------- 1 file changed, 32 insertions(+), 267 deletions(-) diff --git a/workflow_nodes.py b/workflow_nodes.py index 0b61d90..2a04323 100644 --- a/workflow_nodes.py +++ b/workflow_nodes.py @@ -18,241 +18,9 @@ class AnyType(str): BOOLEAN = ("BOOLEAN", {"default": True}) STRING = ("STRING", {"default": ""}) any_input = AnyType("*") -node_type_list = ["none", "IMAGE", "MASK", "STRING", "INT", "FLOAT", "LATENT", "BOOLEAN", "CLIP", "CONDITIONING", "MODEL", "VAE"] -""" -class WorkflowOutputImage: - def __init__(self): - self.prompt_id = None +node_type_list = ["none", "IMAGE", "MASK", "STRING", "INT", "FLOAT", "LATENT", "BOOLEAN", "CLIP", "CONDITIONING", + "MODEL", "VAE"] - @classmethod - def INPUT_TYPES(cls): - return { - "required": { - "Name": STRING, - "default": ("IMAGE", {"default": []}) - }, - "hidden": { - "ui": BOOLEAN - } - } - - RETURN_TYPES = ("IMAGE",) - RETURN_NAMES = ("images",) - FUNCTION = "execute" - OUTPUT_NODE = True - CATEGORY = "LipSync Studio 🎤" - - def execute(self, Name, default, ui=True): - if ui: - if default is None: - return (torch.tensor([]),) - return (default,) - else: - if default is None: - black_image_np = np.zeros((255, 255, 3), dtype=np.uint8) - black_image_pil = Image.fromarray(black_image_np) - transform = transforms.ToTensor() - image_tensor = transform(black_image_pil) - image_tensor = image_tensor.permute(1, 2, 0) - image_tensor = image_tensor.unsqueeze(0) - return {"ui": {"images": image_tensor}} - return {"ui": {"images": default}} - - -class WorkflowInputImage: - @classmethod - def INPUT_TYPES(cls): - return { - "required": { - "Name": STRING, - "default": ("IMAGE", {"default": []}) - }, - } - - RETURN_TYPES = ("IMAGE",) - RETURN_NAMES = ("images",) - FUNCTION = "execute" - CATEGORY = "LipSync Studio 🎤" - - def execute(self, Name, default): - # get current file path - return (default,) - - -class WorkflowInputString: - def __init__(self): - self.prompt_id = None - - @classmethod - def INPUT_TYPES(cls): - return { - "required": { - "Name": STRING, - "default": STRING - } - } - - RETURN_TYPES = ("STRING",) - RETURN_NAMES = ("string",) - FUNCTION = "execute" - CATEGORY = "LipSync Studio 🎤" - - def execute(self, Name, default): - return (default,) - - -class WorkflowInputBoolean: - @classmethod - def INPUT_TYPES(cls): - return { - "required": { - "Name": STRING, - "default": ("BOOLEAN", {"default": False}) - } - } - - RETURN_TYPES = ("BOOLEAN",) - RETURN_NAMES = ("boolean",) - FUNCTION = "execute" - CATEGORY = "LipSync Studio 🎤" - - def execute(self, Name, default): - return (default,) - - -class WorkflowInputInteger: - @classmethod - def INPUT_TYPES(cls): - return { - "required": { - "Name": STRING, - "default": ("INT", {"default": 0}) - } - } - - RETURN_TYPES = ("INT",) - RETURN_NAMES = ("int",) - FUNCTION = "execute" - CATEGORY = "LipSync Studio 🎤" - - def execute(self, Name, default): - return (default,) - - -class WorkflowInputFloat: - @classmethod - def INPUT_TYPES(cls): - return { - "required": { - "Name": STRING, - "default": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}) - } - } - - RETURN_TYPES = ("FLOAT",) - RETURN_NAMES = ("float",) - FUNCTION = "execute" - CATEGORY = "LipSync Studio 🎤" - - def execute(self, Name, default): - return (default,) - - -class WorkflowInputSwitch: - def __init__(self): - pass - - @classmethod - def INPUT_TYPES(cls): - return { - "required": { - "Name": STRING, - "images": ("IMAGE", {"default": []}), - "default": BOOLEAN, - } - } - - RETURN_TYPES = ("IMAGE",) - RETURN_NAMES = ("images",) - FUNCTION = "execute" - CATEGORY = "LipSync Studio 🎤" - - def execute(self, Name, images, default): - if default: - return (images,) - else: - return (images[0].unsqueeze(0),) - - -class WorkflowContinueImage: - def __init__(self): - pass - - @classmethod - def INPUT_TYPES(cls): - return { - "required": { - "input": ("IMAGE", {"default": []}), - "continue_workflow": BOOLEAN, - } - } - - RETURN_TYPES = ("IMAGE",) - RETURN_NAMES = ("output",) - FUNCTION = "execute" - CATEGORY = "LipSync Studio 🎤" - - @classmethod - def IS_CHANGED(s, input, continue_workflow): - m = hashlib.sha256() - if input is None: - return "0" - else: - m.update(input.encode()+str(continue_workflow).encode()) - return m.digest().hex() - - def execute(self, input, continue_workflow): - print("WorkflowContinue", continue_workflow) - if continue_workflow: - return (input,) - else: - return (input[0].unsqueeze(0),) - - -class WorkflowContinueLatent: - def __init__(self): - pass - - @classmethod - def INPUT_TYPES(cls): - return { - "required": { - "input": ("LATENT", {"default": []}), - "continue_workflow": BOOLEAN, - } - } - - RETURN_TYPES = ("LATENT",) - RETURN_NAMES = ("output",) - FUNCTION = "execute" - CATEGORY = "LipSync Studio 🎤" - - @classmethod - def IS_CHANGED(s, input, continue_workflow): - m = hashlib.sha256() - m.update(input.encode()+str(continue_workflow).encode()) - return m.digest().hex() - - def execute(self, input, continue_workflow): - print("WorkflowContinue", continue_workflow) - if continue_workflow: - return (input,) - else: - ret = {"samples": input["samples"][0].unsqueeze(0)} - if "noise_mask" in input: - ret["noise_mask"] = input["noise_mask"][0].unsqueeze(0) - return (ret,) -""" class WorkflowContinue: def __init__(self): @@ -280,7 +48,7 @@ class WorkflowContinue: if input is None: return "0" else: - m.update(input.encode()+str(continue_workflow).encode()) + m.update(input.encode() + str(continue_workflow).encode()) return m.digest().hex() def execute(self, input, type, continue_workflow): @@ -313,27 +81,23 @@ class WorkflowInput: RETURN_NAMES = ("output",) FUNCTION = "execute" CATEGORY = "FlowChain ⛓️" - #OUTPUT_NODE = True + + # OUTPUT_NODE = True @classmethod - def IS_CHANGED(s, Name, type,default, **kwargs): + def IS_CHANGED(s, Name, type, default, **kwargs): m = hashlib.sha256() if default is not None: m.update(str(default).encode()) else: - m.update(Name.encode()+type.encode()) + m.update(Name.encode() + type.encode()) return m.digest().hex() + @classmethod + def VALIDATE_INPUTS(cls, input_types): + return True + def execute(self, Name, type, default, **kwargs): - """if type == "SWITCH": - if "boolean" in kwargs: - if kwargs["boolean"]: - return (kwargs["default"],) - else: - return (kwargs["default"][0].unsqueeze(0),) - else: - return (kwargs["default"],) - else:""" return (default,) @@ -357,10 +121,12 @@ class WorkflowOutput: CATEGORY = "FlowChain ⛓️" OUTPUT_NODE = True + + @classmethod def IS_CHANGED(s, Name, type, ui=True, **kwargs): m = hashlib.sha256() - m.update(Name.encode()+type.encode()) + m.update(Name.encode() + type.encode()) return m.digest().hex() def execute(self, Name, type, ui=True, **kwargs): @@ -389,20 +155,19 @@ class WorkflowOutput: return ui - NODE_CLASS_MAPPINGS_NODES = { "WorkflowInput": WorkflowInput, "WorkflowOutput": WorkflowOutput, - #"WorkflowInputImage": WorkflowInputImage, - #"WorkflowInputString": WorkflowInputString, - #"WorkflowInputBoolean": WorkflowInputBoolean, - #"WorkflowInputInteger": WorkflowInputInteger, - #"WorkflowInputFloat": WorkflowInputFloat, - #"WorkflowOutputImage": WorkflowOutputImage, - #"WorkflowInputSwitch": WorkflowInputSwitch, - #"WorkflowContinueImage": WorkflowContinueImage, - #"WorkflowContinueLatent": WorkflowContinueLatent, + # "WorkflowInputImage": WorkflowInputImage, + # "WorkflowInputString": WorkflowInputString, + # "WorkflowInputBoolean": WorkflowInputBoolean, + # "WorkflowInputInteger": WorkflowInputInteger, + # "WorkflowInputFloat": WorkflowInputFloat, + # "WorkflowOutputImage": WorkflowOutputImage, + # "WorkflowInputSwitch": WorkflowInputSwitch, + # "WorkflowContinueImage": WorkflowContinueImage, + # "WorkflowContinueLatent": WorkflowContinueLatent, "WorkflowContinue": WorkflowContinue, } @@ -411,15 +176,15 @@ NODE_CLASS_MAPPINGS_NODES = { NODE_DISPLAY_NAME_MAPPINGS_NODES = { "WorkflowInput": "Workflow Input (FlowChain ⛓️)", "WorkflowOutput": "Workflow Output (FlowChain ⛓️)", - #"WorkflowInputImage": "Workflow Input Image (Lipsync Studio)", - #"WorkflowInputString": "Workflow Input String (Lipsync Studio)", - #"WorkflowInputBoolean": "Workflow Input Boolean (Lipsync Studio)", - #"WorkflowInputInteger": "Workflow Input Integer (Lipsync Studio)", - #"WorkflowInputFloat": "Workflow Input Float (Lipsync Studio)", - #"WorkflowOutputImage": "Workflow Output Image (Lipsync Studio)", - #"WorkflowInputSwitch": "Workflow Input Switch (Lipsync Studio)", - #"WorkflowContinueImage": "Workflow Continue Image (Lipsync Studio)", - #"WorkflowContinueLatent": "Workflow Continue Latent (Lipsync Studio)", + # "WorkflowInputImage": "Workflow Input Image (Lipsync Studio)", + # "WorkflowInputString": "Workflow Input String (Lipsync Studio)", + # "WorkflowInputBoolean": "Workflow Input Boolean (Lipsync Studio)", + # "WorkflowInputInteger": "Workflow Input Integer (Lipsync Studio)", + # "WorkflowInputFloat": "Workflow Input Float (Lipsync Studio)", + # "WorkflowOutputImage": "Workflow Output Image (Lipsync Studio)", + # "WorkflowInputSwitch": "Workflow Input Switch (Lipsync Studio)", + # "WorkflowContinueImage": "Workflow Continue Image (Lipsync Studio)", + # "WorkflowContinueLatent": "Workflow Continue Latent (Lipsync Studio)", "WorkflowContinue": "Workflow Continue (FlowChain ⛓️)", # "VisualizeOpticalFlow": "Visualize optical flow", }