Allow graph expansion nodes to output as list

This commit is contained in:
Deluxe233 2026-02-12 13:02:48 -05:00
parent 76a7fa96db
commit 9a797e1ec4

View File

@ -309,16 +309,17 @@ async def _async_map_node_over_list(prompt_id, unique_id, obj, input_data_all, f
return results return results
def merge_result_data(results, obj): def merge_result_data(results, obj, is_list_overrides=[]):
# check which outputs need concatenating # check which outputs need concatenating
output = [] output = []
output_is_list = [False] * len(results[0]) output_is_list = [False] * len(results[0])
if hasattr(obj, "OUTPUT_IS_LIST"): if hasattr(obj, "OUTPUT_IS_LIST"):
output_is_list = obj.OUTPUT_IS_LIST output_is_list = obj.OUTPUT_IS_LIST
is_list_override = is_list_overrides[0] if is_list_overrides else output_is_list
# merge node execution results # merge node execution results
for i, is_list in zip(range(len(results[0])), output_is_list): for i, is_list, override in zip(range(len(results[0])), output_is_list, is_list_override):
if is_list: if is_list or override:
value = [] value = []
for o in results: for o in results:
if isinstance(o[i], ExecutionBlocker): if isinstance(o[i], ExecutionBlocker):
@ -449,22 +450,35 @@ async def execute(server, dynprompt, caches, current_item, extra_data, executed,
elif unique_id in pending_subgraph_results: elif unique_id in pending_subgraph_results:
cached_results = pending_subgraph_results[unique_id] cached_results = pending_subgraph_results[unique_id]
resolved_outputs = [] resolved_outputs = []
is_list_overrides = []
for is_subgraph, result in cached_results: for is_subgraph, result in cached_results:
if not is_subgraph: if not is_subgraph:
resolved_outputs.append(result) resolved_outputs.append(result)
else: else:
resolved_output = [] resolved_output = []
is_list_override = []
for r in result: for r in result:
if is_link(r): if is_link(r):
source_node, source_output = r[0], r[1] source_node, source_output = r[0], r[1]
_class_type = dynprompt.get_node(source_node)['class_type']
_class_def = nodes.NODE_CLASS_MAPPINGS[_class_type]
_source_is_list = False
if hasattr(_class_def, "OUTPUT_IS_LIST"):
_source_is_list = _class_def.OUTPUT_IS_LIST[source_output]
node_cached = execution_list.get_cache(source_node, unique_id) node_cached = execution_list.get_cache(source_node, unique_id)
for o in node_cached.outputs[source_output]: if _source_is_list:
resolved_output.append(o) resolved_output.append(node_cached.outputs[source_output])
is_list_override.append(_source_is_list)
else:
for o in node_cached.outputs[source_output]:
resolved_output.append(o)
is_list_override.append(_source_is_list)
else: else:
resolved_output.append(r) resolved_output.append(r)
is_list_override.append(False)
resolved_outputs.append(tuple(resolved_output)) resolved_outputs.append(tuple(resolved_output))
output_data = merge_result_data(resolved_outputs, class_def) is_list_overrides.append(tuple(is_list_override))
output_data = merge_result_data(resolved_outputs, class_def, is_list_overrides)
output_ui = [] output_ui = []
del pending_subgraph_results[unique_id] del pending_subgraph_results[unique_id]
has_subgraph = False has_subgraph = False