123 lines
3.5 KiB
Python
123 lines
3.5 KiB
Python
"""ComfyUI-AusBoss entry point.
|
|
|
|
Every node lives in its own file under nodes/ and exports its own
|
|
NODE_CLASS_MAPPINGS / NODE_DISPLAY_NAME_MAPPINGS. This file merges them
|
|
and hands the result to ComfyUI. To register a new node, add its module
|
|
name to NODE_MODULES below — nothing else to wire up.
|
|
|
|
A module that fails to import is skipped with a console warning instead
|
|
of taking the whole pack down, so one broken node never hides the rest.
|
|
"""
|
|
|
|
import importlib
|
|
import os
|
|
import re
|
|
import traceback
|
|
|
|
# One entry per file in nodes/, kept alphabetical. The order has no
|
|
# functional effect.
|
|
NODE_MODULES = [
|
|
"node_align_image",
|
|
"node_batch_utils",
|
|
"node_callout",
|
|
"node_color_match",
|
|
"node_compare",
|
|
"node_frame_interpolate",
|
|
"node_free_memory",
|
|
"node_h3_prompt_writer",
|
|
"node_image_crop_rotate_pad",
|
|
"node_image_folder",
|
|
"node_image_resize",
|
|
"node_image_size",
|
|
"node_inpaint_crop_stitch",
|
|
"node_krea2_encode",
|
|
"node_krea2_model_patch",
|
|
"node_lama_inpaint",
|
|
"node_layout_boxes",
|
|
"node_literals",
|
|
"node_load_image_pad",
|
|
"node_load_audio",
|
|
"node_load_video",
|
|
"node_lora_loader",
|
|
"node_mask_by_name",
|
|
"node_mask_by_touch",
|
|
"node_math",
|
|
"node_realign_to_source",
|
|
"node_refine_mask",
|
|
"node_resolution",
|
|
"node_run_timer",
|
|
"node_save_image",
|
|
"node_save_video",
|
|
"node_seed",
|
|
"node_select_frame",
|
|
"node_show_text",
|
|
"node_step_preview",
|
|
"node_tiled_upscale",
|
|
"node_video_crop_rotate_pad",
|
|
"node_video_crop_rotate_pad_clip",
|
|
"node_workflow_note",
|
|
"node_workflow_switches",
|
|
]
|
|
|
|
NODE_CLASS_MAPPINGS = {}
|
|
NODE_DISPLAY_NAME_MAPPINGS = {}
|
|
_failed_modules = []
|
|
|
|
for _module_name in NODE_MODULES:
|
|
try:
|
|
_module = importlib.import_module(f".nodes.{_module_name}", __name__)
|
|
NODE_CLASS_MAPPINGS.update(getattr(_module, "NODE_CLASS_MAPPINGS", {}))
|
|
NODE_DISPLAY_NAME_MAPPINGS.update(
|
|
getattr(_module, "NODE_DISPLAY_NAME_MAPPINGS", {})
|
|
)
|
|
except Exception:
|
|
_failed_modules.append(_module_name)
|
|
traceback.print_exc()
|
|
|
|
# Folder ComfyUI serves to the browser; every .js file in it is loaded as a
|
|
# frontend extension. Shared modules use .mjs so they are import-only.
|
|
WEB_DIRECTORY = "./js"
|
|
|
|
__all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS", "WEB_DIRECTORY"]
|
|
|
|
|
|
def _read_version():
|
|
"""Version straight from pyproject.toml so it is never duplicated."""
|
|
try:
|
|
pyproject = os.path.join(os.path.dirname(__file__), "pyproject.toml")
|
|
with open(pyproject, "r", encoding="utf-8") as f:
|
|
match = re.search(r'^version\s*=\s*"([^"]+)"', f.read(), re.MULTILINE)
|
|
return match.group(1) if match else "unknown"
|
|
except Exception:
|
|
return "unknown"
|
|
|
|
|
|
def _print_banner():
|
|
# ASCII only in here: ComfyUI on Windows often runs with a cp1252
|
|
# console, and a UnicodeEncodeError at import time kills the whole pack.
|
|
teal = "\033[38;2;0;180;170m"
|
|
grey = "\033[0;37m"
|
|
red = "\033[0;31m"
|
|
reset = "\033[0m"
|
|
bar = f"{teal}{'-' * 70}{reset}"
|
|
|
|
print(bar)
|
|
print(
|
|
f" {teal}AusBoss{reset} v{_read_version()} | "
|
|
f"{len(NODE_CLASS_MAPPINGS)} nodes loaded"
|
|
)
|
|
if _failed_modules:
|
|
print(f" {red}Failed to load: {', '.join(_failed_modules)}{reset}")
|
|
print(f" {grey}https://github.com/ausboss/ComfyUI-AusBoss{reset}")
|
|
print(bar)
|
|
|
|
|
|
try:
|
|
from .nodes._frontend_cache import register_frontend_cache_guard
|
|
|
|
register_frontend_cache_guard()
|
|
except Exception:
|
|
traceback.print_exc()
|
|
|
|
_print_banner()
|