mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-02-15 16:02:32 +08:00
bugfix of 'send to img' feature
* FIXED: change 'required' to 'widget' for 'recv img', 'send to img' * FIXED: await while copying file * FIXED: use node.images[0].filename instead imageWidget.value
This commit is contained in:
parent
1da4ea5898
commit
8865ea16b7
15
nodes.py
15
nodes.py
@ -724,9 +724,8 @@ class SaveImage:
|
|||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
return {"required":
|
return {"required":
|
||||||
{"images": ("IMAGE", ),
|
{"images": ("IMAGE", ),
|
||||||
"filename_prefix": ("STRING", {"default": "ComfyUI"}),
|
"filename_prefix": ("STRING", {"default": "ComfyUI"}) },
|
||||||
"send to img": ("IMAGESEND", )
|
"widget": {"send to img": ("IMAGESEND", )},
|
||||||
},
|
|
||||||
"hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"},
|
"hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -807,10 +806,8 @@ class LoadImage:
|
|||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
if not os.path.exists(s.input_dir):
|
if not os.path.exists(s.input_dir):
|
||||||
os.makedirs(s.input_dir)
|
os.makedirs(s.input_dir)
|
||||||
return {"required":
|
return {"required": {"image": (sorted(os.listdir(s.input_dir)), ) },
|
||||||
{"image": (sorted(os.listdir(s.input_dir)), ),
|
"widget": {"recv img": (["disable", "enable"], ) }
|
||||||
"recv img": (["disable", "enable"], )
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CATEGORY = "image"
|
CATEGORY = "image"
|
||||||
@ -844,8 +841,8 @@ class LoadImageMask:
|
|||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
return {"required":
|
return {"required":
|
||||||
{"image": (sorted(os.listdir(s.input_dir)), ),
|
{"image": (sorted(os.listdir(s.input_dir)), ),
|
||||||
"recv img": (["disable", "enable"], ),
|
"channel": (["alpha", "red", "green", "blue"], ),},
|
||||||
"channel": (["alpha", "red", "green", "blue"], ),}
|
"widget": {"recv img": (["disable", "enable"], ) }
|
||||||
}
|
}
|
||||||
|
|
||||||
CATEGORY = "image"
|
CATEGORY = "image"
|
||||||
|
|||||||
@ -576,6 +576,25 @@ class ComfyApp {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// widget type: visible. but prevent pass inputData to node function
|
||||||
|
const input_widgets = nodeData["input"]["widget"];
|
||||||
|
for (const inputName in input_widgets) {
|
||||||
|
const inputData = input_widgets[inputName];
|
||||||
|
const type = inputData[0];
|
||||||
|
|
||||||
|
if (Array.isArray(type)) {
|
||||||
|
// Enums e.g. latent rotation
|
||||||
|
let defaultValue = type[0];
|
||||||
|
if (inputData[1] && inputData[1].default) {
|
||||||
|
defaultValue = inputData[1].default;
|
||||||
|
}
|
||||||
|
this.addWidget("combo", inputName, defaultValue, () => {}, { values: type });
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Object.assign(config, widgets[type](this, inputName, inputData, app) || {});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (const output of nodeData["output"]) {
|
for (const output of nodeData["output"]) {
|
||||||
this.addOutput(output, output);
|
this.addOutput(output, output);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -30,6 +30,50 @@ function seedWidget(node, inputName, inputData) {
|
|||||||
return { widget: seed, randomize };
|
return { widget: seed, randomize };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function imagesendWidget(node, inputName, inputData, app) {
|
||||||
|
function showImage(node,uploadWidget,name) {
|
||||||
|
// Position the image somewhere sensible
|
||||||
|
if (!node.imageOffset) {
|
||||||
|
node.imageOffset = uploadWidget.last_y ? uploadWidget.last_y + 25 : 75;
|
||||||
|
}
|
||||||
|
|
||||||
|
const img = new Image();
|
||||||
|
img.onload = () => {
|
||||||
|
node.imgs = [img];
|
||||||
|
app.graph.setDirtyCanvas(true);
|
||||||
|
};
|
||||||
|
img.src = `/view?filename=${name}&type=input`;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function callback() {
|
||||||
|
if(node.images.length < 1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
const image_name = node.images[0].filename;
|
||||||
|
const copied = false;
|
||||||
|
|
||||||
|
for(let i in app.graph._nodes) {
|
||||||
|
var n = app.graph._nodes[i];
|
||||||
|
if(n.type == "LoadImage" || n.type == "LoadImageMask") {
|
||||||
|
const recvWidget = n.widgets.find((w) => w.name === "recv img");
|
||||||
|
|
||||||
|
if(recvWidget.value == "enable") {
|
||||||
|
// copy current node image to 'recv img' enabled node
|
||||||
|
|
||||||
|
if(!copied) {
|
||||||
|
await api.sendOutputToInputImage(image_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
const thatImageWidget = n.widgets.find((w) => w.value === "image");
|
||||||
|
await showImage(n,thatImageWidget,image_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return { widget: node.addWidget("button", inputName, "", () => { callback(); }, {}) };
|
||||||
|
}
|
||||||
|
|
||||||
function addMultilineWidget(node, name, defaultVal, app) {
|
function addMultilineWidget(node, name, defaultVal, app) {
|
||||||
const widget = {
|
const widget = {
|
||||||
type: "customtext",
|
type: "customtext",
|
||||||
@ -129,47 +173,7 @@ export const ComfyWidgets = {
|
|||||||
return { widget: node.addWidget("text", inputName, defaultVal, () => {}, {}) };
|
return { widget: node.addWidget("text", inputName, defaultVal, () => {}, {}) };
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
IMAGESEND(node, inputName) {
|
IMAGESEND:imagesendWidget,
|
||||||
function showImage(node,uploadWidget,name) {
|
|
||||||
// Position the image somewhere sensible
|
|
||||||
if (!node.imageOffset) {
|
|
||||||
node.imageOffset = uploadWidget.last_y ? uploadWidget.last_y + 25 : 75;
|
|
||||||
}
|
|
||||||
|
|
||||||
const img = new Image();
|
|
||||||
img.onload = () => {
|
|
||||||
node.imgs = [img];
|
|
||||||
app.graph.setDirtyCanvas(true);
|
|
||||||
};
|
|
||||||
img.src = `/view?filename=${name}&type=input`;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function callback() {
|
|
||||||
const imageWidget = node.widgets.find((w) => w.name === "image");
|
|
||||||
|
|
||||||
const copied = false;
|
|
||||||
|
|
||||||
for(let i in app.graph._nodes) {
|
|
||||||
var n = app.graph._nodes[i];
|
|
||||||
if(n.type == "LoadImage" || n.type == "LoadImageMask") {
|
|
||||||
const recvWidget = n.widgets.find((w) => w.name === "recv img");
|
|
||||||
|
|
||||||
if(recvWidget.value == "enable") {
|
|
||||||
// copy current node image to 'recv img' enabled node
|
|
||||||
|
|
||||||
if(!copied) {
|
|
||||||
api.sendOutputToInputImage(imageWidget.value);
|
|
||||||
}
|
|
||||||
|
|
||||||
const thatImageWidget = n.widgets.find((w) => w.value === "image");
|
|
||||||
await showImage(n,thatImageWidget,imageWidget.value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return { widget: node.addWidget("button", inputName, "", () => { callback(); }, {}) };
|
|
||||||
},
|
|
||||||
IMAGEUPLOAD(node, inputName, inputData, app) {
|
IMAGEUPLOAD(node, inputName, inputData, app) {
|
||||||
const imageWidget = node.widgets.find((w) => w.name === "image");
|
const imageWidget = node.widgets.find((w) => w.name === "image");
|
||||||
let uploadWidget;
|
let uploadWidget;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user