Spaces:
No application file
No application file
import os | |
import ldm_patched.modules.utils | |
import argparse | |
from modules.paths_internal import models_path | |
from pathlib import Path | |
parser = argparse.ArgumentParser() | |
parser.add_argument( | |
"--controlnet-dir", | |
type=Path, | |
help="Path to directory with ControlNet models", | |
default=None, | |
) | |
parser.add_argument( | |
"--controlnet-preprocessor-models-dir", | |
type=Path, | |
help="Path to directory with annotator model directories", | |
default=None, | |
) | |
cmd_opts = parser.parse_known_args()[0] | |
if cmd_opts.controlnet_dir: | |
controlnet_dir = str(cmd_opts.controlnet_dir) | |
else: | |
controlnet_dir = os.path.join(models_path, 'ControlNet') | |
os.makedirs(controlnet_dir, exist_ok=True) | |
if cmd_opts.controlnet_preprocessor_models_dir: | |
preprocessor_dir = str(cmd_opts.controlnet_preprocessor_models_dir) | |
else: | |
preprocessor_dir = os.path.join(models_path, 'ControlNetPreprocessor') | |
os.makedirs(preprocessor_dir, exist_ok=True) | |
diffusers_dir = os.path.join(models_path, 'diffusers') | |
os.makedirs(diffusers_dir, exist_ok=True) | |
supported_preprocessors = {} | |
supported_control_models = [] | |
def add_supported_preprocessor(preprocessor): | |
global supported_preprocessors | |
p = preprocessor | |
supported_preprocessors[p.name] = p | |
return | |
def add_supported_control_model(control_model): | |
global supported_control_models | |
supported_control_models.append(control_model) | |
return | |
def try_load_supported_control_model(ckpt_path): | |
global supported_control_models | |
state_dict = ldm_patched.modules.utils.load_torch_file(ckpt_path, safe_load=True) | |
for supported_type in supported_control_models: | |
state_dict_copy = {k: v for k, v in state_dict.items()} | |
model = supported_type.try_build_from_state_dict(state_dict_copy, ckpt_path) | |
if model is not None: | |
return model | |
return None | |