invoke-ai/InvokeAI · error · UnsupportedWorkflowNodeError

call_saved_workflow batch child workflow node '{node_id}' is

Error message

call_saved_workflow batch child workflow node '{node_id}' is not connected to any invocation input

What it means

A batch node in the called saved workflow has valid items but its output is not connected to any invocation input field. InvokeAI requires each batch datum to have a concrete destination node/field, otherwise it could not inject per-child field values, so it raises UnsupportedWorkflowNodeError.

Source

Thrown at invokeai/app/services/session_processor/workflow_call_batch.py:611

                _resolve_generator_items(generator_node, services, user_id, maximum_children)
                if resolve_generator_items
                else _get_generator_placeholder_items(generator_node)
            )
            used_generator_node_ids.add(generator_source_id)
            if not batch_items:
                raise UnsupportedWorkflowNodeError(
                    f"call_saved_workflow generator-backed batch child workflow node '{generator_source_id}' produced no batch items"
                )
        else:
            batch_items = _get_batch_items(node_data, field_name)
            if not batch_items:
                raise UnsupportedWorkflowNodeError(
                    f"call_saved_workflow batch child workflow node '{node_id}' must provide at least one batch item"
                )
        batch_group_id = _get_batch_group_id(node_data)
        destinations = _resolve_batch_destinations(node_id, field_name, workflow_nodes, workflow_edges)
        if not destinations:
            raise UnsupportedWorkflowNodeError(
                f"call_saved_workflow batch child workflow node '{node_id}' is not connected to any invocation input"
            )
        group_batch_data = batch_data_by_group.setdefault(batch_group_id, [])
        for destination_node_id, destination_field in destinations:
            group_batch_data.append(
                BatchDatum(
                    node_path=destination_node_id,
                    field_name=destination_field,
                    items=_normalize_batch_item_for_destination(destination_field, batch_items),
                )
            )

    if not batch_data_by_group:
        raise UnsupportedWorkflowNodeError("call_saved_workflow batch child workflow contains no supported batch nodes")

    _reject_unrelated_generator_nodes(mutable_workflow, used_generator_node_ids)
    sanitized_workflow = _build_child_graph_workflow(mutable_workflow, used_generator_node_ids)
    child_graph = build_graph_from_workflow(sanitized_workflow)

View on GitHub (pinned to 0b6a024f2f)

Solutions

  1. Open the saved workflow and connect the batch node's output to at least one invocation node's input field.
  2. Check for edges of non-default type (e.g. collapsed/hidden edges) — only 'default' edges count as destinations; re-add as a normal edge.
  3. Remove the batch node if it is unused, so the workflow contains only supported, connected batch nodes.
  4. Programmatically validate: for each supported batch node, assert _resolve_batch_destinations-like edge scan finds >=1 target before calling.

Example fix

// before (no outgoing edge)
{"nodes":[batch1, denoise], "edges":[]}
// after
{"edges":[{"source":"batch1","target":"denoise","type":"default"}]}
Defensive patterns

Strategy: validation

Validate before calling

def batch_nodes_connected(workflow, batch_ids):
    targets = {e.get("source") for e in workflow.get("edges", []) if e.get("type") == "default"}
    return all(bid in targets for bid in batch_ids)

Type guard

def has_outgoing_default_edge(node_id, edges) -> bool:
    return any(e.get("source") == node_id and e.get("type") == "default" for e in edges)

Try / catch

try:
    results = build_batch_child_workflow_session_results(...)
except UnsupportedWorkflowNodeError as e:
    if "not connected to any invocation input" in str(e):
        raise WorkflowConfigError("connect batch output to an invocation input") from e

Prevention

When it happens

Trigger: build_batch_child_workflow_session_results calls _resolve_batch_destinations for a supported batch node and no default edges lead from the batch output into any other node's input in the workflow graph.

Common situations: Deleting the edge out of a batch/iterate node while restructuring a workflow; a saved workflow where the batch output is connected only to a note/output node rather than an invocation; partial workflow imports missing edges.

Related errors


AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29). Data as JSON: /api/errors/2ac4e9257a4d6ba4. Report an issue: GitHub.