invoke-ai/InvokeAI · error · UnsupportedWorkflowNodeError
call_saved_workflow batch child workflow node '{node_data.ge
Error message
call_saved_workflow batch child workflow node '{node_data.get('id')}' must provide a direct list for '{field_name}' What it means
The batch node's field input exists but its value is not a plain JSON list. Batch expansion requires the batch node to provide a direct array of items (the 'value' inside the input mapping must be a list); nested references, objects, or scalar values are rejected because there is nothing iterable to expand into child sessions.
Source
Thrown at invokeai/app/services/session_processor/workflow_call_batch.py:220
if not isinstance(batch_group_id, str):
return "None"
if batch_group_id not in SUPPORTED_BATCH_GROUP_IDS:
raise UnsupportedWorkflowNodeError(f"Unsupported batch group id '{batch_group_id}' in called workflow")
return batch_group_id
def _get_batch_items(node_data: Mapping[str, Any], field_name: str) -> list[Any]:
inputs = node_data.get("inputs")
if not _is_mapping(inputs):
raise UnsupportedWorkflowNodeError("call_saved_workflow batch child workflow node inputs are malformed")
batch_input = inputs.get(field_name)
if not _is_mapping(batch_input):
raise UnsupportedWorkflowNodeError(
f"call_saved_workflow batch child workflow node is missing required '{field_name}' input"
)
batch_items = batch_input.get("value")
if not isinstance(batch_items, list):
raise UnsupportedWorkflowNodeError(
f"call_saved_workflow batch child workflow node '{node_data.get('id')}' must provide a direct list for '{field_name}'"
)
return batch_items
def _parse_split_values(input_value: str, split_on: str) -> list[str]:
if split_on == "":
return [input_value]
try:
return input_value.split(json.loads(f'"{split_on}"'))
except Exception:
return input_value.split(split_on)
def _resolve_float_generator(value: Mapping[str, Any]) -> list[float]:
generator_type = value.get("type")
if generator_type == "float_generator_arithmetic_sequence":
start = float(value.get("start", 0))View on GitHub (pinned to 0b6a024f2f)
Solutions
- Set the input's value to a direct JSON list, e.g. {"value": ["a", "b"]}
- Pre-split delimited values yourself (or use a *_parse_string generator node wired to the batch input)
- Re-export the workflow from the canvas so values get the correct list shape
- Validate workflow JSON against the InvokeAI node schema before calling
Example fix
// before
"strings": { "value": "a,b,c" }
// after
"strings": { "value": ["a", "b", "c"] } Defensive patterns
Strategy: validation
Validate before calling
BATCH_FIELD_NAMES = {"image_batch": "images", "string_batch": "strings", "integer_batch": "integers", "float_batch": "floats"}
for node in workflow.get("nodes", []):
d = node.get("data", {}) if isinstance(node, dict) else {}
field = BATCH_FIELD_NAMES.get(d.get("type"))
inp = d.get("inputs", {}).get(field) if isinstance(d.get("inputs"), dict) else None
if isinstance(inp, dict) and not isinstance(inp.get("value"), list):
raise ValueError(f"batch node {d.get('id')} field '{field}' value must be a list") Type guard
def is_direct_list_batch_value(inp: object) -> bool:
return isinstance(inp, dict) and isinstance(inp.get("value"), list) Try / catch
try:
sessions = build_batch_child_workflow_sessions(...)
except UnsupportedWorkflowNodeError as e:
if "must provide a direct list" in str(e):
workflow = coerce_batch_values_to_lists(workflow) # wrap scalars in lists / split strings
sessions = build_batch_child_workflow_sessions(...)
else:
raise Prevention
- Always encode batch values as JSON arrays, even for a single item
- Pre-split delimited strings yourself or use a *_parse_string generator
- Type-check batch values in your workflow generation code
- Round-trip workflow JSON through pydantic models before calling
When it happens
Trigger: Calling a saved workflow where e.g. string_batch.inputs.strings.value is a string, an object, or null instead of a list — for instance someone stored {"value": "a,b,c"} expecting it to be split.
Common situations: Hand-editing workflow JSON and giving a scalar instead of an array; expecting comma-separated strings or nested batch configs to work; programmatic workflow generation with wrong value shape.
Understand the failure class
Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.
Related errors
- call_saved_workflow child workflow is malformed
- call_saved_workflow does not yet support child workflows tha
- Unsupported batch group id '{batch_group_id}' in called work
- call_saved_workflow batch child workflow node inputs are mal
- call_saved_workflow batch child workflow node is missing req
AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29).
Data as JSON: /api/errors/6917f11b4598bf9e.
Report an issue: GitHub.