Comfy-Org / Comfy-Org/ComfyUI_frontend
[Manager] False accelerator incompatibility: registry returns "GPU :: NVIDIA CUDA" but frontend compares "CUDA"
- 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
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