diff --git a/__init__.py b/__init__.py index 426f0e9..89bc277 100644 --- a/__init__.py +++ b/__init__.py @@ -4,6 +4,7 @@ from .loader_node import DynamicTagLoaderJS from .saver_node import DynamicTagSaver from .iterator_node import DynamicTagIterator from .image_info_node import ImageWorkflowExtractor +from .wait_for_node import WaitForNode # ============================================================================== # 模組導入與環境檢查 @@ -77,6 +78,7 @@ NODE_CLASS_MAPPINGS = { "DynamicTagSaver": DynamicTagSaver, "DynamicTagIterator": DynamicTagIterator, "WorkflowMetadataReader": ImageWorkflowExtractor, + "WaitForNode": WaitForNode, } NODE_DISPLAY_NAME_MAPPINGS = { @@ -84,6 +86,7 @@ NODE_DISPLAY_NAME_MAPPINGS = { "DynamicTagSaver": "💾 Dynamic Tag Saver", "DynamicTagIterator": "🔄 Dynamic Tag Iterator", "WorkflowMetadataReader": "🔍 Workflow Metadata Reader", + "WaitForNode": "⏳ Wait For", } WEB_DIRECTORY = "./web" diff --git a/example/Dynamic_Tag_example.png b/example/Dynamic_Tag_example.png new file mode 100644 index 0000000..38486e7 Binary files /dev/null and b/example/Dynamic_Tag_example.png differ diff --git a/example/Dynamic_Tag_example_workflow.png b/example/Dynamic_Tag_example_workflow.png new file mode 100644 index 0000000..5b548fd Binary files /dev/null and b/example/Dynamic_Tag_example_workflow.png differ diff --git a/example/Workflow_Metadata_Reader_example_workflow.png b/example/Workflow_Metadata_Reader_example_workflow.png new file mode 100644 index 0000000..e86a774 Binary files /dev/null and b/example/Workflow_Metadata_Reader_example_workflow.png differ diff --git a/wait_for_node.py b/wait_for_node.py new file mode 100644 index 0000000..9d608e1 --- /dev/null +++ b/wait_for_node.py @@ -0,0 +1,32 @@ +class AnyType(str): + def __ne__(self, __value: object) -> bool: + return False + +any_type = AnyType("*") + +class WaitForNode: + """ + 強迫工作流等待特定節點執行完畢。 + 用於控制 ComfyUI 執行的完成順序。 + """ + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "data_input": (any_type,), # 主要流轉的數據 + }, + "optional": { + "wait_for": (any_type,), # 必須先完成的目標 + } + } + + RETURN_TYPES = (any_type,) + RETURN_NAMES = ("data_output",) + FUNCTION = "execute_wait" + CATEGORY = "DynamicTag/FlowControl" + + def execute_wait(self, data_input, wait_for=None): + return (data_input,) \ No newline at end of file