{"record":{"id":"526e1d22ccece897","repo":"invoke-ai/InvokeAI","slug":"unsupported-image-generator-type-generator-type","errorCode":null,"errorMessage":"Unsupported image generator type '{generator_type}'","messagePattern":"Unsupported image generator type '(.+?)'","errorType":"exception","errorClass":"UnsupportedWorkflowNodeError","httpStatus":null,"severity":"error","filePath":"invokeai/app/services/session_processor/workflow_call_batch.py","lineNumber":366,"sourceCode":"                is_admin=False,\n                order_by=BoardRecordOrderBy.Name,\n                direction=SQLiteDirection.Ascending,\n                include_archived=True,\n            )\n        except Exception:\n            accessible_boards = []\n        if any(getattr(board, \"board_id\", None) == board_id for board in accessible_boards):\n            return\n\n    raise UnsupportedWorkflowNodeError(\n        f\"call_saved_workflow caller does not have access to board '{board_id}' for image generator expansion\"\n    )\n\n\ndef _resolve_image_generator(value: Mapping[str, Any], services: Any, user_id: str | None) -> list[ImageField]:\n    generator_type = value.get(\"type\")\n    if generator_type != \"image_generator_images_from_board\":\n        raise UnsupportedWorkflowNodeError(f\"Unsupported image generator type '{generator_type}'\")\n    board_id = value.get(\"board_id\")\n    if not isinstance(board_id, str) or not board_id:\n        return []\n    _assert_user_can_access_board(board_id, services, user_id)\n    category = value.get(\"category\", \"images\")\n    categories = IMAGE_CATEGORIES if category == \"images\" else ASSETS_CATEGORIES\n    image_names = services.board_images.get_all_board_image_names_for_board(\n        board_id=board_id,\n        categories=categories,\n        is_intermediate=False,\n    )\n    return [ImageField(image_name=image_name) for image_name in image_names]\n\n\ndef _get_declared_generator_item_count(value: Mapping[str, Any]) -> int | None:\n    explicit_values = value.get(\"values\")\n    if isinstance(explicit_values, list):\n        return len(explicit_values)","sourceCodeStart":348,"sourceCodeEnd":384,"githubUrl":"https://github.com/invoke-ai/InvokeAI/blob/0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06/invokeai/app/services/session_processor/workflow_call_batch.py#L348-L384","documentation":"_resolve_image_generator validates the 'type' key inside an image_generator node's generator input value. Only 'image_generator_images_from_board' is supported; any other type string raises UnsupportedWorkflowNodeError. This guards the call_saved_workflow batch expansion path, which can only materialize board-based image generators.","triggerScenarios":"Saving a workflow whose image_generator node has a generator value with type set to something other than 'image_generator_images_from_board' (e.g. an older or newer generator type), then running it through build_batch_child_workflow_session_results.","commonSituations":"Workflows created by newer InvokeAI versions carrying generator types this code path doesn't know; hand-edited workflow JSON with a wrong type string; plugin-provided generator types.","solutions":["Set the image_generator node's inputs.generator.value.type to 'image_generator_images_from_board' and provide a valid board_id","Regenerate or re-export the workflow from the InvokeAI canvas UI so it uses a supported generator type","Upgrade/downgrade InvokeAI so the workflow's generator type matches the version's supported set"],"exampleFix":"// before: generator value from an old export\n{\"id\": \"gen-1\", \"type\": \"image_generator\", \"data\": {\"inputs\": {\"generator\": {\"value\": {\"type\": \"images_from_board_v2\"}}}}}\n// after\n{\"id\": \"gen-1\", \"type\": \"image_generator\", \"data\": {\"inputs\": {\"generator\": {\"value\": {\"type\": \"image_generator_images_from_board\", \"board_id\": \"b-abc123\"}}}}}","handlingStrategy":"validation","validationCode":"gen = node.get(\"data\", {}).get(\"inputs\", {}).get(\"generator\", {}).get(\"value\", {})\nif gen.get(\"type\") != \"image_generator_images_from_board\":\n    raise ValueError(f\"unsupported generator type: {gen.get('type')!r}\")\nif not gen.get(\"board_id\"):\n    raise ValueError(\"board_id missing for image_generator_images_from_board\")","typeGuard":"def is_board_image_generator(value: object) -> TypeGuard[dict]:\n    return isinstance(value, Mapping) and value.get(\"type\") == \"image_generator_images_from_board\" and isinstance(value.get(\"board_id\"), str)","tryCatchPattern":"from invokeai.app.services.shared.workflow_graph_builder import UnsupportedWorkflowNodeError\ntry:\n    results = build_batch_child_workflow_session_results(...)\nexcept UnsupportedWorkflowNodeError as e:\n    log.warning(\"workflow rejected: %s\", e)","preventionTips":["Only use generator types shipped by your InvokeAI version","Re-export workflows from the UI instead of hand-editing JSON","Pin client and server versions so workflow formats match"],"tags":["workflow","validation","unsupported-feature"],"backgroundTag":"unsupported-workflow-node","analyzedSha":"0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06","analyzedAt":"2026-08-29T04:46:49.967Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}