""" @author: rgthree @title: Comfy Nodes @nickname: rgthree @description: A bunch of nodes I created that I also find useful. """ from glob import glob import json import os import shutil import re import random import execution from .py.log import log from .py.config import get_config_value from .py.server.rgthree_server import * from .py.context import RgthreeContext from .py.context_switch import RgthreeContextSwitch from .py.context_switch_big import RgthreeContextSwitchBig from .py.display_any import RgthreeDisplayAny, RgthreeDisplayInt from .py.lora_stack import RgthreeLoraLoaderStack from .py.seed import RgthreeSeed from .py.sdxl_empty_latent_image import RgthreeSDXLEmptyLatentImage from .py.power_prompt import RgthreePowerPrompt from .py.power_prompt_simple import RgthreePowerPromptSimple from .py.image_inset_crop import RgthreeImageInsetCrop from .py.context_big import RgthreeBigContext from .py.dynamic_context import RgthreeDynamicContext from .py.dynamic_context_switch import RgthreeDynamicContextSwitch from .py.ksampler_config import RgthreeKSamplerConfig from .py.sdxl_power_prompt_postive import RgthreeSDXLPowerPromptPositive from .py.sdxl_power_prompt_simple import RgthreeSDXLPowerPromptSimple from .py.any_switch import RgthreeAnySwitch from .py.context_merge import RgthreeContextMerge from .py.context_merge_big import RgthreeContextMergeBig from .py.image_comparer import RgthreeImageComparer from .py.power_lora_loader import RgthreePowerLoraLoader NODE_CLASS_MAPPINGS = { RgthreeBigContext.NAME: RgthreeBigContext, RgthreeContext.NAME: RgthreeContext, RgthreeContextSwitch.NAME: RgthreeContextSwitch, RgthreeContextSwitchBig.NAME: RgthreeContextSwitchBig, RgthreeContextMerge.NAME: RgthreeContextMerge, RgthreeContextMergeBig.NAME: RgthreeContextMergeBig, RgthreeDisplayInt.NAME: RgthreeDisplayInt, RgthreeDisplayAny.NAME: RgthreeDisplayAny, RgthreeLoraLoaderStack.NAME: RgthreeLoraLoaderStack, RgthreeSeed.NAME: RgthreeSeed, RgthreeImageInsetCrop.NAME: RgthreeImageInsetCrop, RgthreePowerPrompt.NAME: RgthreePowerPrompt, RgthreePowerPromptSimple.NAME: RgthreePowerPromptSimple, RgthreeKSamplerConfig.NAME: RgthreeKSamplerConfig, RgthreeSDXLEmptyLatentImage.NAME: RgthreeSDXLEmptyLatentImage, RgthreeSDXLPowerPromptPositive.NAME: RgthreeSDXLPowerPromptPositive, RgthreeSDXLPowerPromptSimple.NAME: RgthreeSDXLPowerPromptSimple, RgthreeAnySwitch.NAME: RgthreeAnySwitch, RgthreeImageComparer.NAME: RgthreeImageComparer, RgthreePowerLoraLoader.NAME: RgthreePowerLoraLoader, } if get_config_value('unreleased.dynamic_context.enabled') is True: NODE_CLASS_MAPPINGS[RgthreeDynamicContext.NAME] = RgthreeDynamicContext NODE_CLASS_MAPPINGS[RgthreeDynamicContextSwitch.NAME] = RgthreeDynamicContextSwitch # WEB_DIRECTORY is the comfyui nodes directory that ComfyUI will link and auto-load. WEB_DIRECTORY = "./web/comfyui" THIS_DIR = os.path.dirname(os.path.abspath(__file__)) DIR_WEB = os.path.abspath(f'{THIS_DIR}/{WEB_DIRECTORY}') DIR_PY = os.path.abspath(f'{THIS_DIR}/py') # remove old directories OLD_DIRS = [ os.path.abspath(f'{THIS_DIR}/../../web/extensions/rgthree'), os.path.abspath(f'{THIS_DIR}/../../web/extensions/rgthree-comfy'), ] for old_dir in OLD_DIRS: if os.path.exists(old_dir): shutil.rmtree(old_dir) __all__ = ['NODE_CLASS_MAPPINGS', 'WEB_DIRECTORY'] NOT_NODES = ['constants', 'log', 'utils', 'rgthree', 'rgthree_server', 'image_clipbaord', 'config'] nodes = [] for file in glob(os.path.join(DIR_PY, '*.py')) + glob(os.path.join(DIR_WEB, '*.js')): name = os.path.splitext(os.path.basename(file))[0] if name in NOT_NODES or name in nodes: continue if name.startswith('_') or name.startswith('base') or 'utils' in name: continue nodes.append(name) if name == 'display_any': nodes.append('display_int') print() adjs = ['exciting', 'extraordinary', 'epic', 'fantastic', 'magnificent'] log(f'Loaded {len(nodes)} {random.choice(adjs)} nodes. 🎉', color='BRIGHT_GREEN') print()