
Comfyui Node Registry
Authoring & publishing ComfyUI custom nodes to the Comfy Registry, covering node...
Install
npx skills add artokun/comfyui-mcp --skill comfyui-node-registry -g -a claude-code -y- Repository
- artokun/comfyui-mcp883
- Category
- Engineering
- Updated
- 9d ago
- License
- MIT
- Context cost
- Mediumabout 2,817 tokens
- Runs scripts
- No, instructions only
What it does
Authoring & publishing ComfyUI custom nodes to the Comfy Registry, covering node structure, pyproject.toml spec, comfy-cli publishing, and CI
Authoring & Publishing ComfyUI Custom Nodes
This skill covers writing a ComfyUI custom node pack and publishing it to the Comfy Registry (registry.comfy.org), the public catalog that powers ComfyUI-Manager. For using existing nodes in workflows, see the comfyui-core skill instead.
Minimal Node Pack Structure
A node pack is a Python package placed under ComfyUI/custom_nodes/<name>/. The package __init__.py must export NODE_CLASS_MAPPINGS and NODE_DISPLAY_NAME_MAPPINGS; WEB_DIRECTORY is optional (only if the pack ships frontend JS).
ComfyUI/custom_nodes/my-node-pack/
├── __init__.py # exports the mappings ComfyUI scans for
├── nodes.py # node class definitions
├── pyproject.toml # registry metadata (required to publish)
├── requirements.txt # optional Python deps
├── .comfyignore # optional, exclude files from the published archive
├── LICENSE
├── README.md
└── web/js/ # optional frontend extension (see WEB_DIRECTORY)
__init__.py
from .nodes import NODE_CLASS_MAPPINGS, NODE_DISPLAY_NAME_MAPPINGS
# Optional: serve frontend JS/CSS from this folder (path relative to __init__.py)
WEB_DIRECTORY = "./web/js"
__all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS", "WEB_DIRECTORY"]
A minimal node class (nodes.py)
class ImageSelector:
CATEGORY = "example" # menu path where the node appears
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"images": ("IMAGE",),
"mode": (["brightest", "reddest", "greenest", "bluest"],),
},
"optional": {
"threshold": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}),
"count": ("INT", {"default": 1, "min": 1, "max": 64}),
"label": ("STRING", {"default": "", "multiline": False}),
},
}
