mirror of
https://git.datalinker.icu/ltdrdata/ComfyUI-Manager
synced 2025-12-09 06:04:31 +08:00
feat: install for missing nodes
This commit is contained in:
parent
9894babccc
commit
61379f0026
15
__init__.py
15
__init__.py
@ -16,7 +16,7 @@ sys.path.append('../..')
|
|||||||
from torchvision.datasets.utils import download_url
|
from torchvision.datasets.utils import download_url
|
||||||
|
|
||||||
# ensure .js
|
# ensure .js
|
||||||
print("### Loading: ComfyUI-Manager (V0.5.1)")
|
print("### Loading: ComfyUI-Manager (V0.6)")
|
||||||
|
|
||||||
comfy_path = os.path.dirname(folder_paths.__file__)
|
comfy_path = os.path.dirname(folder_paths.__file__)
|
||||||
custom_nodes_path = os.path.join(comfy_path, 'custom_nodes')
|
custom_nodes_path = os.path.join(comfy_path, 'custom_nodes')
|
||||||
@ -26,6 +26,7 @@ comfyui_manager_path = os.path.dirname(__file__)
|
|||||||
local_db_model = os.path.join(comfyui_manager_path, "model-list.json")
|
local_db_model = os.path.join(comfyui_manager_path, "model-list.json")
|
||||||
local_db_alter = os.path.join(comfyui_manager_path, "alter-list.json")
|
local_db_alter = os.path.join(comfyui_manager_path, "alter-list.json")
|
||||||
local_db_custom_node_list = os.path.join(comfyui_manager_path, "custom-node-list.json")
|
local_db_custom_node_list = os.path.join(comfyui_manager_path, "custom-node-list.json")
|
||||||
|
local_db_extension_node_mappings = os.path.join(comfyui_manager_path, "extension-node-map.json")
|
||||||
git_script_path = os.path.join(os.path.dirname(__file__), "git_helper.py")
|
git_script_path = os.path.join(os.path.dirname(__file__), "git_helper.py")
|
||||||
|
|
||||||
|
|
||||||
@ -204,6 +205,18 @@ def check_custom_nodes_installed(json_obj):
|
|||||||
check_a_custom_node_installed(item)
|
check_a_custom_node_installed(item)
|
||||||
|
|
||||||
|
|
||||||
|
@server.PromptServer.instance.routes.get("/customnode/getmappings")
|
||||||
|
async def fetch_customnode_mappings(request):
|
||||||
|
if request.rel_url.query["mode"] == "local":
|
||||||
|
uri = local_db_extension_node_mappings
|
||||||
|
else:
|
||||||
|
uri = 'https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main/extension-node-map.json'
|
||||||
|
|
||||||
|
json_obj = await get_data(uri)
|
||||||
|
|
||||||
|
return web.json_response(json_obj, content_type='application/json')
|
||||||
|
|
||||||
|
|
||||||
@server.PromptServer.instance.routes.get("/customnode/getlist")
|
@server.PromptServer.instance.routes.get("/customnode/getlist")
|
||||||
async def fetch_customnode_list(request):
|
async def fetch_customnode_list(request):
|
||||||
if request.rel_url.query["mode"] == "local":
|
if request.rel_url.query["mode"] == "local":
|
||||||
|
|||||||
@ -4,6 +4,17 @@ import {ComfyWidgets} from "../../scripts/widgets.js";
|
|||||||
|
|
||||||
var update_comfyui_button = null;
|
var update_comfyui_button = null;
|
||||||
|
|
||||||
|
async function getCustomnodeMappings() {
|
||||||
|
var mode = "url";
|
||||||
|
if(ManagerMenuDialog.instance.local_mode_checkbox.checked)
|
||||||
|
mode = "local";
|
||||||
|
|
||||||
|
const response = await fetch(`/customnode/getmappings?mode=${mode}`);
|
||||||
|
|
||||||
|
const data = await response.json();
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
async function getCustomNodes() {
|
async function getCustomNodes() {
|
||||||
var mode = "url";
|
var mode = "url";
|
||||||
if(ManagerMenuDialog.instance.local_mode_checkbox.checked)
|
if(ManagerMenuDialog.instance.local_mode_checkbox.checked)
|
||||||
@ -165,7 +176,37 @@ class CustomNodesInstaller extends ComfyDialog {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async invalidateControl() {
|
async filter_missing_node(data) {
|
||||||
|
const mappings = await getCustomnodeMappings();
|
||||||
|
|
||||||
|
const name_to_url = {};
|
||||||
|
for (const url in mappings) {
|
||||||
|
const names = mappings[url];
|
||||||
|
for(const name in names) {
|
||||||
|
name_to_url[names[name]] = url;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const registered_nodes = new Set();
|
||||||
|
for (let i in LiteGraph.registered_node_types) {
|
||||||
|
registered_nodes.add(LiteGraph.registered_node_types[i].type);
|
||||||
|
}
|
||||||
|
|
||||||
|
const missing_nodes = new Set();
|
||||||
|
const nodes = app.graph.serialize().nodes;
|
||||||
|
for (let i in nodes) {
|
||||||
|
const node_type = nodes[i].type;
|
||||||
|
if (!registered_nodes.has(node_type)) {
|
||||||
|
const url = name_to_url[node_type];
|
||||||
|
if(url)
|
||||||
|
missing_nodes.add(url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return data.filter(node => node.files.some(file => missing_nodes.has(file)));
|
||||||
|
}
|
||||||
|
|
||||||
|
async invalidateControl(is_missing_node_mode) {
|
||||||
this.clear();
|
this.clear();
|
||||||
|
|
||||||
// splash
|
// splash
|
||||||
@ -184,6 +225,9 @@ class CustomNodesInstaller extends ComfyDialog {
|
|||||||
// invalidate
|
// invalidate
|
||||||
this.data = (await getCustomNodes()).custom_nodes;
|
this.data = (await getCustomNodes()).custom_nodes;
|
||||||
|
|
||||||
|
if(is_missing_node_mode)
|
||||||
|
this.data = await this.filter_missing_node(this.data);
|
||||||
|
|
||||||
this.element.removeChild(msg);
|
this.element.removeChild(msg);
|
||||||
|
|
||||||
while (this.element.children.length) {
|
while (this.element.children.length) {
|
||||||
@ -366,9 +410,9 @@ class CustomNodesInstaller extends ComfyDialog {
|
|||||||
this.element.appendChild(close_button);
|
this.element.appendChild(close_button);
|
||||||
}
|
}
|
||||||
|
|
||||||
async show() {
|
async show(is_missing_node_mode) {
|
||||||
try {
|
try {
|
||||||
this.invalidateControl();
|
this.invalidateControl(is_missing_node_mode);
|
||||||
|
|
||||||
this.element.style.display = "block";
|
this.element.style.display = "block";
|
||||||
}
|
}
|
||||||
@ -867,7 +911,18 @@ class ManagerMenuDialog extends ComfyDialog {
|
|||||||
() => {
|
() => {
|
||||||
if(!CustomNodesInstaller.instance)
|
if(!CustomNodesInstaller.instance)
|
||||||
CustomNodesInstaller.instance = new CustomNodesInstaller(app);
|
CustomNodesInstaller.instance = new CustomNodesInstaller(app);
|
||||||
CustomNodesInstaller.instance.show();
|
CustomNodesInstaller.instance.show(false);
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
|
||||||
|
$el("button", {
|
||||||
|
type: "button",
|
||||||
|
textContent: "Install Custom Nodes (missing)",
|
||||||
|
onclick:
|
||||||
|
() => {
|
||||||
|
if(!CustomNodesInstaller.instance)
|
||||||
|
CustomNodesInstaller.instance = new CustomNodesInstaller(app);
|
||||||
|
CustomNodesInstaller.instance.show(true);
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user