From 7f9013533d0fb334486ffcc269e98412fc684089 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 26 Sep 2023 12:30:45 -0400 Subject: [PATCH] better error handling --- modules/modelloader.py | 2 ++ modules/sd_models.py | 15 +++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/modules/modelloader.py b/modules/modelloader.py index 470f4d6ba..3e5843d73 100644 --- a/modules/modelloader.py +++ b/modules/modelloader.py @@ -151,6 +151,8 @@ def download_civit_model(model_url: str, model_name: str, model_path: str, model def download_diffusers_model(hub_id: str, cache_dir: str = None, download_config: Dict[str, str] = None, token = None, variant = None, revision = None, mirror = None): + if hub_id is None or len(hub_id) == 0: + return from diffusers import DiffusionPipeline import huggingface_hub as hf shared.state.begin('huggingface-download-model') diff --git a/modules/sd_models.py b/modules/sd_models.py index 443a09167..bca8d8a9e 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -826,19 +826,26 @@ def load_diffuser(checkpoint_info=None, already_loaded_state_dict=None, timer=No if os.path.isdir(checkpoint_info.path): err1 = None err2 = None - try: # try autopipeline first + err3 = None + try: # try autopipeline first, best choice but not all pipelines are available sd_model = diffusers.AutoPipelineForText2Image.from_pretrained(checkpoint_info.path, cache_dir=shared.opts.diffusers_dir, **diffusers_load_config) sd_model.model_type = sd_model.__class__.__name__ except Exception as e: err1 = e - try: # try diffusion pipeline next + try: # try diffusion pipeline next second-best choice, works for most non-linked pipelines if err1 is not None: sd_model = diffusers.DiffusionPipeline.from_pretrained(checkpoint_info.path, cache_dir=shared.opts.diffusers_dir, **diffusers_load_config) sd_model.model_type = sd_model.__class__.__name__ except Exception as e: err2 = e - if err2 is not None: - shared.log.error(f'Failed loading {op}: {checkpoint_info.path} autopipeline={err1} diffusionpipeline={err2}') + try: # try basic pipeline next just in case + if err2 is not None: + sd_model = diffusers.StableDiffusionPipeline.from_pretrained(checkpoint_info.path, cache_dir=shared.opts.diffusers_dir, **diffusers_load_config) + sd_model.model_type = sd_model.__class__.__name__ + except Exception as e: + err3 = e # ignore last error + if err3 is not None: + shared.log.error(f'Failed loading {op}: {checkpoint_info.path} auto={err1} diffusion={err2}') return elif os.path.isfile(checkpoint_info.path) and checkpoint_info.path.lower().endswith('.safetensors'): diffusers_load_config["local_files_only"] = True