invoke-ai/InvokeAI · error · UnsupportedWorkflowNodeError

call_saved_workflow generator-backed batch child workflow no

Error message

call_saved_workflow generator-backed batch child workflow node '{generator_source_id}' produced no batch items

What it means

A batch node whose items come from a generator node (e.g. rand_int_generator, range_generator, image_generator) resolved to an empty item list after expansion. InvokeAI refuses to build child sessions for an empty batch because it would produce zero child workflow executions.

Source

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

        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:
            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(

View on GitHub (pinned to 0b6a024f2f)

Solutions

  1. Ensure the generator node actually yields items: for image_generator, verify matching images exist for the user; for range/count-based generators, set a count >= 1.
  2. Check the generator node's configuration in the saved workflow (seed/count/collection fields) and correct it in the workflow editor before calling.
  3. If placeholders are acceptable, call with resolve_generator_items=False so placeholder items are derived from the node itself.
  4. Wrap the call and surface a user-facing message to fix the generator configuration, retrying only after the generator yields items.

Example fix

// before (range generator with count 0)
{"id":"g1","data":{"type":"range_generator","count":0}}
// after
{"id":"g1","data":{"type":"range_generator","count":5}}
Defensive patterns

Strategy: validation

Validate before calling

def generator_yields_items(gen_node):
    t = gen_node.get("data", {}).get("type", "")
    if t == "image_generator":
        return len(services.images.get_many_by_user(...).items) > 0
    if t in ("range_generator", "rand_int_generator"):
        return gen_node["data"].get("count", 0) > 0
    return True

Type guard

def is_generator_node(node) -> bool:
    return isinstance(node, dict) and str(node.get("data", {}).get("type", "")).endswith("_generator")

Try / catch

try:
    results = build_batch_child_workflow_session_results(...)
except UnsupportedWorkflowNodeError as e:
    if "produced no batch items" in str(e):
        fix_generator_config(e)  # surface to user, do not retry blindly

Prevention

When it happens

Trigger: build_batch_child_workflow_session_results encounters a generator-backed batch node where _resolve_generator_items returns [] (e.g. image_generator matching no images, range generator with empty range, or placeholder resolution yielding nothing).

Common situations: Saved workflow wired to an image_generator whose gallery/collection has no images under the given user; a range/iteration generator configured with zero count; deleting the source images between workflow save and call.

Related errors


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