Add a disabled SaveImageWebsocket custom node.
This node can be used to efficiently get images without saving them to disk when using ComfyUI as a backend.
This commit is contained in:
parent
38b7ac6e26
commit
7f89cb48bf
|
@ -0,0 +1,49 @@
|
||||||
|
from PIL import Image, ImageOps
|
||||||
|
from io import BytesIO
|
||||||
|
import numpy as np
|
||||||
|
import struct
|
||||||
|
import comfy.utils
|
||||||
|
import time
|
||||||
|
|
||||||
|
#You can use this node to save full size images through the websocket, the
|
||||||
|
#images will be sent in exactly the same format as the image previews: as
|
||||||
|
#binary images on the websocket with a 8 byte header indicating the type
|
||||||
|
#of binary message (first 4 bytes) and the image format (next 4 bytes).
|
||||||
|
|
||||||
|
#The reason this node is disabled by default is because there is a small
|
||||||
|
#issue when using it with the default ComfyUI web interface: When generating
|
||||||
|
#batches only the last image will be shown in the UI.
|
||||||
|
|
||||||
|
#Note that no metadata will be put in the images saved with this node.
|
||||||
|
|
||||||
|
class SaveImageWebsocket:
|
||||||
|
@classmethod
|
||||||
|
def INPUT_TYPES(s):
|
||||||
|
return {"required":
|
||||||
|
{"images": ("IMAGE", ),}
|
||||||
|
}
|
||||||
|
|
||||||
|
RETURN_TYPES = ()
|
||||||
|
FUNCTION = "save_images"
|
||||||
|
|
||||||
|
OUTPUT_NODE = True
|
||||||
|
|
||||||
|
CATEGORY = "image"
|
||||||
|
|
||||||
|
def save_images(self, images):
|
||||||
|
pbar = comfy.utils.ProgressBar(images.shape[0])
|
||||||
|
step = 0
|
||||||
|
for image in images:
|
||||||
|
i = 255. * image.cpu().numpy()
|
||||||
|
img = Image.fromarray(np.clip(i, 0, 255).astype(np.uint8))
|
||||||
|
pbar.update_absolute(step, images.shape[0], ("PNG", img, None))
|
||||||
|
step += 1
|
||||||
|
|
||||||
|
return {}
|
||||||
|
|
||||||
|
def IS_CHANGED(s, images):
|
||||||
|
return time.time()
|
||||||
|
|
||||||
|
NODE_CLASS_MAPPINGS = {
|
||||||
|
"SaveImageWebsocket": SaveImageWebsocket,
|
||||||
|
}
|
Loading…
Reference in New Issue