Spaces:
Runtime error
Runtime error
import sys | |
import threading | |
from modules import shared, errors | |
class ModelData: | |
def __init__(self): | |
self.sd_model = None | |
self.sd_refiner = None | |
self.sd_dict = 'None' | |
self.initial = True | |
self.lock = threading.Lock() | |
def get_sd_model(self): | |
from modules.sd_models import reload_model_weights | |
if self.sd_model is None and shared.opts.sd_model_checkpoint != 'None' and not self.lock.locked(): | |
with self.lock: | |
try: | |
# note: reload_model_weights directly updates model_data.sd_model and returns it at the end | |
self.sd_model = reload_model_weights(op='model') | |
self.initial = False | |
except Exception as e: | |
shared.log.error("Failed to load stable diffusion model") | |
errors.display(e, "loading stable diffusion model") | |
self.sd_model = None | |
return self.sd_model | |
def set_sd_model(self, v): | |
self.sd_model = v | |
def get_sd_refiner(self): | |
from modules.sd_models import reload_model_weights | |
if self.sd_refiner is None and shared.opts.sd_model_refiner != 'None' and not self.lock.locked(): | |
with self.lock: | |
try: | |
self.sd_refiner = reload_model_weights(op='refiner') | |
self.initial = False | |
except Exception as e: | |
shared.log.error("Failed to load stable diffusion model") | |
errors.display(e, "loading stable diffusion model") | |
self.sd_refiner = None | |
return self.sd_refiner | |
def set_sd_refiner(self, v): | |
self.sd_refiner = v | |
# provides shared.sd_model field as a property | |
class Shared(sys.modules[__name__].__class__): | |
def sd_model(self): | |
import modules.sd_models # pylint: disable=W0621 | |
if modules.sd_models.model_data.sd_model is None: | |
shared.log.debug(f'Model requested: fn={sys._getframe().f_back.f_code.co_name}') # pylint: disable=protected-access | |
return modules.sd_models.model_data.get_sd_model() | |
def sd_model(self, value): | |
import modules.sd_models # pylint: disable=W0621 | |
modules.sd_models.model_data.set_sd_model(value) | |
def sd_refiner(self): | |
import modules.sd_models # pylint: disable=W0621 | |
return modules.sd_models.model_data.get_sd_refiner() | |
def sd_refiner(self, value): | |
import modules.sd_models # pylint: disable=W0621 | |
modules.sd_models.model_data.set_sd_refiner(value) | |
def sd_model_type(self): | |
try: | |
import modules.sd_models # pylint: disable=W0621 | |
if modules.sd_models.model_data.sd_model is None: | |
model_type = 'none' | |
return model_type | |
if shared.backend == shared.Backend.ORIGINAL: | |
model_type = 'ldm' | |
elif "StableDiffusionXL" in self.sd_model.__class__.__name__: | |
model_type = 'sdxl' | |
elif "StableDiffusion" in self.sd_model.__class__.__name__: | |
model_type = 'sd' | |
elif "LatentConsistencyModel" in self.sd_model.__class__.__name__: | |
model_type = 'sd' # lcm is compatible with sd | |
elif "InstaFlowPipeline" in self.sd_model.__class__.__name__: | |
model_type = 'sd' # instaflow is compatible with sd | |
elif "AnimateDiffPipeline" in self.sd_model.__class__.__name__: | |
model_type = 'sd' # sd is compatible with sd | |
elif "Kandinsky" in self.sd_model.__class__.__name__: | |
model_type = 'kandinsky' | |
elif "Cascade" in self.sd_model.__class__.__name__: | |
model_type = 'sc' | |
else: | |
model_type = self.sd_model.__class__.__name__ | |
except Exception: | |
model_type = 'unknown' | |
return model_type | |
def sd_refiner_type(self): | |
try: | |
import modules.sd_models # pylint: disable=W0621 | |
if modules.sd_models.model_data.sd_refiner is None: | |
model_type = 'none' | |
return model_type | |
if shared.backend == shared.Backend.ORIGINAL: | |
model_type = 'ldm' | |
elif "StableDiffusionXL" in self.sd_refiner.__class__.__name__: | |
model_type = 'sdxl' | |
elif "StableDiffusion" in self.sd_refiner.__class__.__name__: | |
model_type = 'sd' | |
elif "Kandinsky" in self.sd_refiner.__class__.__name__: | |
model_type = 'kandinsky' | |
else: | |
model_type = self.sd_refiner.__class__.__name__ | |
except Exception: | |
model_type = 'unknown' | |
return model_type | |
model_data = ModelData() | |