dikdimon's picture
Upload extensions using SD-Hub extension
f4a41d8 verified
import folder_paths
from comfy.utils import load_torch_file
class StateDictLoader:
@classmethod
def INPUT_TYPES(cls):
return {
'required': {
'ckpt_name': (folder_paths.get_filename_list("checkpoints"), )
}
}
RETURN_TYPES = ('DICT',)
FUNCTION = 'execute'
CATEGORY = 'loaders'
def execute(self, ckpt_name: str):
ckpt_path = folder_paths.get_full_path('checkpoints', ckpt_name)
sd = load_torch_file(ckpt_path)
return (sd,)
class Dict2Model:
@classmethod
def INPUT_TYPES(cls):
return {
'required': {
'weights': ('DICT', ),
'config_name': (folder_paths.get_filename_list('configs'), ),
}
}
RETURN_TYPES = ('MODEL', 'CLIP', 'VAE')
FUNCTION = 'execute'
CATEGORY = 'model'
def execute(self, weights: dict, config_name: str):
config_path = folder_paths.get_full_path("configs", config_name)
def load_torch_file_hook(*args, **kwargs):
return weights
from comfy import utils, sd
load_torch_file_org = utils.load_torch_file
setattr(utils, 'load_torch_file', load_torch_file_hook)
try:
model, clip, vae = sd.load_checkpoint(config_path, None, output_vae=True, output_clip=True, embedding_directory=folder_paths.get_folder_paths("embeddings"))
assert clip is not None
assert vae is not None
return (model, clip, vae)
finally:
setattr(sd, 'load_torch_file', load_torch_file_org)