Compare commits

...

14 Commits

Author SHA1 Message Date
David
5e6567cc72
Merge 76fd32f1460fdd931a12969f53432779edfef312 into de64af4a6873547668187f0e98433a8030880940 2025-12-07 21:33:50 +09:00
Dr.Lt.Data
de64af4a68 update DB 2025-12-07 21:32:58 +09:00
Dr.Lt.Data
4a852ac8a8 update DB 2025-12-07 21:30:06 +09:00
shootthesound
6784bfb98c
Add Realtime LoRA Trainer node to custom-node-list (#2352)
Added a new node for Realtime LoRA Trainer with details.
2025-12-07 21:29:07 +09:00
Dr.Lt.Data
c8f246d344 update DB 2025-12-07 21:28:09 +09:00
The Kraken
8b3d31a936
Add Kraken Discord Bot custom node (#2358) 2025-12-07 21:27:17 +09:00
Dr.Lt.Data
5e88d6445b update DB 2025-12-07 21:25:30 +09:00
ds
fd7dff88df
Add ComfyUI_DashuaiTools to custom-node-list.json (#2319)
This PR adds the ComfyUI_DashuaiTools custom node pack to the ComfyUI-Manager node list.
2025-12-07 21:24:06 +09:00
Dr.Lt.Data
8cfee1f483 update DB 2025-12-07 07:36:12 +09:00
Matthew-X
cf4d8e6125
Workflow Importer (#2356)
* Add Workflow Importer node to custom-node-list.json

* Update custom-node-list.json

* Add entry for SDXL_sizing by Ser-Hilary

---------

Co-authored-by: Dr.Lt.Data <128333288+ltdrdata@users.noreply.github.com>
2025-12-07 07:35:14 +09:00
David
76fd32f146 Matched buttons and drop downs to match style of ComfyUI interface while keeping the colours the same as OG ComfyUI Manager 2025-12-05 13:47:30 +08:00
David
3ae99bc761 Removed this.close() I added before finding z-index issue. 2025-12-05 12:46:40 +08:00
David
1dde3c3ef0 - Added layout formatting to components of the Manager dialog box
- Pulled name from select and put it into a label (eg "DB: Channel" now has a label of DB and a dropdown with channel, etc)
- Fixed incorrect z-index
2025-12-05 12:38:54 +08:00
David
457c93cd19 Started changing UI to match the rest of ComfyUI
Completed Main Container
2025-12-04 11:58:22 +08:00
9 changed files with 2864 additions and 2503 deletions

View File

@ -32586,6 +32586,17 @@
"install_type": "git-clone",
"description": "High-utility nodes for ComfyUI with a focus on Flux 1 Dev workflows and Ultimate SD Upscale enhancement loops."
},
{
"author": "krakenunbound",
"title": "Kraken Discord Bot",
"id": "kraken-discord-bot",
"reference": "https://github.com/krakenunbound/kraken-discord-bot",
"files": [
"https://github.com/krakenunbound/kraken-discord-bot"
],
"install_type": "git-clone",
"description": "All-in-one Discord bot node for AI image generation. Simple setup - just add token, select model, and queue. Includes style presets, rate limiting, and queue management."
},
{
"author": "joanna910225",
"title": "HouseKeeper",
@ -37712,7 +37723,52 @@
"install_type": "git-clone",
"description": "ShakaNodes: Utility tools for ComfyUI"
},
{
"author": "Matthew-X",
"title": "Workflow Importer",
"id": "comfyui-workflow_importer",
"reference": "https://github.com/Matthew-X/comfyui-workflow_importer",
"files": [
"https://github.com/Matthew-X/comfyui-workflow_importer"
],
"install_type": "git-clone",
"js_path": "workflow_importer",
"description": "Import ComfyUI workflows from images with embedded metadata. Adds a toolbar Import button, drag-and-drop dialog and Ctrl+Shift+I shortcut. Supports legacy and new UIs, common image formats, opens each image in a new workflow tab."
},
{
"author": "Dashuai",
"title": "ComfyUI DashuaiTools",
"id": "comfyui-dashuai-tools",
"reference": "https://github.com/Hasasasa/ComfyUI_DashuaiTools",
"files": [
"https://github.com/Hasasasa/ComfyUI_DashuaiTools"
],
"install_type": "git-clone",
"description": "A practical and lightweight collection of custom nodes for ComfyUI, providing utility tools and convenient workflow functions."
},
{
"author": "ShootTheSound",
"title": "Realtime LoRA Trainer",
"id": "comfyui-realtime-lora",
"reference": "https://github.com/ShootTheSound/comfyUI-Realtime-Lora",
"files": [
"https://github.com/ShootTheSound/comfyUI-Realtime-Lora"
],
"install_type": "git-clone",
"description": "Train LoRAs directly inside ComfyUI. Supports SDXL (via sd-scripts), FLUX, Z-Image Turbo, and Wan 2.2 (via AI-Toolkit)."
},
{
"author": "HackAfterDark",
"title": "AfterDark Film AR Selector",
"id": "ComfyUI-HackAfterDark-Nodes",
"reference": "https://github.com/hackafterdark/ComfyUI-HackAfterDark-Nodes",
"files": [
"https://github.com/hackafterdark/ComfyUI-HackAfterDark-Nodes"
],
"install_type": "git-clone",
"description": "A collection of utility nodes for ComfyUI, including resolution presets for film and photography aspect ratios.",
"tags": ["utility", "presets", "aspect ratio", "film"]
},

View File

@ -18195,6 +18195,22 @@
"title_aux": "LoRA Matcher Nodes for ComfyUI"
}
],
"https://github.com/Transhumai/ComfyUI-LegionPower": [
[
"LegionConfig",
"LegionExporter",
"LegionImporter",
"LegionJoin",
"LegionJoinAll",
"LegionMaster",
"LegionMaster3",
"LegionMaster6",
"LegionWarmup"
],
{
"title_aux": "ComfyUI-LegionPower"
}
],
"https://github.com/Trgtuan10/ComfyUI_YoloSegment_Mask": [
[
"Object Mask"
@ -21680,6 +21696,14 @@
"title_aux": "Dream Video Batches"
}
],
"https://github.com/ameyukisora/ComfyUI-Empty-Latent-Advanced": [
[
"EmptyLatentAdvancedSelector"
],
{
"title_aux": "ComfyUI Empty Latent Advanced"
}
],
"https://github.com/amir84ferdos/ComfyUI-ArchAi3d-Qwen": [
[
"ArchAi3D_Average_Color",
@ -23534,6 +23558,15 @@
"title_aux": "Remembering utils"
}
],
"https://github.com/bomborant/ComfyUI-ShakaNodes": [
[
"ShakaTensorDebug",
"ShakaWanKeyframes"
],
{
"title_aux": "ShakaNodes"
}
],
"https://github.com/bongsang/ComfyUI-Bongsang": [
[
"AnyInfo",
@ -33651,6 +33684,26 @@
"title_aux": "fast_video_comfyui"
}
],
"https://github.com/jeankassio/ComfyUI_MusicTools": [
[
"Music_AudioMixer",
"Music_AudioTrimmer",
"Music_AudioUpscale",
"Music_Compressor",
"Music_Equalize",
"Music_Gain",
"Music_LufsNormalizer",
"Music_MasterAudioEnhancement",
"Music_NoiseRemove",
"Music_Reverb",
"Music_StemRecombination",
"Music_StemSeparation",
"Music_StereoEnhance"
],
{
"title_aux": "ComfyUI_MusicTools"
}
],
"https://github.com/jeffrey2212/ComfyUI-PonyCharacterPrompt": [
[
"Pony Character Prompt Picker"

File diff suppressed because it is too large Load Diff

View File

@ -44,12 +44,16 @@ docStyle.innerHTML = `
#cm-manager-dialog {
width: 1000px;
height: 455px;
height: auto;
box-sizing: content-box;
z-index: 1000;
overflow-y: auto;
}
#cm-manager-dialog br {
margin-bottom: 1em;
}
.cb-widget {
width: 400px;
height: 25px;
@ -80,6 +84,7 @@ docStyle.innerHTML = `
}
.cm-menu-container {
padding : calc(var(--spacing)*2);
column-gap: 20px;
display: flex;
flex-wrap: wrap;
@ -140,8 +145,8 @@ docStyle.innerHTML = `
}
.cm-notice-board {
width: 290px;
height: 230px;
width: auto;
height: 280px;
overflow: auto;
color: var(--input-text);
border: 1px solid var(--descrip-text);
@ -238,68 +243,54 @@ var is_updating = false;
// copied style from https://github.com/pythongosssss/ComfyUI-Custom-Scripts
const style = `
#workflowgallery-button {
width: 310px;
height: 27px;
height: 50px;
padding: 0px !important;
position: relative;
overflow: hidden;
font-size: 17px !important;
}
#cm-nodeinfo-button {
width: 310px;
height: 27px;
padding: 0px !important;
position: relative;
overflow: hidden;
font-size: 17px !important;
}
#cm-manual-button {
width: 310px;
height: 27px;
position: relative;
overflow: hidden;
}
.cm-column-button {
margin-bottom: calc(var(--spacing)*2);
}
.cm-button {
width: 310px;
height: 30px;
width: auto;
position: relative;
overflow: hidden;
font-size: 17px !important;
background-color: #2b2a33;
border-color: #444454;
color: #ddd;
}
.cm-button:hover {
background-color: #52525e;
}
.cm-button-red {
width: 310px;
height: 30px;
position: relative;
overflow: hidden;
font-size: 17px !important;
background-color: #500000 !important;
border-color: #88181b !important;
color: white !important;
}
.cm-button-red:hover {
background-color: #88181b !important;
}
.cm-button-orange {
width: 310px;
height: 30px;
position: relative;
overflow: hidden;
font-size: 17px !important;
font-weight: bold;
background-color: orange !important;
color: black !important;
}
.cm-experimental-button {
width: 290px;
height: 30px;
position: relative;
overflow: hidden;
font-size: 17px !important;
width: 100%;
}
.cm-experimental {
width: 310px;
border: 1px solid #555;
border-radius: 5px;
padding: 10px;
@ -326,8 +317,10 @@ const style = `
.cm-menu-combo {
cursor: pointer;
width: 310px;
box-sizing: border-box;
padding: 0.5em 0.5em;
border: 1px solid #52525b;
border-radius: 6px;
background: #09090b;
}
.cm-small-button {
@ -831,7 +824,7 @@ class ManagerMenuDialog extends ComfyDialog {
const isElectron = 'electronAPI' in window;
update_comfyui_button =
$el("button.cm-button", {
$el("button.p-button.p-component.cm-button.cm-column-button", {
type: "button",
textContent: "Update ComfyUI",
style: {
@ -842,7 +835,7 @@ class ManagerMenuDialog extends ComfyDialog {
});
switch_comfyui_button =
$el("button.cm-button", {
$el("button.p-button.p-component.cm-button.cm-column-button", {
type: "button",
textContent: "Switch ComfyUI",
style: {
@ -853,7 +846,7 @@ class ManagerMenuDialog extends ComfyDialog {
});
restart_stop_button =
$el("button.cm-button-red", {
$el("button.p-button.p-component.cm-column-button.cm-button-red", {
type: "button",
textContent: "Restart",
onclick: () => restartOrStop()
@ -861,7 +854,7 @@ class ManagerMenuDialog extends ComfyDialog {
if(isElectron) {
update_all_button =
$el("button.cm-button", {
$el("button.p-button.p-component.cm-button.cm-column-button", {
type: "button",
textContent: "Update All Custom Nodes",
onclick:
@ -870,7 +863,7 @@ class ManagerMenuDialog extends ComfyDialog {
}
else {
update_all_button =
$el("button.cm-button", {
$el("button.p-button.p-component.cm-button.cm-column-button", {
type: "button",
textContent: "Update All",
onclick:
@ -880,7 +873,7 @@ class ManagerMenuDialog extends ComfyDialog {
const res =
[
$el("button.cm-button", {
$el("button.p-button.p-component.cm-button.cm-column-button", {
type: "button",
textContent: "Custom Nodes Manager",
onclick:
@ -892,7 +885,7 @@ class ManagerMenuDialog extends ComfyDialog {
}
}),
$el("button.cm-button", {
$el("button.p-button.p-component.cm-button.cm-column-button", {
type: "button",
textContent: "Install Missing Custom Nodes",
onclick:
@ -904,7 +897,7 @@ class ManagerMenuDialog extends ComfyDialog {
}
}),
$el("button.cm-button", {
$el("button.p-button.p-component.cm-button.cm-column-button", {
type: "button",
textContent: "Custom Nodes In Workflow",
onclick:
@ -917,7 +910,7 @@ class ManagerMenuDialog extends ComfyDialog {
}),
$el("br", {}, []),
$el("button.cm-button", {
$el("button.p-button.p-component.cm-button.cm-column-button", {
type: "button",
textContent: "Model Manager",
onclick:
@ -929,7 +922,7 @@ class ManagerMenuDialog extends ComfyDialog {
}
}),
$el("button.cm-button", {
$el("button.p-button.p-component.cm-button.cm-column-button", {
type: "button",
textContent: "Install via Git URL",
onclick: async () => {
@ -960,12 +953,13 @@ class ManagerMenuDialog extends ComfyDialog {
let self = this;
// db mode
this.datasrc_combo = document.createElement("select");
this.datasrc_combo.setAttribute("title", "Configure where to retrieve node/model information. If set to 'local,' the channel is ignored, and if set to 'channel (remote),' it fetches the latest information each time the list is opened.");
this.datasrc_combo.className = "cm-menu-combo";
this.datasrc_combo.appendChild($el('option', { value: 'cache', text: 'DB: Channel (1day cache)' }, []));
this.datasrc_combo.appendChild($el('option', { value: 'local', text: 'DB: Local' }, []));
this.datasrc_combo.appendChild($el('option', { value: 'remote', text: 'DB: Channel (remote)' }, []));
this.datasrc_combo.className = "cm-menu-combo p-select p-component p-inputwrapper p-inputwrapper-filled ";
this.datasrc_combo.appendChild($el('option', { value: 'cache', text: 'Channel (1day cache)' }, []));
this.datasrc_combo.appendChild($el('option', { value: 'local', text: 'Local' }, []));
this.datasrc_combo.appendChild($el('option', { value: 'remote', text: 'Channel (remote)' }, []));
api.fetchApi('/manager/db_mode')
.then(response => response.text())
@ -975,14 +969,16 @@ class ManagerMenuDialog extends ComfyDialog {
api.fetchApi(`/manager/db_mode?value=${event.target.value}`);
});
const dbRetrievalSetttingItem = this.createSettingsCombo("DB", this.datasrc_combo);
// preview method
let preview_combo = document.createElement("select");
preview_combo.setAttribute("title", "Configure how latent variables will be decoded during preview in the sampling process.");
preview_combo.className = "cm-menu-combo";
preview_combo.appendChild($el('option', { value: 'auto', text: 'Preview method: Auto' }, []));
preview_combo.appendChild($el('option', { value: 'taesd', text: 'Preview method: TAESD (slow)' }, []));
preview_combo.appendChild($el('option', { value: 'latent2rgb', text: 'Preview method: Latent2RGB (fast)' }, []));
preview_combo.appendChild($el('option', { value: 'none', text: 'Preview method: None (very fast)' }, []));
preview_combo.className = "cm-menu-combo p-select p-component p-inputwrapper p-inputwrapper-filled";
preview_combo.appendChild($el('option', { value: 'auto', text: 'Auto' }, []));
preview_combo.appendChild($el('option', { value: 'taesd', text: 'TAESD (slow)' }, []));
preview_combo.appendChild($el('option', { value: 'latent2rgb', text: 'Latent2RGB (fast)' }, []));
preview_combo.appendChild($el('option', { value: 'none', text: 'None (very fast)' }, []));
api.fetchApi('/manager/preview_method')
.then(response => response.text())
@ -992,10 +988,12 @@ class ManagerMenuDialog extends ComfyDialog {
api.fetchApi(`/manager/preview_method?value=${event.target.value}`);
});
const previewSetttingItem = this.createSettingsCombo("Preview method", preview_combo);
// channel
let channel_combo = document.createElement("select");
channel_combo.setAttribute("title", "Configure the channel for retrieving data from the Custom Node list (including missing nodes) or the Model list.");
channel_combo.className = "cm-menu-combo";
channel_combo.className = "cm-menu-combo p-select p-component p-inputwrapper p-inputwrapper-filled";
api.fetchApi('/manager/channel_url_list')
.then(response => response.json())
.then(async data => {
@ -1004,7 +1002,7 @@ class ManagerMenuDialog extends ComfyDialog {
for (let i in urls) {
if (urls[i] != '') {
let name_url = urls[i].split('::');
channel_combo.appendChild($el('option', { value: name_url[0], text: `Channel: ${name_url[0]}` }, []));
channel_combo.appendChild($el('option', { value: name_url[0], text: `${name_url[0]}` }, []));
}
}
@ -1019,11 +1017,13 @@ class ManagerMenuDialog extends ComfyDialog {
}
});
const channelSetttingItem = this.createSettingsCombo("Channel", channel_combo);
// share
let share_combo = document.createElement("select");
share_combo.setAttribute("title", "Hide the share button in the main menu or set the default action upon clicking it. Additionally, configure the default share site when sharing via the context menu's share button.");
share_combo.className = "cm-menu-combo";
share_combo.className = "cm-menu-combo p-select p-component p-inputwrapper p-inputwrapper-filled";
const share_options = [
['none', 'None'],
['openart', 'OpenArt AI'],
@ -1034,7 +1034,7 @@ class ManagerMenuDialog extends ComfyDialog {
['all', 'All'],
];
for (const option of share_options) {
share_combo.appendChild($el('option', { value: option[0], text: `Share: ${option[1]}` }, []));
share_combo.appendChild($el('option', { value: option[0], text: `${option[1]}` }, []));
}
api.fetchApi('/manager/share_option')
@ -1056,12 +1056,14 @@ class ManagerMenuDialog extends ComfyDialog {
}
});
const shareSetttingItem = this.createSettingsCombo("Share", share_combo);
let component_policy_combo = document.createElement("select");
component_policy_combo.setAttribute("title", "When loading the workflow, configure which version of the component to use.");
component_policy_combo.className = "cm-menu-combo";
component_policy_combo.appendChild($el('option', { value: 'workflow', text: 'Component: Use workflow version' }, []));
component_policy_combo.appendChild($el('option', { value: 'higher', text: 'Component: Use higher version' }, []));
component_policy_combo.appendChild($el('option', { value: 'mine', text: 'Component: Use my version' }, []));
component_policy_combo.className = "cm-menu-combo p-select p-component p-inputwrapper p-inputwrapper-filled";
component_policy_combo.appendChild($el('option', { value: 'workflow', text: 'Use workflow version' }, []));
component_policy_combo.appendChild($el('option', { value: 'higher', text: 'Use higher version' }, []));
component_policy_combo.appendChild($el('option', { value: 'mine', text: 'Use my version' }, []));
api.fetchApi('/manager/policy/component')
.then(response => response.text())
.then(data => {
@ -1074,15 +1076,14 @@ class ManagerMenuDialog extends ComfyDialog {
set_component_policy(event.target.value);
});
const componentSetttingItem = this.createSettingsCombo("Component", component_policy_combo);
update_policy_combo = document.createElement("select");
if(isElectron)
update_policy_combo.style.display = 'none';
update_policy_combo.setAttribute("title", "Sets the policy to be applied when performing an update.");
update_policy_combo.className = "cm-menu-combo";
update_policy_combo.appendChild($el('option', { value: 'stable-comfyui', text: 'Update: ComfyUI Stable Version' }, []));
update_policy_combo.appendChild($el('option', { value: 'nightly-comfyui', text: 'Update: ComfyUI Nightly Version' }, []));
update_policy_combo.className = "cm-menu-combo p-select p-component p-inputwrapper p-inputwrapper-filled";
update_policy_combo.appendChild($el('option', { value: 'stable-comfyui', text: 'ComfyUI Stable Version' }, []));
update_policy_combo.appendChild($el('option', { value: 'nightly-comfyui', text: 'ComfyUI Nightly Version' }, []));
api.fetchApi('/manager/policy/update')
.then(response => response.text())
.then(data => {
@ -1093,20 +1094,25 @@ class ManagerMenuDialog extends ComfyDialog {
api.fetchApi(`/manager/policy/update?value=${event.target.value}`);
});
return [
$el("br", {}, []),
this.datasrc_combo,
channel_combo,
preview_combo,
share_combo,
component_policy_combo,
update_policy_combo,
$el("br", {}, []),
const updateSetttingItem = this.createSettingsCombo("Update", update_policy_combo);
$el("br", {}, []),
$el("filedset.cm-experimental", {}, [
if(isElectron)
updateSetttingItem.style.display = 'none';
return [
// $el("br", {}, []),
dbRetrievalSetttingItem,
channelSetttingItem,
previewSetttingItem,
shareSetttingItem,
componentSetttingItem,
updateSetttingItem,
// $el("br", {}, []),
// $el("br", {}, []),
$el("filedset.cm-experimental.mt-auto", {}, [
$el("legend.cm-experimental-legend", {}, ["EXPERIMENTAL"]),
$el("button.cm-experimental-button", {
$el("button.p-button.p-component.cm-button.cm-experimental-button.cm-column-button", {
type: "button",
textContent: "Snapshot Manager",
onclick:
@ -1116,7 +1122,7 @@ class ManagerMenuDialog extends ComfyDialog {
SnapshotManager.instance.show();
}
}),
$el("button.cm-experimental-button", {
$el("button.p-button.p-component.cm-button.cm-experimental-button", {
type: "button",
textContent: "Install PIP packages",
onclick:
@ -1134,7 +1140,7 @@ class ManagerMenuDialog extends ComfyDialog {
createControlsRight() {
const elts = [
$el("button.cm-button", {
$el("button.p-button.p-component.cm-button.cm-column-button", {
id: 'cm-manual-button',
type: "button",
textContent: "Community Manual",
@ -1185,11 +1191,11 @@ class ManagerMenuDialog extends ComfyDialog {
})
]),
$el("button", {
$el("button.p-button.p-component.cm-button.cm-column-button", {
id: 'workflowgallery-button',
type: "button",
style: {
...(localStorage.getItem("wg_last_visited") ? {height: '50px'} : {})
// ...(localStorage.getItem("wg_last_visited") ? {height: '50px'} : {})
},
onclick: (e) => {
const last_visited_site = localStorage.getItem("wg_last_visited")
@ -1212,7 +1218,7 @@ class ManagerMenuDialog extends ComfyDialog {
}, [
$el("p", {
id: 'workflowgallery-button-last-visited-label',
textContent: `(${localStorage.getItem("wg_last_visited") ? localStorage.getItem("wg_last_visited").split('/')[2] : ''})`,
textContent: `(${localStorage.getItem("wg_last_visited") ? localStorage.getItem("wg_last_visited").split('/')[2] : 'none selected'})`,
style: {
'text-align': 'center',
'color': 'var(--input-text)',
@ -1228,13 +1234,12 @@ class ManagerMenuDialog extends ComfyDialog {
})
]),
$el("button.cm-button", {
$el("button.p-button.p-component.cm-button.cm-column-button", {
id: 'cm-nodeinfo-button',
type: "button",
textContent: "Nodes Info",
onclick: () => { window.open("https://ltdrdata.github.io/", "comfyui-node-info"); }
}),
$el("br", {}, []),
];
var textarea = document.createElement("div");
@ -1246,34 +1251,154 @@ class ManagerMenuDialog extends ComfyDialog {
return elts;
}
createSettingsCombo(label, content) {
const settingItem = $el("div.setting-item.mb-4", {}, [
$el("div.flex.flex-row.items-center.gap-2",[
$el("div.form-label.flex.grow.items-center", [
$el("span.text-muted", { textContent: label },)
]),
$el("div.form-input.flex.justify-end",
[content]
)
]
)
]);
return settingItem;
}
createSettingsButton(label, content) {
const settingItem = $el("div.setting-item.mb-4", {}, [
$el("div.flex.flex-row.items-center.gap-2",[
$el("div.form-label.flex.grow.items-center", [
$el("span.text-muted", { textContent: label },)
]),
$el("div.form-input.flex.justify-end",
[content]
)
]
)
]);
return settingItem;
}
constructor() {
super();
const close_button = $el("button", { id: "cm-close-button", type: "button", textContent: "Close", onclick: () => this.close() });
const dialog_mask = $el("div.p-dialog-mask.p-overlay-mask.p-overlay-mask-enter", {
parent: document.body,
style: {
position: "fixed",
height: "100%",
width: "100%",
left: "0px",
top: "0px",
display: "flex",
justifyContent: "center",
alignItems: "center",
pointerEvents: "auto",
zIndex: "1000"
},
onclick: (e) => {
if (e.target === dialog_mask) {
this.close();
}
}
// data-pc-section="mask"
});
const content =
$el("div.comfy-modal-content",
const header_actions = $el("div.p-dialog-header-actions", {
// [FIXME]
// data-pc-section="headeractions"
}
);
const close_button = $el("button.p-button.p-component.p-button-icon-only.p-button-secondary.p-button-rounded.p-button-text.p-dialog-close-button", {
parent: header_actions,
type: "button",
ariaLabel: "Close",
onclick: () => this.close(),
// "data-pc-name": "pcclosebutton",
// "data-p-disabled": "false",
// "data-p-severity": "secondary",
// "data-pc-group-section": "headericon",
// "data-pc-extend": "button",
// "data-pc-section": "root",
// [FIXME] Not sure how to do most of the SVG using $el
innerHTML: '<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg" class="p-icon p-button-icon" aria-hidden="true"><path d="M8.01186 7.00933L12.27 2.75116C12.341 2.68501 12.398 2.60524 12.4375 2.51661C12.4769 2.42798 12.4982 2.3323 12.4999 2.23529C12.5016 2.13827 12.4838 2.0419 12.4474 1.95194C12.4111 1.86197 12.357 1.78024 12.2884 1.71163C12.2198 1.64302 12.138 1.58893 12.0481 1.55259C11.9581 1.51625 11.8617 1.4984 11.7647 1.50011C11.6677 1.50182 11.572 1.52306 11.4834 1.56255C11.3948 1.60204 11.315 1.65898 11.2488 1.72997L6.99067 5.98814L2.7325 1.72997C2.59553 1.60234 2.41437 1.53286 2.22718 1.53616C2.03999 1.53946 1.8614 1.61529 1.72901 1.74767C1.59663 1.88006 1.5208 2.05865 1.5175 2.24584C1.5142 2.43303 1.58368 2.61419 1.71131 2.75116L5.96948 7.00933L1.71131 11.2675C1.576 11.403 1.5 11.5866 1.5 11.7781C1.5 11.9696 1.576 12.1532 1.71131 12.2887C1.84679 12.424 2.03043 12.5 2.2219 12.5C2.41338 12.5 2.59702 12.424 2.7325 12.2887L6.99067 8.03052L11.2488 12.2887C11.3843 12.424 11.568 12.5 11.7594 12.5C11.9509 12.5 12.1346 12.424 12.27 12.2887C12.4053 12.1532 12.4813 11.9696 12.4813 11.7781C12.4813 11.5866 12.4053 11.403 12.27 11.2675L8.01186 7.00933Z" fill="currentColor"></path></svg><span class="p-button-label" data-pc-section="label">&nbsp;</span><!---->'
}
);
const dialog_header = $el("div.p-dialog-header",
[
$el("div", [
$el("div",
{
id: "cm-manager",
},
[
$el("h2.px-4", [
// [TODO] Find better icon
$el("i.mdi.mdi-puzzle", {
style: {
"font-size": "1.25rem",
"margin-right": ".5rem"
}
}),
$el("span", { textContent: `ComfyUI Manager ${manager_version}` })
])
]
)
]),
header_actions
]
);
const content = $el("div.p-dialog-content",
[
$el("tr.cm-title", {}, [
$el("font", {size:6, color:"white"}, [`ComfyUI Manager ${manager_version}`])]
),
$el("br", {}, []),
$el("div.cm-menu-container",
[
$el("div.cm-menu-column", [...this.createControlsLeft()]),
$el("div.cm-menu-column", [...this.createControlsMid()]),
$el("div.cm-menu-column", [...this.createControlsRight()])
]),
$el("br", {}, []),
close_button,
]
);
content.style.width = '100%';
content.style.height = '100%';
this.element = $el("div.comfy-modal", { id:'cm-manager-dialog', parent: document.body }, [ content ]);
const manager_dialog = $el("div.p-dialog.p-component.global-dialog", {
id:'cm-manager-dialog',
parent: dialog_mask,
style: {
'display': 'flex',
'flex-direction': 'column',
'pointer-events': 'auto',
'margin': '0px',
},
role: 'dialog',
ariaModal: 'true',
// [FIXME]
// ariaLabbelledby: 'cm-title',
// maximized: 'false',
// data-pc-name: 'dialog',
// data-pc-section: 'root',
// data-pd-focustrap: 'true'
},
[ dialog_header, content ]
);
const hidden_accessible = $el("span.p-hidden-accessible.p-hidden-focusable", {
parent: manager_dialog,
tabindex: "0",
role: "presentation",
ariaHidden: "true",
"data-p-hidden-accessible": "true",
"data-p-hidden-focusable": "true",
"data-pc-section": "firstfocusableelement"
});
this.element = dialog_mask;
}
get isVisible() {
@ -1281,7 +1406,7 @@ class ManagerMenuDialog extends ComfyDialog {
}
show() {
this.element.style.display = "block";
this.element.style.display = "flex";
}
toggleVisibility() {

View File

@ -1,5 +1,16 @@
{
"custom_nodes": [
{
"author": "krakenunbound",
"title": "Kraken Discord Bot",
"id": "kraken-discord-bot",
"reference": "https://github.com/krakenunbound/kraken-discord-bot",
"files": [
"https://github.com/krakenunbound/kraken-discord-bot"
],
"install_type": "git-clone",
"description": "All-in-one Discord bot node for AI image generation. Simple setup - just add token, select model, and queue. Includes style presets, rate limiting, and queue management."
},
{
"author": "quinteroac",
"title": "comfyui_api_executor_nodes",

View File

@ -2375,6 +2375,9 @@
"https://github.com/Kraven1109/ComfyUI-Llama": [
[
"ComfyLLama",
"ComfyLLamaPreviewText",
"ComfyLLamaPromptBuilder",
"ComfyLLamaSaveText",
"ComfyLLamaServer",
"ComfyLLamaTextConcat",
"ComfyLLamaTextInput",
@ -3483,12 +3486,16 @@
],
"https://github.com/PozzettiAndrea/ComfyUI-CADabra": [
[
"BGPSegSegmentation",
"BrepGeneration",
"CADAnalysisViewer",
"CADCheckOverlappingFaces",
"CADConnectedComponents",
"CADCountFaces",
"CADDepthMapHybrid",
"CADEdgeAnalysis",
"CADEdgeDetailAnalyzer",
"CADEdgeViewer",
"CADEstimateGapTolerance",
"CADExtractFaces",
"CADFaceAnalysis",
@ -3503,7 +3510,6 @@
"CADProjectFacesXY",
"CADROISelector",
"CADRaytracerBVH",
"CADRecodeExecute",
"CADRecodeInference",
"CADSave",
"CADSewFaces",
@ -3516,24 +3522,40 @@
"CAD_Quality_Metrics",
"CAD_Remesh_OCC",
"CAD_Remesh_OCC_Advanced",
"CadQueryExecute",
"CadrilleImageInference",
"CadrilleInference",
"CadrilleTextInference",
"LoadBGPSegModels",
"LoadCADRecodeModel",
"LoadCadrilleModel",
"LoadNeurCADReconModel",
"LoadPoint2CADModel",
"LoadPointCloudXYZ",
"LoadSECADNetModel",
"LoadSurfaceParams",
"ML_FeatureDetection",
"ML_SurfaceRecon",
"MeshFaceSegmentation",
"MeshSegmentToPointCloud",
"MeshToPointCloud",
"MeshToVoxel",
"Mesh_Optimize_Gmsh",
"NeurCADReconInference",
"NeurCADReconLoadCheckpoint",
"NeurCADReconTrain",
"Point2CADExportBrep",
"Point2CADSegmentation",
"Point2CADSurfaceFitting",
"Point2CADSurfaceFittingOCC",
"Point2CADTopologyExtraction",
"PointCloudSegmentation",
"PreviewCADBatch",
"PreviewCADOCC",
"PrimitiveFitting",
"QuadRemesh"
"QuadRemesh",
"SECADNetFinetune",
"SECADNetInference",
"SaveSurfaceParams"
],
{
"title_aux": "CADabra [WIP]"
@ -3784,6 +3806,7 @@
"List Image Path \ud83d\udc24",
"List Model Path \ud83d\udc24",
"List Video Path \ud83d\udc24",
"Load Image Base64 \ud83d\udc24",
"Peaks Weights Generator \ud83d\udc24"
],
{
@ -5490,12 +5513,13 @@
"https://github.com/bakker/BK_Utils": [
[
"DynamicGroupSwitchMulti",
"FileNameDefinition",
"FluxPromptSaver",
"FluxTextSampler",
"IsOneOfGroupsActive",
"ModelName",
"SamePixelResolutionCalculator",
"SubgraphPromptSwitchAutoDisplay"
"ZImageTurboResolutions"
],
{
"title_aux": "BK_Utils [WIP]"
@ -6191,6 +6215,7 @@
"CLIPTextEncodeFlux",
"CLIPTextEncodeHiDream",
"CLIPTextEncodeHunyuanDiT",
"CLIPTextEncodeKandinsky5",
"CLIPTextEncodeLumina2",
"CLIPTextEncodePixArtAlpha",
"CLIPTextEncodeSD3",
@ -6319,6 +6344,7 @@
"KSampler",
"KSamplerAdvanced",
"KSamplerSelect",
"Kandinsky5ImageToVideo",
"KarrasScheduler",
"KlingCameraControlI2VNode",
"KlingCameraControlT2VNode",
@ -6436,6 +6462,7 @@
"MoonvalleyTxt2VideoNode",
"MoonvalleyVideo2VideoNode",
"Morphology",
"NormalizeVideoLatentStart",
"OpenAIChatConfig",
"OpenAIChatNode",
"OpenAIDalle2",
@ -6497,6 +6524,7 @@
"RenormCFG",
"RepeatImageBatch",
"RepeatLatentBatch",
"ReplaceVideoLatentFrames",
"RescaleCFG",
"ResizeAndPadImage",
"Rodin3D_Detail",
@ -8733,12 +8761,14 @@
"CollectVideosNode",
"ImageDelay",
"IntToString",
"KlingVideoHandler",
"LoadImageWithFilename",
"LoadVideoWithFilename",
"PairSwitchNode",
"PreviewImageLimited",
"StringSplitSelect",
"Unbroken-Video-Handler"
"Unbroken-Video-Handler",
"WorkflowLoggerNode"
],
{
"title_aux": "Kaskis_Comfy_Nodes"
@ -9166,17 +9196,10 @@
],
"https://github.com/leacvikas0/ComfyUI-Presence": [
[
"BeautifulTextNode",
"FluxAdaptiveInjector",
"InspectNode",
"PresenceDirector",
"PresenceDirectorFireworks",
"PresenceDirectorVertex",
"PresenceSaver",
"UnaliverBundlePreview",
"UnaliverNode",
"UnaliverPlanner",
"UnaliverStepIterator"
"PresenceSaver"
],
{
"title_aux": "ComfyUI-Presence [WIP]"
@ -11323,7 +11346,10 @@
[
"GetJsonKeyValue",
"Image_Color_Noise",
"SamplingParameters"
"ModifyMask",
"SamplingParameters",
"TextEncodeFlux2SystemPrompt",
"TextEncodeZITSystemPrompt"
],
{
"title_aux": "Sampling Utility Toolkit"
@ -12509,7 +12535,12 @@
],
"https://github.com/xtanqn/comfyui-xishen": [
[
"XishenRandomIntegerNode"
"XishenCommonPromptNode",
"XishenCommonResolutionNode",
"XishenPromptEditNode",
"XishenRandomIntegerNode",
"XishenRemoveEmptyLinesNode",
"XishenSmartDisplayNode"
],
{
"title_aux": "comfyui-xishen [WIP]"
@ -12851,14 +12882,23 @@
],
"https://github.com/zhuanvi/ComfyUI-ZVNodes": [
[
"ApimartConfigManagerZV",
"ApimartDownloadSavedTaskImageZV",
"ApimartDownloadSavedTaskVideoZV",
"ApimartImage2VideoSubmitZV",
"ApimartNanoBananaProImageSubmitZV",
"ApimartRemixByTaskIdSubmitZV",
"ApimartRemixVideoSubmitZV",
"ApimartSeedream40ImageSubmitZV",
"ApimartSeedream45ImageSubmitZV",
"ApimartText2VideoSubmitZV",
"BBOXFormatConverterZV",
"GrsaiLoadImageFromPathNodeZV",
"GrsaiNanoBananaGeminiNodeZV",
"GrsaiNanoBananaNodeZV",
"GrsaiResultNodeZV",
"GrsaiSoraCreateCharacterNodeZV",
"GrsaiSoraUploadCharacterNodeZV",
"GrsaiSoraVideoNodeZV",
"ImageCounterNodeZV",
"JoinListZV",
"JsonListIndexerZV",
@ -12875,14 +12915,11 @@
"LoadVideoFromDirZV",
"MultiLineConditionalZV",
"MultiLineOperationZV",
"NanoBananaProText2ImageSubmitZV",
"PatternFillNodeZV",
"ProductionDisplacementMapNodeZV",
"RandomSelectListZV",
"SaveImageToPathZV",
"SaveTxtToPathZV",
"SeeDream40Text2ImageSubmitZV",
"SeeDream45Text2ImageSubmitZV",
"StringToPathZV",
"TriangleCharacterLayoutZV",
"TxtCounterNodeZV",

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,28 @@
{
"custom_nodes": [
{
"author": "HackAfterDark",
"title": "AfterDark Film AR Selector",
"id": "ComfyUI-HackAfterDark-Nodes",
"reference": "https://github.com/hackafterdark/ComfyUI-HackAfterDark-Nodes",
"files": [
"https://github.com/hackafterdark/ComfyUI-HackAfterDark-Nodes"
],
"install_type": "git-clone",
"description": "A collection of utility nodes for ComfyUI, including resolution presets for film and photography aspect ratios.",
"tags": ["utility", "presets", "aspect ratio", "film"]
},
{
"author": "Dashuai",
"title": "ComfyUI DashuaiTools",
"id": "comfyui-dashuai-tools",
"reference": "https://github.com/Hasasasa/ComfyUI_DashuaiTools",
"files": [
"https://github.com/Hasasasa/ComfyUI_DashuaiTools"
],
"install_type": "git-clone",
"description": "A practical and lightweight collection of custom nodes for ComfyUI, providing utility tools and convenient workflow functions."
},
{
"author": "jeankassio",
"title": "ComfyUI_MusicTools",
@ -11,6 +34,17 @@
"install_type": "git-clone",
"description": "Professional audio processing and mastering suite for ComfyUI."
},
{
"author": "ShootTheSound",
"title": "Realtime LoRA Trainer",
"id": "comfyui-realtime-lora",
"reference": "https://github.com/ShootTheSound/comfyUI-Realtime-Lora",
"files": [
"https://github.com/ShootTheSound/comfyUI-Realtime-Lora"
],
"install_type": "git-clone",
"description": "Train LoRAs directly inside ComfyUI. Supports SDXL (via sd-scripts), FLUX, Z-Image Turbo, and Wan 2.2 (via AI-Toolkit)."
},
{
"author": "Transhumai",
"title": "ComfyUI-LegionPower",
@ -32,6 +66,18 @@
"install_type": "git-clone",
"description": "ShakaNodes: Utility tools for ComfyUI"
},
{
"author": "Matthew-X",
"title": "Workflow Importer",
"id": "comfyui-workflow_importer",
"reference": "https://github.com/Matthew-X/comfyui-workflow_importer",
"files": [
"https://github.com/Matthew-X/comfyui-workflow_importer"
],
"install_type": "git-clone",
"js_path": "workflow_importer",
"description": "Import ComfyUI workflows from images with embedded metadata. Adds a toolbar Import button, drag-and-drop dialog and Ctrl+Shift+I shortcut. Supports legacy and new UIs, common image formats, opens each image in a new workflow tab."
},
{
"author": "ameyukisora",
"title": "ComfyUI Empty Latent Advanced",
@ -671,56 +717,6 @@
"install_type": "git-clone",
"description": "Utility tools. Index Multiple is used for expanding multiple values from a list, IsOneOfGroupsActive to identify groups state, RepeatGroupState group enable/disable like rg but without connection etc.",
"tags": ["utility", "list", "batch"]
},
{
"author": "huygiatrng",
"title": "Facefusion_comfyui",
"reference": "https://github.com/huygiatrng/Facefusion_comfyui",
"files": [
"https://github.com/huygiatrng/Facefusion_comfyui"
],
"install_type": "git-clone",
"description": "Advanced face swapping for ComfyUI with local ONNX inference - no API required!"
},
{
"author": "Ada123-a",
"title": "ComfyUI-Kandinsky",
"reference": "https://github.com/Ada123-a/ComfyUI-Kandinsky",
"files": [
"https://github.com/Ada123-a/ComfyUI-Kandinsky"
],
"install_type": "git-clone",
"description": "Kandinsky 2/20B ComfyUI support with FP8/GGUF/blockswap support."
},
{
"author": "chchchadzilla",
"title": "ComfyUI-ChomfyNodes",
"reference": "https://github.com/chchchadzilla/ComfyUI-ChomfyNodes",
"files": [
"https://github.com/chchchadzilla/ComfyUI-ChomfyNodes"
],
"install_type": "git-clone",
"description": "A professional suite of utility nodes for ComfyUI, featuring forensic logging, massive wildcard control, universal noise injection, and persistent counters."
},
{
"author": "nitingrg",
"title": "comfyui-ntools",
"reference": "https://github.com/nitingrg/comfyui-ntools",
"files": [
"https://github.com/nitingrg/comfyui-ntools"
],
"install_type": "git-clone",
"description": "Essential little utilities that should have been in ComfyUI from day one. (Description by CC)"
},
{
"author": "jav12z",
"title": "ComfyUI-ToyShaders",
"reference": "https://github.com/jav12z/ComfyUI-ToyShaders",
"files": [
"https://github.com/jav12z/ComfyUI-ToyShaders"
],
"install_type": "git-clone",
"description": "A custom node for ComfyUI that allows you to render GLSL shaders (Shadertoy-style) directly inside your workflows. (Description by CC)"
}
]
}

View File

@ -18195,6 +18195,22 @@
"title_aux": "LoRA Matcher Nodes for ComfyUI"
}
],
"https://github.com/Transhumai/ComfyUI-LegionPower": [
[
"LegionConfig",
"LegionExporter",
"LegionImporter",
"LegionJoin",
"LegionJoinAll",
"LegionMaster",
"LegionMaster3",
"LegionMaster6",
"LegionWarmup"
],
{
"title_aux": "ComfyUI-LegionPower"
}
],
"https://github.com/Trgtuan10/ComfyUI_YoloSegment_Mask": [
[
"Object Mask"
@ -21680,6 +21696,14 @@
"title_aux": "Dream Video Batches"
}
],
"https://github.com/ameyukisora/ComfyUI-Empty-Latent-Advanced": [
[
"EmptyLatentAdvancedSelector"
],
{
"title_aux": "ComfyUI Empty Latent Advanced"
}
],
"https://github.com/amir84ferdos/ComfyUI-ArchAi3d-Qwen": [
[
"ArchAi3D_Average_Color",
@ -23534,6 +23558,15 @@
"title_aux": "Remembering utils"
}
],
"https://github.com/bomborant/ComfyUI-ShakaNodes": [
[
"ShakaTensorDebug",
"ShakaWanKeyframes"
],
{
"title_aux": "ShakaNodes"
}
],
"https://github.com/bongsang/ComfyUI-Bongsang": [
[
"AnyInfo",
@ -33651,6 +33684,26 @@
"title_aux": "fast_video_comfyui"
}
],
"https://github.com/jeankassio/ComfyUI_MusicTools": [
[
"Music_AudioMixer",
"Music_AudioTrimmer",
"Music_AudioUpscale",
"Music_Compressor",
"Music_Equalize",
"Music_Gain",
"Music_LufsNormalizer",
"Music_MasterAudioEnhancement",
"Music_NoiseRemove",
"Music_Reverb",
"Music_StemRecombination",
"Music_StemSeparation",
"Music_StereoEnhance"
],
{
"title_aux": "ComfyUI_MusicTools"
}
],
"https://github.com/jeffrey2212/ComfyUI-PonyCharacterPrompt": [
[
"Pony Character Prompt Picker"