invoke-ai/InvokeAI · error · InvalidWorkflowInputError
call_saved_workflow input '{input_name}' targets missing chi
Error message
call_saved_workflow input '{input_name}' targets missing child workflow field '{field_name}' What it means
The targeted node resolves to a registered invocation type, but the input's field_name is not a declared model field of that invocation class (or the type isn't registered at all). The input targets a field that does not exist on the node's invocation.
Source
Thrown at invokeai/app/services/shared/workflow_graph_builder.py:153
and _is_mapping(node.get("data"))
and node.get("id") == node_id
and node["data"].get("id") == node_id
),
None,
)
if matching_node is None:
raise InvalidWorkflowInputError(
f"call_saved_workflow input '{input_name}' targets missing child workflow node '{node_id}'"
)
matching_node_data = matching_node["data"]
node_type = matching_node_data.get("type")
if not isinstance(node_type, str):
raise InvalidWorkflowInputError(
f"call_saved_workflow input '{input_name}' targets missing child workflow node '{node_id}'"
)
invocation_class = InvocationRegistry.get_invocation_for_type(node_type)
if invocation_class is None or field_name not in invocation_class.model_fields:
raise InvalidWorkflowInputError(
f"call_saved_workflow input '{input_name}' targets missing child workflow field '{field_name}'"
)
inputs = matching_node_data.setdefault("inputs", {})
if not _is_mapping(inputs):
raise InvalidWorkflowInputError(
f"call_saved_workflow input '{input_name}' targets invalid child workflow inputs on '{node_id}'"
)
inputs[field_name] = {"value": value}
def apply_workflow_inputs_to_graph(
graph: Graph, workflow: Mapping[str, Any], workflow_inputs: Mapping[str, Any]
) -> None:
if not workflow_inputs:
return
mutable_workflow = dict(workflow)
apply_workflow_inputs_to_workflow(mutable_workflow, workflow_inputs)View on GitHub (pinned to 0b6a024f2f)
Solutions
- Update the field name in the input key to the current field on the invocation (check the node type's model fields).
- Upgrade or reinstall the custom node pack that provides the invocation type if it resolves to None.
- Pin the application version matching the workflow's original field names, or migrate saved workflows after upgrades.
Example fix
// before: field renamed by upgrade
inputs = {"call_saved_workflow:13:positive_prompt": "cat"}
// after
inputs = {"call_saved_workflow:13:prompt": "cat"} Defensive patterns
Strategy: validation
Validate before calling
from invokeai.app.invocations.baseinvocation import InvocationRegistry
for name in workflow_inputs:
node_id, field = parse_call_saved_workflow_dynamic_input(name)
node = next(n for n in workflow["nodes"] if n.get("id") == node_id)
cls = InvocationRegistry.get_invocation_for_type(node["data"]["type"])
if cls is None or field not in cls.model_fields:
raise ValueError(f"'{field}' is not a field of node '{node_id}' ({type(cls).__name__ if cls else 'unregistered'})") Type guard
def field_is_settable(node: dict, field: str) -> bool:
cls = InvocationRegistry.get_invocation_for_type(node["data"].get("type"))
return cls is not None and field in cls.model_fields Try / catch
try:
apply_workflow_inputs_to_workflow(workflow, workflow_inputs)
except InvalidWorkflowInputError as e:
if "missing child workflow field" in str(e):
log.warning("dropping stale field after upgrade: %s", e)
valid = {k: v for k, v in workflow_inputs.items() if k != offending_input}
apply_workflow_inputs_to_workflow(workflow, valid)
else:
raise Prevention
- After upgrading the app or node packs, regenerate saved batch input keys.
- Check the invocation's model_fields for the exact field name instead of guessing.
- Pin app versions for workflows that rely on stable field names.
- Test saved workflows on a scratch session before batch runs.
When it happens
Trigger: apply_workflow_inputs_to_workflow: InvocationRegistry.get_invocation_for_type(node_type) returns None, or field_name (from parse_call_saved_workflow_dynamic_input) not in invocation_class.model_fields.
Common situations: App or custom-node upgrade renamed/removed the invocation field while old saved batch inputs still reference it; typo in the field segment of the input name; targeting connection-only fields that are not settable model fields.
Related errors
- call_saved_workflow input '{input_name}' is not exposed by t
- A saved workflow must be selected before executing call_save
- The selected saved workflow '${self.workflow_id}' could not
- Workflow return key must not be empty.
- Duplicate workflow return key '{key}'.
AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29).
Data as JSON: /api/errors/3771d20ec30ee4f7.
Report an issue: GitHub.