From b9f3e71d2c86df6f0cd22be554e57ca29e6d6596 Mon Sep 17 00:00:00 2001 From: ednavho Date: Sat, 25 Jul 2026 13:59:12 -0700 Subject: [PATCH] Add PseudoVettedLoraLoader node Fetches vetted LoRA models (category_id=5) from the Pseudorandom Supabase database at server startup and presents filenames in a COMBO dropdown. Takes MODEL and CLIP inputs, applies the LoRA at the specified strengths, and returns the modified MODEL and CLIP. Co-Authored-By: Claude Sonnet 4.6 --- __init__.py | 2 ++ node_loaders_vetted.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/__init__.py b/__init__.py index 0a1be62..e6ce604 100644 --- a/__init__.py +++ b/__init__.py @@ -30,6 +30,7 @@ NODE_CLASS_MAPPINGS = { "PseudoUnpackModelSnapshot": PseudoUnpackModelSnapshot, "PseudoVettedCheckpointLoader": PseudoVettedCheckpointLoader, "PseudoVettedControlNetLoader": PseudoVettedControlNetLoader, + "PseudoVettedLoraLoader": PseudoVettedLoraLoader, # io "PseudoSaveImageWithEmbeddedMasks": PseudoSaveImageWithEmbeddedMasks, @@ -74,6 +75,7 @@ NODE_DISPLAY_NAME_MAPPINGS = { "PseudoUnpackModelSnapshot": "Unpack Model Snapshot", "PseudoVettedCheckpointLoader": "Vetted Checkpoint Loader", "PseudoVettedControlNetLoader": "Vetted ControlNet Loader", + "PseudoVettedLoraLoader": "Vetted LoRA Loader", # io "PseudoSaveImageWithEmbeddedMasks": "Save Image with Embedded Masks", diff --git a/node_loaders_vetted.py b/node_loaders_vetted.py index a5928b4..1f901c4 100644 --- a/node_loaders_vetted.py +++ b/node_loaders_vetted.py @@ -2,6 +2,7 @@ import requests import folder_paths import comfy.sd import comfy.controlnet +import comfy.utils SUPABASE_URL = "https://psfxsrilludczykwdyxz.supabase.co/rest/v1" @@ -47,6 +48,11 @@ _CONTROLNET_NAMES = ( or ["(no vetted controlnet models available)"] ) +_LORA_NAMES = ( + [m["file_name"] for m in _VETTED_MODELS if m["category_id"] == 5] + or ["(no vetted lora models available)"] +) + class PseudoVettedCheckpointLoader: @classmethod @@ -95,3 +101,39 @@ class PseudoVettedControlNetLoader: raise RuntimeError(f"[pseudocomfy] PseudoVettedControlNetLoader: invalid controlnet file: {model}") print(f"[pseudocomfy] PseudoVettedControlNetLoader: {model}") return (controlnet,) + + +class PseudoVettedLoraLoader: + def __init__(self): + self.loaded_lora = None + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "model": ("MODEL",), + "lora": (_LORA_NAMES, {}), + "strength_model": ("FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01}), + }, + } + + RETURN_TYPES = ("MODEL",) + RETURN_NAMES = ("model",) + FUNCTION = "func" + CATEGORY = "Pseudocomfy/Loaders" + + def func(self, model, lora, strength_model): + if strength_model == 0: + return (model,) + + lora_path = folder_paths.get_full_path_or_raise("loras", lora) + + if self.loaded_lora is not None and self.loaded_lora[0] == lora_path: + lora_weights, lora_metadata = self.loaded_lora[1], self.loaded_lora[2] + else: + lora_weights, lora_metadata = comfy.utils.load_torch_file(lora_path, safe_load=True, return_metadata=True) + self.loaded_lora = (lora_path, lora_weights, lora_metadata) + + model_out, _ = comfy.sd.load_lora_for_models(model, None, lora_weights, strength_model, 0, lora_metadata=lora_metadata) + print(f"[pseudocomfy] PseudoVettedLoraLoader: {lora} (strength: {strength_model})") + return (model_out,)