{"record":{"id":"7780c73ca128d8ca","repo":"invoke-ai/InvokeAI","slug":"call-saved-workflow-generator-node-generator-nod-7780c7","errorCode":null,"errorMessage":"call_saved_workflow generator node '{generator_node_data.get('id')}' has invalid generator value","messagePattern":"call_saved_workflow generator node '(.+?)' has invalid generator value","errorType":"exception","errorClass":"UnsupportedWorkflowNodeError","httpStatus":null,"severity":"error","filePath":"invokeai/app/services/session_processor/workflow_call_batch.py","lineNumber":415,"sourceCode":"    return None\n\n\ndef _resolve_generator_items(\n    generator_node: Mapping[str, Any], services: Any, user_id: str | None, maximum_items: int\n) -> list[Any]:\n    generator_node_data = generator_node[\"data\"]\n    node_type = generator_node_data.get(\"type\")\n    inputs = generator_node_data.get(\"inputs\")\n    if not isinstance(node_type, str) or not _is_mapping(inputs):\n        raise UnsupportedWorkflowNodeError(\"call_saved_workflow generator node is malformed\")\n    generator_input = inputs.get(\"generator\")\n    if not _is_mapping(generator_input):\n        raise UnsupportedWorkflowNodeError(\n            f\"call_saved_workflow generator node '{generator_node_data.get('id')}' is missing generator input\"\n        )\n    generator_value = generator_input.get(\"value\")\n    if not _is_mapping(generator_value):\n        raise UnsupportedWorkflowNodeError(\n            f\"call_saved_workflow generator node '{generator_node_data.get('id')}' has invalid generator value\"\n        )\n    declared_item_count = _get_declared_generator_item_count(generator_value)\n    if declared_item_count is not None and declared_item_count > maximum_items:\n        raise TooManySessionsError(\"call_saved_workflow exceeds remaining queue capacity for child workflow executions\")\n    if node_type == \"integer_generator\":\n        return _resolve_integer_generator(generator_value)\n    if node_type == \"float_generator\":\n        return _resolve_float_generator(generator_value)\n    if node_type == \"string_generator\":\n        return _resolve_string_generator(generator_value)\n    if node_type == \"image_generator\":\n        return _resolve_image_generator(generator_value, services, user_id)\n    raise UnsupportedWorkflowNodeError(f\"Unsupported generator node type '{node_type}'\")\n\n\ndef _get_generator_placeholder_items(generator_node: Mapping[str, Any]) -> list[Any]:\n    generator_node_data = generator_node[\"data\"]","sourceCodeStart":397,"sourceCodeEnd":433,"githubUrl":"https://github.com/invoke-ai/InvokeAI/blob/0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06/invokeai/app/services/session_processor/workflow_call_batch.py#L397-L433","documentation":"The generator input's 'value' must itself be a mapping holding the generator parameters. If inputs.generator.value is missing or not a mapping, the node's generator payload is invalid and this error is raised with the node id.","triggerScenarios":"inputs.generator exists but its 'value' key is absent, null, a scalar, or a list when resolving generator items for a call_saved_workflow batch.","commonSituations":"Hand-crafted batch payloads that placed raw parameters directly under inputs.generator; import/export round-trips that stripped the value wrapper; API clients posting non-dict values.","solutions":["Move the generator parameters into a mapping at inputs.generator.value (e.g. {\"count\": 5, \"start\": 0, ...})","Re-save the workflow in the InvokeAI canvas to normalize the generator value","Check the invoking API call isn't overwriting generator.value with a non-object"],"exampleFix":"// before\n\"inputs\": {\"generator\": {\"value\": 42}}\n// after\n\"inputs\": {\"generator\": {\"value\": {\"count\": 42, \"start\": 0, \"stop\": 42, \"step\": 1}}}","handlingStrategy":"validation","validationCode":"value = node[\"data\"][\"inputs\"].get(\"generator\", {}).get(\"value\")\nif not isinstance(value, dict):\n    raise ValueError(\"inputs.generator.value must be a mapping of generator parameters\")","typeGuard":"def has_generator_value(node: dict) -> TypeGuard[dict]:\n    return isinstance(node.get(\"data\", {}).get(\"inputs\", {}).get(\"generator\", {}).get(\"value\"), Mapping)","tryCatchPattern":"try:\n    build_batch_child_workflow_session_results(...)\nexcept UnsupportedWorkflowNodeError as e:\n    if \"invalid generator value\" in str(e):\n        repair_generator_value(extract_node_id(str(e)))","preventionTips":["Keep generator params nested under inputs.generator.value, never as raw scalars","Round-trip workflows through the UI export to normalize structure","Add schema validation to any pipeline that generates workflow JSON"],"tags":["workflow","schema-validation","batch"],"backgroundTag":"schema-validation-failed","analyzedSha":"0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06","analyzedAt":"2026-08-29T04:46:49.967Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}