mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-01-25 05:40:15 +08:00
Fix #20 base path can now be set before folder paths are initialized, although all of this really has to be reworked
This commit is contained in:
parent
fd503d8a96
commit
1bc96a7a1b
@ -2,31 +2,25 @@ from __future__ import annotations
|
|||||||
|
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import sys
|
|
||||||
import time
|
import time
|
||||||
from typing import Optional, List
|
from typing import Optional, List, Final
|
||||||
|
|
||||||
from ..cli_args import args
|
from .folder_paths_pre import get_base_path
|
||||||
from ..component_model.files import get_package_as_path
|
from ..component_model.files import get_package_as_path
|
||||||
from ..component_model.folder_path_types import FolderPathsTuple, FolderNames, SaveImagePathResponse
|
from ..component_model.folder_path_types import FolderPathsTuple, FolderNames, SaveImagePathResponse
|
||||||
from ..component_model.folder_path_types import supported_pt_extensions as _supported_pt_extensions
|
from ..component_model.folder_path_types import supported_pt_extensions as _supported_pt_extensions
|
||||||
|
from ..component_model.module_property import module_property
|
||||||
|
|
||||||
supported_pt_extensions = _supported_pt_extensions
|
supported_pt_extensions: Final[frozenset[str]] = _supported_pt_extensions
|
||||||
|
|
||||||
# todo: this should be initialized elsewhere
|
|
||||||
if 'main.py' in sys.argv:
|
# todo: this needs to be wrapped in a context and configurable
|
||||||
base_path = os.path.realpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), "../..")) # pylint: disable=used-before-assignment
|
@module_property
|
||||||
elif args.cwd is not None:
|
def _base_path():
|
||||||
if not os.path.exists(args.cwd):
|
return get_base_path()
|
||||||
try:
|
|
||||||
os.makedirs(args.cwd, exist_ok=True)
|
|
||||||
except:
|
models_dir = os.path.join(get_base_path(), "models")
|
||||||
logging.error("Failed to create custom working directory")
|
|
||||||
# wrap the path to prevent slashedness from glitching out common path checks
|
|
||||||
base_path = os.path.realpath(args.cwd)
|
|
||||||
else:
|
|
||||||
base_path = os.getcwd()
|
|
||||||
models_dir = os.path.join(base_path, "models")
|
|
||||||
folder_names_and_paths = FolderNames(models_dir)
|
folder_names_and_paths = FolderNames(models_dir)
|
||||||
folder_names_and_paths["checkpoints"] = FolderPathsTuple("checkpoints", [os.path.join(models_dir, "checkpoints")], set(supported_pt_extensions))
|
folder_names_and_paths["checkpoints"] = FolderPathsTuple("checkpoints", [os.path.join(models_dir, "checkpoints")], set(supported_pt_extensions))
|
||||||
folder_names_and_paths["configs"] = FolderPathsTuple("configs", [os.path.join(models_dir, "configs"), get_package_as_path("comfy.configs")], {".yaml"})
|
folder_names_and_paths["configs"] = FolderPathsTuple("configs", [os.path.join(models_dir, "configs"), get_package_as_path("comfy.configs")], {".yaml"})
|
||||||
@ -42,17 +36,17 @@ folder_names_and_paths["vae_approx"] = FolderPathsTuple("vae_approx", [os.path.j
|
|||||||
folder_names_and_paths["controlnet"] = FolderPathsTuple("controlnet", [os.path.join(models_dir, "controlnet"), os.path.join(models_dir, "t2i_adapter")], set(supported_pt_extensions))
|
folder_names_and_paths["controlnet"] = FolderPathsTuple("controlnet", [os.path.join(models_dir, "controlnet"), os.path.join(models_dir, "t2i_adapter")], set(supported_pt_extensions))
|
||||||
folder_names_and_paths["gligen"] = FolderPathsTuple("gligen", [os.path.join(models_dir, "gligen")], set(supported_pt_extensions))
|
folder_names_and_paths["gligen"] = FolderPathsTuple("gligen", [os.path.join(models_dir, "gligen")], set(supported_pt_extensions))
|
||||||
folder_names_and_paths["upscale_models"] = FolderPathsTuple("upscale_models", [os.path.join(models_dir, "upscale_models")], set(supported_pt_extensions))
|
folder_names_and_paths["upscale_models"] = FolderPathsTuple("upscale_models", [os.path.join(models_dir, "upscale_models")], set(supported_pt_extensions))
|
||||||
folder_names_and_paths["custom_nodes"] = FolderPathsTuple("custom_nodes", [os.path.join(base_path, "custom_nodes")], set())
|
folder_names_and_paths["custom_nodes"] = FolderPathsTuple("custom_nodes", [os.path.join(get_base_path(), "custom_nodes")], set())
|
||||||
folder_names_and_paths["hypernetworks"] = FolderPathsTuple("hypernetworks", [os.path.join(models_dir, "hypernetworks")], set(supported_pt_extensions))
|
folder_names_and_paths["hypernetworks"] = FolderPathsTuple("hypernetworks", [os.path.join(models_dir, "hypernetworks")], set(supported_pt_extensions))
|
||||||
folder_names_and_paths["photomaker"] = FolderPathsTuple("photomaker", [os.path.join(models_dir, "photomaker")], set(supported_pt_extensions))
|
folder_names_and_paths["photomaker"] = FolderPathsTuple("photomaker", [os.path.join(models_dir, "photomaker")], set(supported_pt_extensions))
|
||||||
folder_names_and_paths["classifiers"] = FolderPathsTuple("classifiers", [os.path.join(models_dir, "classifiers")], {""})
|
folder_names_and_paths["classifiers"] = FolderPathsTuple("classifiers", [os.path.join(models_dir, "classifiers")], {""})
|
||||||
folder_names_and_paths["huggingface"] = FolderPathsTuple("huggingface", [os.path.join(models_dir, "huggingface")], {""})
|
folder_names_and_paths["huggingface"] = FolderPathsTuple("huggingface", [os.path.join(models_dir, "huggingface")], {""})
|
||||||
folder_names_and_paths["huggingface_cache"] = FolderPathsTuple("huggingface_cache", [os.path.join(models_dir, "huggingface_cache")], {""})
|
folder_names_and_paths["huggingface_cache"] = FolderPathsTuple("huggingface_cache", [os.path.join(models_dir, "huggingface_cache")], {""})
|
||||||
|
|
||||||
output_directory = os.path.join(base_path, "output")
|
output_directory = os.path.join(get_base_path(), "output")
|
||||||
temp_directory = os.path.join(base_path, "temp")
|
temp_directory = os.path.join(get_base_path(), "temp")
|
||||||
input_directory = os.path.join(base_path, "input")
|
input_directory = os.path.join(get_base_path(), "input")
|
||||||
user_directory = os.path.join(base_path, "user")
|
user_directory = os.path.join(get_base_path(), "user")
|
||||||
|
|
||||||
_filename_list_cache = {}
|
_filename_list_cache = {}
|
||||||
|
|
||||||
|
|||||||
31
comfy/cmd/folder_paths_pre.py
Normal file
31
comfy/cmd/folder_paths_pre.py
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
import logging
|
||||||
|
import os
|
||||||
|
|
||||||
|
from ..cli_args import args
|
||||||
|
|
||||||
|
_base_path = None
|
||||||
|
|
||||||
|
|
||||||
|
# todo: this should be initialized elsewhere in a context
|
||||||
|
def get_base_path() -> str:
|
||||||
|
global _base_path
|
||||||
|
if _base_path is None:
|
||||||
|
if args.cwd is not None:
|
||||||
|
if not os.path.exists(args.cwd):
|
||||||
|
try:
|
||||||
|
os.makedirs(args.cwd, exist_ok=True)
|
||||||
|
except:
|
||||||
|
logging.error("Failed to create custom working directory")
|
||||||
|
# wrap the path to prevent slashedness from glitching out common path checks
|
||||||
|
_base_path = os.path.realpath(args.cwd)
|
||||||
|
else:
|
||||||
|
_base_path = os.getcwd()
|
||||||
|
return _base_path
|
||||||
|
|
||||||
|
|
||||||
|
def set_base_path(value: str):
|
||||||
|
global _base_path
|
||||||
|
_base_path = value
|
||||||
|
|
||||||
|
|
||||||
|
__all__ = ["get_base_path", "set_base_path"]
|
||||||
@ -6,6 +6,8 @@ import os
|
|||||||
import shutil
|
import shutil
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
from .extra_model_paths import load_extra_path_config
|
from .extra_model_paths import load_extra_path_config
|
||||||
# main_pre must be the earliest import since it suppresses some spurious warnings
|
# main_pre must be the earliest import since it suppresses some spurious warnings
|
||||||
@ -107,7 +109,16 @@ def cuda_malloc_warning():
|
|||||||
"\nWARNING: this card most likely does not support cuda-malloc, if you get \"CUDA error\" please run ComfyUI with: --disable-cuda-malloc\n")
|
"\nWARNING: this card most likely does not support cuda-malloc, if you get \"CUDA error\" please run ComfyUI with: --disable-cuda-malloc\n")
|
||||||
|
|
||||||
|
|
||||||
async def main():
|
async def main(from_script_dir: Optional[Path] = None):
|
||||||
|
"""
|
||||||
|
Runs ComfyUI's frontend and backend like upstream.
|
||||||
|
:param from_script_dir: when set to a path, assumes that you are running ComfyUI's legacy main.py entrypoint at the root of the git repository located at the path
|
||||||
|
"""
|
||||||
|
if not from_script_dir:
|
||||||
|
os_getcwd = os.getcwd()
|
||||||
|
else:
|
||||||
|
os_getcwd = str(from_script_dir)
|
||||||
|
|
||||||
if args.temp_directory:
|
if args.temp_directory:
|
||||||
temp_dir = os.path.join(os.path.abspath(args.temp_directory), "temp")
|
temp_dir = os.path.join(os.path.abspath(args.temp_directory), "temp")
|
||||||
logging.debug(f"Setting temp directory to: {temp_dir}")
|
logging.debug(f"Setting temp directory to: {temp_dir}")
|
||||||
@ -116,7 +127,7 @@ async def main():
|
|||||||
|
|
||||||
# configure extra model paths earlier
|
# configure extra model paths earlier
|
||||||
try:
|
try:
|
||||||
extra_model_paths_config_path = os.path.join(os.getcwd(), "extra_model_paths.yaml")
|
extra_model_paths_config_path = os.path.join(os_getcwd, "extra_model_paths.yaml")
|
||||||
if os.path.isfile(extra_model_paths_config_path):
|
if os.path.isfile(extra_model_paths_config_path):
|
||||||
load_extra_path_config(extra_model_paths_config_path)
|
load_extra_path_config(extra_model_paths_config_path)
|
||||||
except NameError:
|
except NameError:
|
||||||
|
|||||||
22
comfy/component_model/module_property.py
Normal file
22
comfy/component_model/module_property.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def module_property(func):
|
||||||
|
"""Decorator to turn module functions into properties.
|
||||||
|
Function names must be prefixed with an underscore."""
|
||||||
|
module = sys.modules[func.__module__]
|
||||||
|
|
||||||
|
def base_getattr(name):
|
||||||
|
raise AttributeError(
|
||||||
|
f"module '{module.__name__}' has no attribute '{name}'")
|
||||||
|
|
||||||
|
old_getattr = getattr(module, '__getattr__', base_getattr)
|
||||||
|
|
||||||
|
def new_getattr(name):
|
||||||
|
if f'_{name}' == func.__name__:
|
||||||
|
return func()
|
||||||
|
else:
|
||||||
|
return old_getattr(name)
|
||||||
|
|
||||||
|
module.__getattr__ = new_getattr
|
||||||
|
return func
|
||||||
12
main.py
12
main.py
@ -1,8 +1,14 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
import warnings
|
import warnings
|
||||||
|
from pathlib import Path
|
||||||
from comfy.cmd.main import main
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
from comfy.cmd.folder_paths_pre import set_base_path
|
||||||
|
|
||||||
warnings.warn("main.py is deprecated. Start comfyui by installing the package through the instructions in the README, not by cloning the repository.", DeprecationWarning)
|
warnings.warn("main.py is deprecated. Start comfyui by installing the package through the instructions in the README, not by cloning the repository.", DeprecationWarning)
|
||||||
asyncio.run(main())
|
this_file_parent_dir = Path(__file__).parent
|
||||||
|
set_base_path(str(this_file_parent_dir))
|
||||||
|
|
||||||
|
from comfy.cmd.main import main
|
||||||
|
|
||||||
|
asyncio.run(main(from_script_dir=this_file_parent_dir))
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user