invoke-ai/InvokeAI · error · UnsupportedWorkflowNodeError
call_saved_workflow could not access board '{board_id}' for
Error message
call_saved_workflow could not access board '{board_id}' for image generator expansion What it means
While expanding an image_generator (images_from_board) node in a called batch child workflow, InvokeAI tried to fetch the referenced board and the board_records.get(board_id) call raised. The underlying storage exception is chained ('from e'); the board may not exist, may be corrupted, or the store may be failing, and expansion cannot enumerate the board's images.
Source
Thrown at invokeai/app/services/session_processor/workflow_call_batch.py:328
def _assert_user_can_access_board(board_id: str, services: Any, user_id: str | None) -> None:
if not user_id:
return
board_records = getattr(services, "board_records", None)
if board_records is None or not hasattr(board_records, "get"):
return
users = getattr(services, "users", None)
user = users.get(user_id) if users is not None and hasattr(users, "get") else None
is_admin = bool(user and getattr(user, "is_admin", False))
if is_admin:
return
try:
board_record = board_records.get(board_id)
except Exception as e:
raise UnsupportedWorkflowNodeError(
f"call_saved_workflow could not access board '{board_id}' for image generator expansion"
) from e
if getattr(board_record, "user_id", None) == user_id:
return
board_visibility = getattr(board_record, "board_visibility", BoardVisibility.Private)
if isinstance(board_visibility, str):
try:
board_visibility = BoardVisibility(board_visibility)
except ValueError:
board_visibility = BoardVisibility.Private
if board_visibility in {BoardVisibility.Shared, BoardVisibility.Public}:
return
if hasattr(board_records, "get_all"):
try:
accessible_boards = board_records.get_all(View on GitHub (pinned to 0b6a024f2f)
Solutions
- Verify the board_id exists (e.g. list boards via the API) and update the workflow's image_generator node to a valid board id
- Remove the board reference and supply images via a direct list on an image_batch node instead
- Restore the missing board or repair the board records database if the store is failing
- Call without a user_id context only if board access control is not required, or run as an admin user
Example fix
// before
{ "type": "image_generator_images_from_board", "board_id": "b0ard-from-old-install" }
// after
{ "type": "image_generator_images_from_board", "board_id": "1a2b3c4d-..." } // existing board id Defensive patterns
Strategy: try-catch
Validate before calling
def board_exists(services, board_id: str) -> bool:
try:
services.board_records.get(board_id)
return True
except Exception:
return False
# before building child sessions
bad = [v for node in workflow.get("nodes", []) if isinstance(node, dict)
for v in [node.get("data", {}).get("inputs", {}).get("generator", {}).get("value", {})]
if isinstance(v, dict) and v.get("type") == "image_generator_images_from_board"
and v.get("board_id") and not board_exists(services, v["board_id"])] Type guard
def board_record_ok(record: object) -> bool:
return record is not None and getattr(record, "board_id", None) is not None Try / catch
try:
sessions = build_batch_child_workflow_sessions(...)
except UnsupportedWorkflowNodeError as e:
m = re.search(r"could not access board '(.+?)'", str(e))
if m:
board_id = m.group(1)
# check board exists via API before retrying
if not board_exists(services, board_id):
raise BoardGoneError(board_id) from e
raise Prevention
- Verify board ids exist (boards list API) before referencing them in saved workflows
- Update workflows when boards are deleted
- Avoid sharing workflow JSON across installs with different databases
- Check database health if board lookups start failing unexpectedly
When it happens
Trigger: Calling a saved workflow whose image_generator node references a board_id that does not exist in the board records store (deleted board, board from another install/database, or a transient DB failure), when the caller has a user_id and the service layer propagates the error.
Common situations: Sharing workflows between machines/databases where board ids don't resolve; deleting a board that a saved workflow still references; SQLite/database corruption or read failures; running with multi-user auth where boards live in another account's records.
Related errors
- call_saved_workflow caller does not have access to board '{b
- The selected saved workflow '${self.workflow_id}' is not acc
- Not authorized to modify this board
- Failed to add image to board
- Workflow not found
AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29).
Data as JSON: /api/errors/bdce83809dd711ec.
Report an issue: GitHub.