mirror of
https://git.datalinker.icu/ltdrdata/ComfyUI-Manager
synced 2025-12-16 01:25:03 +08:00
feat: disable/enable
This commit is contained in:
parent
1516dbcaa8
commit
9d20369bd3
114
__init__.py
114
__init__.py
@ -9,7 +9,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.2)")
|
print("### Loading: ComfyUI-Manager (V0.3)")
|
||||||
|
|
||||||
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')
|
||||||
@ -135,7 +135,10 @@ def check_a_custom_node_installed(item):
|
|||||||
item['installed'] = 'True'
|
item['installed'] = 'True'
|
||||||
except:
|
except:
|
||||||
item['installed'] = 'True'
|
item['installed'] = 'True'
|
||||||
|
|
||||||
|
elif os.path.exists(dir_path+".disabled"):
|
||||||
|
item['installed'] = 'Disabled'
|
||||||
|
|
||||||
else:
|
else:
|
||||||
item['installed'] = 'False'
|
item['installed'] = 'False'
|
||||||
|
|
||||||
@ -145,6 +148,8 @@ def check_a_custom_node_installed(item):
|
|||||||
file_path = os.path.join(base_path, dir_name)
|
file_path = os.path.join(base_path, dir_name)
|
||||||
if os.path.exists(file_path):
|
if os.path.exists(file_path):
|
||||||
item['installed'] = 'True'
|
item['installed'] = 'True'
|
||||||
|
elif os.path.exists(file_path + ".disabled"):
|
||||||
|
item['installed'] = 'Disabled'
|
||||||
else:
|
else:
|
||||||
item['installed'] = 'False'
|
item['installed'] = 'False'
|
||||||
|
|
||||||
@ -288,19 +293,52 @@ def copy_install(files, js_path_name=None):
|
|||||||
def copy_uninstall(files, js_path_name=None):
|
def copy_uninstall(files, js_path_name=None):
|
||||||
for url in files:
|
for url in files:
|
||||||
dir_name = os.path.basename(url)
|
dir_name = os.path.basename(url)
|
||||||
base_path = custom_nodes_path if url.endswith('.py') else js_path
|
base_path = custom_nodes_path if url.endswith('.py') else os.path.join(js_path, js_path_name)
|
||||||
file_path = os.path.join(base_path, dir_name)
|
file_path = os.path.join(base_path, dir_name)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
os.remove(file_path)
|
if os.path.exists(file_path):
|
||||||
|
os.remove(file_path)
|
||||||
|
elif os.path.exists(file_path+".disabled"):
|
||||||
|
os.remove(file_path+".disabled")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"UnInstall(copy) error: {url} / {e}")
|
print(f"Uninstall(copy) error: {url} / {e}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
print("Uninstallation was successful.")
|
print("Uninstallation was successful.")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def copy_set_active(files, is_disable, js_path_name=None):
|
||||||
|
if is_disable:
|
||||||
|
action_name = "Disable"
|
||||||
|
else:
|
||||||
|
action_name = "Enable"
|
||||||
|
|
||||||
|
for url in files:
|
||||||
|
dir_name = os.path.basename(url)
|
||||||
|
base_path = custom_nodes_path if url.endswith('.py') else os.path.join(js_path, js_path_name)
|
||||||
|
file_path = os.path.join(base_path, dir_name)
|
||||||
|
|
||||||
|
try:
|
||||||
|
if is_disable:
|
||||||
|
current_name = file_path
|
||||||
|
new_name = file_path + ".disabled"
|
||||||
|
else:
|
||||||
|
current_name = file_path + ".disabled"
|
||||||
|
new_name = file_path
|
||||||
|
|
||||||
|
os.rename(current_name, new_name)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"{action_name}(copy) error: {url} / {e}")
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
print(f"{action_name} was successful.")
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
def gitclone_install(files):
|
def gitclone_install(files):
|
||||||
print(f"install: {files}")
|
print(f"install: {files}")
|
||||||
for url in files:
|
for url in files:
|
||||||
@ -359,8 +397,11 @@ def gitclone_uninstall(files):
|
|||||||
if dir_path == '/' or dir_path[1:] == ":/" or dir_path == '':
|
if dir_path == '/' or dir_path[1:] == ":/" or dir_path == '':
|
||||||
print(f"Uninstall(git-clone) error: invalid path '{dir_path}' for '{url}'")
|
print(f"Uninstall(git-clone) error: invalid path '{dir_path}' for '{url}'")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
shutil.rmtree(dir_path)
|
if os.path.exists(dir_path):
|
||||||
|
shutil.rmtree(dir_path)
|
||||||
|
elif os.path.exists(dir_path+".disabled"):
|
||||||
|
shutil.rmtree(dir_path+".disabled")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Uninstall(git-clone) error: {url} / {e}")
|
print(f"Uninstall(git-clone) error: {url} / {e}")
|
||||||
return False
|
return False
|
||||||
@ -369,8 +410,43 @@ def gitclone_uninstall(files):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def gitclone_set_active(files, is_disable):
|
||||||
|
import os
|
||||||
|
|
||||||
|
if is_disable:
|
||||||
|
action_name = "Disable"
|
||||||
|
else:
|
||||||
|
action_name = "Enable"
|
||||||
|
|
||||||
|
print(f"{action_name}: {files}")
|
||||||
|
for url in files:
|
||||||
|
try:
|
||||||
|
dir_name = os.path.splitext(os.path.basename(url))[0].replace(".git", "")
|
||||||
|
dir_path = os.path.join(custom_nodes_path, dir_name)
|
||||||
|
|
||||||
|
# safey check
|
||||||
|
if dir_path == '/' or dir_path[1:] == ":/" or dir_path == '':
|
||||||
|
print(f"{action_name}(git-clone) error: invalid path '{dir_path}' for '{url}'")
|
||||||
|
return False
|
||||||
|
|
||||||
|
if is_disable:
|
||||||
|
current_path = dir_path
|
||||||
|
new_path = dir_path + ".disabled"
|
||||||
|
else:
|
||||||
|
current_path = dir_path + ".disabled"
|
||||||
|
new_path = dir_path
|
||||||
|
|
||||||
|
os.rename(current_path, new_path)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"{action_name}(git-clone) error: {url} / {e}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
print(f"{action_name} was successful.")
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
def gitclone_update(files):
|
def gitclone_update(files):
|
||||||
import shutil
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
print(f"uninstall: {files}")
|
print(f"uninstall: {files}")
|
||||||
@ -456,6 +532,28 @@ async def install_custom_node(request):
|
|||||||
return web.Response(status=400)
|
return web.Response(status=400)
|
||||||
|
|
||||||
|
|
||||||
|
@server.PromptServer.instance.routes.post("/customnode/toggle_active")
|
||||||
|
async def install_custom_node(request):
|
||||||
|
json_data = await request.json()
|
||||||
|
|
||||||
|
install_type = json_data['install_type']
|
||||||
|
is_disabled = json_data['installed'] == "Disabled"
|
||||||
|
|
||||||
|
print(f"Update custom node '{json_data['title']}'")
|
||||||
|
|
||||||
|
res = False
|
||||||
|
|
||||||
|
if install_type == "git-clone":
|
||||||
|
res = gitclone_set_active(json_data['files'], not is_disabled)
|
||||||
|
elif install_type == "copy":
|
||||||
|
res = copy_set_active(json_data['files'], not is_disabled)
|
||||||
|
|
||||||
|
if res:
|
||||||
|
return web.json_response({}, content_type='application/json')
|
||||||
|
|
||||||
|
return web.Response(status=400)
|
||||||
|
|
||||||
|
|
||||||
@server.PromptServer.instance.routes.post("/model/install")
|
@server.PromptServer.instance.routes.post("/model/install")
|
||||||
async def install_model(request):
|
async def install_model(request):
|
||||||
json_data = await request.json()
|
json_data = await request.json()
|
||||||
|
|||||||
@ -216,20 +216,40 @@ class CustomNodesInstaller extends ComfyDialog {
|
|||||||
|
|
||||||
var installBtn = document.createElement('button');
|
var installBtn = document.createElement('button');
|
||||||
var installBtn2 = null;
|
var installBtn2 = null;
|
||||||
|
var installBtn3 = null;
|
||||||
|
|
||||||
this.install_buttons.push(installBtn);
|
this.install_buttons.push(installBtn);
|
||||||
|
|
||||||
switch(data.installed) {
|
switch(data.installed) {
|
||||||
|
case 'Disabled':
|
||||||
|
installBtn3 = document.createElement('button');
|
||||||
|
installBtn3.innerHTML = 'Enable';
|
||||||
|
installBtn3.style.backgroundColor = 'blue';
|
||||||
|
this.install_buttons.push(installBtn3);
|
||||||
|
|
||||||
|
installBtn.innerHTML = 'Uninstall';
|
||||||
|
installBtn.style.backgroundColor = 'red';
|
||||||
|
break;
|
||||||
case 'Update':
|
case 'Update':
|
||||||
installBtn2 = document.createElement('button');
|
installBtn2 = document.createElement('button');
|
||||||
installBtn2.innerHTML = 'Update';
|
installBtn2.innerHTML = 'Update';
|
||||||
installBtn2.style.backgroundColor = 'blue';
|
installBtn2.style.backgroundColor = 'blue';
|
||||||
this.install_buttons.push(installBtn2);
|
this.install_buttons.push(installBtn2);
|
||||||
|
|
||||||
|
installBtn3 = document.createElement('button');
|
||||||
|
installBtn3.innerHTML = 'Disable';
|
||||||
|
installBtn3.style.backgroundColor = 'MediumSlateBlue';
|
||||||
|
this.install_buttons.push(installBtn3);
|
||||||
|
|
||||||
installBtn.innerHTML = 'Uninstall';
|
installBtn.innerHTML = 'Uninstall';
|
||||||
installBtn.style.backgroundColor = 'red';
|
installBtn.style.backgroundColor = 'red';
|
||||||
break;
|
break;
|
||||||
case 'True':
|
case 'True':
|
||||||
|
installBtn3 = document.createElement('button');
|
||||||
|
installBtn3.innerHTML = 'Disable';
|
||||||
|
installBtn3.style.backgroundColor = 'MediumSlateBlue';
|
||||||
|
this.install_buttons.push(installBtn3);
|
||||||
|
|
||||||
installBtn.innerHTML = 'Uninstall';
|
installBtn.innerHTML = 'Uninstall';
|
||||||
installBtn.style.backgroundColor = 'red';
|
installBtn.style.backgroundColor = 'red';
|
||||||
break;
|
break;
|
||||||
@ -239,10 +259,11 @@ class CustomNodesInstaller extends ComfyDialog {
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
installBtn.innerHTML = 'Try Install';
|
installBtn.innerHTML = 'Try Install';
|
||||||
installBtn.style.backgroundColor = 'silver';
|
installBtn.style.backgroundColor = 'Gray';
|
||||||
}
|
}
|
||||||
|
|
||||||
if(installBtn2 != null) {
|
if(installBtn2 != null) {
|
||||||
|
installBtn2.style.width = "120px";
|
||||||
installBtn2.addEventListener('click', function() {
|
installBtn2.addEventListener('click', function() {
|
||||||
install_custom_node(data, CustomNodesInstaller.instance, 'update');
|
install_custom_node(data, CustomNodesInstaller.instance, 'update');
|
||||||
});
|
});
|
||||||
@ -250,6 +271,16 @@ class CustomNodesInstaller extends ComfyDialog {
|
|||||||
data5.appendChild(installBtn2);
|
data5.appendChild(installBtn2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(installBtn3 != null) {
|
||||||
|
installBtn3.style.width = "120px";
|
||||||
|
installBtn3.addEventListener('click', function() {
|
||||||
|
install_custom_node(data, CustomNodesInstaller.instance, 'toggle_active');
|
||||||
|
});
|
||||||
|
|
||||||
|
data5.appendChild(installBtn3);
|
||||||
|
}
|
||||||
|
|
||||||
|
installBtn.style.width = "120px";
|
||||||
installBtn.addEventListener('click', function() {
|
installBtn.addEventListener('click', function() {
|
||||||
if(this.innerHTML == 'Uninstall') {
|
if(this.innerHTML == 'Uninstall') {
|
||||||
if (confirm(`Are you sure uninstall ${data.title}?`)) {
|
if (confirm(`Are you sure uninstall ${data.title}?`)) {
|
||||||
@ -441,20 +472,40 @@ class AlternativesInstaller extends ComfyDialog {
|
|||||||
if(data.custom_node) {
|
if(data.custom_node) {
|
||||||
var installBtn = document.createElement('button');
|
var installBtn = document.createElement('button');
|
||||||
var installBtn2 = null;
|
var installBtn2 = null;
|
||||||
|
var installBtn3 = null;
|
||||||
|
|
||||||
this.install_buttons.push(installBtn);
|
this.install_buttons.push(installBtn);
|
||||||
|
|
||||||
switch(data.custom_node.installed) {
|
switch(data.custom_node.installed) {
|
||||||
|
case 'Disabled':
|
||||||
|
installBtn3 = document.createElement('button');
|
||||||
|
installBtn3.innerHTML = 'Enable';
|
||||||
|
installBtn3.style.backgroundColor = 'blue';
|
||||||
|
this.install_buttons.push(installBtn3);
|
||||||
|
|
||||||
|
installBtn.innerHTML = 'Uninstall';
|
||||||
|
installBtn.style.backgroundColor = 'red';
|
||||||
|
break;
|
||||||
case 'Update':
|
case 'Update':
|
||||||
installBtn2 = document.createElement('button');
|
installBtn2 = document.createElement('button');
|
||||||
installBtn2.innerHTML = 'Update';
|
installBtn2.innerHTML = 'Update';
|
||||||
installBtn2.style.backgroundColor = 'blue';
|
installBtn2.style.backgroundColor = 'blue';
|
||||||
this.install_buttons.push(installBtn2);
|
this.install_buttons.push(installBtn2);
|
||||||
|
|
||||||
|
installBtn3 = document.createElement('button');
|
||||||
|
installBtn3.innerHTML = 'Disable';
|
||||||
|
installBtn3.style.backgroundColor = 'MediumSlateBlue';
|
||||||
|
this.install_buttons.push(installBtn3);
|
||||||
|
|
||||||
installBtn.innerHTML = 'Uninstall';
|
installBtn.innerHTML = 'Uninstall';
|
||||||
installBtn.style.backgroundColor = 'red';
|
installBtn.style.backgroundColor = 'red';
|
||||||
break;
|
break;
|
||||||
case 'True':
|
case 'True':
|
||||||
|
installBtn3 = document.createElement('button');
|
||||||
|
installBtn3.innerHTML = 'Disable';
|
||||||
|
installBtn3.style.backgroundColor = 'MediumSlateBlue';
|
||||||
|
this.install_buttons.push(installBtn3);
|
||||||
|
|
||||||
installBtn.innerHTML = 'Uninstall';
|
installBtn.innerHTML = 'Uninstall';
|
||||||
installBtn.style.backgroundColor = 'red';
|
installBtn.style.backgroundColor = 'red';
|
||||||
break;
|
break;
|
||||||
@ -464,10 +515,11 @@ class AlternativesInstaller extends ComfyDialog {
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
installBtn.innerHTML = 'Try Install';
|
installBtn.innerHTML = 'Try Install';
|
||||||
installBtn.style.backgroundColor = 'silver';
|
installBtn.style.backgroundColor = 'Gray';
|
||||||
}
|
}
|
||||||
|
|
||||||
if(installBtn2 != null) {
|
if(installBtn2 != null) {
|
||||||
|
installBtn2.style.width = "120px";
|
||||||
installBtn2.addEventListener('click', function() {
|
installBtn2.addEventListener('click', function() {
|
||||||
install_custom_node(data.custom_node, AlternativesInstaller.instance, 'update');
|
install_custom_node(data.custom_node, AlternativesInstaller.instance, 'update');
|
||||||
});
|
});
|
||||||
@ -475,6 +527,17 @@ class AlternativesInstaller extends ComfyDialog {
|
|||||||
data6.appendChild(installBtn2);
|
data6.appendChild(installBtn2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(installBtn3 != null) {
|
||||||
|
installBtn3.style.width = "120px";
|
||||||
|
installBtn3.addEventListener('click', function() {
|
||||||
|
install_custom_node(data, CustomNodesInstaller.instance, 'toggle_active');
|
||||||
|
});
|
||||||
|
|
||||||
|
data6.appendChild(installBtn3);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
installBtn.style.width = "120px";
|
||||||
installBtn.addEventListener('click', function() {
|
installBtn.addEventListener('click', function() {
|
||||||
if(this.innerHTML == 'Uninstall') {
|
if(this.innerHTML == 'Uninstall') {
|
||||||
if (confirm(`Are you sure uninstall ${data.title}?`)) {
|
if (confirm(`Are you sure uninstall ${data.title}?`)) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user