Description
The conflict detection feature in ComfyUI-Manager shows a conflict count that doesn't match the actual runtime conflicts. It compares against ALL known extensions in the global registry rather than just the locally installed ones.
Steps to Reproduce
- Install ComfyUI-Manager
- Install a few custom nodes (e.g. comfyui-reactor-node, ComfyUI-WanVideoWrapper, etc.)
- Open Manager -> Conflict Detection view
- Observe the conflict count (e.g. showing 17)
- Compare with the actual node list in ComfyUI's canvas
Actual Result
The conflict detection view shows many more conflicts than actually exist at runtime. Conflicts are reported between extensions that the user doesn't even have installed.
Expected Result
Conflict detection should only compare currently installed extensions, or at least clearly separate installed-vs-installed conflicts from installed-vs-global-catalog conflicts.
Code Analysis
Looking at the source code in custom-nodes-manager.js (~lines 1260-1340):
The conflict detection flow:
- loadNodes() calls the API endpoint /v2/customnode/getmappings?mode=\
- This returns the data from \�xtension-node-map.json\ cache file
- This cache file contains ALL known extensions from the ComfyUI global registry, not just the locally installed ones
- The code iterates through ALL entries and builds a \conflictsMap:
- Key: node class name
- Value: list of extension keys that register this node
- If a node class name appears in more than one extension entry, ALL those extensions get flagged as conflicting
The problem is that Step 2-3 uses the global extension catalog. If extension A and extension B in the global catalog both register a node called \CLIPTextEncode\ (a built-in ComfyUI node), they both get flagged as conflicting even if neither is installed locally.
Suggested Fix
Filter the extension-node-map to only include locally installed extensions before computing conflicts.
In \custom-nodes-manager.js, after fetching the mappings data, filter the entries to only include those whose URL matches a locally installed custom node folder (by checking folder names or git remotes in \custom_nodes\ directory).
Alternatively, add a separate API endpoint that returns mappings only for locally installed extensions.
Environment
- ComfyUI-Manager version: 4.2.2
- ComfyUI: latest
- OS: Windows
Reported after analyzing the source code of comfyui_manager js/custom-nodes-manager.js and the extension-node-map.json cache structure.
Description
The conflict detection feature in ComfyUI-Manager shows a conflict count that doesn't match the actual runtime conflicts. It compares against ALL known extensions in the global registry rather than just the locally installed ones.
Steps to Reproduce
Actual Result
The conflict detection view shows many more conflicts than actually exist at runtime. Conflicts are reported between extensions that the user doesn't even have installed.
Expected Result
Conflict detection should only compare currently installed extensions, or at least clearly separate installed-vs-installed conflicts from installed-vs-global-catalog conflicts.
Code Analysis
Looking at the source code in custom-nodes-manager.js (~lines 1260-1340):
The conflict detection flow:
The problem is that Step 2-3 uses the global extension catalog. If extension A and extension B in the global catalog both register a node called \CLIPTextEncode\ (a built-in ComfyUI node), they both get flagged as conflicting even if neither is installed locally.
Suggested Fix
Filter the extension-node-map to only include locally installed extensions before computing conflicts.
In \custom-nodes-manager.js, after fetching the mappings data, filter the entries to only include those whose URL matches a locally installed custom node folder (by checking folder names or git remotes in \custom_nodes\ directory).
Alternatively, add a separate API endpoint that returns mappings only for locally installed extensions.
Environment
Reported after analyzing the source code of comfyui_manager js/custom-nodes-manager.js and the extension-node-map.json cache structure.