diff --git a/comfy/cli_args.py b/comfy/cli_args.py index 87806ea31..3c90ca23a 100644 --- a/comfy/cli_args.py +++ b/comfy/cli_args.py @@ -44,7 +44,6 @@ parser.add_argument("--max-upload-size", type=float, default=100, help="Set the parser.add_argument("--base-directory", type=str, default=None, help="Set the ComfyUI base directory for models, custom_nodes, input, output, temp, and user directories.") parser.add_argument("--extra-model-paths-config", type=str, default=None, metavar="PATH", nargs='+', action='append', help="Load one or more extra_model_paths.yaml files.") -parser.add_argument("--models-directory", type=str, default=None, help="Set the ComfyUI models directory. Overrides --base-directory.") 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.") @@ -226,6 +225,7 @@ parser.add_argument( ) parser.add_argument("--user-directory", type=is_valid_directory, default=None, help="Set the ComfyUI user directory with an absolute path. Overrides --base-directory.") +parser.add_argument("--models-directory", type=is_valid_directory, default=None, help="Set the ComfyUI models directory. Overrides --base-directory.") parser.add_argument("--enable-compress-response-body", action="store_true", help="Enable compressing response body.") diff --git a/folder_paths.py b/folder_paths.py index 937428c18..323a08a32 100644 --- a/folder_paths.py +++ b/folder_paths.py @@ -148,6 +148,14 @@ def set_user_directory(user_dir: str) -> None: global user_directory user_directory = user_dir +def get_models_directory() -> str: + global models_dir + return models_dir + +def set_models_directory(models_directory: str) -> None: + global models_dir + models_dir = models_directory + # System User Protection - Protects system directories from HTTP endpoint access # System Users are internal-only users that cannot be accessed via HTTP endpoints. diff --git a/tests-unit/comfy_test/folder_path_test.py b/tests-unit/comfy_test/folder_path_test.py index 3b398e60b..6ee931902 100644 --- a/tests-unit/comfy_test/folder_path_test.py +++ b/tests-unit/comfy_test/folder_path_test.py @@ -163,3 +163,25 @@ def test_base_path_change_clears_old(set_base_dir): for name in ["controlnet", "diffusion_models", "text_encoders"]: assert len(folder_paths.get_folder_paths(name)) == 2 + + +def test_models_directory_cli_and_getters(temp_dir): + with patch.object(sys, 'argv', ["main.py", "--models-directory", temp_dir]): + reload(comfy.cli_args) + reload(folder_paths) + + assert folder_paths.get_models_directory() == os.path.abspath(temp_dir) + assert folder_paths.models_dir == os.path.abspath(temp_dir) + + with pytest.raises(Exception): + comfy.cli_args.is_valid_directory(os.path.join(temp_dir, "non_existent_folder_path")) + + +def test_models_dir_getter_setter(): + orig_models_dir = folder_paths.get_models_directory() + try: + folder_paths.set_models_directory("/custom/models/path") + assert folder_paths.get_models_directory() == "/custom/models/path" + finally: + folder_paths.set_models_directory(orig_models_dir) +