diff --git a/glob/manager_core.py b/glob/manager_core.py index 8ea3572c..7c1fae7d 100644 --- a/glob/manager_core.py +++ b/glob/manager_core.py @@ -23,7 +23,7 @@ sys.path.append(glob_path) import cm_global from manager_util import * -version = [2, 53] +version = [2, 54] version_str = f"V{version[0]}.{version[1]}" + (f'.{version[2]}' if len(version) > 2 else '') diff --git a/glob/manager_server.py b/glob/manager_server.py index 2da14785..60e03236 100644 --- a/glob/manager_server.py +++ b/glob/manager_server.py @@ -248,23 +248,45 @@ import urllib.request def get_model_dir(data): + if 'download_model_base' in folder_paths.folder_names_and_paths: + models_base = folder_paths.folder_names_and_paths['download_model_base'][0][0] + else: + models_base = folder_paths.models_dir + + def resolve_custom_node(save_path): + save_path = save_path[13:] # remove 'custom_nodes/' + repo_name = os.path.dirname(save_path) # get custom node repo name + repo_path = core.lookup_installed_custom_nodes(repo_name) + if repo_path is not None and repo_path[0]: + # Returns the retargeted path based on the actually installed repository + return os.path.join(os.path.dirname(repo_path[1]), save_path) + else: + return None + if data['save_path'] != 'default': if '..' in data['save_path'] or data['save_path'].startswith('/'): print(f"[WARN] '{data['save_path']}' is not allowed path. So it will be saved into 'models/etc'.") - base_model = os.path.join(folder_paths.models_dir, "etc") + base_model = os.path.join(models_base, "etc") else: if data['save_path'].startswith("custom_nodes"): - base_model = os.path.join(core.comfy_path, data['save_path']) + base_model = resolve_custom_node(data['save_path']) + if base_model is None: + print(f"[ComfyUI-Manager] The target custom node for model download is not installed: {data['save_path']}") + return None else: - base_model = os.path.join(folder_paths.models_dir, data['save_path']) + base_model = os.path.join(models_base, data['save_path']) else: model_type = data['type'] if model_type == "checkpoints" or model_type == "checkpoint": base_model = folder_paths.folder_names_and_paths["checkpoints"][0][0] elif model_type == "unclip": base_model = folder_paths.folder_names_and_paths["checkpoints"][0][0] - elif model_type == "clip": - base_model = folder_paths.folder_names_and_paths["clip"][0][0] + elif model_type == "clip" or model_type == "text_encoders": + if folder_paths.folder_names_and_paths.get("text_encoders"): + base_model = folder_paths.folder_names_and_paths["text_encoders"][0][0] + else: + print(f"[ComfyUI-Manager] Your ComfyUI is outdated version.") + base_model = folder_paths.folder_names_and_paths["clip"][0][0] # outdated version elif model_type == "VAE": base_model = folder_paths.folder_names_and_paths["vae"][0][0] elif model_type == "lora": @@ -290,14 +312,17 @@ def get_model_dir(data): print(f"[ComfyUI-Manager] Your ComfyUI is outdated version.") base_model = folder_paths.folder_names_and_paths["unet"][0][0] # outdated version else: - base_model = os.path.join(folder_paths.models_dir, "etc") + base_model = os.path.join(models_base, "etc") return base_model def get_model_path(data): base_model = get_model_dir(data) - return os.path.join(base_model, data['filename']) + if base_model is None: + return None + else: + return os.path.join(base_model, data['filename']) def check_custom_nodes_installed(json_obj, do_fetch=False, do_update_check=True, do_update=False): diff --git a/pyproject.toml b/pyproject.toml index 3a66f717..88dd09b2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "comfyui-manager" description = "ComfyUI-Manager provides features to install and manage custom nodes for ComfyUI, as well as various functionalities to assist with ComfyUI." -version = "2.53" +version = "2.54" license = { file = "LICENSE.txt" } dependencies = ["GitPython", "PyGithub", "matrix-client==0.4.0", "transformers", "huggingface-hub>0.20", "typer", "rich", "typing-extensions"]