mirror of
https://git.datalinker.icu/ltdrdata/ComfyUI-Manager
synced 2025-12-08 21:54:26 +08:00
feat: custom node install api
This commit is contained in:
parent
ef1632d21d
commit
60386b569e
45
__init__.py
45
__init__.py
@ -20,7 +20,7 @@ import nodes
|
||||
import torch
|
||||
|
||||
|
||||
version = [1, 15, 1]
|
||||
version = [1, 16]
|
||||
version_str = f"V{version[0]}.{version[1]}" + (f'.{version[2]}' if len(version) > 2 else '')
|
||||
print(f"### Loading: ComfyUI-Manager ({version_str})")
|
||||
|
||||
@ -1968,6 +1968,49 @@ async def share_art(request):
|
||||
}, content_type='application/json', status=200)
|
||||
|
||||
|
||||
|
||||
def register_api(k, f):
|
||||
sys.CM_api[k] = f
|
||||
|
||||
|
||||
def sanitize(data):
|
||||
return data.replace("<", "<").replace(">", ">")
|
||||
|
||||
|
||||
def lookup_customnode_by_url(data, target):
|
||||
for x in data['custom_nodes']:
|
||||
if target in x['files']:
|
||||
dir_name = os.path.splitext(os.path.basename(target))[0].replace(".git", "")
|
||||
dir_path = os.path.join(custom_nodes_path, dir_name)
|
||||
if os.path.exists(dir_path):
|
||||
x['installed'] = 'True'
|
||||
elif os.path.exists(dir_path + ".disabled"):
|
||||
x['installed'] = 'Disabled'
|
||||
return x
|
||||
|
||||
return None
|
||||
|
||||
|
||||
async def _confirm_try_install(sender, custom_node_url, msg):
|
||||
json_obj = await get_data_by_mode('default', 'custom-node-list.json')
|
||||
|
||||
sender = sanitize(sender)
|
||||
msg = sanitize(msg)
|
||||
target = lookup_customnode_by_url(json_obj, custom_node_url)
|
||||
|
||||
if target is not None:
|
||||
server.PromptServer.instance.send_sync("cm-api-try-install-customnode",
|
||||
{"sender": sender, "target": target, "msg": msg})
|
||||
else:
|
||||
print(f"[ComfyUI Manager API] Failed to try install - Unknown custom node url '{custom_node_url}'")
|
||||
|
||||
|
||||
def confirm_try_install(sender, custom_node_url, msg):
|
||||
asyncio.run(_confirm_try_install(sender, custom_node_url, msg))
|
||||
|
||||
register_api('cm.try-install-custom-node', confirm_try_install)
|
||||
|
||||
|
||||
import asyncio
|
||||
async def default_cache_update():
|
||||
async def get_cache(filename):
|
||||
|
||||
54
js/cm-api.js
Normal file
54
js/cm-api.js
Normal file
@ -0,0 +1,54 @@
|
||||
import { api } from "../../scripts/api.js";
|
||||
import { app } from "../../scripts/app.js";
|
||||
import { sleep } from "./common.js";
|
||||
|
||||
async function tryInstallCustomNode(event) {
|
||||
let msg = '-= [ComfyUI Manager] extension installation request =-\n\n';
|
||||
msg += `The '${event.detail.sender}' extension requires the installation of the '${event.detail.title}' extension. `;
|
||||
|
||||
if(event.detail.target.installed == 'Disabled') {
|
||||
msg += 'However, the extension is currently disabled. Would you like to enable it and reboot?'
|
||||
}
|
||||
else if(event.detail.target.installed == 'True') {
|
||||
msg += 'However, it seems that the extension is in an import-fail state or is not compatible with the current version. Please address this issue.';
|
||||
}
|
||||
else {
|
||||
msg += `Would you like to install it and reboot?`;
|
||||
}
|
||||
|
||||
msg += `\n\nRequest message:\n${event.detail.msg}`;
|
||||
|
||||
if(event.detail.target.installed == 'True') {
|
||||
alert(msg);
|
||||
return;
|
||||
}
|
||||
|
||||
let res = confirm(msg);
|
||||
if(res) {
|
||||
if(event.detail.target.installed == 'Disabled') {
|
||||
const response = await api.fetchApi(`/customnode/toggle_active`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(event.detail.target)
|
||||
});
|
||||
}
|
||||
else {
|
||||
await sleep(300);
|
||||
app.ui.dialog.show(`Installing... '${event.detail.target.title}'`);
|
||||
|
||||
const response = await api.fetchApi(`/customnode/install`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(event.detail.target)
|
||||
});
|
||||
}
|
||||
|
||||
api.fetchApi("/manager/reboot");
|
||||
|
||||
await sleep(300);
|
||||
|
||||
app.ui.dialog.show(`Rebooting...`);
|
||||
}
|
||||
}
|
||||
|
||||
api.addEventListener("cm-api-try-install-customnode", tryInstallCustomNode);
|
||||
@ -1,5 +1,5 @@
|
||||
import { app } from "../../scripts/app.js";
|
||||
import { api } from "../../scripts/api.js"
|
||||
import { api } from "../../scripts/api.js";
|
||||
import { ComfyDialog, $el } from "../../scripts/ui.js";
|
||||
import { OpenArtShareDialog } from "./comfyui-share-openart.js";
|
||||
|
||||
|
||||
@ -1,6 +1,10 @@
|
||||
import { app } from "../../scripts/app.js";
|
||||
import { api } from "../../scripts/api.js"
|
||||
|
||||
export async function sleep(ms) {
|
||||
return new Promise(resolve => setTimeout(resolve, ms));
|
||||
}
|
||||
|
||||
export function rebootAPI() {
|
||||
if (confirm("Are you sure you'd like to reboot the server?")) {
|
||||
try {
|
||||
|
||||
@ -9,6 +9,9 @@ import locale
|
||||
import platform
|
||||
|
||||
|
||||
sys.CM_api = {}
|
||||
|
||||
|
||||
message_collapses = []
|
||||
import_failed_extensions = set()
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user