111 lines
4.6 KiB
Python
111 lines
4.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
from typing import Type
|
|
import sys,os
|
|
|
|
sys.path.append(str(os.path.dirname(os.path.abspath(__file__))))
|
|
|
|
from .base import *
|
|
from .colors import *
|
|
from .curves import *
|
|
from .image_processing import *
|
|
from .inputfields import *
|
|
from .loaders import *
|
|
from .noise import *
|
|
from .output import *
|
|
from .prompting import *
|
|
from .seq_processing import *
|
|
from .switches import *
|
|
from .utility import *
|
|
from .calculate import *
|
|
from .laboratory import *
|
|
|
|
_NODE_CLASSES: List[Type] = [DreamSineWave, DreamLinear, DreamCSVCurve, DreamBeatCurve, DreamFrameDimensions,
|
|
DreamImageMotion, DreamNoiseFromPalette, DreamAnalyzePalette, DreamColorShift,
|
|
DreamDirectoryFileCount, DreamFrameCounterOffset, DreamDirectoryBackedFrameCounter,
|
|
DreamSimpleFrameCounter, DreamImageSequenceInputWithDefaultFallback,
|
|
DreamImageSequenceOutput, DreamCSVGenerator, DreamImageAreaSampler,
|
|
DreamVideoEncoder, DreamSequenceTweening, DreamSequenceBlend, DreamColorAlign,
|
|
DreamImageSampler, DreamNoiseFromAreaPalettes,
|
|
DreamInputString, DreamInputFloat, DreamInputInt, DreamInputText, DreamBigLatentSwitch,
|
|
DreamFrameCountCalculator, DreamBigImageSwitch, DreamBigTextSwitch, DreamBigFloatSwitch,
|
|
DreamBigIntSwitch, DreamBigPaletteSwitch, DreamWeightedPromptBuilder, DreamPromptFinalizer,
|
|
DreamFrameCounterInfo, DreamBoolToFloat, DreamBoolToInt, DreamSawWave, DreamTriangleWave,
|
|
DreamTriangleEvent, DreamSmoothEvent, DreamCalculation, DreamImageColorShift,
|
|
DreamComparePalette, DreamImageContrast, DreamImageBrightness, DreamLogFile,
|
|
DreamLaboratory, DreamStringToLog, DreamIntToLog, DreamFloatToLog, DreamJoinLog,
|
|
DreamStringTokenizer, DreamWavCurve, DreamFrameCounterTimeOffset, DreamRandomPromptWords]
|
|
_SIGNATURE_SUFFIX = " [Dream]"
|
|
|
|
MANIFEST = {
|
|
"name": "Dream Project Animation",
|
|
"version": (5, 0, 15),
|
|
"author": "Dream Project",
|
|
"project": "https://github.com/alt-key-project/comfyui-dream-project",
|
|
"description": "Various utility nodes for creating animations with ComfyUI",
|
|
}
|
|
|
|
NODE_CLASS_MAPPINGS = {}
|
|
|
|
NODE_DISPLAY_NAME_MAPPINGS = {}
|
|
|
|
config = DreamConfig()
|
|
|
|
|
|
def update_category(cls):
|
|
top = config.get("ui.top_category", "").strip().strip("/")
|
|
leaf_icon = ""
|
|
if top and "CATEGORY" in cls.__dict__:
|
|
cls.CATEGORY = top + "/" + cls.CATEGORY.lstrip("/")
|
|
if "CATEGORY" in cls.__dict__:
|
|
joined = []
|
|
for partial in cls.CATEGORY.split("/"):
|
|
icon = config.get("ui.category_icons." + partial, "")
|
|
if icon:
|
|
leaf_icon = icon
|
|
if config.get("ui.prepend_icon_to_category", False):
|
|
partial = icon.lstrip() + " " + partial
|
|
if config.get("ui.append_icon_to_category", False):
|
|
partial = partial + " " + icon.rstrip()
|
|
joined.append(partial)
|
|
cls.CATEGORY = "/".join(joined)
|
|
return leaf_icon
|
|
|
|
|
|
def update_display_name(cls, category_icon, display_name):
|
|
icon = cls.__dict__.get("ICON", category_icon)
|
|
if config.get("ui.prepend_icon_to_node", False):
|
|
display_name = icon.lstrip() + " " + display_name
|
|
if config.get("ui.append_icon_to_node", False):
|
|
display_name = display_name + " " + icon.rstrip()
|
|
return display_name
|
|
|
|
|
|
for cls in _NODE_CLASSES:
|
|
category_icon = update_category(cls)
|
|
clsname = cls.__name__
|
|
if "NODE_NAME" in cls.__dict__:
|
|
node_name = cls.__dict__["NODE_NAME"] + _SIGNATURE_SUFFIX
|
|
NODE_CLASS_MAPPINGS[node_name] = cls
|
|
NODE_DISPLAY_NAME_MAPPINGS[node_name] = update_display_name(cls, category_icon,
|
|
cls.__dict__.get("DISPLAY_NAME",
|
|
cls.__dict__["NODE_NAME"]))
|
|
else:
|
|
raise Exception("Class {} is missing NODE_NAME!".format(str(cls)))
|
|
|
|
|
|
def update_node_index():
|
|
node_list_path = os.path.join(os.path.dirname(__file__), "node_list.json")
|
|
with open(node_list_path) as f:
|
|
node_list = json.loads(f.read())
|
|
updated = False
|
|
for nodename in NODE_CLASS_MAPPINGS.keys():
|
|
if nodename not in node_list:
|
|
node_list[nodename] = ""
|
|
updated = True
|
|
if updated or True:
|
|
with open(node_list_path, "w") as f:
|
|
f.write(json.dumps(node_list, indent=2, sort_keys=True))
|
|
|
|
|
|
update_node_index()
|