diff --git a/comfy/cli_args.py b/comfy/cli_args.py index 81f29f098a7d..7b39a3a5c55c 100644 --- a/comfy/cli_args.py +++ b/comfy/cli_args.py @@ -47,6 +47,7 @@ def __call__(self, parser, namespace, values, option_string=None): parser.add_argument("--output-directory", type=str, default=None, help="Set the ComfyUI output directory. Overrides --base-directory.") parser.add_argument("--temp-directory", type=str, default=None, help="Set the ComfyUI temp directory (default is in the ComfyUI directory). Overrides --base-directory.") parser.add_argument("--input-directory", type=str, default=None, help="Set the ComfyUI input directory. Overrides --base-directory.") +parser.add_argument("--models-directory", type=str, default=None, help="Set the ComfyUI models directory. Overrides --base-directory.") parser.add_argument("--auto-launch", action="store_true", help="Automatically launch ComfyUI in the default browser.") parser.add_argument("--disable-auto-launch", action="store_true", help="Disable auto launching the browser.") parser.add_argument("--cuda-device", type=int, default=None, metavar="DEVICE_ID", help="Set the id of the cuda device this instance will use.") diff --git a/folder_paths.py b/folder_paths.py index 9a525e5a1b9c..27872f6febd3 100644 --- a/folder_paths.py +++ b/folder_paths.py @@ -20,6 +20,8 @@ base_path = os.path.dirname(os.path.realpath(__file__)) models_dir = os.path.join(base_path, "models") +if args.models_directory: + models_dir = args.models_directory folder_names_and_paths["checkpoints"] = ([os.path.join(models_dir, "checkpoints")], supported_pt_extensions) folder_names_and_paths["configs"] = ([os.path.join(models_dir, "configs")], [".yaml"]) @@ -130,6 +132,14 @@ def set_user_directory(user_dir: str) -> None: global user_directory user_directory = user_dir +def set_models_directory(models_dir_path: str) -> None: + global models_dir + models_dir = models_dir_path + +def get_models_directory() -> str: + global models_dir + return models_dir + #NOTE: used in http server so don't put folders that should not be accessed remotely def get_directory_by_type(type_name: str) -> str | None: @@ -139,6 +149,8 @@ def get_directory_by_type(type_name: str) -> str | None: return get_temp_directory() if type_name == "input": return get_input_directory() + if type_name == "models": + return get_models_directory() return None def filter_files_content_types(files: list[str], content_types: Literal["image", "video", "audio", "model"]) -> list[str]: @@ -179,6 +191,9 @@ def annotated_filepath(name: str) -> tuple[str, str | None]: elif name.endswith("[temp]"): base_dir = get_temp_directory() name = name[:-7] + elif name.endswith("[models]"): + base_dir = get_models_directory() + name = name[:-9] else: return name, None diff --git a/main.py b/main.py index ac9d24b7b82c..30c68b9ff5ce 100644 --- a/main.py +++ b/main.py @@ -54,6 +54,11 @@ def apply_custom_paths(): logging.info(f"Setting user directory to: {user_dir}") folder_paths.set_user_directory(user_dir) + if args.models_directory: + models_dir = os.path.abspath(args.models_directory) + logging.info(f"Setting models directory to: {models_dir}") + folder_paths.set_models_directory(models_dir) + def execute_prestartup_script(): def execute_script(script_path):