import os import folder_paths class LoraStackerNode: @classmethod def INPUT_TYPES(cls): return { "required": { "lora_a": (['None'] + folder_paths.get_filename_list("loras"), ), "lora_strength_a": ("FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}), "lora_b": (['None'] + folder_paths.get_filename_list("loras"), ), "lora_strength_b": ("FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}), "lora_c": (['None'] + folder_paths.get_filename_list("loras"), ), "lora_strength_c": ("FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}), "lora_d": (['None'] + folder_paths.get_filename_list("loras"), ), "lora_strength_d": ("FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}), "add_default_generation": ("BOOLEAN", {"default": False},), }, } RETURN_TYPES = ("STRING", "INT",) RETURN_NAMES = ("LORA_INFO", "TOTAL_LORAS",) FUNCTION = "process_loras" CATEGORY = "sn0w/lora" OUTPUT_NODE = True def process_loras(self, lora_a, lora_strength_a, lora_b, lora_strength_b, lora_c, lora_strength_c, lora_d, lora_strength_d, add_default_generation): # Function to extract lora string and format with strength def format_lora(lora, strength): if lora.lower() == "none": # Skip "None" loras return None lora_string = os.path.splitext(os.path.basename(lora))[0] return f"" # Process each lora and its strength, filtering out "None" loras = [ format_lora(lora_a, lora_strength_a), format_lora(lora_b, lora_strength_b), format_lora(lora_c, lora_strength_c), format_lora(lora_d, lora_strength_d) ] # Filter out None values from the loras list loras = [lora for lora in loras if lora is not None] # Initialize total_loras count based on filtered loras total_loras = len(loras) # Handle additional generation if required if add_default_generation: total_loras += 1 loras.append("Nothing") # Join the lora strings into a single string separated by semicolons lora_output = ';'.join(loras) return (lora_output, total_loras,)