from .utils import get_dict_value def get_worflow_node(extra_pnginfo, node_id: str, default=None): # First, break out of any subgraphs node_ids = str(node_id).split(':') workflow_nodes = get_dict_value(extra_pnginfo, 'workflow.nodes', default=[]) workflow_subgraphs = get_dict_value(extra_pnginfo, 'workflow.definitions.subgraphs', default=[]) nodes_list = workflow_nodes found = None for individual_node_id in node_ids: found = next((n for n in nodes_list if str(n['id']) == individual_node_id), None) if isinstance(found, dict) and 'type' in found: # Are we a subgraph? Right now, subgraph types are a UUID that exists as an id in the # aubgraphs list. But, rather than check if we're a UUID, let's just check if it exists # anyway, that when if (when) Comfy changes the id structure we'll keep working. subgraph = next((n for n in workflow_subgraphs if str(n['id']) == found['type']), None) if isinstance(subgraph, dict) and 'nodes' in subgraph: nodes_list = subgraph['nodes'] return found if found is not None else default