Files
ausboss-ComfyUI-AusBoss/__init__.py
T
ausboss 98fb121060 Add Tiled Upscale and Tiled Upscale Stitch
Two Image nodes that take a picture past the size a model can redraw in
one go. Tiled Upscale sets the finished size in megapixels and cuts the
picture into tiles; Tiled Upscale Stitch blends the joins, keeps each
tile's colors on the picture's own and fits the result to the size asked
for. Any model can sit between the two.

Adds the tile planner with its tests, the two widget cards, help pages,
README sections, a changelog entry, the API snapshot and a new example,
Qwen Image 2.1 Upscale + Restore. The README's example count now matches
the folder.
2026-10-06 21:20:38 -05:00

118 lines
3.4 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_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_literals",
"node_load_image_pad",
"node_load_video",
"node_lora_loader",
"node_mask_by_name",
"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_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()