implement disabled nodes used config

This commit is contained in:
AlekPet
2024-11-02 16:53:37 +03:00
parent f3e4403317
commit a5c4798b09
2 changed files with 191 additions and 61 deletions
+176 -61
View File
@@ -7,6 +7,7 @@ import subprocess
import sys
import shutil
import __main__
import json
# import pkgutil
import re
@@ -20,7 +21,8 @@ python = sys.executable
extension_folder = os.path.dirname(os.path.realpath(__file__))
# ComfyUI folders web
folder_web = os.path.join(os.path.dirname(os.path.realpath(__main__.__file__)), "web")
folder_web = os.path.join(os.path.dirname(
os.path.realpath(__main__.__file__)), "web")
folder_comfyui_web_extensions = os.path.join(folder_web, "extensions")
folder__web_lib = os.path.join(folder_web, "lib")
@@ -34,26 +36,65 @@ DEBUG = False
# NODE_CLASS_MAPPINGS = dict() # dynamic class nodes append in mappings
# NODE_DISPLAY_NAME_MAPPINGS = dict() # dynamic display names nodes append mappings names
humanReadableTextReg = re.compile("(?<=[a-z0-9])([A-Z])|(?<=[A-Z0-9])([A-Z][a-z]+)")
humanReadableTextReg = re.compile(
"(?<=[a-z0-9])([A-Z])|(?<=[A-Z0-9])([A-Z][a-z]+)")
module_name_cut_version = re.compile("[>=<]")
installed_modules = {}
# installed_modules = {m[1] for m in pkgutil.iter_modules()}
# -- Config settings --
CONFIG = {}
NODES_SETTINGS = {}
GLOBAL_SETTINGS = {}
is_check_enabled_nodes = True
# List nodes dirs
ALL_NODES_DIRS = [dir.name for dir in os.scandir(extension_folder) if dir.is_dir(
) and not dir.name.startswith(".") and not dir.name.startswith("_")]
# Directory config file
config_path = os.path.join(extension_folder, "config.json")
# Load config.js file
if not os.path.exists(config_path):
print("File config.js file not found! Reinstall extensions! Used default settings!")
is_check_enabled_nodes = False
else:
with open(config_path, "r") as f:
CONFIG = json.load(f)
NODES_SETTINGS = CONFIG.get("nodes_settings")
GLOBAL_SETTINGS = CONFIG.get("global_settings")
# Global settings
if GLOBAL_SETTINGS is not None:
is_check_enabled_nodes = GLOBAL_SETTINGS.get(
"check_enabled_nodes", True)
# Nodes settings
if NODES_SETTINGS is None:
is_check_enabled_nodes = False
# -- end - Config settings --
def get_version_extension():
version = ''
toml_file = os.path.join(extension_folder, 'pyproject.toml')
if(os.path.isfile(toml_file)):
if (os.path.isfile(toml_file)):
try:
with open(toml_file, "r") as v:
version = list(filter(lambda l: l.startswith("version"),v.readlines()))[0]
version = version.split("=")[1].replace("\"","").strip()
version = list(
filter(lambda l: l.startswith("version"), v.readlines()))[0]
version = version.split("=")[1].replace("\"", "").strip()
return f" \033[1;34mv{version}\033[0m\033[1;35m"
except Exception as e:
print(e)
return version
def log(*text):
if DEBUG:
print("".join(map(str, text)))
@@ -101,7 +142,8 @@ def addComfyUINodesToMapping(nodeElement):
spec.loader.exec_module(module)
classes_names = list(
filter(
lambda p: callable(getattr(module, p)) and p.find("Node") != -1,
lambda p: callable(getattr(module, p)
) and p.find("Node") != -1,
dir(module),
)
)
@@ -182,7 +224,8 @@ def get_installed_modules():
def checkModules(nodeElement):
file_requir = os.path.join(extension_folder, nodeElement, "requirements.txt")
file_requir = os.path.join(
extension_folder, nodeElement, "requirements.txt")
if os.path.exists(file_requir):
log(" -> File 'requirements.txt' found!")
with open(file_requir) as f:
@@ -201,6 +244,10 @@ def checkModules(nodeElement):
def install_node(nodeElement):
if is_check_enabled_nodes and NODES_SETTINGS.get(nodeElement, True) == False:
printColorInfo(f"Node -> {nodeElement}: \033[1;35m[Disabled]\033[0m ")
return
log(f"* Node <{nodeElement}> is found, installing...")
web_extensions_dir = os.path.join(extension_folder, extension_dirs[0])
@@ -216,7 +263,8 @@ def install_node(nodeElement):
shutil.copytree(folder_curr, folder_curr_dist, dirs_exist_ok=True)
clsNodes = getNamesNodesInsidePyFile(nodeElement)
clsNodesText = "\033[93m" + ", ".join(clsNodes) + "\033[0m" if clsNodes else ""
clsNodesText = "\033[93m" + \
", ".join(clsNodes) + "\033[0m" if clsNodes else ""
printColorInfo(f"Node -> {nodeElement}: {clsNodesText} \033[92m[Loading] ")
checkModules(nodeElement)
@@ -226,7 +274,8 @@ def install_node(nodeElement):
def installNodes():
global installed_modules
log(f"\n-------> AlekPet Node Installing [DEBUG] <-------")
printColorInfo(f"### [START] ComfyUI AlekPet Nodes{get_version_extension()} ###", "\033[1;35m")
printColorInfo(
f"### [START] ComfyUI AlekPet Nodes{get_version_extension()} ###", "\033[1;35m")
# Remove files in lib directory
libfiles = ["fabric.js"]
@@ -270,61 +319,127 @@ WEB_DIRECTORY = f"./{extension_dirs[0]}"
# Install nodes
installNodes()
NODE_CLASS_MAPPINGS = {}
NODE_DISPLAY_NAME_MAPPINGS = {}
# Import classes nodes and add in mappings
from .ArgosTranslateNode.argos_translate_node import (
ArgosTranslateCLIPTextEncodeNode,
ArgosTranslateTextNode,
)
from .ChatGLMNode.chatglm_translate_node import (
ChatGLM4TranslateCLIPTextEncodeNode,
ChatGLM4TranslateTextNode,
)
from .DeepTranslatorNode.deep_translator_node import (
DeepTranslatorCLIPTextEncodeNode,
DeepTranslatorTextNode,
)
from .ExtrasNode.extras_node import PreviewTextNode, HexToHueNode, ColorsCorrectNode
from .GoogleTranslateNode.google_translate_node import (
GoogleTranslateCLIPTextEncodeNode,
GoogleTranslateTextNode,
)
from .PainterNode.painter_node import PainterNode
from .PoseNode.pose_node import PoseNode
from .IDENode.ide_node import IDENode
if is_check_enabled_nodes:
if NODES_SETTINGS["ArgosTranslateNode"] == True:
from .ArgosTranslateNode.argos_translate_node import (
ArgosTranslateCLIPTextEncodeNode,
ArgosTranslateTextNode,
)
NODE_CLASS_MAPPINGS.update({"ArgosTranslateCLIPTextEncodeNode": ArgosTranslateCLIPTextEncodeNode,
"ArgosTranslateTextNode": ArgosTranslateTextNode, })
NODE_DISPLAY_NAME_MAPPINGS.update({"ArgosTranslateCLIPTextEncodeNode": "Argos Translate CLIP Text Encode Node",
"ArgosTranslateTextNode": "Argos Translate Text Node", })
if NODES_SETTINGS["ChatGLMNode"] == True:
from .ChatGLMNode.chatglm_translate_node import (
ChatGLM4TranslateCLIPTextEncodeNode,
ChatGLM4TranslateTextNode,
)
NODE_CLASS_MAPPINGS.update({"ChatGLM4TranslateCLIPTextEncodeNode": ChatGLM4TranslateCLIPTextEncodeNode,
"ChatGLM4TranslateTextNode": ChatGLM4TranslateTextNode, })
NODE_DISPLAY_NAME_MAPPINGS.update({"ChatGLM4TranslateCLIPTextEncodeNode": "ChatGLM-4 Translate CLIP Text Encode Node",
"ChatGLM4TranslateTextNode": "ChatGLM-4 Translate Text Node", })
NODE_CLASS_MAPPINGS = {
"ArgosTranslateCLIPTextEncodeNode": ArgosTranslateCLIPTextEncodeNode,
"ArgosTranslateTextNode": ArgosTranslateTextNode,
"ChatGLM4TranslateCLIPTextEncodeNode": ChatGLM4TranslateCLIPTextEncodeNode,
"ChatGLM4TranslateTextNode": ChatGLM4TranslateTextNode,
"DeepTranslatorCLIPTextEncodeNode": DeepTranslatorCLIPTextEncodeNode,
"DeepTranslatorTextNode": DeepTranslatorTextNode,
"PreviewTextNode": PreviewTextNode,
"HexToHueNode": HexToHueNode,
"ColorsCorrectNode": ColorsCorrectNode,
"GoogleTranslateCLIPTextEncodeNode": GoogleTranslateCLIPTextEncodeNode,
"GoogleTranslateTextNode": GoogleTranslateTextNode,
"PainterNode": PainterNode,
"PoseNode": PoseNode,
"IDENode": IDENode,
}
if NODES_SETTINGS["DeepTranslatorNode"] == True:
from .DeepTranslatorNode.deep_translator_node import (
DeepTranslatorCLIPTextEncodeNode,
DeepTranslatorTextNode,
)
NODE_CLASS_MAPPINGS.update({"DeepTranslatorCLIPTextEncodeNode": DeepTranslatorCLIPTextEncodeNode,
"DeepTranslatorTextNode": DeepTranslatorTextNode, })
NODE_DISPLAY_NAME_MAPPINGS.update({"DeepTranslatorCLIPTextEncodeNode": "Deep Translator CLIP Text Encode Node",
"DeepTranslatorTextNode": "Deep Translator Text Node", })
if NODES_SETTINGS["ExtrasNode"] == True:
from .ExtrasNode.extras_node import PreviewTextNode, HexToHueNode, ColorsCorrectNode
NODE_CLASS_MAPPINGS.update({"PreviewTextNode": PreviewTextNode,
"HexToHueNode": HexToHueNode,
"ColorsCorrectNode": ColorsCorrectNode, })
NODE_DISPLAY_NAME_MAPPINGS.update({"PreviewTextNode": "Preview Text Node",
"HexToHueNode": "HEX to HUE Node",
"ColorsCorrectNode": "Colors Correct Node", })
NODE_DISPLAY_NAME_MAPPINGS = {
"ArgosTranslateCLIPTextEncodeNode": "Argos Translate CLIP Text Encode Node",
"ArgosTranslateTextNode": "Argos Translate Text Node",
"ChatGLM4TranslateCLIPTextEncodeNode": "ChatGLM-4 Translate CLIP Text Encode Node",
"ChatGLM4TranslateTextNode": "ChatGLM-4 Translate Text Node",
"DeepTranslatorCLIPTextEncodeNode": "Deep Translator CLIP Text Encode Node",
"DeepTranslatorTextNode": "Deep Translator Text Node",
"PreviewTextNode": "Preview Text Node",
"HexToHueNode": "HEX to HUE Node",
"ColorsCorrectNode": "Colors Correct Node",
"GoogleTranslateCLIPTextEncodeNode": "Google Translate CLIP Text Encode Node",
"GoogleTranslateTextNode": "Google Translate Text Node",
"PainterNode": "Painter Node",
"PoseNode": "Pose Node",
"IDENode": "IDE Node",
}
if NODES_SETTINGS["GoogleTranslateNode"] == True:
from .GoogleTranslateNode.google_translate_node import (
GoogleTranslateCLIPTextEncodeNode,
GoogleTranslateTextNode,
)
NODE_CLASS_MAPPINGS.update({"GoogleTranslateCLIPTextEncodeNode": GoogleTranslateCLIPTextEncodeNode,
"GoogleTranslateTextNode": GoogleTranslateTextNode, })
NODE_DISPLAY_NAME_MAPPINGS.update({"GoogleTranslateCLIPTextEncodeNode": "Google Translate CLIP Text Encode Node",
"GoogleTranslateTextNode": "Google Translate Text Node", })
if NODES_SETTINGS["PainterNode"] == True:
from .PainterNode.painter_node import PainterNode
NODE_CLASS_MAPPINGS.update({"PainterNode": PainterNode, })
NODE_DISPLAY_NAME_MAPPINGS.update({"PainterNode": "Painter Node", })
if NODES_SETTINGS["PoseNode"] == True:
from .PoseNode.pose_node import PoseNode
NODE_CLASS_MAPPINGS.update({"PoseNode": PoseNode, })
NODE_DISPLAY_NAME_MAPPINGS.update({"PoseNode": "Pose Node", })
if NODES_SETTINGS["IDENode"] == True:
from .IDENode.ide_node import IDENode
NODE_CLASS_MAPPINGS.update({"IDENode": IDENode, })
NODE_DISPLAY_NAME_MAPPINGS.update({"IDENode": "IDE Node", })
else:
from .ArgosTranslateNode.argos_translate_node import (
ArgosTranslateCLIPTextEncodeNode,
ArgosTranslateTextNode,
)
from .ChatGLMNode.chatglm_translate_node import (
ChatGLM4TranslateCLIPTextEncodeNode,
ChatGLM4TranslateTextNode,
)
from .DeepTranslatorNode.deep_translator_node import (
DeepTranslatorCLIPTextEncodeNode,
DeepTranslatorTextNode,
)
from .ExtrasNode.extras_node import PreviewTextNode, HexToHueNode, ColorsCorrectNode
from .GoogleTranslateNode.google_translate_node import (
GoogleTranslateCLIPTextEncodeNode,
GoogleTranslateTextNode,
)
from .PainterNode.painter_node import PainterNode
from .PoseNode.pose_node import PoseNode
from .IDENode.ide_node import IDENode
NODE_CLASS_MAPPINGS = {
"ArgosTranslateCLIPTextEncodeNode": ArgosTranslateCLIPTextEncodeNode,
"ArgosTranslateTextNode": ArgosTranslateTextNode,
"ChatGLM4TranslateCLIPTextEncodeNode": ChatGLM4TranslateCLIPTextEncodeNode,
"ChatGLM4TranslateTextNode": ChatGLM4TranslateTextNode,
"DeepTranslatorCLIPTextEncodeNode": DeepTranslatorCLIPTextEncodeNode,
"DeepTranslatorTextNode": DeepTranslatorTextNode,
"PreviewTextNode": PreviewTextNode,
"HexToHueNode": HexToHueNode,
"ColorsCorrectNode": ColorsCorrectNode,
"GoogleTranslateCLIPTextEncodeNode": GoogleTranslateCLIPTextEncodeNode,
"GoogleTranslateTextNode": GoogleTranslateTextNode,
"PainterNode": PainterNode,
"PoseNode": PoseNode,
"IDENode": IDENode,
}
NODE_DISPLAY_NAME_MAPPINGS = {
"ArgosTranslateCLIPTextEncodeNode": "Argos Translate CLIP Text Encode Node",
"ArgosTranslateTextNode": "Argos Translate Text Node",
"ChatGLM4TranslateCLIPTextEncodeNode": "ChatGLM-4 Translate CLIP Text Encode Node",
"ChatGLM4TranslateTextNode": "ChatGLM-4 Translate Text Node",
"DeepTranslatorCLIPTextEncodeNode": "Deep Translator CLIP Text Encode Node",
"DeepTranslatorTextNode": "Deep Translator Text Node",
"PreviewTextNode": "Preview Text Node",
"HexToHueNode": "HEX to HUE Node",
"ColorsCorrectNode": "Colors Correct Node",
"GoogleTranslateCLIPTextEncodeNode": "Google Translate CLIP Text Encode Node",
"GoogleTranslateTextNode": "Google Translate Text Node",
"PainterNode": "Painter Node",
"PoseNode": "Pose Node",
"IDENode": "IDE Node",
}
+15
View File
@@ -0,0 +1,15 @@
{
"nodes_settings": {
"ArgosTranslateNode": true,
"ChatGLMNode": true,
"DeepTranslatorNode": true,
"ExtrasNode": true,
"GoogleTranslateNode": true,
"IDENode": true,
"PainterNode": true,
"PoseNode": true
},
"global_settings": {
"check_enabled_nodes": false
}
}