Comfy-Org / Comfy-Org/ComfyUI_frontend

[Manager] False accelerator incompatibility: registry returns "GPU :: NVIDIA CUDA" but frontend compares "CUDA"

Open Beginner friendly
#15,364 1 comment 1 reaction 0 assignees View on GitHub
area:manager Potential Bug
Dominant language
TypeScript
Stars
2k
Forks
702
Avg merge
1d 8h
Merged PRs (30d)
512

Description

### Prerequisites

- [x] I am running the latest ComfyUI/frontend versions available in my installation.
- [x] I searched existing open and closed issues and PRs for the warning text, `supported_accelerators`, and accelerator conflict detection.

### What happened?

The native Manager reports a false compatibility conflict for CUDA-only extensions:

```text
GPU/Accelerator not supported (available: CUDA, required: GPU :: NVIDIA CUDA)
```

CUDA is available and actively used by ComfyUI. The current system device type is `cuda`, while the Registry response contains:

```json
"supported_accelerators": ["GPU :: NVIDIA CUDA"]
```

### Steps to reproduce

1. Run ComfyUI on an NVIDIA CUDA system.
2. Open the native Manager.
3. Inspect/install an extension whose Registry metadata contains `supported_accelerators: ["GPU :: NVIDIA CUDA"]`.
4. Observe the incompatibility warning even though the available accelerator is shown as `CUDA`.

### Expected behavior

`cuda` / `CUDA` should be considered compatible with the Registry classifier `GPU :: NVIDIA CUDA`.

The equivalent aliases should also be normalized for ROCm and Metal.

### Actual behavior

The frontend converts the system device type `cuda` to the short value `CUDA`, then performs exact array membership against the unnormalized Registry value `GPU :: NVIDIA CUDA`.

### Root cause

In `src/workbench/extensions/manager/utils/systemCompatibility.ts`:

```ts
function getRegistryAccelerator(deviceType?: string): RegistryAccelerator {
// ...
if (lower === 'cuda') return 'CUDA'
// ...
}

const currentAcc = getRegistryAccelerator(current)

if (!supported.includes(currentAcc)) {
// false conflict
}
```

However, ComfyUI's registry configuration parser accepts classifier values such as `Environment :: GPU :: NVIDIA CUDA` and strips only the `Environment :: ` prefix, producing `GPU :: NVIDIA CUDA`.

The frontend type currently declares only:

```ts
export type RegistryAccelerator = 'CUDA' | 'ROCm' | 'Metal' | 'CPU'
```

This does not match the values returned by the Registry API.

### Environment

- ComfyUI: 0.33.0
- ComfyUI frontend package: 1.49.6
- OS: Windows
- GPU: NVIDIA GeForce RTX 4090
- PyTorch: 2.11.0+cu130
- `torch.cuda.is_available()`: `true`
- system device type: `cuda`

The same comparison logic is still present on the current `main` branch at the time of filing.

### Suggested fix

Normalize both short names and Registry classifier names into one canonical representation before comparison, for example:

- `CUDA` and `GPU :: NVIDIA CUDA` → `CUDA`
- `ROCm` and `GPU :: AMD ROCm` → `ROCm`
- `Metal` and `GPU :: Apple Metal` → `Metal`

Alternatively, map the detected device type directly to the Registry classifier format.

Contributor guide

Open the contributing guide

Research direction

Start in src/workbench/extensions/manager/utils/systemCompatibility.ts by reading getRegistryAccelerator and the supported-accelerator comparison. Normalize the short device names and Registry classifier values for CUDA, ROCm, and Metal before comparison. Done means matching aliases no longer produce a false incompatibility warning, while unsupported accelerators still do.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
frontend
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
82/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.