bjooo's picture
Upload folder using huggingface_hub
9c98083 verified
Raw History Blame Contribute Delete
12.2 kB
import traceback
NODE_CLASS_MAPPINGS = {}
NODE_DISPLAY_NAME_MAPPINGS = {}
WEB_DIRECTORY = "./web"
def register_node(class_name, node_class, display_name):
NODE_CLASS_MAPPINGS[class_name] = node_class
NODE_DISPLAY_NAME_MAPPINGS[class_name] = display_name
# 1. Wan Native Resize (์ด๋ฏธ์ง€ -> WAN ํ•ด์ƒ๋„ ๋ฆฌ์‚ฌ์ด์ฆˆ, ๋น„์œจ ์œ ์ง€ + ์ •๋ ฌ)
try:
from .wan_resizer import WanNativeResize_Dolphin
register_node("WanNativeResize_Dolphin", WanNativeResize_Dolphin,
"๐Ÿฌ Wan Native Resize (Dolphin)")
except Exception:
print(f"\nโŒ [Dolphin] Wan Resize ๋กœ๋“œ ์‹คํŒจ:\n{traceback.format_exc()}")
# 2. Story Splitter V32 (ํ…์ŠคํŠธ ์„œ์‚ฌ -> 4์ƒท ํ”„๋กฌํ”„ํŠธ ๋ถ„๋ฐฐ)
try:
from .promp_logic_v32_story import DolphinMultiActionPromptNode_V32
register_node("DolphinMultiActionPromptNode_V32", DolphinMultiActionPromptNode_V32,
"๐Ÿฌ Dolphin Story Splitter V32")
except Exception:
print(f"\nโŒ [Dolphin] V32 Story Splitter ๋กœ๋“œ ์‹คํŒจ:\n{traceback.format_exc()}")
# 3. Architect V16 (ํด๋ฆฝ๋ณ„ LoRA -> TripleKSampler, model-only)
try:
from .arch_logic_v16 import DolphinTripleLoraMatrix as DolphinArchitectV16
register_node("DolphinArchitectV16", DolphinArchitectV16,
"๐Ÿฌ Dolphin Architect V16")
except Exception:
print(f"\nโŒ [Dolphin] Architect V16 ๋กœ๋“œ ์‹คํŒจ:\n{traceback.format_exc()}")
# 4. Cinematic Director (์˜ฌ์ธ์›: ์Šคํ† ๋ฆฌ ๋ถ„๋ฐฐ + ํด๋ฆฝ๋ณ„ ๋กœ๋ผ + ํŠธ๋ฆฌ๊ฑฐ ์ฃผ์ž…)
try:
from .dolphin_director import DolphinCinematicDirector
register_node("DolphinCinematicDirector", DolphinCinematicDirector,
"๐ŸŽฌ Dolphin Cinematic Director (All-in-One)")
except Exception:
print(f"\nโŒ [Dolphin] Cinematic Director ๋กœ๋“œ ์‹คํŒจ:\n{traceback.format_exc()}")
# 5. Vision Director (์ด๋ฏธ์ง€ ์ธ์‹ + ํ•„์ˆ˜๋™์ž‘ + ํด๋ฆฝ๋‹น ๋กœ๋ผ 4๊ฐœ)
try:
from .dolphin_vision_director import DolphinVisionDirector
register_node("DolphinVisionDirector", DolphinVisionDirector,
"๐ŸŽฌ๐Ÿ‘ Dolphin Vision Director (Imageโ†’4Clips)")
except Exception:
print(f"\nโŒ [Dolphin] Vision Director ๋กœ๋“œ ์‹คํŒจ:\n{traceback.format_exc()}")
# 6. Architect V15 (arch_logic_v16 ์ด์ „ ๊ตฌ๋ฒ„์ „, model_base/high/low + clip ๊ฐœ๋ณ„ ์ž…๋ ฅ)
try:
from .arch_logic import DolphinArchitectV15
register_node("DolphinArchitectV15", DolphinArchitectV15,
"๐Ÿฌ Dolphin Architect V15 (legacy)")
except Exception:
print(f"\nโŒ [Dolphin] Architect V15 ๋กœ๋“œ ์‹คํŒจ:\n{traceback.format_exc()}")
# 7. Story Splitter V28 (V32 ์ด์ „ ๊ตฌ๋ฒ„์ „, stitch ๋ฐฉ์‹)
try:
from .promp_logic_v28_stitch import DolphinMultiActionPromptNode_V28
register_node("DolphinMultiActionPromptNode_V28", DolphinMultiActionPromptNode_V28,
"๐Ÿฌ Dolphin Story Splitter V28 (legacy)")
except Exception:
print(f"\nโŒ [Dolphin] V28 Story Splitter ๋กœ๋“œ ์‹คํŒจ:\n{traceback.format_exc()}")
# 8. Story Splitter V30 (V32 ์ด์ „ ๊ตฌ๋ฒ„์ „)
try:
from .promp_logic_v30_story import DolphinMultiActionPromptNode_V30
register_node("DolphinMultiActionPromptNode_V30", DolphinMultiActionPromptNode_V30,
"๐Ÿฌ Dolphin Story Splitter V30 (legacy)")
except Exception:
print(f"\nโŒ [Dolphin] V30 Story Splitter ๋กœ๋“œ ์‹คํŒจ:\n{traceback.format_exc()}")
# 9. Prompt V32 Vision (promp_logic_v32_story.py์˜ DolphinMultiActionPromptNode_V32์™€
# ํด๋ž˜์Šค๋ช…์ด ๋™์ผํ•ด์„œ ์ถฉ๋Œ โ€” ๋“ฑ๋ก ํ‚ค/ํด๋ž˜์Šค๋ช…์„ _Vision์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ๋‘˜ ๋‹ค ์‚ด๋ฆผ)
try:
from .promp_logic_v32_vision import DolphinMultiActionPromptNode_V32 as DolphinMultiActionPromptNode_V32_Vision
register_node("DolphinMultiActionPromptNode_V32_Vision", DolphinMultiActionPromptNode_V32_Vision,
"๐Ÿฌ Dolphin Prompt V32 Vision (legacy)")
except Exception:
print(f"\nโŒ [Dolphin] V32 Vision ๋กœ๋“œ ์‹คํŒจ:\n{traceback.format_exc()}")
# 10. Match Image & Mask Size (์ธํŽ˜์ธํŠธ ๋ธ”๋ Œ๋“œ์šฉ: ์ด๋ฏธ์ง€/๋งˆ์Šคํฌ๋ฅผ ์ฐธ์กฐ ์ด๋ฏธ์ง€ ์‹ค์ œ ํฌ๊ธฐ์— ๋งž์ถค)
try:
from .match_size import MatchImageAndMaskSize_Dolphin
register_node("MatchImageAndMaskSize_Dolphin", MatchImageAndMaskSize_Dolphin,
"๐Ÿฌ Match Image & Mask Size (Dolphin)")
except Exception:
print(f"\nโŒ [Dolphin] Match Image & Mask Size ๋กœ๋“œ ์‹คํŒจ:\n{traceback.format_exc()}")
# 11. Mask-Region Color Match (์ธํŽ˜์ธํŠธ ๋งˆ์Šคํฌ ์˜์—ญ๋งŒ ๊ตญ์†Œ์ ์œผ๋กœ ์ƒ‰๋ณด์ •)
try:
from .mask_region_color_match import MaskRegionColorMatch_Dolphin
register_node("MaskRegionColorMatch_Dolphin", MaskRegionColorMatch_Dolphin,
"๐Ÿฌ Mask-Region Color Match (Dolphin)")
except Exception:
print(f"\nโŒ [Dolphin] Mask-Region Color Match ๋กœ๋“œ ์‹คํŒจ:\n{traceback.format_exc()}")
# 12. Prompt Director (Vision Director์™€ ๋™์ผํ•œ ๋น„์ „+LLM ์—”์ง„, MODEL/LoRA ์ „๋ถ€ ์ œ๊ฑฐ -
# ํ”„๋กฌํ”„ํŠธ ๋ถ„๋ฐฐ๋งŒ. ๋กœ๋ผ/๋ชจ๋ธ์€ Architect V16 ๋“ฑ ๋ณ„๋„ ๋…ธ๋“œ์—์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ์ „์ œ)
try:
from .dolphin_prompt_director import (
DolphinPromptDirector, DolphinPromptDirectorSingle, DolphinActionSplitter,
)
register_node("DolphinPromptDirector", DolphinPromptDirector,
"๐ŸŽฌ๐Ÿ“ Dolphin Prompt Director (Imageโ†’N Prompts, no model/LoRA)")
register_node("DolphinPromptDirectorSingle", DolphinPromptDirectorSingle,
"๐ŸŽฌ๐Ÿ“ Dolphin Prompt Director (Single, Imageโ†’1 Prompt)")
register_node("DolphinActionSplitter", DolphinActionSplitter,
"โœ‚๏ธ Dolphin Action Splitter (deterministic, no LLM)")
except Exception:
print(f"\nโŒ [Dolphin] Prompt Director ๋กœ๋“œ ์‹คํŒจ:\n{traceback.format_exc()}")
# 13. WanImageToVideoSVIPro mask ๋ฒ„๊ทธ ์ˆ˜์ •ํŒ (comfyui-kjnodes ์›๋ณธ์€ motion_latent_count๋กœ
# ์ด์–ด๋ถ™์ธ ๋ชจ์…˜ ์ปจํ…์ŠคํŠธ ํ”„๋ ˆ์ž„์„ concat_mask์—์„œ "known"์œผ๋กœ ํ‘œ์‹œํ•˜์ง€ ์•Š์•„์„œ, ํด๋ฆฝ
# ๊ฒฝ๊ณ„์—์„œ ๋ช‡ ํ”„๋ ˆ์ž„ ๋ฐ˜๋ณต ํ›„ ์ „ํ˜€ ๋‹ค๋ฅธ ์˜์ƒ์œผ๋กœ ํŠ€๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Œ. anchor+motion ํ”„๋ ˆ์ž„
# ์ „์ฒด๋ฅผ known(0.0)์œผ๋กœ ๋งˆ์Šคํ‚นํ•˜๋„๋ก ์ˆ˜์ •.)
try:
from .wan_svipro_fixed import WanImageToVideoSVIProFixed_Dolphin
register_node("WanImageToVideoSVIProFixed_Dolphin", WanImageToVideoSVIProFixed_Dolphin,
"๐Ÿฌ Wan I2V SVIPro (motion-mask fix)")
except Exception:
print(f"\nโŒ [Dolphin] SVIPro Fixed ๋กœ๋“œ ์‹คํŒจ:\n{traceback.format_exc()}")
# 14. Wan I2V Continuity (์ฝ”์–ด WanImageToVideo ๋ฐฉ์‹ = known ํ”„๋ ˆ์ž„ ์—ฌ๋Ÿฌ ์žฅ์„ ํšŒ์ƒ‰ filler์™€
# ํ•จ๊ป˜ ํ•œ ๋ฒˆ์— ํ†ต์งœ VAE ์ธ์ฝ”๋”ฉ โ†’ latent ๋ฌธ๋งฅ ์ผ๊ด€์„ฑ ๋ณด์žฅ. SVIPro์‹ raw latent ์Šคํ”Œ๋ผ์ด์‹ฑ์˜
# ํ™”์งˆ ํА/๋ถˆ์—ฐ์† ๋ฌธ์ œ๋ฅผ ํšŒํ”ผ. PainterI2V์˜ motion_amplitude(์Šฌ๋กœ์šฐ๋ชจ์…˜ ๋ฐฉ์ง€) ์ด์‹.)
try:
from .wan_i2v_continuity import WanI2VContinuity_Dolphin
register_node("WanI2VContinuity_Dolphin", WanI2VContinuity_Dolphin,
"๐Ÿฌ Wan I2V Continuity (multi-frame + amplitude)")
except Exception:
print(f"\nโŒ [Dolphin] Wan I2V Continuity ๋กœ๋“œ ์‹คํŒจ:\n{traceback.format_exc()}")
# 15. SVIPro ๋“œ๋กญ์ธ ๊ต์ฒด (์Šฌ๋กœ์šฐ๋ชจ์…˜ ์ˆ˜์ •). ์›๋ณธ์€ filler๋ฅผ latent ๊ณต๊ฐ„์—์„œ
# Wan21().process_out(zeros) = latents_mean ์ƒ์ˆ˜๋กœ ์ฑ„์›Œ์„œ "๋ณ€ํ™” ์—†์Œ" ์‹ ํ˜ธ๋ฅผ ์ฃผ๊ณ 
# ๋ถ„ํฌ ๋ฐ– ์ž…๋ ฅ์ด ๋์Œ -> ์ฝ”์–ด WanImageToVideo/PainterI2V์ฒ˜๋Ÿผ ํšŒ์ƒ‰(0.5) ํ”ฝ์…€์„ VAE
# ์ธ์ฝ”๋”ฉํ•œ filler๋กœ ๊ต์ฒด. ๋งˆ์Šคํฌ ๋ฒ„๊ทธ(anchor 1ํ”„๋ ˆ์ž„๋งŒ known)๋„ ํ•จ๊ป˜ ์ˆ˜์ •.
try:
from .wan_svipro_gray import WanImageToVideoSVIProGray_Dolphin
register_node("WanImageToVideoSVIProGray_Dolphin", WanImageToVideoSVIProGray_Dolphin,
"๐Ÿฌ Wan I2V SVIPro (gray filler, slow-motion fix)")
except Exception:
print(f"\nโŒ [Dolphin] SVIPro Gray ๋กœ๋“œ ์‹คํŒจ:\n{traceback.format_exc()}")
# 16. SVIPro ๋“œ๋กญ์ธ ๊ต์ฒด (๋ชจ์…˜ ์ฆํญํŒ). 15๋ฒˆ(gray)๊ณผ ๋‹ฌ๋ฆฌ ํŒจ๋”ฉยท๋งˆ์Šคํฌ๋Š” ์ƒ๋ฅ˜ ์›๋ณธ ๊ทธ๋Œ€๋กœ ๋‘๊ณ 
# PainterI2V์˜ diff ์ฆํญ๋งŒ ์–น๋Š”๋‹ค โ€” SVI Pro LoRA๊ฐ€ ์›๋ณธ ๊ทœ์•ฝ ์œ„์—์„œ ํ•™์Šต๋๊ธฐ ๋•Œ๋ฌธ.
# high/low conditioning์„ ๋”ฐ๋กœ ๋ฝ‘์•„์„œ ๋ชจ์…˜ ์ฆํญ์€ high-noise ์Šคํ…Œ์ด์ง€์—๋งŒ ๋จน์ธ๋‹ค.
# motion_amplitude=1.0์ด๋ฉด ์ƒ๋ฅ˜ ์›๋ณธ๊ณผ ์ถœ๋ ฅ์ด ๋™์ผ(ํšŒ๊ท€ ํ™•์ธ์šฉ).
try:
from .wan_svipro_motion import WanImageToVideoSVIProMotion_Dolphin
register_node("WanImageToVideoSVIProMotion_Dolphin", WanImageToVideoSVIProMotion_Dolphin,
"๐Ÿฌ Wan I2V SVIPro (motion amplitude, hi/lo split)")
except Exception:
print(f"\nโŒ [Dolphin] SVIPro Motion ๋กœ๋“œ ์‹คํŒจ:\n{traceback.format_exc()}")
# 17. ๋””์Šคํฌ ๋…ธ๋“œ ์บ์‹œ (๋…ธ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ComfyUI cache provider ๋“ฑ๋ก).
# ์‹œ๋“œ/ํ”„๋กฌํ”„ํŠธ/์ด๋ฏธ์ง€๊ฐ€ ๊ฐ™์œผ๋ฉด ์žฌ์‹œ์ž‘ ํ›„์—๋„ JoyCaption~์ƒ˜ํ”Œ๋Ÿฌ ์ฒด์ธ์„ ์Šคํ‚ตํ•˜๊ณ 
# ๋””์Šคํฌ์—์„œ ๊ฒฐ๊ณผ ๋ณต์›. RAM_PRESSURE ๋ชจ๋“œ์˜ ์บ์‹œ ์ฆ๋ฐœ๋„ ๋””์Šคํฌ์—์„œ ์ž๋™ ๋ณต๊ตฌ.
try:
from . import disk_cache_provider
disk_cache_provider.register()
except Exception:
print(f"\nโŒ [Dolphin] ๋””์Šคํฌ ๋…ธ๋“œ ์บ์‹œ ๋กœ๋“œ ์‹คํŒจ (๊ตฌ๋ฒ„์ „ ComfyUI์—” provider API ์—†์Œ):\n{traceback.format_exc()}")
# 18. Batch Seed Controller (4ํด๋ฆฝ ์˜์ƒ ์ƒ˜ํ”Œ๋Ÿฌ ์‹œ๋“œ๋ฅผ ํ•œ ๋…ธ๋“œ์—์„œ ์Šค์œ„์นญ:
# ๊ณ ์ •/์ „์ฒด๋žœ๋ค/ํŠน์ •ํด๋ฆฝ๋งŒ์žฌ์ƒ์„ฑ).
try:
from .dolphin_seed_controller import DolphinBatchSeedController
register_node("DolphinBatchSeedController", DolphinBatchSeedController,
"๐ŸŽฒ Dolphin Batch Seed Controller (random-all / regen-from-clip)")
except Exception:
print(f"\nโŒ [Dolphin] Batch Seed Controller ๋กœ๋“œ ์‹คํŒจ:\n{traceback.format_exc()}")
# 19. LoRA Prompt Weaver (์™„์„ฑ๋œ ํด๋ฆฝ ํ”„๋กฌํ”„ํŠธ๋ฅผ "๊ทธ ํด๋ฆฝ์— ๊ฑธ๋ฆฌ๋Š” ๋กœ๋ผ๋“ค์ด ์ž˜ ๋ฐœํ™”ํ•˜๋„๋ก"
# ๋‹ค์‹œ ์“ฐ๋Š” ํ›„์ฒ˜๋ฆฌ ๋…ธ๋“œ. ๋กœ๋ผ ์‚ฌ์ด๋“œ์นด(.metadata.json)์˜ ์„ค๋ช…/ํƒœ๊ทธ/ํ•™์Šต์บก์…˜์„ LLM์—
# ๋จผ์ € ์ฃผ๊ณ , ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋ฌธ์žฅ ์•ˆ ํ•ด๋‹น ๋ถ€์œ„์— ๋ถ™์—ฌ์„œ ์žฌ์ž‘์„ฑํ•œ๋‹ค - ์˜ˆ์ „์ฒ˜๋Ÿผ ์ด๋ฆ„ ์˜†์—
# ์ฝค๋งˆ๋กœ ๋‚˜์—ดํ•˜๋ฉด bounce/swing ๊ฐ™์€ ๋ฒ”์šฉ ๋™์‚ฌ๊ฐ€ ์ „์‹  ๋ชจ์…˜์œผ๋กœ ์ƒˆ๊ธฐ ๋•Œ๋ฌธ.
# ๊ธฐ์กด ๋…ธ๋“œ๋Š” ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ๋’ค์— ๋ผ์›Œ ๋„ฃ๋Š” ๋ฐฉ์‹์ด๋ผ ์–ด๋–ค ํ”„๋กฌํ”„ํŠธ ์†Œ์Šค์—๋„ ๋ถ™๋Š”๋‹ค.)
try:
from .dolphin_lora_prompt import DolphinLoraPromptWeaver
register_node("DolphinLoraPromptWeaver", DolphinLoraPromptWeaver,
"๐Ÿงฌ Dolphin LoRA Prompt Weaver (ํ”„๋กฌํ”„ํŠธโ†’๋กœ๋ผ์— ๋งž๊ฒŒ ์žฌ์ž‘์„ฑ)")
except Exception:
print(f"\nโŒ [Dolphin] LoRA Prompt Weaver ๋กœ๋“œ ์‹คํŒจ:\n{traceback.format_exc()}")
# 20. Minimax Director (MiniMax/Hailuo์šฉ ํ”„๋กฌํ”„ํŠธ ๋””๋ ‰ํ„ฐ. Wan์šฉ Prompt Director์™€ ๋‹ฌ๋ฆฌ
# ํด๋ฆฝ ํ•˜๋‚˜๊ฐ€ 6/10์ดˆ๋ผ์„œ, ๊ทธ ์•ˆ์„ ์ดˆ ๋‹จ์œ„ ๋น„ํŠธ๋กœ ์ชผ๊ฐœ๊ณ  ๊ฐ ๊ตฌ๊ฐ„์— ๋™์ž‘ + MiniMax
# ๊ณต์‹ ์นด๋ฉ”๋ผ ๋ฌด๋ธŒ ํƒœ๊ทธ๋ฅผ ๋ฐ•์•„์ค€๋‹ค.)
try:
from .dolphin_minimax_director import DolphinMinimaxDirector
register_node("DolphinMinimaxDirector", DolphinMinimaxDirector,
"๐ŸŽฌ๐Ÿ…œ Dolphin Minimax Director (์ดˆ ๋‹จ์œ„ ํƒ€์ž„๋ผ์ธ โ†’ Hailuo ํ”„๋กฌํ”„ํŠธ)")
except Exception:
print(f"\nโŒ [Dolphin] Minimax Director ๋กœ๋“œ ์‹คํŒจ:\n{traceback.format_exc()}")
# 21. Wan Refine H3 (MiniMax H3 ์ถœ๋ ฅ โ†’ Wan 2.2 LOW noise ์ €-denoise ๋ฆฌํŒŒ์ธ ํŒจ์Šค ์˜ฌ์ธ์›).
# H3(24fps / 17k+5 ํ”„๋ ˆ์ž„ ๊ทธ๋ฆฌ๋“œ / 768 short edge)์™€ Wan(16fps / 4n+1 / Wan2.1 VAE 16ch)
# ์‚ฌ์ด์˜ ๋ฐฐ์„  ํ•จ์ •์„ ํ•œ ๋…ธ๋“œ์—์„œ ์ฒ˜๋ฆฌ: 4n+1 ์ •๋ ฌ, VAE ์˜ค๋ฐฐ์„  ์ฐจ๋‹จ, ์†Œ์Šค ๋ผํ…ํŠธ ์ธ์ฝ”๋”ฉ,
# concat ์ปจ๋””์…”๋‹ ์žฌ๊ตฌ์„ฑ, sigma_shift ์ง์ ‘ ํŒจ์น˜, ์ƒ‰ ๋“œ๋ฆฌํ”„ํŠธ ๋ณต์›, ์˜ค๋””์˜ค ๊ธธ์ด ์ •๋ ฌ.
# ๊ฐ™์ด ๋“ฑ๋ก๋˜๋Š” Frame Grid ๋…ธ๋“œ๋Š” ๋‘ ๊ทธ๋ฆฌ๋“œ๊ฐ€ ๊ฒน์น˜๋Š” length(5/73/141/209/277/345โ€ฆ)๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
try:
from .wan_h3_refine import WanH3Refine_Dolphin, WanH3FrameGrid_Dolphin
register_node("WanH3Refine_Dolphin", WanH3Refine_Dolphin,
"๐Ÿฌ๐Ÿ…œ Wan Refine H3 (low-denoise pass)")
register_node("WanH3FrameGrid_Dolphin", WanH3FrameGrid_Dolphin,
"๐Ÿฌ๐Ÿ…œ H3โ†”Wan Frame Grid")
except Exception:
print(f"\nโŒ [Dolphin] Wan Refine H3 ๋กœ๋“œ ์‹คํŒจ:\n{traceback.format_exc()}")
__all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS', 'WEB_DIRECTORY']