try: # pragma: no cover - import fallback for pytest collection from .py.lora_manager import LoraManager from .py.nodes.lora_loader import LoraManagerLoader, LoraManagerTextLoader from .py.nodes.trigger_word_toggle import TriggerWordToggle from .py.nodes.prompt import PromptLoraManager from .py.nodes.lora_stacker import LoraStacker from .py.nodes.save_image import SaveImageLM from .py.nodes.debug_metadata import DebugMetadata from .py.nodes.wanvideo_lora_select import WanVideoLoraSelectLM from .py.nodes.wanvideo_lora_select_from_text import WanVideoLoraSelectFromText from .py.nodes.lora_pool import LoraPoolNode from .py.nodes.lora_demo import LoraDemoNode from .py.nodes.lora_randomizer import LoraRandomizerNode from .py.metadata_collector import init as init_metadata_collector except ( ImportError ): # pragma: no cover - allows running under pytest without package install import importlib import pathlib import sys package_root = pathlib.Path(__file__).resolve().parent if str(package_root) not in sys.path: sys.path.append(str(package_root)) PromptLoraManager = importlib.import_module("py.nodes.prompt").PromptLoraManager LoraManager = importlib.import_module("py.lora_manager").LoraManager LoraManagerLoader = importlib.import_module( "py.nodes.lora_loader" ).LoraManagerLoader LoraManagerTextLoader = importlib.import_module( "py.nodes.lora_loader" ).LoraManagerTextLoader TriggerWordToggle = importlib.import_module( "py.nodes.trigger_word_toggle" ).TriggerWordToggle LoraStacker = importlib.import_module("py.nodes.lora_stacker").LoraStacker SaveImageLM = importlib.import_module("py.nodes.save_image").SaveImageLM DebugMetadata = importlib.import_module("py.nodes.debug_metadata").DebugMetadata WanVideoLoraSelectLM = importlib.import_module( "py.nodes.wanvideo_lora_select" ).WanVideoLoraSelectLM WanVideoLoraSelectFromText = importlib.import_module( "py.nodes.wanvideo_lora_select_from_text" ).WanVideoLoraSelectFromText LoraPoolNode = importlib.import_module("py.nodes.lora_pool").LoraPoolNode LoraDemoNode = importlib.import_module("py.nodes.lora_demo").LoraDemoNode LoraRandomizerNode = importlib.import_module("py.nodes.lora_randomizer").LoraRandomizerNode init_metadata_collector = importlib.import_module("py.metadata_collector").init NODE_CLASS_MAPPINGS = { PromptLoraManager.NAME: PromptLoraManager, LoraManagerLoader.NAME: LoraManagerLoader, LoraManagerTextLoader.NAME: LoraManagerTextLoader, TriggerWordToggle.NAME: TriggerWordToggle, LoraStacker.NAME: LoraStacker, SaveImageLM.NAME: SaveImageLM, DebugMetadata.NAME: DebugMetadata, WanVideoLoraSelectLM.NAME: WanVideoLoraSelectLM, WanVideoLoraSelectFromText.NAME: WanVideoLoraSelectFromText, LoraPoolNode.NAME: LoraPoolNode, LoraDemoNode.NAME: LoraDemoNode, LoraRandomizerNode.NAME: LoraRandomizerNode, } WEB_DIRECTORY = "./web/comfyui" # Check and build Vue widgets if needed (development mode) try: from .py.vue_widget_builder import check_and_build_vue_widgets # Auto-build in development, warn only if fails check_and_build_vue_widgets(auto_build=True, warn_only=True) except ImportError: # Fallback for pytest import importlib check_and_build_vue_widgets = importlib.import_module( "py.vue_widget_builder" ).check_and_build_vue_widgets check_and_build_vue_widgets(auto_build=True, warn_only=True) except Exception as e: import logging logging.warning(f"[LoRA Manager] Vue widget build check skipped: {e}") # Initialize metadata collector init_metadata_collector() # Register routes on import LoraManager.add_routes() __all__ = ["NODE_CLASS_MAPPINGS", "WEB_DIRECTORY"]