{"record":{"id":"56365e5b1a1dbfbd","repo":"invoke-ai/InvokeAI","slug":"call-saved-workflow-does-not-yet-support-multiple","errorCode":null,"errorMessage":"call_saved_workflow does not yet support multiple connected batch inputs on node '{node_id}'","messagePattern":"call_saved_workflow does not yet support multiple connected batch inputs on node '(.+?)'","errorType":"exception","errorClass":"UnsupportedWorkflowNodeError","httpStatus":null,"severity":"error","filePath":"invokeai/app/services/session_processor/workflow_call_batch.py","lineNumber":526,"sourceCode":"    return batch_items\n\n\ndef _resolve_batch_items_from_inputs(\n    node_id: str,\n    field_name: str,\n    workflow_edges: Sequence[Mapping[str, Any]],\n    workflow_nodes: Mapping[str, Mapping[str, Any]],\n) -> list[Any] | None:\n    incoming_edges = [\n        edge\n        for edge in workflow_edges\n        if edge.get(\"target\") == node_id and edge.get(\"targetHandle\") == field_name and edge.get(\"type\") == \"default\"\n    ]\n    if not incoming_edges:\n        return None\n    incoming_source_ids = [edge.get(\"source\") for edge in incoming_edges if isinstance(edge.get(\"source\"), str)]\n    if len(incoming_source_ids) != 1:\n        raise UnsupportedWorkflowNodeError(\n            f\"call_saved_workflow does not yet support multiple connected batch inputs on node '{node_id}'\"\n        )\n    source_id = incoming_source_ids[0]\n    source_node = workflow_nodes.get(source_id)\n    if _is_invocation_node(source_node) and source_node[\"data\"].get(\"type\", \"\").endswith(\"_generator\"):\n        return source_id\n    if _is_connector_node(source_node):\n        resolved_source = _resolve_connector_source(source_id, workflow_nodes, workflow_edges)\n        if resolved_source is not None:\n            resolved_source_id, _resolved_source_handle = resolved_source\n            resolved_source_node = workflow_nodes.get(resolved_source_id)\n            if _is_invocation_node(resolved_source_node) and resolved_source_node[\"data\"].get(\"type\", \"\").endswith(\n                \"_generator\"\n            ):\n                return resolved_source_id\n    raise UnsupportedWorkflowNodeError(\n        f\"call_saved_workflow does not yet support connected batch child workflow inputs on node '{node_id}'\"\n    )","sourceCodeStart":508,"sourceCodeEnd":544,"githubUrl":"https://github.com/invoke-ai/InvokeAI/blob/0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06/invokeai/app/services/session_processor/workflow_call_batch.py#L508-L544","documentation":"_resolve_batch_items_from_inputs finds all default edges feeding a batch node's field. If more than one distinct source node feeds the same batch input, the resolver cannot pick a single generator and raises this error, since multiple connected batch inputs aren't supported yet.","triggerScenarios":"A batch node (image_batch, string_batch, integer_batch, float_batch) has two or more default edges with different source nodes targeting the same field.","commonSituations":"Wiring two generators into one batch input to try to merge collections; copy-pasting edges in the canvas editor; refactoring a workflow and leaving a stale edge behind.","solutions":["Remove one of the incoming edges so exactly one source feeds the batch field","Merge the sources into a single generator/collection node upstream","Move each source to a separate batch node if independent batching is intended"],"exampleFix":"// before\n{\"target\": \"batch-1\", \"targetHandle\": \"images\", \"source\": \"gen-1\", \"type\": \"default\"},\n{\"target\": \"batch-1\", \"targetHandle\": \"images\", \"source\": \"gen-2\", \"type\": \"default\"}\n// after: keep only one edge\n{\"target\": \"batch-1\", \"targetHandle\": \"images\", \"source\": \"gen-1\", \"type\": \"default\"}","handlingStrategy":"validation","validationCode":"from collections import defaultdict\ntargets = defaultdict(set)\nfor e in workflow.get(\"edges\", []):\n    if e.get(\"type\") == \"default\":\n        targets[(e[\"target\"], e[\"targetHandle\"])].add(e[\"source\"])\ndupes = {k: v for k, v in targets.items() if len(v) > 1}\nif dupes:\n    raise ValueError(f\"multiple batch input sources on: {dupes}\")","typeGuard":"def has_single_batch_source(edges: list, node_id: str, handle: str) -> bool:\n    srcs = {e[\"source\"] for e in edges\n            if e.get(\"target\") == node_id and e.get(\"targetHandle\") == handle and e.get(\"type\") == \"default\"}\n    return len(srcs) == 1","tryCatchPattern":"try:\n    build_batch_child_workflow_session_results(...)\nexcept UnsupportedWorkflowNodeError as e:\n    if \"multiple connected batch inputs\" in str(e):\n        dedupe_edges_for_node(extract_node_id(str(e)))","preventionTips":["Wire exactly one generator per batch field","Delete stale edges after refactoring workflows in the editor","Lint workflow graphs for duplicate (target, targetHandle) default edges"],"tags":["workflow","graph-edges","unsupported-feature"],"backgroundTag":"unsupported-workflow-node","analyzedSha":"0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06","analyzedAt":"2026-08-29T04:46:49.967Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}