| name | comfyui-node-installer |
| description | ComfyUI 缺失自定义节点自动检测与安装。 Use when AI needs to: (1) install missing custom nodes for a workflow, (2) check if required nodes are available, (3) search and install node packages from ComfyUI registry. ComfyUI only (run_python).
|
| metadata | {"artclaw":{"version":"0.2.0","author":"ArtClaw","dcc":"comfyui","priority":98}} |
ComfyUI 节点安装器
自动检测 workflow 所需的自定义节点,并从 ComfyUI-Manager 或 GitHub 安装。
预注入变量
run_python 已注入以下变量,直接使用,无需 import:
| 变量 | 类型 | 说明 |
|---|
S | [] | 无选中概念 |
W | None | 无当前文件概念 |
L | ComfyUI Lib | L.nodes, L.folder_paths |
nodes | module | 节点注册表 |
client | ComfyUIClient | HTTP API 客户端(含 Manager API) |
核心功能
1. 检测缺失节点
from comfyui_node_installer import diagnose_workflow
wf = {...}
report = diagnose_workflow(wf)
print(report)
2. 安装缺失节点
from comfyui_node_installer import install_missing_nodes
result = install_missing_nodes(wf)
print(result)
3. 搜索节点包
from comfyui_node_installer import search_packages
results = search_packages("controlnet")
print(results)
完整使用流程
场景1: 加载 workflow 时自动修复
wf = load_template("marketplace/awesome-portrait-v2")
diagnosis = diagnose_workflow(wf)
if diagnosis["missing_count"] > 0:
print(f"发现 {diagnosis['missing_count']} 个缺失节点:")
for m in diagnosis["missing"]:
print(f" - {m['node_type']} (来自: {m['package']})")
result = install_missing_nodes(wf, auto_install=True)
if result["reboot_required"]:
print("⚠️ 需要重启 ComfyUI 才能使用新节点")
print("请重启后重新加载此 workflow")
场景2: 手动安装特定节点包
from comfyui_node_installer import install_package
result = install_package(
url="https://github.com/Fannovel16/comfyui_controlnet_aux",
method="git-clone"
)
result = install_package(
package_name="comfyui_controlnet_aux",
method="manager"
)
print(result)
API 参考
diagnose_workflow(workflow: dict) -> dict
检测 workflow 中使用的节点是否在系统中可用。
参数:
workflow: Workflow JSON dict
返回:
{
"status": "ok" | "missing_found",
"missing_count": int,
"missing": [
{
"node_id": str,
"node_type": str,
"package": str,
"install_url": str,
"alternative": str
}
],
"available": [str],
"suggestions": [
{
"package": str,
"nodes": [str],
"install_url": str
}
]
}
install_missing_nodes(workflow: dict, auto_install: bool = False) -> dict
安装 workflow 所需的所有缺失节点。
参数:
workflow: Workflow JSON
auto_install: 是否自动安装(False 时只返回安装计划)
返回:
{
"success": bool,
"installed": [str],
"failed": [
{"package": str, "error": str}
],
"reboot_required": bool,
"plan": [
{"package": str, "url": str, "nodes": [str]}
]
}
search_packages(query: str, limit: int = 10) -> list
搜索 ComfyUI 节点包。
参数:
query: 搜索关键词
limit: 最大返回数量
返回:
[
{
"title": str,
"reference": str,
"author": str,
"install_type": "git-clone" | "unzip",
"description": str,
"stars": int,
"last_update": str
}
]
install_package(url: str, method: str = "git-clone") -> dict
安装单个节点包。
参数:
url: GitHub URL 或包名
method: "git-clone" | "manager" | "unzip"
返回:
{
"success": bool,
"message": str,
"reboot_required": bool
}
list_installed_packages() -> list
列出已安装的节点包。
返回:
[
{
"name": str,
"version": str,
"path": str,
"enabled": bool
}
]
uninstall_package(package_name: str) -> dict
卸载节点包。
实现原理
节点类型检测
def diagnose_workflow(workflow: dict) -> dict:
"""检测 workflow 中的节点类型是否可用"""
available_nodes = set(nodes.NODE_CLASS_MAPPINGS.keys())
used_types = set()
for node_id, node_data in workflow.items():
class_type = node_data.get("class_type")
if class_type:
used_types.add(class_type)
missing_types = used_types - available_nodes
missing_packages = []
for node_type in missing_types:
package_info = NODE_TYPE_TO_PACKAGE.get(node_type)
if package_info:
missing_packages.append({
"node_type": node_type,
"package": package_info["name"],
"install_url": package_info["url"]
})
return {
"status": "missing_found" if missing_packages else "ok",
"missing": missing_packages,
"available": list(used_types & available_nodes)
}
节点包映射表
内置常用节点类型的包映射:
NODE_TYPE_TO_PACKAGE = {
"ControlNetApply": {"name": "ComfyUI-ControlNet-Aux", "url": "https://github.com/..."},
"CannyEdgePreprocessor": {"name": "ComfyUI-ControlNet-Aux", "url": "https://github.com/..."},
"AnimateDiffLoader": {"name": "ComfyUI-AnimateDiff-Evolved", "url": "https://github.com/..."},
"CR_Image_Panel": {"name": "ComfyUI_Comfyroll_CustomNodes", "url": "https://github.com/..."},
}
ComfyUI-Manager 集成
如果用户安装了 ComfyUI-Manager,使用其 API:
def get_manager_node_list():
response = client.manager_get("/customnode/getlist")
return response.get("custom_nodes", [])
def install_via_manager(package_url: str):
response = client.manager_post("/customnode/install", {
"url": package_url
})
return response
注意事项
⛔ 重要限制
| 限制 | 说明 |
|---|
| 需要重启 | 安装新节点后需要重启 ComfyUI 才能使用 |
| 依赖安装 | 某些节点有 Python 依赖,可能需要 pip install |
| Manager 依赖 | 部分功能依赖 ComfyUI-Manager 安装 |
⚠️ 安全提示
- 只从可信来源安装节点(官方仓库、高星项目)
- 安装前检查节点代码(避免恶意脚本)
- 某些节点可能需要额外模型文件
与其他 Skill 的关系
comfyui-workflow-manager
│
├── 加载模板 → 调用 diagnose_workflow 检查节点
│ → 调用 install_missing_nodes 自动安装
│
└── 发布模板 → 记录所需节点包信息
comfyui-workflow-repair
│
└── 修复 workflow → 调用 diagnose_workflow 获取缺失信息
Skill 版本: 0.1.0