From 0b27676fe1ee3d96e832b68f12755b463e907473 Mon Sep 17 00:00:00 2001 From: silveroxides Date: Wed, 30 Jul 2025 13:12:54 +0200 Subject: [PATCH 1/3] add models-directory launch argument --- comfy/cli_args.py | 1 + folder_paths.py | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/comfy/cli_args.py b/comfy/cli_args.py index 0d760d524..f7481c7dc 100644 --- a/comfy/cli_args.py +++ b/comfy/cli_args.py @@ -44,6 +44,7 @@ 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.") diff --git a/folder_paths.py b/folder_paths.py index 9ec952940..4e3f252c1 100644 --- a/folder_paths.py +++ b/folder_paths.py @@ -19,7 +19,11 @@ if args.base_directory: else: base_path = os.path.dirname(os.path.realpath(__file__)) -models_dir = os.path.join(base_path, "models") +if args.models_directory: + models_dir = os.path.abspath(args.models_directory) +else: + models_dir = os.path.join(base_path, "models") + 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"]) From 088006b0f46e1c2142f3bc290716a14814749e92 Mon Sep 17 00:00:00 2001 From: silveroxides Date: Tue, 7 Jul 2026 13:08:11 +0200 Subject: [PATCH 2/3] Added parameter validation in comfy/cli_args.py to ensure the --models-directory argument is passing a valid path. Add getter/setter functons in folder_paths.py to mirror other similar args getter/setter helpers. Added test coverage in tests-unit/comfy_test/folder_path_test.py. test_models_directory_cli_and_getters(): Verifies that passing a valid path via the CLI sets up both the getter and underlying global variable correctly, and asserts that invalid paths fail-fast with validation errors. test_models_dir_getter_setter(): Asserts that programmatic calls to the new getter/setter interface function reliably and clean up after themselves. --- comfy/cli_args.py | 2 +- folder_paths.py | 8 ++++++++ tests-unit/comfy_test/folder_path_test.py | 22 ++++++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) 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) + From 0c509600a40b44e23d5dadab96a3fd279a1b53dc Mon Sep 17 00:00:00 2001 From: silveroxides Date: Tue, 7 Jul 2026 13:29:39 +0200 Subject: [PATCH 3/3] Updated the test case in tests-unit/comfy_test/folder_path_test.py to prevent any module-level state mutation as suggested by CodeRabbit review. --- tests-unit/comfy_test/folder_path_test.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/tests-unit/comfy_test/folder_path_test.py b/tests-unit/comfy_test/folder_path_test.py index 6ee931902..eaef7c127 100644 --- a/tests-unit/comfy_test/folder_path_test.py +++ b/tests-unit/comfy_test/folder_path_test.py @@ -166,15 +166,20 @@ def test_base_path_change_clears_old(set_base_dir): 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) + try: + 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) + 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")) + with pytest.raises(Exception): + comfy.cli_args.is_valid_directory(os.path.join(temp_dir, "non_existent_folder_path")) + finally: + with patch.object(sys, 'argv', ["main.py"]): + reload(comfy.cli_args) + reload(folder_paths) def test_models_dir_getter_setter():