mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-01-31 00:30:21 +08:00
don't copy image for img-send feature
This commit is contained in:
parent
f950d78dc8
commit
82f710582c
@ -247,7 +247,9 @@ def validate_inputs(prompt, item):
|
|||||||
|
|
||||||
if isinstance(type_input, list):
|
if isinstance(type_input, list):
|
||||||
if val not in type_input:
|
if val not in type_input:
|
||||||
return (False, "Value not in list. {}, {}: {} not in {}".format(class_type, x, val, type_input))
|
# bypass validation on special output
|
||||||
|
if not val.endswith(" [OUT]") and not val.endswith(" [TEMP]"):
|
||||||
|
return (False, "Value not in list. {}, {}: {} not in {}".format(class_type, x, val, type_input))
|
||||||
return (True, "")
|
return (True, "")
|
||||||
|
|
||||||
def validate_prompt(prompt):
|
def validate_prompt(prompt):
|
||||||
|
|||||||
25
nodes.py
25
nodes.py
@ -730,7 +730,7 @@ class SaveImage:
|
|||||||
"hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"},
|
"hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"},
|
||||||
}
|
}
|
||||||
|
|
||||||
WIDGET_TYPES = {"send to img": ("IMAGESEND", )}
|
WIDGET_TYPES = {"send to img": ("IMAGESEND", "OUT")}
|
||||||
|
|
||||||
RETURN_TYPES = ()
|
RETURN_TYPES = ()
|
||||||
FUNCTION = "save_images"
|
FUNCTION = "save_images"
|
||||||
@ -810,8 +810,12 @@ class PreviewImage(SaveImage):
|
|||||||
"hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"},
|
"hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WIDGET_TYPES = {"send to img": ("IMAGESEND", "TEMP")}
|
||||||
|
|
||||||
class LoadImage:
|
class LoadImage:
|
||||||
input_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "input")
|
input_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "input")
|
||||||
|
output_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "output")
|
||||||
|
temp_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "temp")
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
if not os.path.exists(s.input_dir):
|
if not os.path.exists(s.input_dir):
|
||||||
@ -826,8 +830,17 @@ class LoadImage:
|
|||||||
|
|
||||||
RETURN_TYPES = ("IMAGE", "MASK")
|
RETURN_TYPES = ("IMAGE", "MASK")
|
||||||
FUNCTION = "load_image"
|
FUNCTION = "load_image"
|
||||||
|
|
||||||
|
def get_image_path(self, image):
|
||||||
|
if image.endswith(" [OUT]"):
|
||||||
|
return os.path.join(self.output_dir, image[:-6])
|
||||||
|
elif image.endswith(" [TEMP]"):
|
||||||
|
return os.path.join(self.temp_dir, image[:-7])
|
||||||
|
else:
|
||||||
|
return os.path.join(self.input_dir, image)
|
||||||
|
|
||||||
def load_image(self, image):
|
def load_image(self, image):
|
||||||
image_path = os.path.join(self.input_dir, image)
|
image_path = LoadImage.get_image_path(self, image)
|
||||||
i = Image.open(image_path)
|
i = Image.open(image_path)
|
||||||
image = i.convert("RGB")
|
image = i.convert("RGB")
|
||||||
image = np.array(image).astype(np.float32) / 255.0
|
image = np.array(image).astype(np.float32) / 255.0
|
||||||
@ -841,7 +854,7 @@ class LoadImage:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def IS_CHANGED(s, image):
|
def IS_CHANGED(s, image):
|
||||||
image_path = os.path.join(s.input_dir, image)
|
image_path = LoadImage.get_image_path(s, image)
|
||||||
m = hashlib.sha256()
|
m = hashlib.sha256()
|
||||||
with open(image_path, 'rb') as f:
|
with open(image_path, 'rb') as f:
|
||||||
m.update(f.read())
|
m.update(f.read())
|
||||||
@ -849,6 +862,8 @@ class LoadImage:
|
|||||||
|
|
||||||
class LoadImageMask:
|
class LoadImageMask:
|
||||||
input_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "input")
|
input_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "input")
|
||||||
|
output_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "output")
|
||||||
|
temp_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "temp")
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
return {"required":
|
return {"required":
|
||||||
@ -863,7 +878,7 @@ class LoadImageMask:
|
|||||||
RETURN_TYPES = ("MASK",)
|
RETURN_TYPES = ("MASK",)
|
||||||
FUNCTION = "load_image"
|
FUNCTION = "load_image"
|
||||||
def load_image(self, image, channel):
|
def load_image(self, image, channel):
|
||||||
image_path = os.path.join(self.input_dir, image)
|
image_path = LoadImage.get_image_path(self, image)
|
||||||
i = Image.open(image_path)
|
i = Image.open(image_path)
|
||||||
mask = None
|
mask = None
|
||||||
c = channel[0].upper()
|
c = channel[0].upper()
|
||||||
@ -878,7 +893,7 @@ class LoadImageMask:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def IS_CHANGED(s, image, channel):
|
def IS_CHANGED(s, image, channel):
|
||||||
image_path = os.path.join(s.input_dir, image)
|
image_path = LoadImage.get_image_path(s, image)
|
||||||
m = hashlib.sha256()
|
m = hashlib.sha256()
|
||||||
with open(image_path, 'rb') as f:
|
with open(image_path, 'rb') as f:
|
||||||
m.update(f.read())
|
m.update(f.read())
|
||||||
|
|||||||
12
server.py
12
server.py
@ -7,7 +7,6 @@ import execution
|
|||||||
import uuid
|
import uuid
|
||||||
import json
|
import json
|
||||||
import glob
|
import glob
|
||||||
from shutil import copyfile
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import aiohttp
|
import aiohttp
|
||||||
@ -88,17 +87,6 @@ class PromptServer():
|
|||||||
files = glob.glob(os.path.join(self.web_root, 'extensions/**/*.js'), recursive=True)
|
files = glob.glob(os.path.join(self.web_root, 'extensions/**/*.js'), recursive=True)
|
||||||
return web.json_response(list(map(lambda f: "/" + os.path.relpath(f, self.web_root).replace("\\", "/"), files)))
|
return web.json_response(list(map(lambda f: "/" + os.path.relpath(f, self.web_root).replace("\\", "/"), files)))
|
||||||
|
|
||||||
@routes.get("/image/output_to_input/{name}")
|
|
||||||
async def copy_output_to_input_image(request):
|
|
||||||
name = request.match_info["name"]
|
|
||||||
|
|
||||||
src_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "output", name)
|
|
||||||
dest_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "input", name)
|
|
||||||
|
|
||||||
copyfile(src_dir,dest_dir)
|
|
||||||
|
|
||||||
return web.Response(status=200)
|
|
||||||
|
|
||||||
@routes.post("/upload/image")
|
@routes.post("/upload/image")
|
||||||
async def upload_image(request):
|
async def upload_image(request):
|
||||||
upload_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "input")
|
upload_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "input")
|
||||||
|
|||||||
@ -47,7 +47,7 @@ function seedWidget(node, inputName, inputData) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function imagesendWidget(node, inputName, inputData, app) {
|
function imagesendWidget(node, inputName, inputData, app) {
|
||||||
function showImage(node,uploadWidget,name) {
|
function showImage(node,uploadWidget,name,type) {
|
||||||
// Position the image somewhere sensible
|
// Position the image somewhere sensible
|
||||||
if (!node.imageOffset) {
|
if (!node.imageOffset) {
|
||||||
node.imageOffset = uploadWidget.last_y ? uploadWidget.last_y + 50 : 100;
|
node.imageOffset = uploadWidget.last_y ? uploadWidget.last_y + 50 : 100;
|
||||||
@ -58,7 +58,13 @@ function imagesendWidget(node, inputName, inputData, app) {
|
|||||||
node.imgs = [img];
|
node.imgs = [img];
|
||||||
app.graph.setDirtyCanvas(true);
|
app.graph.setDirtyCanvas(true);
|
||||||
};
|
};
|
||||||
img.src = `/view?filename=${name}&type=input`;
|
|
||||||
|
if(type == "OUT")
|
||||||
|
img.src = `/view?filename=${name}&type=output`;
|
||||||
|
else if(type == "TEMP")
|
||||||
|
img.src = `/view?filename=${name}&type=temp`;
|
||||||
|
else
|
||||||
|
img.src = `/view?filename=${name}&type=input`;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function callback() {
|
async function callback() {
|
||||||
@ -75,15 +81,9 @@ function imagesendWidget(node, inputName, inputData, app) {
|
|||||||
const recvWidget = n.widgets.find((w) => w.name === "recv img");
|
const recvWidget = n.widgets.find((w) => w.name === "recv img");
|
||||||
|
|
||||||
if(recvWidget.value == "enable") {
|
if(recvWidget.value == "enable") {
|
||||||
// copy current node image to 'recv img' enabled node
|
imageWidget.value = image_name + ` [${inputData[1]}]`;
|
||||||
|
|
||||||
if(!copied) {
|
|
||||||
await api.sendOutputToInputImage(image_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
imageWidget.value = image_name;
|
|
||||||
const thatImageWidget = n.widgets.find((w) => w.value === "image");
|
const thatImageWidget = n.widgets.find((w) => w.value === "image");
|
||||||
await showImage(n,thatImageWidget,image_name);
|
await showImage(n,thatImageWidget,image_name,inputData[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user