diff --git a/extensions-builtin/sd_forge_controlnet/lib_controlnet/global_state.py b/extensions-builtin/sd_forge_controlnet/lib_controlnet/global_state.py index b5a4a827..c4ead10d 100644 --- a/extensions-builtin/sd_forge_controlnet/lib_controlnet/global_state.py +++ b/extensions-builtin/sd_forge_controlnet/lib_controlnet/global_state.py @@ -41,12 +41,13 @@ def update_controlnet_filenames(): controlnet_filename_dict = {"None": None} ext_dirs = ( - shared.opts.data.get("control_net_models_path", None), + getattr(shared.opts, "control_net_models_path", None), getattr(shared.cmd_opts, "controlnet_dir", None), + *getattr(shared.cmd_opts, "controlnet_dirs", []), ) - extra_paths = (extra_path for extra_path in ext_dirs if extra_path is not None and os.path.exists(extra_path)) + extra_paths = (extra_path for extra_path in ext_dirs if os.path.isdir(str(extra_path))) - for path in [controlnet_dir, *extra_paths]: + for path in set(extra_paths): found = get_all_models(path, "name") controlnet_filename_dict.update(found) diff --git a/modules/launch_utils.py b/modules/launch_utils.py index 32b77b8f..dd935855 100644 --- a/modules/launch_utils.py +++ b/modules/launch_utils.py @@ -494,6 +494,7 @@ def configure_comfy_reference(comfy_home: Path): ModelRef(arg_name="--text-encoder-dirs", relative_path="text_encoders"), ModelRef(arg_name="--lora-dirs", relative_path="loras"), ModelRef(arg_name="--vae-dirs", relative_path="vae"), + ModelRef(arg_name="--controlnet-dirs", relative_path="controlnet"), ) for ref in refs: @@ -537,6 +538,7 @@ def configure_comfy_yaml(comfy_yaml: Path): _configure_yaml(base, config.get("text_encoders", None), "--text-encoder-dirs") _configure_yaml(base, config.get("loras", None), "--lora-dirs") _configure_yaml(base, config.get("vae", None), "--vae-dirs") + _configure_yaml(base, config.get("controlnet", None), "--controlnet-dirs") def start(): diff --git a/modules_forge/shared.py b/modules_forge/shared.py index 5211ef64..f02240cc 100644 --- a/modules_forge/shared.py +++ b/modules_forge/shared.py @@ -9,6 +9,13 @@ parser.add_argument( help="Path to directory with ControlNet models", default=os.path.join(models_path, "ControlNet"), ) +parser.add_argument( + "--controlnet-dirs", + type=normalized_filepath, + action="append", + help="Directories for ControlNet model(s)", + default=[], +) parser.add_argument( "--controlnet-preprocessor-models-dir", type=normalized_filepath,