invoke-ai/InvokeAI · error · ValueError
'${field_name}' is not a call_saved_workflow dynamic input f
Error message
'${field_name}' is not a call_saved_workflow dynamic input field What it means
parse_call_saved_workflow_dynamic_input() raises ValueError when given a field name that lacks the call_saved_workflow dynamic-field prefix. These special field names encode '<node_id>::<input_field_name>' and are generated for sub-workflow (call_saved_workflow) invocations; anything not starting with the prefix is not parseable.
Source
Thrown at invokeai/app/invocations/call_saved_workflow.py:18
from typing import Any
from invokeai.app.invocations.baseinvocation import BaseInvocation, Classification, invocation
from invokeai.app.invocations.fields import InputField, UIType
from invokeai.app.invocations.workflow_return import WorkflowReturnOutput
from invokeai.app.services.shared.invocation_context import InvocationContext
from invokeai.app.services.workflow_records.workflow_records_common import WorkflowCategory, WorkflowNotFoundError
CALL_SAVED_WORKFLOW_DYNAMIC_FIELD_PREFIX = "saved_workflow_input::"
def is_call_saved_workflow_dynamic_input(field_name: str) -> bool:
return field_name.startswith(CALL_SAVED_WORKFLOW_DYNAMIC_FIELD_PREFIX)
def parse_call_saved_workflow_dynamic_input(field_name: str) -> tuple[str, str]:
if not is_call_saved_workflow_dynamic_input(field_name):
raise ValueError(f"'{field_name}' is not a call_saved_workflow dynamic input field")
raw_identifier = field_name.removeprefix(CALL_SAVED_WORKFLOW_DYNAMIC_FIELD_PREFIX)
node_id, separator, input_field_name = raw_identifier.rpartition("::")
if not separator or not node_id or not input_field_name:
raise ValueError(f"Invalid call_saved_workflow dynamic input field '{field_name}'")
return node_id, input_field_name
@invocation(
"call_saved_workflow",
title="Call Saved Workflow",
tags=["workflow", "saved", "library"],
category="workflow",
version="1.0.0",
use_cache=False,
classification=Classification.Beta,
)View on GitHub (pinned to 0b6a024f2f)
Solutions
- Filter inputs through is_call_saved_workflow_dynamic_input() before parsing; skip or handle non-dynamic fields separately.
- Construct the field name with the dynamic prefix: prefix + node_id + '::' + input_field_name.
- Check callers (_build_compatibility_workflow_inputs, apply_workflow_inputs_to_workflow/graph) so only dynamic fields reach this parser.
Example fix
// before
node_id, field = parse_call_saved_workflow_dynamic_input(name) # ValueError on plain names
// after
if is_call_saved_workflow_dynamic_input(name):
node_id, field = parse_call_saved_workflow_dynamic_input(name)
else:
continue # or handle as a plain input Defensive patterns
Strategy: type-guard
Validate before calling
CALL_SAVED_WORKFLOW_DYNAMIC_FIELD_PREFIX = "call_saved_workflow_input_" # adjust to actual constant
assert field_name.startswith(CALL_SAVED_WORKFLOW_DYNAMIC_FIELD_PREFIX), f"{field_name} is not a dynamic input" Type guard
def is_dynamic_input(field_name: str) -> bool:
return field_name.startswith(CALL_SAVED_WORKFLOW_DYNAMIC_FIELD_PREFIX) Try / catch
try:
node_id, field = parse_call_saved_workflow_dynamic_input(field_name)
except ValueError:
node_id, field = None, None # not a dynamic field; handle as plain input Prevention
- Always check is_call_saved_workflow_dynamic_input before parsing
- Generate dynamic field names only via the library's helpers
- Keep plain workflow inputs on a separate code path
When it happens
Trigger: Calling parse_call_saved_workflow_dynamic_input on a plain input field name (e.g. 'image' or 'prompt') that was not generated with the dynamic prefix, e.g. from apply_workflow_inputs_to_graph / _build_compatibility_workflow_inputs iterating arbitrary workflow inputs.
Common situations: Passing regular workflow inputs to the compatibility layer which only accepts prefixed dynamic inputs; custom tooling building field names without the required CALL_SAVED_WORKFLOW_DYNAMIC_FIELD_PREFIX.
Related errors
- Invalid call_saved_workflow dynamic input field '${field_nam
- {node_title} requires a {node_base.value} PiD decoder, but t
- Invalid or expired token
- User not found or inactive
- Missing authentication credentials
AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29).
Data as JSON: /api/errors/5e7a2273a4da297c.
Report an issue: GitHub.