invoke-ai/InvokeAI · error · UnsupportedWorkflowNodeError

call_saved_workflow generator-backed batch child workflow…

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.

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.

Appendix: 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)