import asyncio import time from comfy.comfy_types import IO, ComfyNodeABC, InputTypeDict from comfy_api.v0_0_2 import ComfyAPI, ComfyAPISync api = ComfyAPI() api_sync = ComfyAPISync() class TestAsyncProgressUpdate(ComfyNodeABC): """Test node with async VALIDATE_INPUTS.""" @classmethod def INPUT_TYPES(cls) -> InputTypeDict: return { "required": { "value": (IO.ANY, {}), "sleep_seconds": (IO.FLOAT, {"default": 1.0}), }, } RETURN_TYPES = (IO.ANY,) FUNCTION = "execute" CATEGORY = "_for_testing/async" async def execute(self, value, sleep_seconds): start = time.time() expiration = start + sleep_seconds now = start while now < expiration: now = time.time() await api.execution.set_progress( value=(now - start) / sleep_seconds, max_value=1.0, ) await asyncio.sleep(0.01) return (value,) class TestSyncProgressUpdate(ComfyNodeABC): """Test node with async VALIDATE_INPUTS.""" @classmethod def INPUT_TYPES(cls) -> InputTypeDict: return { "required": { "value": (IO.ANY, {}), "sleep_seconds": (IO.FLOAT, {"default": 1.0}), }, } RETURN_TYPES = (IO.ANY,) FUNCTION = "execute" CATEGORY = "_for_testing/async" def execute(self, value, sleep_seconds): start = time.time() expiration = start + sleep_seconds now = start while now < expiration: now = time.time() api_sync.execution.set_progress( value=(now - start) / sleep_seconds, max_value=1.0, ) time.sleep(0.01) return (value,) API_TEST_NODE_CLASS_MAPPINGS = { "TestAsyncProgressUpdate": TestAsyncProgressUpdate, "TestSyncProgressUpdate": TestSyncProgressUpdate, } API_TEST_NODE_DISPLAY_NAME_MAPPINGS = { "TestAsyncProgressUpdate": "Async Progress Update Test Node", "TestSyncProgressUpdate": "Sync Progress Update Test Node", }