In this delta-space pipeline Linear is identical to Task Arithmetic at default settings (both: no trim, no sign consensus, weighted combine of deltas). Linear only exposed fewer knobs, so it added menu clutter with no distinct behavior. Removed the LinearMergeMethod node class and its three registrations; updated the widget-name guard test. The "linear" GTA mode itself is kept — it is still referenced by the dispatcher, algorithms registry, mergekit_utils and the experimental checkpoint merger. Only the user-facing node is gone. Note: saved workflows using PM Linear will load it as an undefined node; replace with PM Task Arithmetic (identical output at defaults). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
101 lines
4.0 KiB
Python
101 lines
4.0 KiB
Python
from .src.lora_apply import LoraApply
|
|
from .src.lora_block_sampler import LoRABlockSampler
|
|
from .src.lora_mergekit_merge import LoraMergerMergekit
|
|
from .src.lora_selector import LoRASelect
|
|
from .src.lora_dir_stacker import LoraStackFromDir
|
|
from .src.lora_decompose import LoraDecompose
|
|
from .src.lora_parameter_sweep_sampler import LoRAParameterSweepSampler
|
|
from .src.lora_power_stacker import LoraPowerStacker
|
|
from .src.nodes_block_selector import BlockSelector, KREA2Blocks, FluxKleinBlocks
|
|
from .src.lora_resize import LoraResizer
|
|
from .src.lora_save import LoraSave
|
|
from .src.lora_stack_sampler import LoRAStackSampler
|
|
from .src.nodes_lora_modifier import LoRAModifier
|
|
from .src.nodes_merge_methods import TaskArithmeticMergeMethod, NearSwapMergeMethod, SCEMergeMethod, BreadcrumbsMergeMethod, \
|
|
TIESMergeMethod, DAREMergeMethod, DELLAMergeMethod, SLERPMergeMethod, NuSlerpMergeMethod, \
|
|
KArcherMergeMethod
|
|
|
|
version_code = [2, 2, 4]
|
|
version_str = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' if len(version_code) > 2 else '')
|
|
print(f"### Loading: ComfyUI LoRA-PowerMerge ({version_str})")
|
|
|
|
NODE_CLASS_MAPPINGS = {
|
|
"PM LoRA Merger (Mergekit)": LoraMergerMergekit,
|
|
|
|
"PM LoRA Power Stacker": LoraPowerStacker,
|
|
"PM LoRA Stacker (from Directory)": LoraStackFromDir,
|
|
"PM LoRA Select": LoRASelect,
|
|
"PM LoRA Stack Decompose": LoraDecompose,
|
|
|
|
"PM Block Selector": BlockSelector,
|
|
"PM KREA 2 Blocks": KREA2Blocks,
|
|
"PM FLUX.2.Klein Blocks": FluxKleinBlocks,
|
|
|
|
"PM LoRA Block Sampler": LoRABlockSampler,
|
|
"PM LoRA Stack Sampler": LoRAStackSampler,
|
|
"PM LoRA Parameter Sweep Sampler": LoRAParameterSweepSampler,
|
|
|
|
"PM Slerp (Mergekit)": SLERPMergeMethod,
|
|
"PM NuSlerp (Mergekit)": NuSlerpMergeMethod,
|
|
"PM NearSwap (Mergekit)": NearSwapMergeMethod,
|
|
|
|
"PM SCE (Mergekit)": SCEMergeMethod,
|
|
"PM KArcher (Mergekit)": KArcherMergeMethod,
|
|
|
|
"PM Task Arithmetic (Mergekit)": TaskArithmeticMergeMethod,
|
|
"PM Ties (Mergekit)": TIESMergeMethod,
|
|
"PM Breadcrumbs (Mergekit)": BreadcrumbsMergeMethod,
|
|
"PM Dare (Mergekit)": DAREMergeMethod,
|
|
"PM Della (Mergekit)": DELLAMergeMethod,
|
|
|
|
"PM LoRA Modifier": LoRAModifier,
|
|
|
|
"PM LoRA Resizer": LoraResizer,
|
|
"PM LoRA Apply": LoraApply,
|
|
"PM LoRA Save": LoraSave,
|
|
}
|
|
|
|
NODE_DISPLAY_NAME_MAPPINGS = {
|
|
"PM LoRA Power Stacker": "PM LoRA Power Stacker",
|
|
"PM LoRA Stacker (from Directory)": "PM LoRA Stacker (from Directory)",
|
|
"PM LoRA Select": "PM LoRA Select",
|
|
"PM LoRA Stack Decompose": "PM LoRA Stack Decompose",
|
|
|
|
"PM Block Selector": "PM Block Selector",
|
|
"PM KREA 2 Blocks": "PM KREA 2 Blocks",
|
|
"PM FLUX.2.Klein Blocks": "PM FLUX.2.Klein Blocks",
|
|
|
|
"PM LoRA Merger (Mergekit)": "PM LoRA Merger",
|
|
|
|
"PM LoRA Block Sampler": "PM LoRA Block Sampler",
|
|
"PM LoRA Stack Sampler": "PM LoRA Stack Sampler",
|
|
"PM LoRA Parameter Sweep Sampler": "PM LoRA Parameter Sweep Sampler",
|
|
|
|
# Still genuinely mergekit-backed — keep the suffix.
|
|
"PM Slerp (Mergekit)": "PM Slerp (Mergekit)",
|
|
"PM NuSlerp (Mergekit)": "PM NuSlerp (Mergekit)",
|
|
"PM NearSwap (Mergekit)": "PM NearSwap (Mergekit)",
|
|
"PM SCE (Mergekit)": "PM SCE (Mergekit)",
|
|
"PM KArcher (Mergekit)": "PM KArcher (Mergekit)",
|
|
|
|
# GTA family: UNet path runs our own gta.py, so drop the "(Mergekit)" label.
|
|
# NOTE: display keys must match NODE_CLASS_MAPPINGS exactly ("Ties"/"Dare",
|
|
# not "TIES"/"DARE") — the old uppercase keys were dead and never applied.
|
|
"PM Task Arithmetic (Mergekit)": "PM Task Arithmetic",
|
|
"PM Ties (Mergekit)": "PM TIES",
|
|
"PM Dare (Mergekit)": "PM DARE",
|
|
"PM Breadcrumbs (Mergekit)": "PM Breadcrumbs",
|
|
"PM Della (Mergekit)": "PM Della",
|
|
|
|
"PM LoRA Modifier": "PM LoRA Modifier",
|
|
|
|
"PM LoRA Resizer": "PM Resize LoRA",
|
|
"PM LoRA Apply": "PM Apply LoRA",
|
|
"PM LoRA Save": "PM Save LoRA",
|
|
}
|
|
|
|
|
|
WEB_DIRECTORY = "./js"
|
|
|
|
__all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS", "WEB_DIRECTORY"]
|