SwarmComfyCommon / SwarmLoraLoader.py
Goodis's picture
Upload 55 files
ca2a3d8 verified
import comfy
import folder_paths
class SwarmLoraLoader:
def __init__(self):
self.loaded_lora = None
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"model": ("MODEL", ),
"clip": ("CLIP", ),
"lora_names": ("STRING", {"multiline": True, "tooltip": "Comma separated list of lora names to load."}),
"lora_weights": ("STRING", {"multiline": True, "tooltip": "Comma separated list of lora weights to apply to each lora. Must match the number of loras."}),
}
}
CATEGORY = "SwarmUI/models"
RETURN_TYPES = ("MODEL", "CLIP")
FUNCTION = "load_loras"
DESCRIPTION = "Like a regular LoRA Loader, but designed to take a dynamic list of loras and weights, to allow easier integration with SwarmUI custom workflows."
def load_loras(self, model, clip, lora_names, lora_weights):
if lora_names.strip() == "":
return (model, clip)
lora_names = lora_names.split(",")
lora_weights = lora_weights.split(",")
lora_weights = [float(x.strip()) for x in lora_weights]
for i in range(len(lora_names)):
lora_name = lora_names[i].strip()
weight = lora_weights[i]
if weight == 0:
continue
# This section copied directly from default comfy LoraLoader
lora_path = folder_paths.get_full_path("loras", lora_name)
lora = None
if self.loaded_lora is not None:
if self.loaded_lora[0] == lora_path:
lora = self.loaded_lora[1]
else:
temp = self.loaded_lora
self.loaded_lora = None
del temp
if lora is None:
lora = comfy.utils.load_torch_file(lora_path, safe_load=True)
self.loaded_lora = (lora_path, lora)
model, clip = comfy.sd.load_lora_for_models(model, clip, lora, weight, weight)
return (model, clip)
NODE_CLASS_MAPPINGS = {
"SwarmLoraLoader": SwarmLoraLoader,
}