Skip to content

Commit

Permalink
fix: 🚑️ remove problematic dependencies
Browse files Browse the repository at this point in the history
- Back to using requirements.txt (closes #100)
- Use the web directory (closes #108)
- Add support for Python 11 (closes #65)
- Faceswap nodes and Film not supported anymore, check the readme
closes #95 #105 #101 #99 #96 #76 #72 #64
  • Loading branch information
melMass committed Oct 9, 2023
1 parent f1ff9fc commit 5dfea51
Show file tree
Hide file tree
Showing 7 changed files with 180 additions and 282 deletions.
94 changes: 36 additions & 58 deletions __init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,31 @@
os.environ["TF_FORCE_GPU_ALLOW_GROWTH"] = "true"
os.environ["TF_GPU_ALLOCATOR"] = "cuda_malloc_async"

import traceback
from .log import log, blue_text, cyan_text, get_summary, get_label
from .utils import here
from .utils import comfy_dir
import importlib
import os
import ast
import contextlib
import importlib
import json
import logging
import os
import shutil
import traceback
from importlib import reload

from aiohttp import web
from server import PromptServer

import nodes

from .endpoint import endlog
from .log import blue_text, cyan_text, get_label, get_summary, log
from .utils import comfy_dir, here

NODE_CLASS_MAPPINGS = {}
NODE_DISPLAY_NAME_MAPPINGS = {}
NODE_CLASS_MAPPINGS_DEBUG = {}
WEB_DIRECTORY = "./web"

__version__ = "0.1.4"
__version__ = "0.2.0"


def extract_nodes_from_source(filename):
Expand Down Expand Up @@ -85,7 +96,7 @@ def load_nodes():
nodes_failed.extend(extract_nodes_from_source(filename))

if errors:
log.info(
log.debug(
f"Some nodes failed to load:\n\t"
+ "\n\t".join(errors)
+ "\n\n"
Expand All @@ -100,49 +111,10 @@ def load_nodes():
web_extensions_root = comfy_dir / "web" / "extensions"
web_mtb = web_extensions_root / "mtb"

if web_mtb.exists():
log.debug(f"Web extensions folder found at {web_mtb}")
if not os.path.islink(web_mtb.as_posix()):
log.warn(
f"Web extensions folder at {web_mtb} is not a symlink, if updating please delete it before"
)
if web_mtb.exists() and hasattr(nodes, "EXTENSION_WEB_DIRS"):
shutil.rmtree(web_mtb)


elif web_extensions_root.exists():
web_tgt = here / "web"
src = web_tgt.as_posix()
dst = web_mtb.as_posix()
try:
if os.name == "nt":
import _winapi

_winapi.CreateJunction(src, dst)
else:
os.symlink(web_tgt.as_posix(), web_mtb.as_posix())

except OSError:
log.warn(f"Failed to create symlink to {web_mtb}, trying to copy it")
try:
import shutil

shutil.copytree(web_tgt, web_mtb)
log.info(f"Successfully copied {web_tgt} to {web_mtb}")
except Exception as e:
log.warn(
f"Failed to symlink and copy {web_tgt} to {web_mtb}. Please copy the folder manually."
)
log.warn(e)

except Exception as e:
log.warn(
f"Failed to create symlink to {web_mtb}. Please copy the folder manually."
)
log.warn(e)
else:
log.warn(
f"Comfy root probably not found automatically, please copy the folder {web_mtb} manually in the web/extensions folder of ComfyUI"
)

# - REGISTER NODES
nodes, failed = load_nodes()
for node_class in nodes:
Expand All @@ -166,27 +138,33 @@ def load_nodes():
)
)

log.info(
log.debug(
f"Loaded the following nodes:\n\t"
+ "\n\t".join(
f"{cyan_text(k)}: {blue_text(get_summary(doc)) if doc else '-'}"
for k, doc in NODE_CLASS_MAPPINGS_DEBUG.items()
)
)

log.info(f"loaded {cyan_text(len(nodes))} nodes successfuly")
if failed:
with contextlib.suppress(Exception):
base_url, port = utils.get_server_info()
log.info(
f"Some nodes ({len(failed)}) could not be loaded. This can be ignored, but go to http://{base_url}:{port}/mtb if you want more information."
)


# - ENDPOINT
from server import PromptServer
from .log import log
from aiohttp import web
from importlib import reload
import logging
from .endpoint import endlog


if hasattr(PromptServer, "instance"):
restore_deps = ["basicsr"]
swap_deps = ["insightface", "onnxruntime"]

onnx_deps = ["onnxruntime"]
swap_deps = ["insightface"] + onnx_deps
node_dependency_mapping = {
"QrCode": ["qrcode"],
"DeepBump": onnx_deps,
"FaceSwap": swap_deps,
"LoadFaceSwapModel": swap_deps,
"LoadFaceAnalysisModel": restore_deps,
Expand Down
51 changes: 28 additions & 23 deletions endpoint.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,16 @@
from .utils import (
here,
import_install,
styles_dir,
backup_file,
)
from aiohttp import web
from .log import mklog
import csv

from aiohttp import web

from .log import mklog
from .utils import backup_file, here, import_install, reqs_map, run_command, styles_dir

endlog = mklog("mtb endpoint")

# - ACTIONS
import platform
import sys
from pathlib import Path

import_install("requirements")

Expand All @@ -21,21 +19,28 @@ def ACTIONS_installDependency(dependency_names=None):
if dependency_names is None:
return {"error": "No dependency name provided"}
endlog.debug(f"Received Install Dependency request for {dependency_names}")
reqs = []
if platform.system() == "Windows":
reqs = list(requirements.parse((here / "reqs_windows.txt").read_text()))
else:
reqs = list(requirements.parse((here / "reqs.txt").read_text()))
print([x.specs for x in reqs])
print(
"\n".join([f"{x.line} {''.join(x.specs[0] if x.specs else '')}" for x in reqs])
)
for dependency_name in dependency_names:
for req in reqs:
if req.name == dependency_name:
endlog.debug(f"Dependency {dependency_name} installed")
break
return {"success": True}
# reqs = []
resolved_names = [reqs_map.get(name, name) for name in dependency_names]
try:
run_command([Path(sys.executable), "-m", "pip", "install"] + resolved_names)
return {"success": True}

except Exception as e:
return {"error": f"Failed to install dependencies: {e}"}

# if platform.system() == "Windows":
# reqs = list(requirements.parse((here / "reqs_windows.txt").read_text()))
# else:
# reqs = list(requirements.parse((here / "reqs.txt").read_text()))
# print([x.specs for x in reqs])
# print(
# "\n".join([f"{x.line} {''.join(x.specs[0] if x.specs else '')}" for x in reqs])
# )
# for dependency_name in dependency_names:
# for req in reqs:
# if req.name == dependency_name:
# endlog.debug(f"Dependency {dependency_name} installed")
# break


def ACTIONS_getStyles(style_name=None):
Expand Down

0 comments on commit 5dfea51

Please sign in to comment.