Comfy-Org/ComfyUI · error · KeyError
Unknown user:
Error message
Unknown user:
What it means
UserManager.get_request_user_id rejects any 'comfy-user' request header whose value starts with the reserved system prefix (folder_paths.SYSTEM_USER_PREFIX, '__'). The same generic 'Unknown user: <id>' KeyError is used both here and for unknown users on purpose, so callers cannot probe which IDs exist. System-prefixed directories are reserved for ComfyUI's own files (built-in workflows, etc.).
Source
Thrown at app/user_manager.py:65
if args.multi_user:
if os.path.isfile(self.get_users_file()):
with open(self.get_users_file()) as f:
self.users = json.load(f)
else:
self.users = {}
else:
self.users = {"default": "default"}
def get_users_file(self):
return os.path.join(folder_paths.get_user_directory(), "users.json")
def get_request_user_id(self, request):
user = "default"
if args.multi_user and "comfy-user" in request.headers:
user = request.headers["comfy-user"]
# Block System Users (use same error message to prevent probing)
if user.startswith(folder_paths.SYSTEM_USER_PREFIX):
raise KeyError("Unknown user: " + user)
if user not in self.users:
raise KeyError("Unknown user: " + user)
return user
def get_request_user_filepath(self, request, file, type="userdata", create_dir=True):
if type == "userdata":
root_dir = folder_paths.get_user_directory()
else:
raise KeyError("Unknown filepath type:" + type)
user = self.get_request_user_id(request)
user_root = folder_paths.get_public_user_directory(user)
if user_root is None:
return None
path = user_root
View on GitHub (pinned to 1c6d8d45b3)
Solutions
- Send a normal user id in the comfy-user header — one created via the users API (it never starts with '__').
- If you manage user records yourself, filter out ids starting with folder_paths.SYSTEM_USER_PREFIX before issuing requests.
- Verify --multi-user is actually intended; without it the header is ignored and 'default' is used.
Example fix
# before
headers = {"comfy-user": "__built_in"}
requests.get(url, headers=headers)
# after
headers = {"comfy-user": "a1b2c3d4-..."} # real id from users.json
requests.get(url, headers=headers) Defensive patterns
Strategy: validation
Validate before calling
import folder_paths
user = request.headers.get("comfy-user", "default")
if user.startswith(folder_paths.SYSTEM_USER_PREFIX):
raise HTTPException(400, "Unknown user") # reject before calling user manager Type guard
import folder_paths
def is_valid_user_id(user_id: str) -> bool:
return not user_id.startswith(folder_paths.SYSTEM_USER_PREFIX) Try / catch
try:
uid = user_manager.get_request_user_id(request)
except KeyError as e:
return web.Response(status=400, text=str(e)) # do not distinguish probe vs unknown Prevention
- Only use ids issued by the user-creation API.
- Filter out system-prefixed ('__') ids in client code before sending headers.
When it happens
Trigger: Sending a request with header comfy-user: __foo while --multi-user is enabled; a client or custom node routing requests on behalf of a user id that begins with '__'.
Common situations: Custom frontends or scripts constructing user ids from file names; attempting to read/write another user's userdata by guessing reserved ids; a stale client holding a system user id returned by an older/other component.
Related errors
AI-assisted analysis of Comfy-Org/ComfyUI@1c6d8d45b3 (2026-08-14).
Data as JSON: /api/errors/1382307a8c0329dd.
Report an issue: GitHub.