Some checks failed
Python Linting / Run Ruff (push) Has been cancelled
Python Linting / Run Pylint (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.10, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.11, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.12, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-unix-nightly (12.1, , linux, 3.11, [self-hosted Linux], nightly) (push) Has been cancelled
Execution Tests / test (macos-latest) (push) Has been cancelled
Execution Tests / test (ubuntu-latest) (push) Has been cancelled
Execution Tests / test (windows-latest) (push) Has been cancelled
Test server launches without errors / test (push) Has been cancelled
Unit Tests / test (macos-latest) (push) Has been cancelled
Unit Tests / test (ubuntu-latest) (push) Has been cancelled
Unit Tests / test (windows-2022) (push) Has been cancelled
Includes 30 custom nodes committed directly, 7 Civitai-exclusive loras stored via Git LFS, and a setup script that installs all dependencies and downloads HuggingFace-hosted models on vast.ai. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
143 lines
4.3 KiB
Python
143 lines
4.3 KiB
Python
import os
|
|
import folder_paths
|
|
from ..libs.utils import AlwaysEqualProxy
|
|
|
|
class showLoaderSettingsNames:
|
|
@classmethod
|
|
def INPUT_TYPES(s):
|
|
return {
|
|
"required": {
|
|
"pipe": ("PIPE_LINE",),
|
|
},
|
|
"hidden": {
|
|
"unique_id": "UNIQUE_ID",
|
|
"extra_pnginfo": "EXTRA_PNGINFO",
|
|
},
|
|
}
|
|
|
|
RETURN_TYPES = ("STRING", "STRING", "STRING",)
|
|
RETURN_NAMES = ("ckpt_name", "vae_name", "lora_name")
|
|
|
|
FUNCTION = "notify"
|
|
OUTPUT_NODE = True
|
|
|
|
CATEGORY = "EasyUse/Util"
|
|
|
|
def notify(self, pipe, names=None, unique_id=None, extra_pnginfo=None):
|
|
if unique_id and extra_pnginfo and "workflow" in extra_pnginfo:
|
|
workflow = extra_pnginfo["workflow"]
|
|
node = next((x for x in workflow["nodes"] if str(x["id"]) == unique_id), None)
|
|
if node:
|
|
ckpt_name = pipe['loader_settings']['ckpt_name'] if 'ckpt_name' in pipe['loader_settings'] else ''
|
|
vae_name = pipe['loader_settings']['vae_name'] if 'vae_name' in pipe['loader_settings'] else ''
|
|
lora_name = pipe['loader_settings']['lora_name'] if 'lora_name' in pipe['loader_settings'] else ''
|
|
|
|
if ckpt_name:
|
|
ckpt_name = os.path.basename(os.path.splitext(ckpt_name)[0])
|
|
if vae_name:
|
|
vae_name = os.path.basename(os.path.splitext(vae_name)[0])
|
|
if lora_name:
|
|
lora_name = os.path.basename(os.path.splitext(lora_name)[0])
|
|
|
|
names = "ckpt_name: " + ckpt_name + '\n' + "vae_name: " + vae_name + '\n' + "lora_name: " + lora_name
|
|
node["widgets_values"] = names
|
|
|
|
return {"ui": {"text": [names]}, "result": (ckpt_name, vae_name, lora_name)}
|
|
|
|
class sliderControl:
|
|
@classmethod
|
|
def INPUT_TYPES(s):
|
|
return {
|
|
"required": {
|
|
"mode": (['ipadapter layer weights'],),
|
|
"model_type": (['sdxl', 'sd1'],),
|
|
},
|
|
"hidden": {
|
|
"prompt": "PROMPT",
|
|
"my_unique_id": "UNIQUE_ID",
|
|
"extra_pnginfo": "EXTRA_PNGINFO",
|
|
},
|
|
}
|
|
|
|
RETURN_TYPES = ("STRING",)
|
|
RETURN_NAMES = ("layer_weights",)
|
|
|
|
FUNCTION = "control"
|
|
|
|
CATEGORY = "EasyUse/Util"
|
|
|
|
def control(self, mode, model_type, prompt=None, my_unique_id=None, extra_pnginfo=None):
|
|
values = ''
|
|
if my_unique_id in prompt:
|
|
if 'values' in prompt[my_unique_id]["inputs"]:
|
|
values = prompt[my_unique_id]["inputs"]['values']
|
|
|
|
return (values,)
|
|
|
|
class setCkptName:
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {"required": {
|
|
"ckpt_name": (folder_paths.get_filename_list("checkpoints"),),
|
|
}
|
|
}
|
|
|
|
RETURN_TYPES = (AlwaysEqualProxy('*'),)
|
|
RETURN_NAMES = ("ckpt_name",)
|
|
FUNCTION = "set_name"
|
|
CATEGORY = "EasyUse/Util"
|
|
|
|
def set_name(self, ckpt_name):
|
|
return (ckpt_name,)
|
|
|
|
class setControlName:
|
|
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {"required": {
|
|
"controlnet_name": (folder_paths.get_filename_list("controlnet"),),
|
|
}
|
|
}
|
|
|
|
RETURN_TYPES = (AlwaysEqualProxy('*'),)
|
|
RETURN_NAMES = ("controlnet_name",)
|
|
FUNCTION = "set_name"
|
|
CATEGORY = "EasyUse/Util"
|
|
|
|
def set_name(self, controlnet_name):
|
|
return (controlnet_name,)
|
|
|
|
class setLoraName:
|
|
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {"required": {
|
|
"lora_name": (folder_paths.get_filename_list("loras"),),
|
|
}
|
|
}
|
|
|
|
RETURN_TYPES = (AlwaysEqualProxy('*'),)
|
|
RETURN_NAMES = ("lora_name",)
|
|
FUNCTION = "set_name"
|
|
CATEGORY = "EasyUse/Util"
|
|
|
|
def set_name(self, lora_name):
|
|
return (lora_name,)
|
|
|
|
|
|
NODE_CLASS_MAPPINGS = {
|
|
"easy showLoaderSettingsNames": showLoaderSettingsNames,
|
|
"easy sliderControl": sliderControl,
|
|
"easy ckptNames": setCkptName,
|
|
"easy controlnetNames": setControlName,
|
|
"easy loraNames": setLoraName,
|
|
}
|
|
|
|
NODE_DISPLAY_NAME_MAPPINGS = {
|
|
"easy showLoaderSettingsNames": "Show Loader Settings Names",
|
|
"easy sliderControl": "Easy Slider Control",
|
|
"easy ckptNames": "Ckpt Names",
|
|
"easy controlnetNames": "ControlNet Names",
|
|
"easy loraNames": "Lora Names",
|
|
}
|