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.

This commit is contained in:
silveroxides 2026-07-07 13:08:11 +02:00
parent 14a19a1aba
commit 088006b0f4
3 changed files with 31 additions and 1 deletions

View File

@ -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("--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("--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("--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("--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("--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("--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.") parser.add_argument("--enable-compress-response-body", action="store_true", help="Enable compressing response body.")

View File

@ -148,6 +148,14 @@ def set_user_directory(user_dir: str) -> None:
global user_directory global user_directory
user_directory = user_dir 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 User Protection - Protects system directories from HTTP endpoint access
# System Users are internal-only users that cannot be accessed via HTTP endpoints. # System Users are internal-only users that cannot be accessed via HTTP endpoints.

View File

@ -163,3 +163,25 @@ def test_base_path_change_clears_old(set_base_dir):
for name in ["controlnet", "diffusion_models", "text_encoders"]: for name in ["controlnet", "diffusion_models", "text_encoders"]:
assert len(folder_paths.get_folder_paths(name)) == 2 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)