invoke-ai/InvokeAI · error · UnsupportedWorkflowNodeError

call_saved_workflow generator-backed batch child workflow is

Error message

call_saved_workflow generator-backed batch child workflow is missing generator node '{generator_source_id}'

What it means

When a batch field resolves to a generator source id, build_batch_child_workflow_session_results looks the generator node up in workflow_nodes. If the id has no matching node (dangling edge), it raises this error naming the missing generator node id.

Source

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

    for node in workflow_nodes.values():
        if not _is_invocation_node(node):
            continue
        node_data = node["data"]
        node_id = node_data.get("id")
        node_type = node_data.get("type")
        if not isinstance(node_id, str) or not isinstance(node_type, str):
            continue
        if node_type.endswith("_generator"):
            continue
        if node_type not in SUPPORTED_BATCH_TYPES:
            continue

        field_name = BATCH_FIELD_NAMES[node_type]
        generator_source_id = _resolve_batch_items_from_inputs(node_id, field_name, workflow_edges, workflow_nodes)
        if generator_source_id is not None:
            generator_node = workflow_nodes.get(generator_source_id)
            if generator_node is None:
                raise UnsupportedWorkflowNodeError(
                    f"call_saved_workflow generator-backed batch child workflow is missing generator node '{generator_source_id}'"
                )
            generator_node_type = generator_node["data"].get("type") if _is_invocation_node(generator_node) else None
            if generator_node_type == "image_generator" and services is None and resolve_generator_items:
                raise UnsupportedWorkflowNodeError(
                    "call_saved_workflow image-generator-backed batch child workflows require runtime services"
                )
            batch_items = (
                _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:

View on GitHub (pinned to 0b6a024f2f)

Solutions

  1. Remove the stale edge pointing at the missing generator node, or reconnect the batch input to an existing generator
  2. Re-add the deleted generator node with the original id
  3. Re-export the workflow from the InvokeAI UI to repair nodes/edges consistency

Example fix

// before: edge references deleted node
{"nodes": ["batch-1", ...], "edges": [{"target": "batch-1", "source": "gen-gone", "type": "default"}]}
// after: remove edge or restore node gen-gone
{"nodes": ["batch-1", "gen-1", ...], "edges": [{"target": "batch-1", "source": "gen-1", "type": "default"}]}
Defensive patterns

Strategy: validation

Validate before calling

node_ids = {n["id"] for n in workflow.get("nodes", []) if isinstance(n, dict)}
for e in workflow.get("edges", []):
    if e.get("source") not in node_ids or e.get("target") not in node_ids:
        raise ValueError(f"dangling edge: {e.get('source')} -> {e.get('target')}")

Type guard

def edges_resolve_to_nodes(workflow: dict) -> bool:
    ids = {n["id"] for n in workflow.get("nodes", []) if isinstance(n, dict) and "id" in n}
    return all(e.get("source") in ids and e.get("target") in ids for e in workflow.get("edges", []))

Try / catch

try:
    build_batch_child_workflow_session_results(...)
except UnsupportedWorkflowNodeError as e:
    if "missing generator node" in str(e):
        drop_or_reconnect_dangling_edges(extract_missing_id(str(e)))

Prevention

When it happens

Trigger: A workflow's edges reference a source node id that no longer exists in nodes (node deleted, JSON edited, or partially imported workflow), for a generator-backed batch child workflow.

Common situations: Deleting a generator node in the editor while its edge remained; merging workflow JSON files by hand; API clients submitting workflows with inconsistent nodes/edges arrays.

Related errors


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