Files
larsupb-LoRA-Merger-ComfyUI/__init__.py
T
larsupbandClaude Opus 4.8 bec8c3ec3d ux(nodes): remove redundant PM Linear node
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>
2026-07-19 18:17:04 +02:00

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"]