The FLUX and SDXL loaders know their architecture's block names up front, which does not scale across ComfyUI's ~99 model configs. The new Universal node discovers a model's block layout at runtime instead: stack names, stack sizes and their execution order all come from the loaded model, so pruned, distilled and brand-new architectures work without a code change. Concatenating the discovered stacks puts every block on one normalised depth axis, split into five buckets, alongside embeddings, output head and text encoder. Covers SD1.5/2/3, SDXL, FLUX, Chroma, AuraFlow, PixArt, HiDream, Qwen-Image, Wan, LTX-Video, Mochi, HunyuanVideo/DiT, Lumina and Cosmos. Verified against real ComfyUI: models built from ComfyUI's own configs on the meta device plus its *_to_diffusers key tables, 8000+ authentic state-dict keys across 11 architectures, none falling through to "Other Tensors". That pass found and fixed real gaps: SD3's negative "joint_blocks.-1" index, Lumina's noise_refiner/context_refiner stacks, AuraFlow's native double_layers naming, several conditioning embedders, and FLUX's ControlNet pos_embed_input. No widget was added, removed or reordered on the FLUX or SDXL nodes, so existing workflows are unaffected. Bumps version to 1.2.0.
24 lines
542 B
Python
24 lines
542 B
Python
"""Bobs LoRA Loader — block-weighted LoRA loading for ComfyUI (FLUX + SDXL)."""
|
|
|
|
import logging
|
|
|
|
from .bobs_lora_loader import (
|
|
NODE_CLASS_MAPPINGS,
|
|
NODE_DISPLAY_NAME_MAPPINGS,
|
|
BobsLoraLoaderFlux,
|
|
BobsLoraLoaderSdxl,
|
|
BobsLoraLoaderUniversal,
|
|
)
|
|
|
|
__all__ = [
|
|
"NODE_CLASS_MAPPINGS",
|
|
"NODE_DISPLAY_NAME_MAPPINGS",
|
|
"BobsLoraLoaderFlux",
|
|
"BobsLoraLoaderSdxl",
|
|
"BobsLoraLoaderUniversal",
|
|
]
|
|
|
|
logging.getLogger("BobsLoraLoader").info(
|
|
"Bobs LoRA Loader: %d nodes registered.", len(NODE_CLASS_MAPPINGS)
|
|
)
|