refactor(nodes): standardize node class names with LM suffix

Rename all node classes to use consistent 'LM' suffix pattern:
- LoraCyclerNode → LoraCyclerLM
- LoraManagerLoader → LoraLoaderLM
- LoraManagerTextLoader → LoraTextLoaderLM
- LoraStacker → LoraStackerLM
- LoraRandomizerNode → LoraRandomizerLM
- LoraPoolNode → LoraPoolLM
- WanVideoLoraSelectFromText → WanVideoLoraTextSelectLM
- DebugMetadata → DebugMetadataLM
- TriggerWordToggle → TriggerWordToggleLM
- PromptLoraManager → PromptLM

Updated:
- Core node class definitions (9 files)
- NODE_CLASS_MAPPINGS in __init__.py
- Node type mappings in node_extractors.py
- All related test imports and references
- Logger prefixes for consistency

Frontend extension names remain unchanged (LoraManager.LoraStacker, etc.)
This commit is contained in:
Will Miao
2026-01-25 10:38:10 +08:00
parent b71b3f99dc
commit 41101ad5c6
14 changed files with 74 additions and 74 deletions

View File

@@ -714,10 +714,10 @@ NODE_EXTRACTORS = {
"UNETLoader": UNETLoaderExtractor, # Updated to use dedicated extractor
"UnetLoaderGGUF": UNETLoaderExtractor, # Updated to use dedicated extractor
"LoraLoader": LoraLoaderExtractor,
"LoraManagerLoader": LoraLoaderManagerExtractor,
"LoraLoaderLM": LoraLoaderManagerExtractor,
# Conditioning
"CLIPTextEncode": CLIPTextEncodeExtractor,
"PromptLoraManager": CLIPTextEncodeExtractor,
"PromptLM": CLIPTextEncodeExtractor,
"CLIPTextEncodeFlux": CLIPTextEncodeFluxExtractor, # Add CLIPTextEncodeFlux
"WAS_Text_to_Conditioning": CLIPTextEncodeExtractor,
"AdvancedCLIPTextEncode": CLIPTextEncodeExtractor, # From https://github.com/BlenderNeko/ComfyUI_ADV_CLIP_emb

View File

@@ -4,7 +4,7 @@ from ..metadata_collector.metadata_processor import MetadataProcessor
logger = logging.getLogger(__name__)
class DebugMetadata:
class DebugMetadataLM:
NAME = "Debug Metadata (LoraManager)"
CATEGORY = "Lora Manager/utils"
DESCRIPTION = "Debug node to verify metadata_processor functionality"

View File

@@ -13,7 +13,7 @@ from ..utils.utils import get_lora_info
logger = logging.getLogger(__name__)
class LoraCyclerNode:
class LoraCyclerLM:
"""Node that sequentially cycles through LoRAs from a pool"""
NAME = "Lora Cycler (LoraManager)"
@@ -72,7 +72,7 @@ class LoraCyclerNode:
total_count = len(lora_list)
if total_count == 0:
logger.warning("[LoraCyclerNode] No LoRAs available in pool")
logger.warning("[LoraCyclerLM] No LoRAs available in pool")
return {
"result": ([],),
"ui": {
@@ -103,7 +103,7 @@ class LoraCyclerNode:
lora_path, _ = get_lora_info(current_lora["file_name"])
if not lora_path:
logger.warning(
f"[LoraCyclerNode] Could not find path for LoRA: {current_lora['file_name']}"
f"[LoraCyclerLM] Could not find path for LoRA: {current_lora['file_name']}"
)
lora_stack = []
else:

View File

@@ -6,7 +6,7 @@ from .utils import FlexibleOptionalInputType, any_type, extract_lora_name, get_l
logger = logging.getLogger(__name__)
class LoraManagerLoader:
class LoraLoaderLM:
NAME = "Lora Loader (LoraManager)"
CATEGORY = "Lora Manager/loaders"
@@ -128,7 +128,7 @@ class LoraManagerLoader:
return (model, clip, trigger_words_text, formatted_loras_text)
class LoraManagerTextLoader:
class LoraTextLoaderLM:
NAME = "LoRA Text Loader (LoraManager)"
CATEGORY = "Lora Manager/loaders"

View File

@@ -10,7 +10,7 @@ import logging
logger = logging.getLogger(__name__)
class LoraPoolNode:
class LoraPoolLM:
"""
A node that defines LoRA filter criteria through a Vue-based widget.
@@ -67,7 +67,7 @@ class LoraPoolNode:
filters = pool_config.get("filters", self._default_config()["filters"])
# Log for debugging
logger.debug(f"[LoraPoolNode] Processing filters: {filters}")
logger.debug(f"[LoraPoolLM] Processing filters: {filters}")
return (filters,)

View File

@@ -15,7 +15,7 @@ from .utils import extract_lora_name
logger = logging.getLogger(__name__)
class LoraRandomizerNode:
class LoraRandomizerLM:
"""Node that randomly selects LoRAs from a pool"""
NAME = "Lora Randomizer (LoraManager)"
@@ -72,7 +72,7 @@ class LoraRandomizerNode:
loras = self._preprocess_loras_input(loras)
roll_mode = randomizer_config.get("roll_mode", "always")
logger.debug(f"[LoraRandomizerNode] roll_mode: {roll_mode}")
logger.debug(f"[LoraRandomizerLM] roll_mode: {roll_mode}")
# Dual seed mechanism for batch queue synchronization
# execution_seed: seed for generating execution_stack (= previous next_seed)
@@ -127,7 +127,7 @@ class LoraRandomizerNode:
lora_path, trigger_words = get_lora_info(lora["name"])
if not lora_path:
logger.warning(
f"[LoraRandomizerNode] Could not find path for LoRA: {lora['name']}"
f"[LoraRandomizerLM] Could not find path for LoRA: {lora['name']}"
)
continue

View File

@@ -6,7 +6,7 @@ import logging
logger = logging.getLogger(__name__)
class LoraStacker:
class LoraStackerLM:
NAME = "Lora Stacker (LoraManager)"
CATEGORY = "Lora Manager/stackers"

View File

@@ -1,6 +1,6 @@
from typing import Any, Optional
class PromptLoraManager:
class PromptLM:
"""Encodes text (and optional trigger words) into CLIP conditioning."""
NAME = "Prompt (LoraManager)"

View File

@@ -6,7 +6,7 @@ import logging
logger = logging.getLogger(__name__)
class TriggerWordToggle:
class TriggerWordToggleLM:
NAME = "TriggerWord Toggle (LoraManager)"
CATEGORY = "Lora Manager/utils"
DESCRIPTION = "Toggle trigger words on/off"

View File

@@ -7,7 +7,7 @@ import logging
logger = logging.getLogger(__name__)
# 定义新节点的类
class WanVideoLoraSelectFromText:
class WanVideoLoraTextSelectLM:
# 节点在UI中显示的名称
NAME = "WanVideo Lora Select From Text (LoraManager)"
# 节点所属的分类
@@ -117,9 +117,9 @@ class WanVideoLoraSelectFromText:
return (loras_list, trigger_words_text, active_loras_text)
NODE_CLASS_MAPPINGS = {
"WanVideoLoraSelectFromText": WanVideoLoraSelectFromText
"WanVideoLoraTextSelectLM": WanVideoLoraTextSelectLM
}
NODE_DISPLAY_NAME_MAPPINGS = {
"WanVideoLoraSelectFromText": "WanVideo Lora Select From Text (LoraManager)"
"WanVideoLoraTextSelectLM": "WanVideo Lora Select From Text (LoraManager)"
}