mirror of
https://github.com/Comfy-Org/ComfyUI-Manager.git
synced 2025-12-16 18:02:58 +08:00
improve: update all - background updating
modified: update all - don't update ComfyUI
This commit is contained in:
parent
aaf569ca8c
commit
6ff6e05408
@ -42,7 +42,7 @@ import manager_downloader
|
||||
from node_package import InstalledNodePackage
|
||||
|
||||
|
||||
version_code = [3, 19, 1]
|
||||
version_code = [3, 20]
|
||||
version_str = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' if len(version_code) > 2 else '')
|
||||
|
||||
|
||||
|
||||
@ -419,6 +419,9 @@ async def task_worker():
|
||||
manager_util.clear_pip_cache()
|
||||
|
||||
if res.result:
|
||||
if res.action == 'skip':
|
||||
return 'skip'
|
||||
else:
|
||||
return 'success'
|
||||
|
||||
logging.error(f"\nERROR: An error occurred while updating '{node_name}'.")
|
||||
@ -427,6 +430,25 @@ async def task_worker():
|
||||
|
||||
return f"An error occurred while updating '{node_name}'."
|
||||
|
||||
async def do_update_comfyui() -> str:
|
||||
try:
|
||||
repo_path = os.path.dirname(folder_paths.__file__)
|
||||
res = core.update_path(repo_path)
|
||||
|
||||
if res == "fail":
|
||||
logging.error("ComfyUI update fail: The installed ComfyUI does not have a Git repository.")
|
||||
return "The installed ComfyUI does not have a Git repository."
|
||||
elif res == "updated":
|
||||
logging.info("ComfyUI is updated.")
|
||||
return "success"
|
||||
else: # skipped
|
||||
logging.info("ComfyUI is up-to-date.")
|
||||
return "skip"
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
return f"An error occurred while updating 'comfyui'."
|
||||
|
||||
async def do_fix(item) -> str:
|
||||
ui_id, node_name, node_ver = item
|
||||
|
||||
@ -550,6 +572,10 @@ async def task_worker():
|
||||
msg = await do_install_model(item)
|
||||
elif kind == 'update':
|
||||
msg = await do_update(item)
|
||||
elif kind == 'update-main':
|
||||
msg = await do_update(item)
|
||||
elif kind == 'update-comfyui':
|
||||
msg = await do_update_comfyui()
|
||||
elif kind == 'fix':
|
||||
msg = await do_fix(item)
|
||||
elif kind == 'uninstall':
|
||||
@ -569,6 +595,11 @@ async def task_worker():
|
||||
if kind == 'install-model':
|
||||
model_result[ui_id] = msg
|
||||
ui_target = "model_manager"
|
||||
elif kind == 'update-main':
|
||||
nodepack_result[ui_id] = msg
|
||||
ui_target = "main"
|
||||
elif kind == 'update-comfyui':
|
||||
ui_target = "main"
|
||||
else:
|
||||
nodepack_result[ui_id] = msg
|
||||
ui_target = "nodepack_manager"
|
||||
@ -643,13 +674,17 @@ async def fetch_updates(request):
|
||||
return web.Response(status=400)
|
||||
|
||||
|
||||
@routes.get("/customnode/update_all")
|
||||
@routes.get("/manager/queue/update_all")
|
||||
async def update_all(request):
|
||||
if not is_allowed_security_level('middle'):
|
||||
logging.error(SECURITY_MESSAGE_MIDDLE_OR_BELOW)
|
||||
return web.Response(status=403)
|
||||
|
||||
try:
|
||||
with task_worker_lock:
|
||||
is_processing = task_worker_thread is not None and task_worker_thread.is_alive()
|
||||
if is_processing:
|
||||
return web.Response(status=401)
|
||||
|
||||
await core.save_snapshot_with_postfix('autosave')
|
||||
|
||||
if request.rel_url.query["mode"] == "local":
|
||||
@ -660,32 +695,16 @@ async def update_all(request):
|
||||
await core.unified_manager.reload(request.rel_url.query["mode"])
|
||||
await core.unified_manager.get_custom_nodes(channel, request.rel_url.query["mode"])
|
||||
|
||||
updated_cnr = []
|
||||
for k, v in core.unified_manager.active_nodes.items():
|
||||
if v[0] != 'nightly':
|
||||
res = core.unified_manager.unified_update(k, v[0])
|
||||
if res.action == 'switch-cnr' and res:
|
||||
updated_cnr.append(k)
|
||||
if k == 'comfyui-manager':
|
||||
# skip updating comfyui-manager if desktop version
|
||||
if os.environ.get('__COMFYUI_DESKTOP_VERSION__'):
|
||||
continue
|
||||
|
||||
res = core.unified_manager.fetch_or_pull_git_repo(is_pull=True)
|
||||
update_item = k, k, v[0]
|
||||
task_queue.put(("update-main", update_item))
|
||||
|
||||
res['updated'] += updated_cnr
|
||||
|
||||
for x in res['failed']:
|
||||
logging.error(f"PULL FAILED: {x}")
|
||||
|
||||
if len(res['updated']) == 0 and len(res['failed']) == 0:
|
||||
status = 200
|
||||
else:
|
||||
status = 201
|
||||
|
||||
logging.info("\nDone.")
|
||||
return web.json_response(res, status=status, content_type='application/json')
|
||||
except:
|
||||
traceback.print_exc()
|
||||
return web.Response(status=400)
|
||||
finally:
|
||||
manager_util.clear_pip_cache()
|
||||
return web.Response(status=200)
|
||||
|
||||
|
||||
def convert_markdown_to_html(input_text):
|
||||
@ -1281,26 +1300,10 @@ async def update_custom_node(request):
|
||||
return web.Response(status=200)
|
||||
|
||||
|
||||
@routes.get("/comfyui_manager/update_comfyui")
|
||||
@routes.get("/manager/queue/update_comfyui")
|
||||
async def update_comfyui(request):
|
||||
logging.info("Update ComfyUI")
|
||||
|
||||
try:
|
||||
repo_path = os.path.dirname(folder_paths.__file__)
|
||||
res = core.update_path(repo_path)
|
||||
if res == "fail":
|
||||
logging.error("ComfyUI update fail: The installed ComfyUI does not have a Git repository.")
|
||||
return web.Response(status=400)
|
||||
elif res == "updated":
|
||||
logging.info("ComfyUI is updated.")
|
||||
return web.Response(status=201)
|
||||
else: # skipped
|
||||
logging.info("ComfyUI is up-to-date.")
|
||||
task_queue.put(("update-comfyui", ('comfyui',)))
|
||||
return web.Response(status=200)
|
||||
except Exception as e:
|
||||
logging.error(f"ComfyUI update fail: {e}", file=sys.stderr)
|
||||
|
||||
return web.Response(status=400)
|
||||
|
||||
|
||||
@routes.get("/comfyui_manager/comfyui_versions")
|
||||
|
||||
@ -13,7 +13,9 @@ import {
|
||||
import { OpenArtShareDialog } from "./comfyui-share-openart.js";
|
||||
import {
|
||||
free_models, install_pip, install_via_git_url, manager_instance,
|
||||
rebootAPI, migrateAPI, setManagerInstance, show_message, customAlert, customPrompt } from "./common.js";
|
||||
rebootAPI, migrateAPI, setManagerInstance, show_message, customAlert, customPrompt,
|
||||
infoToast, showTerminal, setNeedRestart
|
||||
} from "./common.js";
|
||||
import { ComponentBuilderDialog, getPureName, load_components, set_component_policy } from "./components-manager.js";
|
||||
import { CustomNodesManager } from "./custom-nodes-manager.js";
|
||||
import { ModelManager } from "./model-manager.js";
|
||||
@ -225,7 +227,11 @@ var update_comfyui_button = null;
|
||||
var switch_comfyui_button = null;
|
||||
var fetch_updates_button = null;
|
||||
var update_all_button = null;
|
||||
var restart_stop_button = null;
|
||||
|
||||
let share_option = 'all';
|
||||
var is_updating_all = false;
|
||||
|
||||
|
||||
// copied style from https://github.com/pythongosssss/ComfyUI-Custom-Scripts
|
||||
const style = `
|
||||
@ -424,102 +430,54 @@ async function init_notice(notice) {
|
||||
|
||||
await init_share_option();
|
||||
|
||||
async function fetchNicknames() {
|
||||
const response1 = await api.fetchApi(`/customnode/getmappings?mode=nickname`);
|
||||
const mappings = await response1.json();
|
||||
|
||||
let result = {};
|
||||
let nickname_patterns = [];
|
||||
async function set_inprogress_mode() {
|
||||
update_comfyui_button.disabled = true;
|
||||
update_comfyui_button.style.backgroundColor = "gray";
|
||||
|
||||
for (let i in mappings) {
|
||||
let item = mappings[i];
|
||||
var nickname;
|
||||
if (item[1].nickname) {
|
||||
nickname = item[1].nickname;
|
||||
update_all_button.disabled = true;
|
||||
update_all_button.style.backgroundColor = "gray";
|
||||
|
||||
switch_comfyui_button.disabled = true;
|
||||
switch_comfyui_button.style.backgroundColor = "gray";
|
||||
|
||||
restart_stop_button.innerText = 'Stop';
|
||||
}
|
||||
else if (item[1].title) {
|
||||
nickname = item[1].title;
|
||||
|
||||
|
||||
async function reset_action_buttons() {
|
||||
const isElectron = 'electronAPI' in window;
|
||||
|
||||
if(isElectron) {
|
||||
update_all_button.innerText = "Update All Custom Nodes";
|
||||
}
|
||||
else {
|
||||
nickname = item[1].title_aux;
|
||||
update_all_button.innerText = "Update All";
|
||||
}
|
||||
|
||||
for (let j in item[0]) {
|
||||
result[item[0][j]] = nickname;
|
||||
}
|
||||
update_comfyui_button.innerText = "Update ComfyUI";
|
||||
switch_comfyui_button.innerText = "Switch ComfyUI";
|
||||
restart_stop_button.innerText = 'Restart';
|
||||
|
||||
if(item[1].nodename_pattern) {
|
||||
nickname_patterns.push([item[1].nodename_pattern, nickname]);
|
||||
}
|
||||
}
|
||||
update_comfyui_button.disabled = false;
|
||||
update_all_button.disabled = false;
|
||||
switch_comfyui_button.disabled = false;
|
||||
|
||||
return [result, nickname_patterns];
|
||||
}
|
||||
|
||||
const [nicknames, nickname_patterns] = await fetchNicknames();
|
||||
|
||||
function getNickname(node, nodename) {
|
||||
if(node.nickname) {
|
||||
return node.nickname;
|
||||
}
|
||||
else {
|
||||
if (nicknames[nodename]) {
|
||||
node.nickname = nicknames[nodename];
|
||||
}
|
||||
else if(node.getInnerNodes) {
|
||||
let pure_name = getPureName(node);
|
||||
let groupNode = app.graph.extra?.groupNodes?.[pure_name];
|
||||
if(groupNode) {
|
||||
let packname = groupNode.packname;
|
||||
node.nickname = packname;
|
||||
}
|
||||
return node.nickname;
|
||||
}
|
||||
else {
|
||||
for(let i in nickname_patterns) {
|
||||
let item = nickname_patterns[i];
|
||||
if(nodename.match(item[0])) {
|
||||
node.nickname = item[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return node.nickname;
|
||||
}
|
||||
update_comfyui_button.style.backgroundColor = "";
|
||||
update_all_button.style.backgroundColor = "";
|
||||
switch_comfyui_button.style.backgroundColor = "";
|
||||
}
|
||||
|
||||
async function updateComfyUI() {
|
||||
let prev_text = update_comfyui_button.innerText;
|
||||
update_comfyui_button.innerText = "Updating ComfyUI...";
|
||||
update_comfyui_button.disabled = true;
|
||||
update_comfyui_button.style.backgroundColor = "gray";
|
||||
|
||||
try {
|
||||
const response = await api.fetchApi('/comfyui_manager/update_comfyui');
|
||||
set_inprogress_mode();
|
||||
|
||||
if (response.status == 400) {
|
||||
show_message('Failed to update ComfyUI.');
|
||||
return false;
|
||||
}
|
||||
const response = await api.fetchApi('/manager/queue/update_comfyui');
|
||||
|
||||
if (response.status == 201) {
|
||||
show_message('ComfyUI has been successfully updated.');
|
||||
}
|
||||
else {
|
||||
show_message('ComfyUI is already up to date with the latest version.');
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (exception) {
|
||||
show_message(`Failed to update ComfyUI / ${exception}`);
|
||||
return false;
|
||||
}
|
||||
finally {
|
||||
update_comfyui_button.disabled = false;
|
||||
update_comfyui_button.innerText = prev_text;
|
||||
update_comfyui_button.style.backgroundColor = "";
|
||||
}
|
||||
showTerminal();
|
||||
await api.fetchApi('/manager/queue/start');
|
||||
}
|
||||
|
||||
function showVersionSelectorDialog(versions, current, onSelect) {
|
||||
@ -660,12 +618,18 @@ async function switchComfyUI() {
|
||||
versions.push(v);
|
||||
}
|
||||
|
||||
showVersionSelectorDialog(versions, obj.current, (selected_version) => {
|
||||
api.fetchApi(`/comfyui_manager/comfyui_switch_version?ver=${selected_version}`, { cache: "no-store" });
|
||||
showVersionSelectorDialog(versions, obj.current, async (selected_version) => {
|
||||
let response = await api.fetchApi(`/comfyui_manager/comfyui_switch_version?ver=${selected_version}`, { cache: "no-store" });
|
||||
if (response.status == 200) {
|
||||
infoToast(`ComfyUI version is switched to ${selected_version}`);
|
||||
}
|
||||
else {
|
||||
customAlert('Failed to switch ComfyUI version.');
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
show_message('Failed to fetch ComfyUI versions.');
|
||||
customAlert('Failed to fetch ComfyUI versions.');
|
||||
}
|
||||
}
|
||||
|
||||
@ -720,70 +684,100 @@ async function fetchUpdates(update_check_checkbox) {
|
||||
}
|
||||
}
|
||||
|
||||
async function updateAll(update_check_checkbox, manager_dialog) {
|
||||
let prev_text = update_all_button.innerText;
|
||||
update_all_button.innerText = "Updating all...(ComfyUI)";
|
||||
update_all_button.disabled = true;
|
||||
update_all_button.style.backgroundColor = "gray";
|
||||
async function onQueueStatus(event) {
|
||||
const isElectron = 'electronAPI' in window;
|
||||
|
||||
try {
|
||||
var mode = manager_instance.datasrc_combo.value;
|
||||
if(event.detail.status == 'in_progress') {
|
||||
set_inprogress_mode();
|
||||
update_all_button.innerText = `in progress.. (${event.detail.done_count}/${event.detail.total_count})`;
|
||||
}
|
||||
else if(event.detail.status == 'done') {
|
||||
reset_action_buttons();
|
||||
|
||||
update_all_button.innerText = "Updating all...";
|
||||
const response1 = await api.fetchApi('/comfyui_manager/update_comfyui');
|
||||
const response2 = await api.fetchApi(`/customnode/update_all?mode=${mode}`);
|
||||
|
||||
if (response2.status == 403) {
|
||||
show_message('This action is not allowed with this security level configuration.');
|
||||
return false;
|
||||
if(!is_updating_all) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (response1.status == 400 || response2.status == 400) {
|
||||
show_message('Failed to update ComfyUI or several extensions.<BR><BR>See terminal log.<BR>');
|
||||
return false;
|
||||
let success_list = [];
|
||||
let failed_list = [];
|
||||
|
||||
for(let k in event.detail.nodepack_result){
|
||||
let v = event.detail.nodepack_result[k];
|
||||
|
||||
if(v == 'success')
|
||||
success_list.push(k);
|
||||
else if(v == 'skip') {
|
||||
// do nothing
|
||||
}
|
||||
else
|
||||
failed_list.push(k);
|
||||
}
|
||||
|
||||
if(response1.status == 201 || response2.status == 201) {
|
||||
const update_info = await response2.json();
|
||||
let msg = "";
|
||||
|
||||
let failed_list = "";
|
||||
if(update_info.failed.length > 0) {
|
||||
failed_list = "<BR>FAILED: "+update_info.failed.join(", ");
|
||||
if(success_list.length == 0) {
|
||||
if(failed_list.length == 0) {
|
||||
msg += "All custom nodes are already up to date.";
|
||||
}
|
||||
}
|
||||
else {
|
||||
msg = "To apply the updates, you need to <button class='cm-small-button' id='cm-reboot-button5'>RESTART</button> ComfyUI.<hr>";
|
||||
msg += "The following custom nodes have been updated:<ul>";
|
||||
for(let x in success_list) {
|
||||
msg += '<li>'+success_list[x]+'</li>';
|
||||
}
|
||||
msg += "</ul>";
|
||||
|
||||
setNeedRestart(true);
|
||||
}
|
||||
|
||||
let updated_list = "";
|
||||
if(update_info.updated.length > 0) {
|
||||
updated_list = "<BR>UPDATED: "+update_info.updated.join(", ");
|
||||
if(failed_list.length > 0) {
|
||||
msg += '<br>The update for the following custom nodes has failed:<ul>';
|
||||
for(let x in failed_list) {
|
||||
msg += '<li>'+failed_list[x]+'</li>';
|
||||
}
|
||||
|
||||
show_message(
|
||||
"ComfyUI and all extensions have been updated to the latest version.<BR>To apply the updated custom node, please <button class='cm-small-button' id='cm-reboot-button5'>RESTART</button> ComfyUI. And refresh browser.<BR>"
|
||||
+failed_list
|
||||
+updated_list
|
||||
);
|
||||
msg += '</ul>'
|
||||
}
|
||||
|
||||
show_message(msg);
|
||||
|
||||
const rebootButton = document.getElementById('cm-reboot-button5');
|
||||
rebootButton.addEventListener("click",
|
||||
rebootButton?.addEventListener("click",
|
||||
function() {
|
||||
if(rebootAPI()) {
|
||||
manager_dialog.close();
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
show_message('ComfyUI and all extensions are already up-to-date with the latest versions.');
|
||||
}
|
||||
|
||||
return true;
|
||||
api.addEventListener("cm-queue-status", onQueueStatus);
|
||||
|
||||
|
||||
async function updateAll(update_comfyui, manager_dialog) {
|
||||
let prev_text = update_all_button.innerText;
|
||||
update_all_button.innerText = "Updating...";
|
||||
|
||||
set_inprogress_mode();
|
||||
|
||||
var mode = manager_instance.datasrc_combo.value;
|
||||
|
||||
showTerminal();
|
||||
|
||||
if(update_comfyui) {
|
||||
update_all_button.innerText = "Updating ComfyUI...";
|
||||
await api.fetchApi('/manager/queue/update_comfyui');
|
||||
}
|
||||
catch (exception) {
|
||||
show_message(`Failed to update ComfyUI or several extensions / ${exception}`);
|
||||
return false;
|
||||
|
||||
const response = await api.fetchApi(`/manager/queue/update_all?mode=${mode}`);
|
||||
|
||||
if (response.status == 401) {
|
||||
customAlert('Another task is already in progress. Please stop the ongoing task first.');
|
||||
}
|
||||
finally {
|
||||
update_all_button.disabled = false;
|
||||
update_all_button.innerText = prev_text;
|
||||
update_all_button.style.backgroundColor = "";
|
||||
else if(response.status == 200) {
|
||||
is_updating_all = true;
|
||||
await api.fetchApi('/manager/queue/start');
|
||||
}
|
||||
}
|
||||
|
||||
@ -807,6 +801,16 @@ const isOutputNode = (node) => {
|
||||
return SUPPORTED_OUTPUT_NODE_TYPES.includes(node.type);
|
||||
}
|
||||
|
||||
function restartOrStop() {
|
||||
if(restart_stop_button.innerText == 'Restart'){
|
||||
rebootAPI();
|
||||
}
|
||||
else {
|
||||
api.fetchApi('/manager/queue/reset');
|
||||
infoToast('Cancel', 'Remaining tasks will stop after completing the current task.');
|
||||
}
|
||||
}
|
||||
|
||||
// -----------
|
||||
class ManagerMenuDialog extends ComfyDialog {
|
||||
createControlsMid() {
|
||||
@ -843,13 +847,31 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
() => fetchUpdates(this.update_check_checkbox)
|
||||
});
|
||||
|
||||
restart_stop_button =
|
||||
$el("button.cm-button-red", {
|
||||
type: "button",
|
||||
textContent: "Restart",
|
||||
onclick: () => restartOrStop()
|
||||
});
|
||||
|
||||
if(isElectron) {
|
||||
update_all_button =
|
||||
$el("button.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Update All Custom Nodes",
|
||||
onclick:
|
||||
() => updateAll(false, self)
|
||||
});
|
||||
}
|
||||
else {
|
||||
update_all_button =
|
||||
$el("button.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Update All",
|
||||
onclick:
|
||||
() => updateAll(this.update_check_checkbox, self)
|
||||
() => updateAll(true, self)
|
||||
});
|
||||
}
|
||||
|
||||
const res =
|
||||
[
|
||||
@ -909,11 +931,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
fetch_updates_button,
|
||||
|
||||
$el("br", {}, []),
|
||||
$el("button.cm-button-red", {
|
||||
type: "button",
|
||||
textContent: "Restart",
|
||||
onclick: () => rebootAPI()
|
||||
}),
|
||||
restart_stop_button,
|
||||
];
|
||||
|
||||
let migration_btn =
|
||||
|
||||
21
js/common.js
21
js/common.js
@ -432,3 +432,24 @@ export function showTerminal() {
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
|
||||
let need_restart = false;
|
||||
|
||||
export function setNeedRestart(value) {
|
||||
need_restart = value;
|
||||
}
|
||||
|
||||
async function onReconnected(event) {
|
||||
if(need_restart) {
|
||||
setNeedRestart(false);
|
||||
|
||||
const confirmed = await customConfirm("To apply the changes to the node pack's installation status, you need to refresh the browser. Would you like to refresh?");
|
||||
if (!confirmed) {
|
||||
return;
|
||||
}
|
||||
|
||||
window.location.reload(true);
|
||||
}
|
||||
}
|
||||
|
||||
api.addEventListener('reconnected', onReconnected);
|
||||
@ -5,7 +5,7 @@ import { api } from "../../scripts/api.js";
|
||||
import {
|
||||
manager_instance, rebootAPI, install_via_git_url,
|
||||
fetchData, md5, icons, show_message, customConfirm, customAlert, customPrompt,
|
||||
sanitizeHTML, infoToast, showTerminal
|
||||
sanitizeHTML, infoToast, showTerminal, setNeedRestart
|
||||
} from "./common.js";
|
||||
|
||||
// https://cenfun.github.io/turbogrid/api.html
|
||||
@ -401,7 +401,6 @@ export class CustomNodesManager {
|
||||
this.init();
|
||||
|
||||
api.addEventListener("cm-queue-status", this.onQueueStatus);
|
||||
api.addEventListener('reconnected', this.onReconnected);
|
||||
}
|
||||
|
||||
init() {
|
||||
@ -1403,21 +1402,6 @@ export class CustomNodesManager {
|
||||
}
|
||||
}
|
||||
|
||||
async onReconnected(event) {
|
||||
let self = CustomNodesManager.instance;
|
||||
|
||||
if(self.need_restart) {
|
||||
self.need_restart = false;
|
||||
|
||||
const confirmed = await customConfirm("To apply the changes to the node pack's installation status, you need to refresh the browser. Would you like to refresh?");
|
||||
if (!confirmed) {
|
||||
return;
|
||||
}
|
||||
|
||||
window.location.reload(true);
|
||||
}
|
||||
}
|
||||
|
||||
async onQueueStatus(event) {
|
||||
let self = CustomNodesManager.instance;
|
||||
if(event.detail.status == 'in_progress' && event.detail.ui_target == 'nodepack_manager') {
|
||||
@ -1457,7 +1441,7 @@ export class CustomNodesManager {
|
||||
for(let hash in result){
|
||||
let v = result[hash];
|
||||
|
||||
if(v != 'success')
|
||||
if(v != 'success' && v != 'skip')
|
||||
errorMsg += v+'\n';
|
||||
}
|
||||
|
||||
@ -1898,7 +1882,7 @@ export class CustomNodesManager {
|
||||
|
||||
showRestart() {
|
||||
this.element.querySelector(".cn-manager-restart").style.display = "block";
|
||||
this.need_restart = true;
|
||||
setNeedRestart(true);
|
||||
}
|
||||
|
||||
showStop() {
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
[project]
|
||||
name = "comfyui-manager"
|
||||
description = "ComfyUI-Manager provides features to install and manage custom nodes for ComfyUI, as well as various functionalities to assist with ComfyUI."
|
||||
version = "3.19.1"
|
||||
version = "3.20"
|
||||
license = { file = "LICENSE.txt" }
|
||||
dependencies = ["GitPython", "PyGithub", "matrix-client==0.4.0", "transformers", "huggingface-hub>0.20", "typer", "rich", "typing-extensions"]
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user