返回消息区分mask和image

This commit is contained in:
刘雪峰
2023-12-22 17:23:51 +08:00
parent fe362998ac
commit 6c41ac4b56
2 changed files with 66 additions and 11 deletions
+12 -7
View File
@@ -1,13 +1,18 @@
# comfyui-easyapi-nodes
针对api接口开发补充的一些自定义节点和功能
针对api接口开发补充的一些自定义节点和功能。
转成base64的节点都是输出节点,websocket消息中会包含base64Images和base64Type属性(具体格式请查看ImageNode.py中的ImageToBase64Advanced类源代码,或者自己搭建简单流程运行在浏览器开发者工具-->网络中查看)
## 节点
| 名称 | 说明 |
|-----|------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Base64ToImage | 把图片base64字符串转成图片 |
| ImageToBase64 | 把图片转成base64字符串 |
| LoadImageToBase64 | 加载本地图片转成base64字符串 |
| SamAutoMaskSEGS | 得到图片所有语义分割的coco或uncompress_rle格式。<br/>配合ComfyUI-Impact-Pack的SAMLoader或comfyui_segment_anything的SAMModelLoader。<br/>但是如果使用hq模型,必须使用comfyui_segment_anything |
| 名称 | 说明 |
|-----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Base64ToImage | 把图片base64字符串转成图片 |
| ImageToBase64Advanced | 把图片转成base64字符串, 可以选择图片类型(image, mask) ,方便接口调用判断 |
| ImageToBase64 | 把图片转成base64字符串(imageType=["image"]) |
| MaskToBase64Image | 把遮罩转成对应图片的base64字符串(imageType=["mask"]) |
| MaskImageToBase64 | 把遮罩图片转成base64字符串(imageType=["mask"]) |
| LoadImageToBase64 | 加载本地图片转成base64字符串 |
| SamAutoMaskSEGS | 得到图片所有语义分割的coco或uncompress_rle格式。<br/>配合ComfyUI-Impact-Pack的SAMLoader或comfyui_segment_anything的SAMModelLoader。<br/>但是如果使用hq模型,必须使用comfyui_segment_anything |
## 功能
- 扩展Save(Api Format)菜单。
+54 -4
View File
@@ -10,6 +10,7 @@ import json
from json import JSONEncoder, JSONDecoder
from easyapi.util import tensor_to_pil
class Base64ToImage:
@classmethod
def INPUT_TYPES(self):
@@ -50,11 +51,15 @@ class Base64ToImage:
# return (torch.stack(images, dim=0)[None, ], mask.unsqueeze(0))
class ImageToBase64:
class ImageToBase64Advanced:
def __init__(self):
self.imageType = "image"
@classmethod
def INPUT_TYPES(self):
return {"required": {
"images": ("IMAGE",),
"imageType": (["image", "mask"], {"default": "image"}),
},
"hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"},
}
@@ -72,7 +77,10 @@ class ImageToBase64:
# INPUT_IS_LIST = False
# OUTPUT_IS_LIST = (False,False,)
def convert(self, images, prompt=None, extra_pnginfo=None):
def convert(self, images, imageType=None, prompt=None, extra_pnginfo=None):
if imageType is None:
imageType = self.imageType
result = list()
for i in images:
img = tensor_to_pil(i)
@@ -99,11 +107,47 @@ class ImageToBase64:
result.append(encoded_image)
base64Images = JSONEncoder().encode(result)
# print(images)
return {"ui": {"base64Images": result}, "result": (base64Images,)}
return {"ui": {"base64Images": result, "imageType": [imageType]}, "result": (base64Images,)}
class ImageToBase64(ImageToBase64Advanced):
def __init__(self):
self.imageType = "image"
@classmethod
def INPUT_TYPES(self):
return {"required": {
"images": ("IMAGE",),
},
"hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"},
}
class MaskImageToBase64(ImageToBase64):
def __init__(self):
self.imageType = "mask"
class MaskToBase64Image(MaskImageToBase64):
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"mask": ("MASK",),
}
}
CATEGORY = "EasyApi/Image"
RETURN_TYPES = ("STRING",)
FUNCTION = "mask_to_base64image"
def mask_to_base64image(self, mask):
images = mask.reshape((-1, 1, mask.shape[-2], mask.shape[-1])).movedim(1, -1).expand(-1, -1, -1, 3)
return super().convert(images)
class LoadImageToBase64(LoadImage):
RETURN_TYPES = ("STRING", "IMAGE", "MASK", )
RETURN_NAMES = ("base64Images", "IMAGE", "MASK", )
@@ -152,6 +196,9 @@ def base64_to_image(base64_string):
NODE_CLASS_MAPPINGS = {
"Base64ToImage": Base64ToImage,
"ImageToBase64": ImageToBase64,
"ImageToBase64Advanced": ImageToBase64Advanced,
"MaskToBase64Image": MaskToBase64Image,
"MaskImageToBase64": MaskImageToBase64,
"LoadImageToBase64": LoadImageToBase64,
}
@@ -159,5 +206,8 @@ NODE_CLASS_MAPPINGS = {
NODE_DISPLAY_NAME_MAPPINGS = {
"Base64ToImage": "Base64 To Image",
"ImageToBase64": "Image To Base64",
"ImageToBase64Advanced": "Image To Base64 (Advanced)",
"MaskToBase64Image": "Mask To Base64 Image",
"MaskImageToBase64": "Mask Image To Base64",
"LoadImageToBase64": "Load Image To Base64",
}