A new node, Camera Move. Press Show my clip and it shows the clip in 3D on the node: drag to turn the camera, scroll or pinch to pull back or push in, and click the time bar to set keys. It turns the clip's depth (core MoGe Inference) into a guide clip where what the old camera never saw is pink, for MiniMax H3 with the CrossView-Warp LoRA to paint in. The face also works on a subgraph box: once the camera input is brought up to the box, the box shows the shot, its settings card and the LoRA rows. Adds the MiniMax H3 Camera Move example (Load Video, one box, Save Video), the help page, the Chinese names, tests for the camera maths, and the panel and wheel guards for the new face.
124 lines
3.6 KiB
Python
124 lines
3.6 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_camera_move",
|
|
"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()
|