invoke-ai/InvokeAI · error · UnsupportedWorkflowNodeError
call_saved_workflow image-generator-backed batch child workf
Error message
call_saved_workflow image-generator-backed batch child workflows require runtime services
What it means
When a batch-collect node inside a called saved workflow pulls its items from an 'image_generator' node, InvokeAI must query the image database via runtime services to enumerate the images. If build_batch_child_workflow_session_results is invoked without a services object (services=None) while generator-item resolution is enabled, the library cannot expand the batch and raises UnsupportedWorkflowNodeError.
Source
Thrown at invokeai/app/services/session_processor/workflow_call_batch.py:589
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:
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"
)View on GitHub (pinned to 0b6a024f2f)
Solutions
- Pass the application services object (services=...) to build_batch_child_workflow_session_results / build_child_workflow_session_results so image_generator items can be resolved from the database.
- If no services are available and you only need placeholder sessions, call with resolve_generator_items=False so _get_generator_placeholder_items is used instead of hitting the DB.
- Replace the image_generator wiring in the saved workflow with an inline collection batch node carrying explicit items.
- Pre-check the workflow: resolve the batch node's generator source and skip/branch before calling when its type is image_generator and services are unavailable.
Example fix
// before
results = build_child_workflow_session_results(
parent_session=session, workflow=wf, workflow_inputs=inputs,
call_frame=frame, maximum_children=10)
// after
results = build_child_workflow_session_results(
parent_session=session, workflow=wf, workflow_inputs=inputs,
call_frame=frame, maximum_children=10,
services=services, user_id=user_id) Defensive patterns
Strategy: validation
Validate before calling
def generator_needs_services(workflow):
for node in workflow.get("nodes", []):
if node.get("data", {}).get("type") == "image_generator":
return True
return False
if generator_needs_services(wf) and services is None:
raise ValueError("image_generator batch requires services") Type guard
def has_services(services) -> bool:
return services is not None Try / catch
try:
results = build_child_workflow_session_results(..., services=services)
except UnsupportedWorkflowNodeError as e:
if "require runtime services" in str(e):
results = build_child_workflow_session_results(..., resolve_generator_items=False) Prevention
- Always pass the app services object when building child sessions in production code paths
- Use resolve_generator_items=False for offline/placeholder builds
- Lint test fixtures that construct batch workflows with image_generator nodes
- Document that image_generator batches are a runtime-only capability
When it happens
Trigger: Calling build_batch_child_workflow_session_results (or build_child_workflow_session_results) with a saved workflow whose batch node (e.g. batch/iterate) is wired to an image_generator node, without passing services, while resolve_generator_items=True (the default).
Common situations: Unit tests or tooling that build child sessions in isolation without dependency injection; offline/preprocessing scripts that call the batch builder directly; calling build_batch_child_workflow_sessions instead of the placeholder-based variant.
Related errors
- call_saved_workflow generator-backed batch child workflow no
- call_saved_workflow batch child workflow node '{node_id}' mu
- call_saved_workflow batch child workflow node '{node_id}' is
- call_saved_workflow batch child workflow contains no support
- All Krea-2 conditioning batch items must have the same valid
AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29).
Data as JSON: /api/errors/e6e0ede5c97e7f4a.
Report an issue: GitHub.