128 lines
4.1 KiB
Python
128 lines
4.1 KiB
Python
# flake8: noqa: E402
|
|
# pylint: disable=wrong-import-position
|
|
import os
|
|
import json
|
|
import folder_paths
|
|
|
|
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
|
USER_DATA_DIR = os.path.join(folder_paths.get_user_directory(), "DadosNodes")
|
|
EXTENSION_NAME = os.path.basename(BASE_DIR)
|
|
MESSAGE_ROUTE = "/dadosNodes"
|
|
|
|
class Constants:
|
|
@property
|
|
def BASE_DIR(self):
|
|
return BASE_DIR
|
|
|
|
@property
|
|
def USER_DATA_DIR(self):
|
|
return USER_DATA_DIR
|
|
|
|
constants = Constants()
|
|
|
|
WEB_DIRECTORY = "./web/comfyui"
|
|
COMMON_DIRECTORY = "./web/common"
|
|
|
|
# Import the ComfyUI API
|
|
from comfy_api.latest import ComfyExtension, io
|
|
from .nodes.utils.api_routes import register_routes
|
|
|
|
from .nodes.DN_ReplicateBaseNode import DN_ReplicateNodeAlpha
|
|
from .nodes.DN_pyPinNode import DN_pyPinNode
|
|
from .nodes.DN_PreviewImage import DN_PreviewImage
|
|
from .nodes.DN_VideoLastFrame import DN_VideoLastFrame
|
|
from .nodes.DN_VideoMerge import DN_VideoMerge
|
|
from .nodes.DN_CSVMultiDropDownNode import DN_CSVMultiDropDownNode
|
|
from .nodes.DN_MemoryStorage import DN_MemoryStorage
|
|
from .nodes.DN_ImageBatcher import DN_ImageBatcher
|
|
from .nodes.DN_MultilineString import DN_MultilineString
|
|
from .nodes.DN_WildcardsProcessor import DN_WildcardsProcessor
|
|
from .nodes.DN_ImageBase64 import DN_ImageToBase64Node, DN_Base64ToImageNode
|
|
from .nodes.DN_PythonCode import DN_PythonCode
|
|
from .nodes.DN_DeepSeekChat import DN_DeepSeekChat
|
|
from .nodes.DN_DanyAPI import DN_DanyAPI
|
|
|
|
# Function to create a dynamic node class for a specific model
|
|
def create_replicate_node(model_identifier):
|
|
"""Create a dynamic node class for a specific Replicate model"""
|
|
|
|
class_name = f"DN_Replicate_{model_identifier.replace('/', '_').replace('-', '_')}"
|
|
|
|
# Create a new class that inherits from DN_ReplicateNodeAlpha
|
|
dynamic_node_class = type(class_name, (DN_ReplicateNodeAlpha,), {
|
|
'_replicate_model': model_identifier,
|
|
'__module__': __name__,
|
|
})
|
|
|
|
return dynamic_node_class
|
|
|
|
model_types = ["Image", "Video"]
|
|
registered_nodes = [
|
|
DN_pyPinNode,
|
|
DN_PreviewImage,
|
|
DN_VideoLastFrame,
|
|
DN_VideoMerge,
|
|
DN_MultilineString,
|
|
DN_CSVMultiDropDownNode,
|
|
DN_MemoryStorage,
|
|
DN_ImageBatcher,
|
|
DN_WildcardsProcessor,
|
|
DN_PythonCode,
|
|
DN_ImageToBase64Node,
|
|
DN_Base64ToImageNode,
|
|
DN_DeepSeekChat,
|
|
DN_DanyAPI
|
|
]
|
|
registered_replicate_models = []
|
|
|
|
|
|
# Process each model type
|
|
for model_type in model_types:
|
|
models_file = os.path.join(BASE_DIR, "configs", "replicate", model_type, "models.json")
|
|
|
|
if os.path.exists(models_file):
|
|
with open(models_file, 'r', encoding='utf-8') as f:
|
|
models_config = json.load(f)
|
|
|
|
# Create a node for each model in the config
|
|
for model_key in models_config.keys():
|
|
node_class = create_replicate_node(model_key)
|
|
# Set the model_type in the class
|
|
node_class.model_type = model_type
|
|
globals()[node_class.__name__] = node_class
|
|
registered_nodes.append(node_class)
|
|
registered_replicate_models.append(model_key)
|
|
|
|
GREEN = '\033[32m'
|
|
RESET = '\033[0m'
|
|
indent = f"{' ' * 10}"
|
|
header = f"[{GREEN}Replicate models registered{RESET}]:"
|
|
body = f"\n{indent}".join(registered_replicate_models)
|
|
print(f"{header}\n{indent}{body}")
|
|
|
|
class DadosNodes(ComfyExtension):
|
|
# must be declared as async
|
|
async def get_node_list(self):
|
|
return registered_nodes
|
|
|
|
# can be declared async or not, both will work
|
|
def comfy_entrypoint():
|
|
return DadosNodes()
|
|
|
|
register_routes()
|
|
|
|
|
|
"""
|
|
#"inactivePinterestImageNode": "Pinterest Node (WIP - broken)",
|
|
"DN_TextConcatenateNode": "Dynamic Text Concatenate",
|
|
"DN_TextDropDownNode": "Text DropDown",
|
|
"DN_WildcardPromptEditorNode": "Wildcard Prompt Editor (deprecation pending)",
|
|
"DN_WildcardSelectorComposerV2": "Wildcard Selector/Composer",
|
|
"DN_PromptSectionsExtractor": "Prompt Sections Extractor",
|
|
"DN_SmolVLMNode": "SmolVLM Image Describer",
|
|
# "PinterestNode": "Pinterest Node",
|
|
"DN_JoyTaggerNode": "JoyTagger",
|
|
"DN_PixAITaggerNode": "PixAI Tagger",
|
|
"DN_TagOpsNode": "TagOps",
|
|
"""
|