# combined_diffusers_loader.py from .utils import DiffusersUtils from .unet_loader import DiffusersUNETLoader from .clip_loader import DiffusersClipLoader from .vae_loader import DiffusersVAELoader from .base_loader import DiffusersLoaderBase import os class CombinedDiffusersLoader: @classmethod def INPUT_TYPES(cls): model_directories = DiffusersUtils.get_model_directories() return { "required": { "sub_directory": (model_directories,), "clip_type": (["stable_diffusion", "stable_cascade", "sd3", "stable_audio", "sdxl", "flux"],), "transformer_parts": (["all", "part_1", "part_2", "part_3"],), "vae_type": (["default", "taesd", "taesdxl", "taesd3", "taef1"],), "weight_dtype": (["default", "fp8_e4m3fn", "fp8_e5m2"],) } } RETURN_TYPES = ("MODEL", "CLIP", "VAE") FUNCTION = "load_models" CATEGORY = "DiffusersLoader/Combined" @classmethod def load_models(cls, sub_directory, clip_type="stable_diffusion", transformer_parts="all", vae_type="default", weight_dtype="default"): base_paths = DiffusersUtils.get_base_path() sub_dir_path = next((os.path.join(base_path, sub_directory) for base_path in base_paths if os.path.exists(os.path.join(base_path, sub_directory))), None) if sub_dir_path is None: raise ValueError(f"Subdirectory '{sub_directory}' not found in any of the diffusers paths.") model_type = DiffusersLoaderBase.detect_model_type(sub_dir_path) print(f"Detected model type: {model_type}") unet_model, = DiffusersUNETLoader.load_model(sub_directory, transformer_parts, weight_dtype) clip_model = DiffusersClipLoader.load_model(sub_directory, clip_type) vae_model = DiffusersVAELoader.load_model(sub_directory, vae_type) return unet_model, clip_model, vae_model # Ensure the node is registered properly NODE_CLASS_MAPPINGS = {"CombinedDiffusersLoader": CombinedDiffusersLoader} NODE_DISPLAY_NAME_MAPPINGS = {"CombinedDiffusersLoader": "Combined Diffusers Loader"}