mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-06-12 17:27:26 +08:00
Allow graph expansion nodes to output as list
This commit is contained in:
parent
76a7fa96db
commit
9a797e1ec4
28
execution.py
28
execution.py
@ -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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user