invoke-ai/InvokeAI · error · ValueError

The selected saved workflow '${self.workflow_id}' is not acc

Error message

The selected saved workflow '${self.workflow_id}' is not accessible to this user.

What it means

In multiuser mode InvokeAI enforces access control on saved workflows. validate_selected_workflow denies execution unless the requesting queue user is an admin, the workflow's owner, the workflow is public, or it is a Default-category workflow.

Source

Thrown at invokeai/app/invocations/call_saved_workflow.py:68

    def validate_selected_workflow(self, context: InvocationContext):
        if not self.workflow_id:
            raise ValueError("A saved workflow must be selected before executing call_saved_workflow.")

        try:
            workflow_record = context._services.workflow_records.get(self.workflow_id)
        except WorkflowNotFoundError as e:
            raise ValueError(f"The selected saved workflow '{self.workflow_id}' could not be found.") from e

        config = context._services.configuration
        if config.multiuser:
            queue_user_id = context._data.queue_item.user_id
            user = context._services.users.get(queue_user_id)
            is_admin = bool(user and user.is_admin)
            is_owner = workflow_record.user_id == queue_user_id
            is_default = workflow_record.workflow.meta.category is WorkflowCategory.Default
            if not (is_default or is_owner or workflow_record.is_public or is_admin):
                raise ValueError(f"The selected saved workflow '{self.workflow_id}' is not accessible to this user.")

        return workflow_record

    def invoke(self, context: InvocationContext) -> WorkflowReturnOutput:
        self.validate_selected_workflow(context)

        return WorkflowReturnOutput(values={})

View on GitHub (pinned to 0b6a024f2f)

Solutions

  1. Have the workflow owner mark the workflow public (or be a Default workflow).
  2. Ask an admin user to run the queue item, or grant the queue user admin rights.
  3. Re-create/copy the workflow under the executing user's account and point the node at it.
  4. Disable multiuser in config if access control is not needed.

Example fix

// before (config.multiuser = true, workflow private, other user's)
// after: owner sets workflow.is_public = True (or share as Default category) before queueing
Defensive patterns

Strategy: validation

Validate before calling

user = context._services.users.get(queue_item.user_id)
record = context._services.workflow_records.get(node.workflow_id)
allowed = record.workflow.meta.category is WorkflowCategory.Default or record.is_public or record.user_id == queue_item.user_id or (user and user.is_admin)
if not allowed:
    raise PermissionError("workflow not accessible to this user")

Try / catch

try:
    node.invoke(context)
except ValueError as e:
    if "not accessible to this user" in str(e):
        request_access_or_run_as_owner()
    else:
        raise

Prevention

When it happens

Trigger: invoke()/run_node() in multiuser mode where workflow_record.user_id != queue_item.user_id, workflow_record.is_public is False, meta.category is not Default, and the queue user is not an admin.

Common situations: One user referencing another user's private workflow in a shared graph; running queued graphs from a service account that differs from the workflow owner; workflows left non-public after multiuser was enabled in config.

Understand the failure class

Background: Permission denied / not authorized / 403 Forbidden: access-control rejections when the caller lacks the required role, grant, or ownership — this error's family across 18 libraries.

Related errors


AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29). Data as JSON: /api/errors/b21d45f00be0a599. Report an issue: GitHub.