diff --git a/folder_paths.py b/folder_paths.py index 693fa7beb..53dea90fa 100644 --- a/folder_paths.py +++ b/folder_paths.py @@ -12,38 +12,81 @@ supported_pt_extensions: set[str] = {'.ckpt', '.pt', '.bin', '.pth', '.safetenso folder_names_and_paths: dict[str, tuple[list[str], set[str]]] = {} filename_list_cache: dict[str, tuple[list[str], dict[str, float], float]] = {} -base_path = os.path.dirname(os.path.realpath(__file__)) -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"]) -folder_names_and_paths["loras"] = ([os.path.join(models_dir, "loras")], supported_pt_extensions) -folder_names_and_paths["vae"] = ([os.path.join(models_dir, "vae")], supported_pt_extensions) -folder_names_and_paths["text_encoders"] = ([os.path.join(models_dir, "text_encoders"), os.path.join(models_dir, "clip")], supported_pt_extensions) -folder_names_and_paths["diffusion_models"] = ([os.path.join(models_dir, "unet"), os.path.join(models_dir, "diffusion_models")], supported_pt_extensions) -folder_names_and_paths["clip_vision"] = ([os.path.join(models_dir, "clip_vision")], supported_pt_extensions) -folder_names_and_paths["style_models"] = ([os.path.join(models_dir, "style_models")], supported_pt_extensions) -folder_names_and_paths["embeddings"] = ([os.path.join(models_dir, "embeddings")], supported_pt_extensions) -folder_names_and_paths["diffusers"] = ([os.path.join(models_dir, "diffusers")], ["folder"]) -folder_names_and_paths["vae_approx"] = ([os.path.join(models_dir, "vae_approx")], supported_pt_extensions) +def reset_all_paths(new_base_path: str) -> None: + """ + Internal use only. Designed for use immediately after startup. -folder_names_and_paths["controlnet"] = ([os.path.join(models_dir, "controlnet"), os.path.join(models_dir, "t2i_adapter")], supported_pt_extensions) -folder_names_and_paths["gligen"] = ([os.path.join(models_dir, "gligen")], supported_pt_extensions) + Removes all existing known paths, clears the filename cache, and creates the defaults under a new base path. -folder_names_and_paths["upscale_models"] = ([os.path.join(models_dir, "upscale_models")], supported_pt_extensions) + Paths: + - All default model paths + - input + - output + - temp + - user + - custom_nodes -folder_names_and_paths["custom_nodes"] = ([os.path.join(base_path, "custom_nodes")], set()) + Also creates the input directory if missing. -folder_names_and_paths["hypernetworks"] = ([os.path.join(models_dir, "hypernetworks")], supported_pt_extensions) + Args: + new_base_path: The base path to prepend to all default relative paths. + """ -folder_names_and_paths["photomaker"] = ([os.path.join(models_dir, "photomaker")], supported_pt_extensions) + global base_path + global models_dir + global output_directory + global temp_directory + global input_directory + global user_directory -folder_names_and_paths["classifiers"] = ([os.path.join(models_dir, "classifiers")], {""}) + filename_list_cache.clear() + folder_names_and_paths.clear() + + base_path = new_base_path + 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"]) + + folder_names_and_paths["loras"] = ([os.path.join(models_dir, "loras")], supported_pt_extensions) + folder_names_and_paths["vae"] = ([os.path.join(models_dir, "vae")], supported_pt_extensions) + folder_names_and_paths["text_encoders"] = ([os.path.join(models_dir, "text_encoders"), os.path.join(models_dir, "clip")], supported_pt_extensions) + folder_names_and_paths["diffusion_models"] = ([os.path.join(models_dir, "unet"), os.path.join(models_dir, "diffusion_models")], supported_pt_extensions) + folder_names_and_paths["clip_vision"] = ([os.path.join(models_dir, "clip_vision")], supported_pt_extensions) + folder_names_and_paths["style_models"] = ([os.path.join(models_dir, "style_models")], supported_pt_extensions) + folder_names_and_paths["embeddings"] = ([os.path.join(models_dir, "embeddings")], supported_pt_extensions) + folder_names_and_paths["diffusers"] = ([os.path.join(models_dir, "diffusers")], ["folder"]) + folder_names_and_paths["vae_approx"] = ([os.path.join(models_dir, "vae_approx")], supported_pt_extensions) + + folder_names_and_paths["controlnet"] = ([os.path.join(models_dir, "controlnet"), os.path.join(models_dir, "t2i_adapter")], supported_pt_extensions) + folder_names_and_paths["gligen"] = ([os.path.join(models_dir, "gligen")], supported_pt_extensions) + + folder_names_and_paths["upscale_models"] = ([os.path.join(models_dir, "upscale_models")], supported_pt_extensions) + + folder_names_and_paths["custom_nodes"] = ([os.path.join(base_path, "custom_nodes")], set()) + + folder_names_and_paths["hypernetworks"] = ([os.path.join(models_dir, "hypernetworks")], supported_pt_extensions) + + folder_names_and_paths["photomaker"] = ([os.path.join(models_dir, "photomaker")], supported_pt_extensions) + + folder_names_and_paths["classifiers"] = ([os.path.join(models_dir, "classifiers")], {""}) + + output_directory = os.path.join(base_path, "output") + temp_directory = os.path.join(base_path, "temp") + input_directory = os.path.join(base_path, "input") + user_directory = os.path.join(base_path, "user") + + # Create input dir if it does not already exist. + if not os.path.exists(input_directory): + try: + os.makedirs(input_directory) + except: + logging.error("Failed to create input directory") + + +# Default configuration: add all paths relative to this file. +reset_all_paths(os.path.dirname(os.path.realpath(__file__))) -output_directory = os.path.join(base_path, "output") -temp_directory = os.path.join(base_path, "temp") -input_directory = os.path.join(base_path, "input") -user_directory = os.path.join(base_path, "user") class CacheHelper: """ @@ -84,12 +127,6 @@ def map_legacy(folder_name: str) -> str: "clip": "text_encoders"} return legacy.get(folder_name, folder_name) -if not os.path.exists(input_directory): - try: - os.makedirs(input_directory) - except: - logging.error("Failed to create input directory") - def set_output_directory(output_dir: str) -> None: global output_directory output_directory = output_dir