Compare commits
179
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
910bef52e4 | ||
|
|
5fe4b0cea7 | ||
|
|
7e1af9c202 | ||
|
|
a74929c65b | ||
|
|
0ebfa0cbd1 | ||
|
|
f6dadde0d9 | ||
|
|
9aa4879d6f | ||
|
|
30e7605bb2 | ||
|
|
72ed050d84 | ||
|
|
0430015440 | ||
|
|
b0b8bbe4e2 | ||
|
|
b230402a48 | ||
|
|
706ab9a624 | ||
|
|
032446438c | ||
|
|
65dafe577b | ||
|
|
afb921a09e | ||
|
|
a62690bf8d | ||
|
|
c67a8898ac | ||
|
|
69187ed44b | ||
|
|
0fee5c497e | ||
|
|
c4d4997333 | ||
|
|
4937c119cf | ||
|
|
abda2fce82 | ||
|
|
bdfac03976 | ||
|
|
4d3bed4b56 | ||
|
|
7669e21abc | ||
|
|
113aca4851 | ||
|
|
6edcc12033 | ||
|
|
d47225dd0c | ||
|
|
005fe35de9 | ||
|
|
dace16e4a3 | ||
|
|
dc693487a2 | ||
|
|
45ef35b081 | ||
|
|
686edbefd2 | ||
|
|
8eae750128 | ||
|
|
16f1398321 | ||
|
|
29f9e94bb8 | ||
|
|
11b0d6c7a7 | ||
|
|
a5983e77ce | ||
|
|
f66a82375a | ||
|
|
a2fc3e1c21 | ||
|
|
0a83ffa720 | ||
|
|
40d3884dc3 | ||
|
|
b5e406a6b5 | ||
|
|
adf5304302 | ||
|
|
3364c8c899 | ||
|
|
e48a3b266b | ||
|
|
66446e4501 | ||
|
|
45c3fb6837 | ||
|
|
cd07e4a598 | ||
|
|
c4ac4feaef | ||
|
|
c2de81a3b0 | ||
|
|
7006d57805 | ||
|
|
c418622aa5 | ||
|
|
9f710ae931 | ||
|
|
bc4dde71ba | ||
|
|
e38d8304f2 | ||
|
|
87ed66b80b | ||
|
|
00fceb4086 | ||
|
|
2707ae2f9e | ||
|
|
3671cb4935 | ||
|
|
69bd94e741 | ||
|
|
8034c1b2f4 | ||
|
|
c99884c0e1 | ||
|
|
f3dc0ea51e | ||
|
|
9c1280331e | ||
|
|
9ba42e570a | ||
|
|
25f1b6a272 | ||
|
|
801a8b0d7d | ||
|
|
518abae6df | ||
|
|
e848c5edf7 | ||
|
|
3e7de5bf7a | ||
|
|
349a7bd1c6 | ||
|
|
63d2ea95ab | ||
|
|
39281e9a4e | ||
|
|
7fbde6001e | ||
|
|
ffe36d044c | ||
|
|
c819bc5963 | ||
|
|
bef8882929 | ||
|
|
761f766c79 | ||
|
|
024360c097 | ||
|
|
855a0f50ec | ||
|
|
59a192d269 | ||
|
|
2674eb095f | ||
|
|
cd6ffc2975 | ||
|
|
cd20eb216e | ||
|
|
863f58ab13 | ||
|
|
d82ec59032 | ||
|
|
7e4b00c9b6 | ||
|
|
84cf40314e | ||
|
|
6140aa0db5 | ||
|
|
4dc0b0b01c | ||
|
|
2a6cb16430 | ||
|
|
fa697b77c1 | ||
|
|
6db282e248 | ||
|
|
913b0d8da6 | ||
|
|
6951efa5ab | ||
|
|
1e40793fc5 | ||
|
|
66672442f4 | ||
|
|
29205f0020 | ||
|
|
88e9c4a316 | ||
|
|
14b5aaab71 | ||
|
|
3ac380d725 | ||
|
|
cefc4f5db9 | ||
|
|
34808de665 | ||
|
|
07b9bbc813 | ||
|
|
d000401f63 | ||
|
|
dd8cff5e7b | ||
|
|
33c89b4438 | ||
|
|
7b703a153b | ||
|
|
a0151c8359 | ||
|
|
79f34708fb | ||
|
|
b77e8c6876 | ||
|
|
9c29dc68a4 | ||
|
|
125b7928e3 | ||
|
|
a536514b55 | ||
|
|
4e18a1c67d | ||
|
|
1475988f24 | ||
|
|
19bf7239cf | ||
|
|
9002c327b3 | ||
|
|
9c354fb2d3 | ||
|
|
12e0bda3d3 | ||
|
|
4ef99f88b8 | ||
|
|
29a4808952 | ||
|
|
c33e03c6a1 | ||
|
|
2b9dec25a6 | ||
|
|
7409ad5639 | ||
|
|
99e2e57550 | ||
|
|
16602dce5c | ||
|
|
02dc503f44 | ||
|
|
3223e802ed | ||
|
|
2d8353d85c | ||
|
|
731338bd0e | ||
|
|
721cf377da | ||
|
|
73bbe810c9 | ||
|
|
db76cf00ef | ||
|
|
4e645a013a | ||
|
|
30fc966092 | ||
|
|
6e689752c4 | ||
|
|
695e755ffe | ||
|
|
1698958286 | ||
|
|
3e1f5d3a8c | ||
|
|
c7ffd06174 | ||
|
|
88bcf04ce3 | ||
|
|
dc427adbfc | ||
|
|
14ed410545 | ||
|
|
ce61d2297e | ||
|
|
1aae35982f | ||
|
|
10a5ac6c5e | ||
|
|
65650fcc19 | ||
|
|
673be1c297 | ||
|
|
5a6a59b6d1 | ||
|
|
bf0d35310f | ||
|
|
15f9bc38b5 | ||
|
|
1568ef38b2 | ||
|
|
8eb483b893 | ||
|
|
2da007861c | ||
|
|
5f7b31bfa5 | ||
|
|
5ddfbe4344 | ||
|
|
d4cb80924d | ||
|
|
3f02a7b9cf | ||
|
|
9a2abe2433 | ||
|
|
4525bb1fab | ||
|
|
ef4204f767 | ||
|
|
846f29ca7b | ||
|
|
52b900b961 | ||
|
|
4048715398 | ||
|
|
42a77456b3 | ||
|
|
6a129ee987 | ||
|
|
8809373bf9 | ||
|
|
864899a6a8 | ||
|
|
5db01ece5b | ||
|
|
045d3d585d | ||
|
|
636a419be3 | ||
|
|
5dd76ca97a | ||
|
|
5d95082dbf | ||
|
|
03fc8523b0 | ||
|
|
726df32df1 | ||
|
|
0188b9a69b |
+1510
-654
File diff suppressed because it is too large
Load Diff
+2957
-1190
File diff suppressed because it is too large
Load Diff
+9169
-9049
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,82 @@
|
||||
.cm-ui-overlay {
|
||||
z-index: 1000;
|
||||
background: rgb(0 0 0 / 50%);
|
||||
}
|
||||
|
||||
.cm-ui-dialog {
|
||||
max-width: calc(100vw - 2rem);
|
||||
max-height: calc(100vh - 2rem);
|
||||
border: 1px solid var(--border, var(--border-color));
|
||||
border-radius: 12px;
|
||||
background: var(--background, var(--comfy-menu-bg));
|
||||
color: var(--foreground, var(--fg-color));
|
||||
box-shadow: var(--shadow-lg, 0 8px 24px rgb(0 0 0 / 30%));
|
||||
}
|
||||
|
||||
.cm-ui-header {
|
||||
flex-shrink: 0;
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
.cm-ui-content {
|
||||
padding: 0 1rem 1rem;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.cm-ui-muted {
|
||||
color: var(--muted-foreground, var(--fg-color));
|
||||
}
|
||||
|
||||
:where(.cm-ui-button) {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 0.5rem;
|
||||
padding: 0.5rem 0.75rem;
|
||||
border: 1px solid var(--border, var(--border-color));
|
||||
border-radius: 6px;
|
||||
background: var(--secondary, var(--comfy-input-bg));
|
||||
color: var(--foreground, var(--input-text));
|
||||
font: inherit;
|
||||
line-height: 1.25;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
:where(.cm-ui-input) {
|
||||
padding: 0.5rem;
|
||||
border: 1px solid var(--border, var(--border-color));
|
||||
border-radius: 6px;
|
||||
background: var(--secondary, var(--comfy-input-bg));
|
||||
color: var(--foreground, var(--input-text));
|
||||
font: inherit;
|
||||
}
|
||||
|
||||
.cm-ui-button:not(:disabled):hover {
|
||||
filter: brightness(115%);
|
||||
}
|
||||
|
||||
.cm-ui-button:disabled {
|
||||
opacity: 0.5;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.cm-ui-button:focus-visible,
|
||||
.cm-ui-input:focus-visible {
|
||||
outline: 2px solid var(--ring, var(--input-text));
|
||||
outline-offset: 2px;
|
||||
}
|
||||
|
||||
.cm-ui-close {
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
flex-shrink: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
border-radius: 50%;
|
||||
background: transparent;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.cm-ui-close:not(:disabled):hover {
|
||||
background: var(--accent, var(--comfy-input-bg));
|
||||
}
|
||||
+19
-98
@@ -1,4 +1,7 @@
|
||||
import { $el } from "../../scripts/ui.js";
|
||||
import { loadCss } from "./common.js";
|
||||
|
||||
loadCss("./comfyui-gui-builder.css");
|
||||
|
||||
function normalizeContent(content) {
|
||||
const tmp = document.createElement('div');
|
||||
@@ -16,7 +19,7 @@ export function createSettingsCombo(label, content) {
|
||||
const settingItem = $el("div.setting-item", {}, [
|
||||
$el("div.flex.flex-row.items-center.gap-2",[
|
||||
$el("div.form-label.flex.grow.items-center", [
|
||||
$el("span.text-muted", { textContent: label },)
|
||||
$el("span.cm-ui-muted", { textContent: label },)
|
||||
]),
|
||||
$el("div.form-input.flex.justify-end",
|
||||
[content]
|
||||
@@ -28,51 +31,27 @@ export function createSettingsCombo(label, content) {
|
||||
}
|
||||
|
||||
export function buildGuiFrame(dialogId, title, iconClass, content, owner) {
|
||||
const dialog_mask = $el("div.p-dialog-mask.p-overlay-mask.p-overlay-mask-enter", {
|
||||
const dialog_mask = $el("div.cm-ui-overlay.fixed.inset-0.flex.items-center.justify-center", {
|
||||
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) {
|
||||
owner.close();
|
||||
}
|
||||
}
|
||||
// data-pc-section="mask"
|
||||
});
|
||||
|
||||
const header_actions = $el("div.p-dialog-header-actions", {
|
||||
// [TODO]
|
||||
// data-pc-section="headeractions"
|
||||
}
|
||||
);
|
||||
const header_actions = $el("div.flex.items-center");
|
||||
|
||||
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", {
|
||||
$el("button.cm-ui-button.cm-ui-close", {
|
||||
parent: header_actions,
|
||||
type: "button",
|
||||
ariaLabel: "Close",
|
||||
onclick: () => owner.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"> </span><!---->'
|
||||
innerHTML: '<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg" 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>'
|
||||
}
|
||||
);
|
||||
|
||||
const dialog_header = $el("div.p-dialog-header",
|
||||
const dialog_header = $el("div.cm-ui-header.flex.items-center.justify-between.gap-2",
|
||||
[
|
||||
$el("div", [
|
||||
$el("div",
|
||||
@@ -96,8 +75,8 @@ export function buildGuiFrame(dialogId, title, iconClass, content, owner) {
|
||||
]
|
||||
);
|
||||
|
||||
const contentFrame = $el("div.p-dialog-content", {}, normalizeContent(content));
|
||||
const manager_dialog = $el("div.p-dialog.p-component.global-dialog", {
|
||||
const contentFrame = $el("div.cm-ui-content.min-h-0", {}, normalizeContent(content));
|
||||
$el("div.cm-ui-dialog.global-dialog.flex.flex-col", {
|
||||
id: dialogId,
|
||||
parent: dialog_mask,
|
||||
style: {
|
||||
@@ -108,76 +87,35 @@ export function buildGuiFrame(dialogId, title, iconClass, content, owner) {
|
||||
},
|
||||
role: 'dialog',
|
||||
ariaModal: 'true',
|
||||
// [TODO]
|
||||
// ariaLabbelledby: 'cm-title',
|
||||
// maximized: 'false',
|
||||
// data-pc-name: 'dialog',
|
||||
// data-pc-section: 'root',
|
||||
// data-pd-focustrap: 'true'
|
||||
},
|
||||
[ dialog_header, contentFrame ]
|
||||
);
|
||||
|
||||
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"
|
||||
});
|
||||
|
||||
return dialog_mask;
|
||||
}
|
||||
|
||||
export function buildGuiFrameCustomHeader(dialogId, customHeader, content, owner) {
|
||||
const dialog_mask = $el("div.p-dialog-mask.p-overlay-mask.p-overlay-mask-enter", {
|
||||
const dialog_mask = $el("div.cm-ui-overlay.fixed.inset-0.flex.items-center.justify-center", {
|
||||
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) {
|
||||
owner.close();
|
||||
}
|
||||
}
|
||||
// data-pc-section="mask"
|
||||
});
|
||||
|
||||
const header_actions = $el("div.p-dialog-header-actions", {
|
||||
// [TODO]
|
||||
// data-pc-section="headeractions"
|
||||
}
|
||||
);
|
||||
const header_actions = $el("div.flex.items-center");
|
||||
|
||||
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", {
|
||||
$el("button.cm-ui-button.cm-ui-close", {
|
||||
parent: header_actions,
|
||||
type: "button",
|
||||
ariaLabel: "Close",
|
||||
onclick: () => owner.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"> </span><!---->'
|
||||
innerHTML: '<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg" 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>'
|
||||
}
|
||||
);
|
||||
|
||||
const _customHeader = normalizeContent(customHeader);
|
||||
const dialog_header = $el("div.p-dialog-header",
|
||||
const dialog_header = $el("div.cm-ui-header.flex.items-center.justify-between.gap-2",
|
||||
[
|
||||
$el("div", [
|
||||
$el("div",
|
||||
@@ -191,8 +129,8 @@ export function buildGuiFrameCustomHeader(dialogId, customHeader, content, owner
|
||||
]
|
||||
);
|
||||
|
||||
const contentFrame = $el("div.p-dialog-content", {}, normalizeContent(content));
|
||||
const manager_dialog = $el("div.p-dialog.p-component.global-dialog", {
|
||||
const contentFrame = $el("div.cm-ui-content.min-h-0", {}, normalizeContent(content));
|
||||
$el("div.cm-ui-dialog.global-dialog.flex.flex-col", {
|
||||
id: dialogId,
|
||||
parent: dialog_mask,
|
||||
style: {
|
||||
@@ -203,25 +141,8 @@ export function buildGuiFrameCustomHeader(dialogId, customHeader, content, owner
|
||||
},
|
||||
role: 'dialog',
|
||||
ariaModal: 'true',
|
||||
// [TODO]
|
||||
// ariaLabbelledby: 'cm-title',
|
||||
// maximized: 'false',
|
||||
// data-pc-name: 'dialog',
|
||||
// data-pc-section: 'root',
|
||||
// data-pd-focustrap: 'true'
|
||||
},
|
||||
[ dialog_header, contentFrame ]
|
||||
);
|
||||
|
||||
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"
|
||||
});
|
||||
|
||||
return dialog_mask;
|
||||
}
|
||||
}
|
||||
|
||||
+27
-26
@@ -826,7 +826,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
const isElectron = 'electronAPI' in window;
|
||||
|
||||
update_comfyui_button =
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
$el("button.cm-ui-button.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Update ComfyUI",
|
||||
style: {
|
||||
@@ -837,7 +837,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
});
|
||||
|
||||
switch_comfyui_button =
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
$el("button.cm-ui-button.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Switch ComfyUI",
|
||||
style: {
|
||||
@@ -848,7 +848,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
});
|
||||
|
||||
restart_stop_button =
|
||||
$el("button.p-button.p-component.cm-button-red", {
|
||||
$el("button.cm-ui-button.cm-button-red", {
|
||||
type: "button",
|
||||
textContent: "Restart",
|
||||
onclick: () => restartOrStop()
|
||||
@@ -856,7 +856,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
|
||||
if(isElectron) {
|
||||
update_all_button =
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
$el("button.cm-ui-button.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Update All Custom Nodes",
|
||||
onclick:
|
||||
@@ -865,7 +865,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
}
|
||||
else {
|
||||
update_all_button =
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
$el("button.cm-ui-button.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Update All",
|
||||
onclick:
|
||||
@@ -875,7 +875,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
|
||||
const res =
|
||||
[
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
$el("button.cm-ui-button.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Custom Nodes Manager",
|
||||
onclick:
|
||||
@@ -887,7 +887,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
}
|
||||
}),
|
||||
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
$el("button.cm-ui-button.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Install Missing Custom Nodes",
|
||||
onclick:
|
||||
@@ -899,7 +899,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
}
|
||||
}),
|
||||
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
$el("button.cm-ui-button.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Custom Nodes In Workflow",
|
||||
onclick:
|
||||
@@ -910,7 +910,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
CustomNodesManager.instance.show(CustomNodesManager.ShowMode.IN_WORKFLOW);
|
||||
}
|
||||
}),
|
||||
$el("button.cm-button", {
|
||||
$el("button.cm-ui-button.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Node Usage Analyzer",
|
||||
onclick:
|
||||
@@ -923,7 +923,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
}),
|
||||
|
||||
$el("div", {}, []),
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
$el("button.cm-ui-button.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Model Manager",
|
||||
onclick:
|
||||
@@ -935,7 +935,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
}
|
||||
}),
|
||||
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
$el("button.cm-ui-button.cm-button", {
|
||||
type: "button",
|
||||
textContent: "Install via Git URL",
|
||||
onclick: async () => {
|
||||
@@ -969,7 +969,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
|
||||
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 p-select p-component p-inputwrapper p-inputwrapper-filled ";
|
||||
this.datasrc_combo.className = "cm-menu-combo cm-ui-input ";
|
||||
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)' }, []));
|
||||
@@ -987,7 +987,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
// 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 p-select p-component p-inputwrapper p-inputwrapper-filled";
|
||||
preview_combo.className = "cm-menu-combo cm-ui-input";
|
||||
|
||||
// Loading state to prevent flash of enabled state
|
||||
preview_combo.appendChild($el('option', { value: '', text: 'Loading...', disabled: true }, []));
|
||||
@@ -1085,7 +1085,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
// 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 p-select p-component p-inputwrapper p-inputwrapper-filled";
|
||||
channel_combo.className = "cm-menu-combo cm-ui-input";
|
||||
api.fetchApi('/manager/channel_url_list')
|
||||
.then(response => response.json())
|
||||
.then(async data => {
|
||||
@@ -1115,7 +1115,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
// 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 p-select p-component p-inputwrapper p-inputwrapper-filled";
|
||||
share_combo.className = "cm-menu-combo cm-ui-input";
|
||||
const share_options = [
|
||||
['none', 'None'],
|
||||
['openart', 'OpenArt AI'],
|
||||
@@ -1152,7 +1152,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
|
||||
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 p-select p-component p-inputwrapper p-inputwrapper-filled";
|
||||
component_policy_combo.className = "cm-menu-combo cm-ui-input";
|
||||
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' }, []));
|
||||
@@ -1173,7 +1173,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
update_policy_combo = document.createElement("select");
|
||||
|
||||
update_policy_combo.setAttribute("title", "Sets the policy to be applied when performing an update.");
|
||||
update_policy_combo.className = "cm-menu-combo p-select p-component p-inputwrapper p-inputwrapper-filled";
|
||||
update_policy_combo.className = "cm-menu-combo cm-ui-input";
|
||||
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')
|
||||
@@ -1201,7 +1201,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
//[TODO] replace mt-2 with wrapper div with flex column gap
|
||||
$el("filedset.cm-experimental.mt-auto", {}, [
|
||||
$el("legend.cm-experimental-legend", {}, ["EXPERIMENTAL"]),
|
||||
$el("button.p-button.p-component.cm-button.cm-experimental-button", {
|
||||
$el("button.cm-ui-button.cm-button.cm-experimental-button", {
|
||||
type: "button",
|
||||
textContent: "Snapshot Manager",
|
||||
onclick:
|
||||
@@ -1211,7 +1211,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
SnapshotManager.instance.show();
|
||||
}
|
||||
}),
|
||||
$el("button.p-button.p-component.cm-button.cm-experimental-button.mt-2", {
|
||||
$el("button.cm-ui-button.cm-button.cm-experimental-button.mt-2", {
|
||||
type: "button",
|
||||
textContent: "Install PIP packages",
|
||||
onclick:
|
||||
@@ -1229,7 +1229,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
|
||||
createControlsRight() {
|
||||
const elts = [
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
$el("button.cm-ui-button.cm-button", {
|
||||
id: 'cm-manual-button',
|
||||
type: "button",
|
||||
textContent: "Community Manual",
|
||||
@@ -1280,7 +1280,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
})
|
||||
]),
|
||||
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
$el("button.cm-ui-button.cm-button", {
|
||||
id: 'workflowgallery-button',
|
||||
type: "button",
|
||||
style: {
|
||||
@@ -1323,7 +1323,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
})
|
||||
]),
|
||||
|
||||
$el("button.p-button.p-component.cm-button", {
|
||||
$el("button.cm-ui-button.cm-button", {
|
||||
id: 'cm-nodeinfo-button',
|
||||
type: "button",
|
||||
textContent: "Nodes Info",
|
||||
@@ -1536,10 +1536,11 @@ app.registerExtension({
|
||||
});
|
||||
},
|
||||
async setup() {
|
||||
let orig_clear = app.graph.clear;
|
||||
app.graph.clear = function () {
|
||||
orig_clear.call(app.graph);
|
||||
load_components();
|
||||
const graphProto = Object.getPrototypeOf(app.graph);
|
||||
const orig_clear = graphProto.clear;
|
||||
graphProto.clear = function () {
|
||||
orig_clear.apply(this, arguments);
|
||||
if (this === app.graph) load_components();
|
||||
};
|
||||
|
||||
load_components();
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
line-height: 28px;
|
||||
|
||||
cursor: pointer;
|
||||
padding: 0.5em 0.5em;
|
||||
padding: 0 0.5em;
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 6px;
|
||||
background: var(--comfy-input-bg);
|
||||
@@ -726,4 +726,4 @@
|
||||
|
||||
.cn-manager-light .cn-btn-install {
|
||||
background-color: #333;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,13 +24,13 @@ const pageHtml = `
|
||||
<div class="cn-manager-selection"></div>
|
||||
<div class="cn-manager-message"></div>
|
||||
<div class="cn-manager-footer">
|
||||
<button class="cn-manager-restart p-button p-component">Restart</button>
|
||||
<button class="cn-manager-stop p-button p-component">Stop</button>
|
||||
<button class="cn-manager-restart cm-ui-button">Restart</button>
|
||||
<button class="cn-manager-stop cm-ui-button">Stop</button>
|
||||
<div class="cn-flex-auto"></div>
|
||||
<button class="cn-manager-used-in-workflow p-button p-component">Used In Workflow</button>
|
||||
<button class="cn-manager-check-update p-button p-component">Check Update</button>
|
||||
<button class="cn-manager-check-missing p-button p-component">Check Missing</button>
|
||||
<button class="cn-manager-install-url p-button p-component">Install via Git URL</button>
|
||||
<button class="cn-manager-used-in-workflow cm-ui-button">Used In Workflow</button>
|
||||
<button class="cn-manager-check-update cm-ui-button">Check Update</button>
|
||||
<button class="cn-manager-check-missing cm-ui-button">Check Missing</button>
|
||||
<button class="cn-manager-install-url cm-ui-button">Install via Git URL</button>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
@@ -85,7 +85,7 @@ export class CustomNodesManager {
|
||||
// $el("select.cn-manager-filter")
|
||||
// ]),
|
||||
createSettingsCombo("Filter", $el("select.cn-manager-filter")),
|
||||
$el("input.cn-manager-keywords.p-inputtext.p-component", { type: "search", placeholder: "Search" }),
|
||||
$el("input.cn-manager-keywords.cm-ui-input", { type: "search", placeholder: "Search" }),
|
||||
$el("div.cn-manager-status"),
|
||||
$el("div.cn-flex-auto"),
|
||||
$el("div.cn-manager-channel")
|
||||
@@ -384,7 +384,7 @@ export class CustomNodesManager {
|
||||
|
||||
return list.map(id => {
|
||||
const bt = buttons[id];
|
||||
return `<button class="cn-btn-${id} p-button p-component" group="${sanitizeHTML(String(action))}" mode="${bt.mode}">${bt.label}</button>`;
|
||||
return `<button class="cn-btn-${id} cm-ui-button" group="${sanitizeHTML(String(action))}" mode="${bt.mode}">${bt.label}</button>`;
|
||||
}).join("");
|
||||
}
|
||||
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
line-height: 28px;
|
||||
|
||||
cursor: pointer;
|
||||
padding: 0.5em 0.5em;
|
||||
padding: 0 0.5em;
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: 6px;
|
||||
background: var(--comfy-input-bg);
|
||||
@@ -234,4 +234,4 @@
|
||||
|
||||
.cmm-manager-light .cmm-btn-install {
|
||||
background-color: #333;
|
||||
}
|
||||
}
|
||||
|
||||
+5
-5
@@ -31,8 +31,8 @@ const pageHtml = `
|
||||
<div class="cmm-manager-selection"></div>
|
||||
<div class="cmm-manager-message"></div>
|
||||
<div class="cmm-manager-footer">
|
||||
<button class="cmm-manager-refresh p-button p-component">Refresh</button>
|
||||
<button class="cmm-manager-stop p-button p-component">Stop</button>
|
||||
<button class="cmm-manager-refresh cm-ui-button">Refresh</button>
|
||||
<button class="cmm-manager-stop cm-ui-button">Stop</button>
|
||||
<div class="cmm-flex-auto"></div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -61,7 +61,7 @@ export class ModelManager {
|
||||
createSettingsCombo("Filter", $el("select.cmm-manager-filter")),
|
||||
createSettingsCombo("Type", $el("select.cmm-manager-type")),
|
||||
createSettingsCombo("Base", $el("select.cmm-manager-base")),
|
||||
$el("input.cmm-manager-keywords.p-inputtext.p-component", { type: "search", placeholder: "Search" }),
|
||||
$el("input.cmm-manager-keywords.cm-ui-input", { type: "search", placeholder: "Search" }),
|
||||
$el("div.cmm-manager-status"),
|
||||
$el("div.cmm-flex-auto")
|
||||
]);
|
||||
@@ -347,7 +347,7 @@ export class ModelManager {
|
||||
if (installed === "True") {
|
||||
return `<div class="cmm-icon-passed">${icons.passed}</div>`;
|
||||
}
|
||||
return `<button class="cmm-btn-install p-button p-component" mode="install">Install</button>`;
|
||||
return `<button class="cmm-btn-install cm-ui-button" mode="install">Install</button>`;
|
||||
}
|
||||
}, {
|
||||
id: 'url',
|
||||
@@ -425,7 +425,7 @@ export class ModelManager {
|
||||
}
|
||||
|
||||
this.selectedModels = selectedList;
|
||||
this.showSelection(`<span>Selected <b>${selectedList.length}</b> models <button class="cmm-btn-install p-button p-component" mode="install">Install</button>`);
|
||||
this.showSelection(`<span>Selected <b>${selectedList.length}</b> models <button class="cmm-btn-install cm-ui-button" mode="install">Install</button>`);
|
||||
}
|
||||
|
||||
focusInstall(item) {
|
||||
|
||||
+5
-5
@@ -29,7 +29,7 @@ async function restore_snapshot(target) {
|
||||
}
|
||||
finally {
|
||||
await SnapshotManager.instance.invalidateControl();
|
||||
SnapshotManager.instance.updateMessage("<BR>To apply the snapshot, please <button id='cm-reboot-button2' class='p-button p-component'>RESTART</button> ComfyUI. And refresh browser.", 'cm-reboot-button2');
|
||||
SnapshotManager.instance.updateMessage("<BR>To apply the snapshot, please <button id='cm-reboot-button2' class='cm-ui-button'>RESTART</button> ComfyUI. And refresh browser.", 'cm-reboot-button2');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -122,7 +122,7 @@ export class SnapshotManager extends ComfyDialog {
|
||||
|
||||
createControls() {
|
||||
return [
|
||||
$el("button.p-button.p-component", {
|
||||
$el("button.cm-ui-button", {
|
||||
type: "button",
|
||||
textContent: "Close",
|
||||
onclick: () => { this.close(); }
|
||||
@@ -220,7 +220,7 @@ export class SnapshotManager extends ComfyDialog {
|
||||
data_button.className = "data-btns";
|
||||
|
||||
var restoreBtn = document.createElement('button');
|
||||
restoreBtn.className = "snapshot-restore-btn p-button p-component";
|
||||
restoreBtn.className = "snapshot-restore-btn cm-ui-button";
|
||||
restoreBtn.innerHTML = 'Restore';
|
||||
restoreBtn.style.width = "100px";
|
||||
|
||||
@@ -229,7 +229,7 @@ export class SnapshotManager extends ComfyDialog {
|
||||
});
|
||||
|
||||
var removeBtn = document.createElement('button');
|
||||
removeBtn.className = "snapshot-remove-btn p-button p-component";
|
||||
removeBtn.className = "snapshot-remove-btn cm-ui-button";
|
||||
removeBtn.innerHTML = 'Remove';
|
||||
removeBtn.style.width = "100px";
|
||||
|
||||
@@ -279,7 +279,7 @@ export class SnapshotManager extends ComfyDialog {
|
||||
|
||||
async createBottomControls() {
|
||||
var save_button = document.createElement("button");
|
||||
save_button.className = "p-button p-component";
|
||||
save_button.className = "cm-ui-button";
|
||||
save_button.innerHTML = "Save snapshot";
|
||||
save_button.onclick = () => { save_current_snapshot(); }
|
||||
save_button.style.horizontalAlign = "right";
|
||||
|
||||
+23
-1
@@ -6249,6 +6249,28 @@
|
||||
"filename": "Qwen-Image-InstantX-ControlNet-Inpainting.safetensors",
|
||||
"url": "https://huggingface.co/Comfy-Org/Qwen-Image-InstantX-ControlNets/resolve/main/split_files/controlnet/Qwen-Image-InstantX-ControlNet-Inpainting.safetensors",
|
||||
"size": "2.54GB"
|
||||
},
|
||||
{
|
||||
"name": "Anime Eye Detector (YOLOv8n)",
|
||||
"type": "Ultralytics",
|
||||
"base": "yolov8",
|
||||
"save_path": "ultralytics/bbox",
|
||||
"description": "Anime eye detector (YOLOv8n). Detects eyes in anime-style character art for use with BboxDetectorSEGS/Detailer workflows.",
|
||||
"reference": "https://huggingface.co/killjoyelite/anime-eye-yolov8",
|
||||
"filename": "eye_yolov8n.pt",
|
||||
"url": "https://huggingface.co/killjoyelite/anime-eye-yolov8/resolve/6bceece59aa38f7fe9d3867f3e2931b11c7ff9a1/eye_yolov8n.pt",
|
||||
"size": "6.24MB"
|
||||
},
|
||||
{
|
||||
"name": "Anime Eye Detector (YOLOv8s)",
|
||||
"type": "Ultralytics",
|
||||
"base": "yolov8",
|
||||
"save_path": "ultralytics/bbox",
|
||||
"description": "Anime eye detector (YOLOv8s). Detects eyes in anime-style character art for use with BboxDetectorSEGS/Detailer workflows.",
|
||||
"reference": "https://huggingface.co/killjoyelite/anime-eye-yolov8",
|
||||
"filename": "eye_yolov8s.pt",
|
||||
"url": "https://huggingface.co/killjoyelite/anime-eye-yolov8/resolve/6bceece59aa38f7fe9d3867f3e2931b11c7ff9a1/eye_yolov8s.pt",
|
||||
"size": "22.5MB"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,67 @@
|
||||
{
|
||||
"custom_nodes": [
|
||||
{
|
||||
"author": "magicwang1111",
|
||||
"title": "ComfyUI-GPT-image (OpenAI/Relay) [NAME CONFLICT]",
|
||||
"id": "comfyui-gpt-image-openai-relay",
|
||||
"reference": "https://github.com/magicwang1111/ComfyUI-GPT-image",
|
||||
"files": [
|
||||
"https://github.com/magicwang1111/ComfyUI-GPT-image"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Generate and edit images in ComfyUI with OpenAI GPT Image models. Includes dedicated Generate and Edit nodes, multi-image reference input, size presets, and support for both the official OpenAI API and OpenAI-compatible relay endpoints."
|
||||
},
|
||||
{
|
||||
"author": "Yuan-ManX",
|
||||
"title": "ComfyUI-Bagel [NAME CONFLICT]",
|
||||
"reference": "https://github.com/Yuan-ManX/ComfyUI-Bagel",
|
||||
"files": [
|
||||
"https://github.com/Yuan-ManX/ComfyUI-Bagel"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI-Bagel is now available in ComfyUI, BAGEL is an open‑source multimodal foundation model with 7B active parameters (14B total) trained on large‑scale interleaved multimodal data. [w/Don't install together with neverbiasu/ComfyUI-BAGEL simultaneously.]"
|
||||
},
|
||||
{
|
||||
"author": "liming123332",
|
||||
"title": "ComfyUI-Ranbooru [NAME CONFLICT]",
|
||||
"reference": "https://github.com/liming123332/ComfyUI-Ranbooru",
|
||||
"files": [
|
||||
"https://github.com/liming123332/ComfyUI-Ranbooru"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom node that migrates WebUI Forge's Ranbooru plugin to ComfyUI, enabling searches across Booru sites to generate positive/negative prompts with tag cleaning, rating sorting, and caching support. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "katalist-ai",
|
||||
"title": "comfyUI-nsfw-detection [NAME CONFLICT]",
|
||||
"id": "nsfw-detection",
|
||||
"reference": "https://github.com/katalist-ai/comfyUI-nsfw-detection",
|
||||
"files": [
|
||||
"https://github.com/katalist-ai/comfyUI-nsfw-detection"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: NudenetDetector"
|
||||
},
|
||||
{
|
||||
"author": "AIFSH",
|
||||
"title": "DiffSynth-ComfyUI [NAME CONFLICT]",
|
||||
"reference": "https://github.com/AIFSH/DiffSynth-ComfyUI",
|
||||
"files": [
|
||||
"https://github.com/AIFSH/DiffSynth-ComfyUI"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "a custom node for [a/DiffSynth-Studio](https://github.com/modelscope/DiffSynth-Studio)"
|
||||
},
|
||||
{
|
||||
"author": "flyghtxmz",
|
||||
"title": "ComfyUI-CFG-Ctrl [NAME CONFLICT]",
|
||||
"reference": "https://github.com/flyghtxmz/ComfyUI-CFG-Ctrl",
|
||||
"files": [
|
||||
"https://github.com/flyghtxmz/ComfyUI-CFG-Ctrl"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node implementing SMC-CFG (Sliding Mode Control Classifier-Free Guidance), a nonlinear control-theory approach to CFG that prevents instability and semantic overshooting at high guidance scales. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "trusapien",
|
||||
"title": "ComfyUI-Trusapien",
|
||||
@@ -121,16 +183,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A small pack of utility nodes including CLIP/VAE fallbacks, Anima model detection, and multi image preview.\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "TechnoWarrior2",
|
||||
"title": "comfyui-live-preview [WIP]",
|
||||
"reference": "https://github.com/TechnoWarrior2/comfyui-live-preview",
|
||||
"files": [
|
||||
"https://github.com/TechnoWarrior2/comfyui-live-preview"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI node displaying large floating overlay window with live denoising step previews as image generates, similar to A1111 and Forge.\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "HuajunPeng1982",
|
||||
"title": "comfyui-grsai-storyboard",
|
||||
@@ -561,16 +613,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI utility nodes including SamplerPipeIn, SamplerPipeOut, and VAENames for workflow management. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "pollockjj",
|
||||
"title": "JAXTools",
|
||||
"reference": "https://github.com/pollockjj/ComfyUI-JAXTools",
|
||||
"files": [
|
||||
"https://github.com/pollockjj/ComfyUI-JAXTools"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "JAX-accelerated image processing nodes for ComfyUI via dm_pix sealed worker isolation"
|
||||
},
|
||||
{
|
||||
"author": "ptmff",
|
||||
"title": "ComfyUI-Nodes8734",
|
||||
@@ -971,16 +1013,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A lightweight utility node for ComfyUI that detects aspect ratio of input images and selects preset resolutions with multiplier support.\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "MengYe-Z",
|
||||
"title": "ComfyUI-MultiPointWhiteBalance [WIP]",
|
||||
"reference": "https://github.com/MengYe-Z/ComfyUI-MultiPointWhiteBalance",
|
||||
"files": [
|
||||
"https://github.com/MengYe-Z/ComfyUI-MultiPointWhiteBalance"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A custom node pack for e-commerce product photography with precise white balance and exposure correction using multi-point sampling.\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "Mervent",
|
||||
"title": "comfyui-fast-lut [WIP]",
|
||||
@@ -1181,16 +1213,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Image selector node for ComfyUI.\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "saganaki22",
|
||||
"title": "Kitten-TTS [NAME CONFLICT]",
|
||||
"reference": "https://github.com/Saganaki22/ComfyUI-KittenTTS",
|
||||
"files": [
|
||||
"https://github.com/Saganaki22/ComfyUI-KittenTTS"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node for KittenTTS - Ultra-lightweight text-to-speech (CUDA / CPU)"
|
||||
},
|
||||
{
|
||||
"author": "opj161",
|
||||
"title": "comfyui-comfyui-lmstudio [NAME CONFLICT]",
|
||||
@@ -1853,16 +1875,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI Frontend Vue Basic is custom node that demonstrate how to use vue as frontend framework along with primevue and vue-i18n, cooperating with ComfyUI API. Needs ComfyUI Frontend 1.25.0 or later."
|
||||
},
|
||||
{
|
||||
"author": "vjumpkung",
|
||||
"title": "comfyui-mosaic-blur [NAME CONFLICT]",
|
||||
"reference": "https://github.com/vjumpkung/comfyui-mosaic-blur",
|
||||
"files": [
|
||||
"https://github.com/vjumpkung/comfyui-mosaic-blur"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node for applying mosaic blur effects. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "richardctw",
|
||||
"title": "ComfyUI-ImageFillBackgroundColor",
|
||||
@@ -1913,16 +1925,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: CLIPModelSelectionNode, CLIPVisionModelSelectionNode, CheckpointSelectionNode, DiffusionModelSelectionNode, FilteredCLIPModelsNode, ... (13 total)"
|
||||
},
|
||||
{
|
||||
"author": "pollockjj",
|
||||
"title": "ComfyUI-StabilityTest",
|
||||
"reference": "https://github.com/pollockjj/ComfyUI-StabilityTest",
|
||||
"files": [
|
||||
"https://github.com/pollockjj/ComfyUI-StabilityTest"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI stability testing node. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "Tr1dae",
|
||||
"title": "ComfyUI-MobileSAM [WIP]",
|
||||
@@ -1993,16 +1995,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom ComfyUI nodes for Google Gemini AI with text generation and image generation capabilities using the Python SDK."
|
||||
},
|
||||
{
|
||||
"author": "Saganaki22",
|
||||
"title": "ComfyUI-NovaSR",
|
||||
"reference": "https://github.com/Saganaki22/ComfyUI-NovaSR",
|
||||
"files": [
|
||||
"https://github.com/Saganaki22/ComfyUI-NovaSR"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI node for NovaSR - Ultra-fast audio super resolution (3600x realtime, 50KB model)"
|
||||
},
|
||||
{
|
||||
"author": "GokuHiki",
|
||||
"title": "ComfyUI-Goku-Tools",
|
||||
@@ -2243,16 +2235,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: GetSimilarity, LPIPSSimilarity"
|
||||
},
|
||||
{
|
||||
"author": "StevenBaby",
|
||||
"title": "comfyui-tools",
|
||||
"reference": "https://github.com/StevenBaby/comfyui-tools",
|
||||
"files": [
|
||||
"https://github.com/StevenBaby/comfyui-tools"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "IntParameterNode: A Node contain 4 int parameters to quick switch input to other nodes."
|
||||
},
|
||||
{
|
||||
"author": "zhu798542746",
|
||||
"title": "comfyui_model [UNSAFE]",
|
||||
@@ -2367,6 +2349,7 @@
|
||||
"author": "huhu-tiger",
|
||||
"title": "ComfyUI-RemoteResource",
|
||||
"reference": "https://github.com/huhu-tiger/ComfyUI-RemoteResource",
|
||||
"reference2": "https://github.com/huhu-tiger/ComfyUI-RemoteDownload",
|
||||
"files": [
|
||||
"https://github.com/huhu-tiger/ComfyUI-RemoteResource"
|
||||
],
|
||||
@@ -2693,16 +2676,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node applying image transformations (scaling, rotation, translation) around a pivot point with optional canvas expansion and pivot visualization. (Description by CC)\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "OhSeongHyeon",
|
||||
"title": "comfyui-random-image-size",
|
||||
"reference": "https://github.com/OhSeongHyeon/comfyui-random-image-size",
|
||||
"files": [
|
||||
"https://github.com/OhSeongHyeon/comfyui-random-image-size"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI Random Image Size"
|
||||
},
|
||||
{
|
||||
"author": "Enferlain",
|
||||
"title": "ComfyUI-Model-Comparison [WIP]",
|
||||
@@ -2933,16 +2906,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom node providing customizable prompt generation capabilities. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "JBKing514",
|
||||
"title": "map_comfyui [WIP]",
|
||||
"reference": "https://github.com/JBKing514/map_comfyui",
|
||||
"files": [
|
||||
"https://github.com/JBKing514/map_comfyui"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A custom node implementing the Manifold Alignment Protocol (MAP) within ComfyUI, transforming diffusion sampling into a measurable and visualizable geometric process. (Description by CC)\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "binarystatic",
|
||||
"title": "ComfyUI-BinarystaticMasterSeed",
|
||||
@@ -3253,16 +3216,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A simple ComfyUI node that lets you choose one text from up to 10 inputs.\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "Isi-dev",
|
||||
"title": "ComfyUI_DeleteModelPassthrough_ExecutionFlowControl [WIP]",
|
||||
"reference": "https://github.com/Isi-dev/ComfyUI_DeleteModelPassthrough_ExecutionFlowControl",
|
||||
"files": [
|
||||
"https://github.com/Isi-dev/ComfyUI_DeleteModelPassthrough_ExecutionFlowControl"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Memory management custom node that deletes specific models from VRAM and RAM while passing through other input types unchanged, useful for low-memory environments. (Description by CC)"
|
||||
},
|
||||
{
|
||||
"author": "K1maran",
|
||||
"title": "ComfyUI-Kimaran",
|
||||
@@ -3433,16 +3386,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Quality-of-life utility nodes for ComfyUI providing smart switches for dynamic data routing, path helpers for consistent file naming, and image utilities including Qwen vision model preparation.\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "huhu-tiger",
|
||||
"title": "ComfyUI-RemoteDownload",
|
||||
"reference": "https://github.com/huhu-tiger/ComfyUI-RemoteDownload",
|
||||
"files": [
|
||||
"https://github.com/huhu-tiger/ComfyUI-RemoteDownload"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: LoadImageFromRemote"
|
||||
},
|
||||
{
|
||||
"author": "basenc",
|
||||
"title": "Comfyui-Nodes-basenc [UNSAFE]",
|
||||
@@ -3523,16 +3466,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "This repo has different functions to help dealing with huggingface data"
|
||||
},
|
||||
{
|
||||
"author": "ilslli",
|
||||
"title": "Comfyui-IV2Z",
|
||||
"reference": "https://github.com/ilslli/Comfyui-IV2Z",
|
||||
"files": [
|
||||
"https://github.com/ilslli/Comfyui-IV2Z"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Modify the VideoCombine node of [a/ComfyUI-VideoHelperSuite](https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite) so that, after encoding the video, it outputs the result as a compressed archive."
|
||||
},
|
||||
{
|
||||
"author": "PladsElsker",
|
||||
"title": "comfyui-krita [WIP]",
|
||||
@@ -3624,16 +3557,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: 'URL: Load Media', 'Image: Save To Disk (No UI)', 'S3: Upload Presigned', ..."
|
||||
},
|
||||
{
|
||||
"author": "akashch1512",
|
||||
"title": "ComfyUI_UguuUploader",
|
||||
"reference": "https://github.com/akashch1512/ComfyUI_UguuUploader",
|
||||
"files": [
|
||||
"https://github.com/akashch1512/ComfyUI_UguuUploader"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: Uguu.se Video Uploader\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "vadimcro",
|
||||
"title": "string_by_index",
|
||||
@@ -4426,16 +4349,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: S3 Upload File, File Explorer, Save Image Export Path, Save Video Export Path, Save Audio Export Path, S3 Combine Images to Video, Multi-Line Text Input, ...\nNOTE: The files in the repo are not organized.[w/This extension has a vulnerability that allows arbitrary access to local files from remote.]"
|
||||
},
|
||||
{
|
||||
"author": "kesslerdev",
|
||||
"title": "Comfyui : kesslerdev_comfyui_nodes [UNSAFE]",
|
||||
"reference": "https://github.com/kesslerdev/kesslerdev_comfyui_nodes",
|
||||
"files": [
|
||||
"https://github.com/kesslerdev/kesslerdev_comfyui_nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: Multiline Text Choice (Kesslerdev), Environment Variable Getter (Kesslerdev)[w/This nodepack includes a node that can remotely read arbitrary environment variables.]"
|
||||
},
|
||||
{
|
||||
"author": "panchovial-max",
|
||||
"title": "ComfyUI-ListHelper [NAME CONFLICT]",
|
||||
@@ -4987,16 +4900,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI custom node implementation of ByteDance's USO (Unified Style and Subject-Driven Generation) model, which enables advanced style transfer and subject preservation using FLUX.\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "numq",
|
||||
"title": "comfyui-camera-capture-node",
|
||||
"reference": "https://github.com/numq/comfyui-camera-capture-node",
|
||||
"files": [
|
||||
"https://github.com/numq/comfyui-camera-capture-node"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: Camera Capture"
|
||||
},
|
||||
{
|
||||
"author": "pickles",
|
||||
"title": "PyPromptGenerator [UNSAFE]",
|
||||
@@ -5097,16 +5000,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: INT Constant, Simple Int Math Handle, Simple Json Array Handle, Simple Json Object Handle, Select Image Size, Video Time & FPS, Video Frame Size, Wan22 Step Handle, Prompt Selector String, Prompt Example Node, Prompt Join or List, Prompt List, CRD Audio Length Node, ..."
|
||||
},
|
||||
{
|
||||
"author": "Saganaki22",
|
||||
"title": "ComfyUI YTDL Nodes [WIP]",
|
||||
"reference": "https://github.com/Saganaki22/ComfyUI-ytdl_nodes",
|
||||
"files": [
|
||||
"https://github.com/Saganaki22/ComfyUI-ytdl_nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom ComfyUI nodes for downloading, converting, and previewing audio/video from YouTube and 1,000+ other platforms"
|
||||
},
|
||||
{
|
||||
"author": "comfyscript",
|
||||
"title": "ComfyUI-CloudClient",
|
||||
@@ -5127,16 +5020,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A custom node for ComfyUI that automatically uploads generated images to SharePoint or OneDrive document libraries.[w/This nodepack contains a node that can write files to an arbitrary path.]"
|
||||
},
|
||||
{
|
||||
"author": "KoinnAI",
|
||||
"title": "ComfyUI Dynamic Prompting Simplified [WIP]",
|
||||
"reference": "https://github.com/KoinnAI/ComfyUI-DynPromptSimplified",
|
||||
"files": [
|
||||
"https://github.com/KoinnAI/ComfyUI-DynPromptSimplified"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A minimal dynamic prompting + mirrored wildcards node for ComfyUI.\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "jtrue",
|
||||
"title": "MaskTools",
|
||||
@@ -5528,16 +5411,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "This custom node Qwen3 designed to integrate with a GPT-based system under the category GPT_QWEN/Qwen. It serves as an interface to interact with the Qwen language model, specifically the 'Qwen/Qwen3-4B-Instruct-2507' variant."
|
||||
},
|
||||
{
|
||||
"author": "MatthewClayHarrison",
|
||||
"title": "MetaMan - Universal AI Image Metadata Manager [UNSAFE]",
|
||||
"reference": "https://github.com/MatthewClayHarrison/ComfyUI-MetaMan",
|
||||
"files": [
|
||||
"https://github.com/MatthewClayHarrison/ComfyUI-MetaMan"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "First universal metadata system for AI image generation, with template-driven architecture allowing easy extension to new services; comprehensive dependency tracking with automatic download resolution; lossless conversion between platform formats where possible; future-proof design with extensible schema and validation system.[w/This nodepack has a vulnerability that allows remote access to arbitrary file paths.]"
|
||||
},
|
||||
{
|
||||
"author": "idoru",
|
||||
"title": "Filestash Upload Node [UNSAFE]",
|
||||
@@ -5908,16 +5781,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "This is a text translation node using a local SLM (Microsoft Phi-4) for ComfyUI."
|
||||
},
|
||||
{
|
||||
"author": "DenRakEiw",
|
||||
"title": "Denrakeiw Nodes [WIP]",
|
||||
"reference": "https://github.com/DenRakEiw/DenRakEiw_Nodes",
|
||||
"files": [
|
||||
"https://github.com/DenRakEiw/DenRakEiw_Nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A custom nodepack for ComfyUI that provides utility nodes for image generation and manipulation.\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "ahmedbana",
|
||||
"title": "json-creator [WIP]",
|
||||
@@ -6398,16 +6261,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: Whisper + AudioTranslate, Google Translate Node"
|
||||
},
|
||||
{
|
||||
"author": "edgerunner",
|
||||
"title": "ComfyUI Queue Manager [WIP]",
|
||||
"reference": "https://github.com/QuietNoise/ComfyUI-Queue-Manager",
|
||||
"files": [
|
||||
"https://github.com/QuietNoise/ComfyUI-Queue-Manager"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "An extension supporting more streamlined prompt queue management."
|
||||
},
|
||||
{
|
||||
"author": "fylrid2",
|
||||
"title": "lockValue",
|
||||
@@ -7180,16 +7033,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: Random Line from File (Seeded), Keyword Prompt Composer, Simple Prompt Combiner (5x), Boolean Switch (Any), Select Line from TxT (Any), Multiline Text Input, Flux 2M Aspect Ratios, SDXL Aspect Ratios, Room Mapper, ..."
|
||||
},
|
||||
{
|
||||
"author": "pacchikAI",
|
||||
"title": "ImagePromptBatch [UNSAFE]",
|
||||
"reference": "https://github.com/pacchikAI/ImagePromptBatch",
|
||||
"files": [
|
||||
"https://github.com/pacchikAI/ImagePromptBatch"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: Load Image and Prompt[w/This includes a node that can read the contents of a `.csv` file from an arbitrary path.]"
|
||||
},
|
||||
{
|
||||
"author": "papcorns",
|
||||
"title": "ComfyUI-Papcorns-Node-UploadToGCS",
|
||||
@@ -7900,16 +7743,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI extensions for sending prompt progress to webhook"
|
||||
},
|
||||
{
|
||||
"author": "ashllay",
|
||||
"title": "ComfyUI_MoreComfy",
|
||||
"reference": "https://github.com/ashllay/ComfyUI_MoreComfy",
|
||||
"files": [
|
||||
"https://github.com/ashllay/ComfyUI_MoreComfy"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: MC Switch Seed/Image/Latent/Model/String, MC Alter Seed, MC Set Tile Size, MC Get Image Size, MC Multi Concat"
|
||||
},
|
||||
{
|
||||
"author": "gordon1chuge2623",
|
||||
"title": "ComfyUI_seal_migration [WIP]",
|
||||
@@ -8080,16 +7913,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: Add Text To Image, Adjust Hex Brightness, Adjust Transparency By Mask, Align Images with Mask, Align Restore Json, Binarize Mask, Blend ICLight, ..."
|
||||
},
|
||||
{
|
||||
"author": "alexgenovese",
|
||||
"title": "ComfyUI-Reica",
|
||||
"reference": "https://github.com/alexgenovese/ComfyUI-Reica",
|
||||
"files": [
|
||||
"https://github.com/alexgenovese/ComfyUI-Reica"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: Reica Text Image Display, Flux Image Generator, Reica GCP: Read Image, Reica GCP: Write Image & Get URL, Reica API: Send HTTP Notification"
|
||||
},
|
||||
{
|
||||
"author": "Stable-X",
|
||||
"title": "ComfyUI-Hi3DGen",
|
||||
@@ -8201,16 +8024,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: Provides nodes to execute arbitrary Python code snippets and Resize images directly within ComfyUI workflows. [w/This node allows you to execute arbitrary code via the workflow.]"
|
||||
},
|
||||
{
|
||||
"author": "ashllay",
|
||||
"title": "ComfyUI_MoreComfy",
|
||||
"reference": "https://github.com/ashllay/ComfyUI_MoreComfy",
|
||||
"files": [
|
||||
"https://github.com/ashllay/ComfyUI_MoreComfy"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: MC Switch Seed, MC Alter Seed, MC Set Tile Size, MC Multi Concat"
|
||||
},
|
||||
{
|
||||
"author": "ayaoayaoayaoaya",
|
||||
"title": "ComfyUI-KLUT-DeepSeek-API [WIP]",
|
||||
@@ -8311,16 +8124,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A lightweight nodepack for ComfyUI that adds a few handy nodes that I use in my workflows"
|
||||
},
|
||||
{
|
||||
"author": "CeeVeeR",
|
||||
"title": "ComfyUi-Text-Tiler",
|
||||
"reference": "https://github.com/CeeVeeR/ComfyUi-Text-Tiler",
|
||||
"files": [
|
||||
"https://github.com/CeeVeeR/ComfyUi-Text-Tiler"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: Text Tiler"
|
||||
},
|
||||
{
|
||||
"author": "Dreamshot-io",
|
||||
"title": "ComfyUI-Extend-Resolution",
|
||||
@@ -8832,26 +8635,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: Add Grid Boundaries, Pack Frames, Unpack Frames, Resize Frame"
|
||||
},
|
||||
{
|
||||
"author": "Northerner1",
|
||||
"title": "ComfyUI_North_Noise [WIP]",
|
||||
"reference": "https://github.com/Northerner1/ComfyUI_North_Noise",
|
||||
"files": [
|
||||
"https://github.com/Northerner1/ComfyUI_North_Noise"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: Unsampler"
|
||||
},
|
||||
{
|
||||
"author": "kimara-ai",
|
||||
"title": "ComfyUI-Kimara-AI-Image-From-URL [WIP]",
|
||||
"reference": "https://github.com/kimara-ai/ComfyUI-Kimara-AI-Image-From-URL",
|
||||
"files": [
|
||||
"https://github.com/kimara-ai/ComfyUI-Kimara-AI-Image-From-URL"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Load image from URL and downscale to desired megapixels. Set megapixels to 0 for no downscaling."
|
||||
},
|
||||
{
|
||||
"author": "tc8M4lF3s88",
|
||||
"title": "comfy-tif-support",
|
||||
@@ -9684,16 +9467,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A set of nodes to edit videos using the Hunyuan Video model"
|
||||
},
|
||||
{
|
||||
"author": "watarika",
|
||||
"title": "ComfyUI-exit [UNSAFE]",
|
||||
"reference": "https://github.com/watarika/ComfyUI-exit",
|
||||
"files": [
|
||||
"https://github.com/watarika/ComfyUI-exit"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A custom node that terminates ComfyUI after a specified number of seconds. Use this node if you want Google Colab to automatically terminate after mass generation. It is necessary to disconnect and delete the Google Colab runtime on the Notebook side."
|
||||
},
|
||||
{
|
||||
"author": "backearth1",
|
||||
"title": "Comfyui-MiniMax-Video [WIP]",
|
||||
@@ -9845,16 +9618,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: SaveImageOSS."
|
||||
},
|
||||
{
|
||||
"author": "Matrix-King-Studio",
|
||||
"title": "ComfyUI-MoviePy",
|
||||
"reference": "https://github.com/Matrix-King-Studio/ComfyUI-MoviePy",
|
||||
"files": [
|
||||
"https://github.com/Matrix-King-Studio/ComfyUI-MoviePy"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES: Image Clip Node, Audio Duration Node, Save Video Node,..."
|
||||
},
|
||||
{
|
||||
"author": "Big Idea Technology",
|
||||
"title": "ComfyUI-Movie-Tools [WIP]",
|
||||
@@ -10189,16 +9952,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "NODES:LETM Save Image, ETM Load Image From Local"
|
||||
},
|
||||
{
|
||||
"author": "m-ai-studio",
|
||||
"title": "mai-prompt-progress",
|
||||
"reference": "https://github.com/m-ai-studio/mai-prompt-progress",
|
||||
"files": [
|
||||
"https://github.com/m-ai-studio/mai-prompt-progress"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI extensions for sending prompt progress to webhook"
|
||||
},
|
||||
{
|
||||
"author": "neeltheninja",
|
||||
"title": "ComfyUI-TempFileDeleter [UNSAFE]",
|
||||
@@ -10413,16 +10166,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "comfyui-photobooth-customnode"
|
||||
},
|
||||
{
|
||||
"author": "netanelben",
|
||||
"title": "comfyui-text2image-customnode",
|
||||
"reference": "https://github.com/netanelben/comfyui-text2image-customnode",
|
||||
"files": [
|
||||
"https://github.com/netanelben/comfyui-text2image-customnode"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "comfyui-text2image-customnode"
|
||||
},
|
||||
{
|
||||
"author": "netanelben",
|
||||
"title": "comfyui-camera2image-customnode",
|
||||
@@ -10836,16 +10579,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "A powerful debugging tool designed to provide in-depth analysis of your environment and dependencies by exposing API endpoints. This tool allows you to inspect environment variables, pip packages, python info and dependency trees, making it easier to diagnose and resolve issues in your ComfyUI setup.[w/This tool may expose sensitive system information if used on a public server]"
|
||||
},
|
||||
{
|
||||
"author": "denislov",
|
||||
"title": "Comfyui_AutoSurvey",
|
||||
"reference": "https://github.com/denislov/Comfyui_AutoSurvey",
|
||||
"files": [
|
||||
"https://github.com/denislov/Comfyui_AutoSurvey"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes:AutoSurvey, WriteOutline, WriteSection, ChatModel, QueryKnowledge, ManageDatabase, AddDoc2Knowledge"
|
||||
},
|
||||
{
|
||||
"author": "leoleelxh",
|
||||
"title": "ComfyUI-MidjourneyNode-leoleexh",
|
||||
@@ -11205,17 +10938,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes:Lora Block Weight Regex Loader"
|
||||
},
|
||||
{
|
||||
"author": "jtydhr88",
|
||||
"title": "ComfyUI-Unique3D [WIP]",
|
||||
"id": "unique3d",
|
||||
"reference": "https://github.com/jtydhr88/ComfyUI-Unique3D",
|
||||
"files": [
|
||||
"https://github.com/jtydhr88/ComfyUI-Unique3D"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI Unique3D is custom nodes that running [a/AiuniAI/Unique3D](https://github.com/AiuniAI/Unique3D) into ComfyUI."
|
||||
},
|
||||
{
|
||||
"author": "kycg",
|
||||
"title": "comfyui-Kwtoolset",
|
||||
@@ -11238,16 +10960,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "This Python script is an optional add-on to the Comfy UI stable diffusion client."
|
||||
},
|
||||
{
|
||||
"author": "immersiveexperience",
|
||||
"title": "ie-comfyui-color-nodes",
|
||||
"reference": "https://github.com/immersiveexperience/ie-comfyui-color-nodes",
|
||||
"files": [
|
||||
"https://github.com/immersiveexperience/ie-comfyui-color-nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom ComfyUI nodes for simple color correction."
|
||||
},
|
||||
{
|
||||
"author": "LZpenguin",
|
||||
"title": "ComfyUI-Text",
|
||||
@@ -11552,16 +11264,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI extensions for better [a/Captain](https://github.com/blib-la/captain) integration."
|
||||
},
|
||||
{
|
||||
"author": "ejektaflex",
|
||||
"title": "ComfyUI-Ty",
|
||||
"reference": "https://github.com/ejektaflex/ComfyUI-Ty",
|
||||
"files": [
|
||||
"https://github.com/ejektaflex/ComfyUI-Ty"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes:Lora Block Weight Regex Loader"
|
||||
},
|
||||
{
|
||||
"author": "christian-byrne",
|
||||
"title": "Python Interpreter ComfyUI Node [UNSAFE]",
|
||||
@@ -11683,16 +11385,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "[a/https://huggingface.co/deepseek-ai](https://huggingface.co/deepseek-ai)"
|
||||
},
|
||||
{
|
||||
"author": "GentlemanHu",
|
||||
"title": "ComfyUI-Notifier",
|
||||
"reference": "https://github.com/GentlemanHu/ComfyUI-Notifier",
|
||||
"files": [
|
||||
"https://github.com/GentlemanHu/ComfyUI-Notifier"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes:GentlemanHu_Notifier"
|
||||
},
|
||||
{
|
||||
"author": "nat-chan",
|
||||
"title": "Transceiver📡",
|
||||
@@ -11893,16 +11585,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes:GH Tools Image Sizer, GH Tools Simple Scale. Simple quality of life Tools for ComfyUI. Basically, If it makes my life easier, it will be here. The list will grow over time."
|
||||
},
|
||||
{
|
||||
"author": "Beinsezii",
|
||||
"title": "comfyui-amd-go-fast",
|
||||
"reference": "https://github.com/Beinsezii/comfyui-amd-go-fast",
|
||||
"files": [
|
||||
"https://github.com/Beinsezii/comfyui-amd-go-fast"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "See details: [a/link](https://github.com/Beinsezii/comfyui-amd-go-fast?tab=readme-ov-file)"
|
||||
},
|
||||
{
|
||||
"author": "SeedV",
|
||||
"title": "ComfyUI-SeedV-Nodes [UNSAFE]",
|
||||
|
||||
+453
-286
File diff suppressed because it is too large
Load Diff
+1415
-1625
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+1470
-34
File diff suppressed because it is too large
Load Diff
+2957
-1190
File diff suppressed because it is too large
Load Diff
@@ -349,7 +349,7 @@ class HtmlByDesignSinkTest(unittest.TestCase):
|
||||
'"");',
|
||||
'"");',
|
||||
'`<span>Selected <b>${selectedList.length}</b> models <button '
|
||||
'class="cmm-btn-install p-button p-component" mode="install">Install</button>`);',
|
||||
'class="cmm-btn-install cm-ui-button" mode="install">Install</button>`);',
|
||||
],
|
||||
"node-usage-analyzer.js": [
|
||||
'"");',
|
||||
|
||||
Reference in New Issue
Block a user