From 9f084eae94e97c61be4db7e35645c6d313e04d25 Mon Sep 17 00:00:00 2001 From: shadowcz007 Date: Tue, 9 Jan 2024 14:33:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DLoadImagesFromPath=E7=9A=84bu?= =?UTF-8?q?g?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __init__.py | 5 +- nodes/Audio.py | 6 +- nodes/ClipInterrogator.py | 2 +- nodes/Clipseg.py | 4 +- nodes/ImageNode.py | 97 +++++++++++++++++++++++++------- nodes/Lama.py | 2 +- nodes/PromptNode.py | 8 +-- nodes/ScreenShareNode.py | 4 +- nodes/Utils.py | 43 ++++---------- nodes/Vae.py | 4 +- web/javascript/watcher_mixlab.js | 2 +- 11 files changed, 106 insertions(+), 71 deletions(-) diff --git a/__init__.py b/__init__.py index 2991150..2dc14f9 100644 --- a/__init__.py +++ b/__init__.py @@ -531,13 +531,13 @@ PromptServer.add_routes=new_add_routes # 导入节点 from .nodes.PromptNode import RandomPrompt,PromptSlide,PromptSimplification,PromptImage -from .nodes.ImageNode import ImageColorTransfer,NoiseImage,TransparentImage,GradientImage,LoadImagesFromPath,LoadImagesFromURL,ResizeImage,TextImage,SvgImage,Image3D,ShowLayer,NewLayer,MergeLayers,AreaToMask,SmoothMask,FeatheredMask,SplitLongMask,ImageCropByAlpha,EnhanceImage,FaceToMask +from .nodes.ImageNode import GetImageSize_,MirroredImage,ImageColorTransfer,NoiseImage,TransparentImage,GradientImage,LoadImagesFromPath,LoadImagesFromURL,ResizeImage,TextImage,SvgImage,Image3D,ShowLayer,NewLayer,MergeLayers,AreaToMask,SmoothMask,FeatheredMask,SplitLongMask,ImageCropByAlpha,EnhanceImage,FaceToMask from .nodes.Vae import VAELoader,VAEDecode from .nodes.ScreenShareNode import ScreenShareNode,FloatingVideo from .nodes.Clipseg import CLIPSeg,CombineMasks from .nodes.ChatGPT import ChatGPTNode,ShowTextForGPT,CharacterInText from .nodes.Audio import GamePal,SpeechRecognition,SpeechSynthesis -from .nodes.Utils import TESTNODE_,AppInfo,IntNumber,FloatSlider,TextInput,ColorInput,FontInput,TextToNumber,DynamicDelayProcessor,LimitNumber,SwitchByIndex,GetImageSize_,MultiplicationNode +from .nodes.Utils import TESTNODE_,AppInfo,IntNumber,FloatSlider,TextInput,ColorInput,FontInput,TextToNumber,DynamicDelayProcessor,LimitNumber,SwitchByIndex,MultiplicationNode from .nodes.Lama import LaMaInpainting from .nodes.ClipInterrogator import ClipInterrogator @@ -551,6 +551,7 @@ NODE_CLASS_MAPPINGS = { "PromptSimplification":PromptSimplification, "PromptImage":PromptImage, "ClipInterrogator":ClipInterrogator, + "MirroredImage":MirroredImage, "NoiseImage":NoiseImage, "GradientImage":GradientImage, "TransparentImage":TransparentImage, diff --git a/nodes/Audio.py b/nodes/Audio.py index 75f3e71..9b0a462 100644 --- a/nodes/Audio.py +++ b/nodes/Audio.py @@ -24,7 +24,7 @@ class SpeechRecognition: FUNCTION = "run" - CATEGORY = "♾️Mixlab/audio" + CATEGORY = "♾️Mixlab/Audio" INPUT_IS_LIST = False OUTPUT_IS_LIST = (False,) @@ -48,7 +48,7 @@ class SpeechSynthesis: OUTPUT_NODE = True OUTPUT_IS_LIST = (True,) - CATEGORY = "♾️Mixlab/audio" + CATEGORY = "♾️Mixlab/Audio" def run(self, text): # print(session_history) @@ -82,7 +82,7 @@ class GamePal: OUTPUT_NODE = True OUTPUT_IS_LIST = (False,) - CATEGORY = "♾️Mixlab/audio" + CATEGORY = "♾️Mixlab/Audio" def run(self, input_text,input_num,python_code): exec(python_code) diff --git a/nodes/ClipInterrogator.py b/nodes/ClipInterrogator.py index a86c6c9..ff58cfb 100644 --- a/nodes/ClipInterrogator.py +++ b/nodes/ClipInterrogator.py @@ -145,7 +145,7 @@ class ClipInterrogator: FUNCTION = "run" - CATEGORY = "♾️Mixlab/prompt" + CATEGORY = "♾️Mixlab/Prompt" OUTPUT_NODE = True INPUT_IS_LIST = True OUTPUT_IS_LIST = (True,True,) diff --git a/nodes/Clipseg.py b/nodes/Clipseg.py index 3572a7e..91ad6cf 100644 --- a/nodes/Clipseg.py +++ b/nodes/Clipseg.py @@ -112,7 +112,7 @@ class CLIPSeg: } } - CATEGORY = "♾️Mixlab/mask" + CATEGORY = "♾️Mixlab/Mask" RETURN_TYPES = ("MASK", "IMAGE", "IMAGE",) RETURN_NAMES = ("Mask","Heatmap Mask", "BW Mask") @@ -218,7 +218,7 @@ class CombineMasks: }, } - CATEGORY = "♾️Mixlab/mask" + CATEGORY = "♾️Mixlab/Mask" RETURN_TYPES = ("MASK", "IMAGE", "IMAGE",) RETURN_NAMES = ("Combined Mask","Heatmap Mask", "BW Mask") diff --git a/nodes/ImageNode.py b/nodes/ImageNode.py index ee3b07f..dd0de12 100644 --- a/nodes/ImageNode.py +++ b/nodes/ImageNode.py @@ -772,7 +772,7 @@ class SmoothMask: FUNCTION = "run" - CATEGORY = "♾️Mixlab/mask" + CATEGORY = "♾️Mixlab/Mask" INPUT_IS_LIST = False @@ -820,7 +820,7 @@ class FeatheredMask: FUNCTION = "run" - CATEGORY = "♾️Mixlab/mask" + CATEGORY = "♾️Mixlab/Mask" OUTPUT_IS_LIST = (False,) @@ -887,7 +887,7 @@ class SplitLongMask: FUNCTION = "run" - CATEGORY = "♾️Mixlab/mask" + CATEGORY = "♾️Mixlab/Mask" OUTPUT_IS_LIST = (True,) @@ -931,7 +931,7 @@ class TransparentImage: FUNCTION = "run" - CATEGORY = "♾️Mixlab/image" + CATEGORY = "♾️Mixlab/Image" # INPUT_IS_LIST = True, 一个batch传进来 OUTPUT_IS_LIST = (True,True,True,) @@ -1003,7 +1003,7 @@ class EnhanceImage: FUNCTION = "run" - CATEGORY = "♾️Mixlab/image" + CATEGORY = "♾️Mixlab/Image" INPUT_IS_LIST = True @@ -1069,7 +1069,7 @@ class LoadImagesFromPath: FUNCTION = "run" - CATEGORY = "♾️Mixlab/image" + CATEGORY = "♾️Mixlab/Image" # INPUT_IS_LIST = True OUTPUT_IS_LIST = (True,True,False,) @@ -1139,7 +1139,7 @@ class ImageCropByAlpha: FUNCTION = "run" - CATEGORY = "♾️Mixlab/image" + CATEGORY = "♾️Mixlab/Image" INPUT_IS_LIST = True OUTPUT_IS_LIST = (True,True,True,) @@ -1258,7 +1258,7 @@ class TextImage: FUNCTION = "run" - CATEGORY = "♾️Mixlab/image" + CATEGORY = "♾️Mixlab/Image" INPUT_IS_LIST = False OUTPUT_IS_LIST = (False,False,) @@ -1287,7 +1287,7 @@ class LoadImagesFromURL: FUNCTION = "run" - CATEGORY = "♾️Mixlab/image" + CATEGORY = "♾️Mixlab/Image" INPUT_IS_LIST = False OUTPUT_IS_LIST = (True,True,) @@ -1344,7 +1344,7 @@ class SvgImage: FUNCTION = "run" - CATEGORY = "♾️Mixlab/image" + CATEGORY = "♾️Mixlab/Image" INPUT_IS_LIST = False OUTPUT_IS_LIST = (False,True,) @@ -1378,7 +1378,7 @@ class Image3D: FUNCTION = "run" - CATEGORY = "♾️Mixlab/image" + CATEGORY = "♾️Mixlab/Image" INPUT_IS_LIST = False OUTPUT_IS_LIST = (False,False,False,False,) @@ -1430,7 +1430,7 @@ class AreaToMask: FUNCTION = "run" - CATEGORY = "♾️Mixlab/mask" + CATEGORY = "♾️Mixlab/Mask" INPUT_IS_LIST = False OUTPUT_IS_LIST = (False,) @@ -1465,7 +1465,7 @@ class FaceToMask: FUNCTION = "run" - CATEGORY = "♾️Mixlab/mask" + CATEGORY = "♾️Mixlab/Mask" INPUT_IS_LIST = False OUTPUT_IS_LIST = (False,) @@ -1510,7 +1510,7 @@ class EmptyLayer: FUNCTION = "run" - CATEGORY = "♾️Mixlab/layer" + CATEGORY = "♾️Mixlab/Layer" OUTPUT_IS_LIST = (True,) @@ -1591,7 +1591,7 @@ class NewLayer: FUNCTION = "run" - CATEGORY = "♾️Mixlab/layer" + CATEGORY = "♾️Mixlab/Layer" INPUT_IS_LIST = True OUTPUT_IS_LIST = (True,) @@ -1679,7 +1679,7 @@ class ShowLayer: FUNCTION = "run" - CATEGORY = "♾️Mixlab/layer" + CATEGORY = "♾️Mixlab/Layer" INPUT_IS_LIST = True # OUTPUT_IS_LIST = (True,) @@ -1723,7 +1723,7 @@ class MergeLayers: FUNCTION = "run" - CATEGORY = "♾️Mixlab/layer" + CATEGORY = "♾️Mixlab/Layer" INPUT_IS_LIST = True # OUTPUT_IS_LIST = (False,) @@ -1829,7 +1829,7 @@ class GradientImage: FUNCTION = "run" # 右键菜单目录 - CATEGORY = "♾️Mixlab/image" + CATEGORY = "♾️Mixlab/Image" # 输入是否为列表 INPUT_IS_LIST = False @@ -1909,7 +1909,7 @@ class NoiseImage: FUNCTION = "run" # 右键菜单目录 - CATEGORY = "♾️Mixlab/image" + CATEGORY = "♾️Mixlab/Image" # 输入是否为列表 INPUT_IS_LIST = False @@ -1984,7 +1984,7 @@ class ResizeImage: FUNCTION = "run" - CATEGORY = "♾️Mixlab/image" + CATEGORY = "♾️Mixlab/Image" INPUT_IS_LIST = True OUTPUT_IS_LIST = (True,True,) @@ -2024,7 +2024,62 @@ class ResizeImage: average_images.append(a_im) return (imgs,average_images,) + + +class MirroredImage: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "image": ("IMAGE",), + }, + } + # 输出的数据类型 + RETURN_TYPES = ("IMAGE",) + + # 运行时方法名称 + FUNCTION = "run" + + # 右键菜单目录 + CATEGORY = "♾️Mixlab/Image" + + # 输入是否为列表 + INPUT_IS_LIST = True + + # 输出是否为列表 + OUTPUT_IS_LIST = (True,) + + def run(self,image): + res=[] + for ims in image: + for im in ims: + img=tensor2pil(im) + mirrored_image = img.transpose(Image.FLIP_LEFT_RIGHT) + img=pil2tensor(mirrored_image) + res.append(img) + return (res,) + + + +class GetImageSize_: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "image": ("IMAGE",), + } + } + + RETURN_TYPES = ("INT", "INT") + RETURN_NAMES = ("width", "height") + + FUNCTION = "get_size" + + CATEGORY = "♾️Mixlab/Image" + + def get_size(self, image): + _, height, width, _ = image.shape + return (width, height) @@ -2044,7 +2099,7 @@ class ImageColorTransfer: FUNCTION = "run" # 右键菜单目录 - CATEGORY = "♾️Mixlab/_test" + CATEGORY = "♾️Mixlab/Image" # 输入是否为列表 INPUT_IS_LIST = True diff --git a/nodes/Lama.py b/nodes/Lama.py index 9beffa7..586795f 100644 --- a/nodes/Lama.py +++ b/nodes/Lama.py @@ -52,7 +52,7 @@ class LaMaInpainting: FUNCTION = "run" - CATEGORY = "♾️Mixlab/image" + CATEGORY = "♾️Mixlab/Image" INPUT_IS_LIST = True OUTPUT_IS_LIST = (True,) diff --git a/nodes/PromptNode.py b/nodes/PromptNode.py index b824b60..91beda4 100644 --- a/nodes/PromptNode.py +++ b/nodes/PromptNode.py @@ -114,7 +114,7 @@ class PromptImage: FUNCTION = "run" - CATEGORY = "♾️Mixlab/prompt" + CATEGORY = "♾️Mixlab/Prompt" # 运行的函数 def run(self,prompts,images,save_to_image): @@ -193,7 +193,7 @@ class PromptSimplification: FUNCTION = "run" - CATEGORY = "♾️Mixlab/prompt" + CATEGORY = "♾️Mixlab/Prompt" INPUT_IS_LIST = True OUTPUT_IS_LIST = (True,) @@ -254,7 +254,7 @@ class PromptSlide: FUNCTION = "run" - CATEGORY = "♾️Mixlab/prompt" + CATEGORY = "♾️Mixlab/Prompt" INPUT_IS_LIST = False OUTPUT_IS_LIST = (False,) @@ -306,7 +306,7 @@ class RandomPrompt: FUNCTION = "run" - CATEGORY = "♾️Mixlab/prompt" + CATEGORY = "♾️Mixlab/Prompt" OUTPUT_IS_LIST = (True,) OUTPUT_NODE = True diff --git a/nodes/ScreenShareNode.py b/nodes/ScreenShareNode.py index 0c47d27..694abec 100644 --- a/nodes/ScreenShareNode.py +++ b/nodes/ScreenShareNode.py @@ -93,7 +93,7 @@ class ScreenShareNode: RETURN_NAMES = ("IMAGE","PROMPT","FLOAT","INT") FUNCTION = "run" - CATEGORY = "♾️Mixlab/image" + CATEGORY = "♾️Mixlab/Image" # INPUT_IS_LIST = True OUTPUT_IS_LIST = (False,False,False,False) @@ -118,7 +118,7 @@ class FloatingVideo: OUTPUT_NODE = True FUNCTION = "run" - CATEGORY = "♾️Mixlab/image" + CATEGORY = "♾️Mixlab/Image" # INPUT_IS_LIST = True # OUTPUT_IS_LIST = (False,False,) diff --git a/nodes/Utils.py b/nodes/Utils.py index fa96a14..2a22252 100644 --- a/nodes/Utils.py +++ b/nodes/Utils.py @@ -103,7 +103,7 @@ class ColorInput: FUNCTION = "run" - CATEGORY = "♾️Mixlab/utils" + CATEGORY = "♾️Mixlab/Utils" INPUT_IS_LIST = False OUTPUT_IS_LIST = (False,False,False,False,False,) @@ -132,7 +132,7 @@ class FontInput: FUNCTION = "run" - CATEGORY = "♾️Mixlab/utils" + CATEGORY = "♾️Mixlab/Utils" INPUT_IS_LIST = False OUTPUT_IS_LIST = (False,) @@ -162,7 +162,7 @@ class TextToNumber: FUNCTION = "run" - CATEGORY = "♾️Mixlab/utils" + CATEGORY = "♾️Mixlab/Utils" INPUT_IS_LIST = False OUTPUT_IS_LIST = (False,) @@ -220,7 +220,7 @@ class FloatSlider: FUNCTION = "run" - CATEGORY = "♾️Mixlab/utils" + CATEGORY = "♾️Mixlab/Utils" INPUT_IS_LIST = False OUTPUT_IS_LIST = (False,) @@ -273,7 +273,7 @@ class IntNumber: FUNCTION = "run" - CATEGORY = "♾️Mixlab/utils" + CATEGORY = "♾️Mixlab/Utils" INPUT_IS_LIST = False OUTPUT_IS_LIST = (False,) @@ -304,7 +304,7 @@ class MultiplicationNode: FUNCTION = "run" - CATEGORY = "♾️Mixlab/utils" + CATEGORY = "♾️Mixlab/Utils" INPUT_IS_LIST = False OUTPUT_IS_LIST = (False,False,) @@ -326,7 +326,7 @@ class TextInput: FUNCTION = "run" - CATEGORY = "♾️Mixlab/utils" + CATEGORY = "♾️Mixlab/Utils" INPUT_IS_LIST = False OUTPUT_IS_LIST = (False,) @@ -400,7 +400,7 @@ class DynamicDelayProcessor: RETURN_TYPES = (any_type,) RETURN_NAMES = ('output',) - CATEGORY = "♾️Mixlab/utils" + CATEGORY = "♾️Mixlab/Utils" def run(self,any_input,delay_seconds,delay_by_text,words_per_seconds,replace_output,replace_value): # print(f"Delay text:",delay_by_text ) # 获取开始时间戳 @@ -492,27 +492,6 @@ class AppInfo: -class GetImageSize_: - @classmethod - def INPUT_TYPES(cls): - return { - "required": { - "image": ("IMAGE",), - } - } - - RETURN_TYPES = ("INT", "INT") - RETURN_NAMES = ("width", "height") - - FUNCTION = "get_size" - - CATEGORY = "♾️Mixlab/utils" - - def get_size(self, image): - _, height, width, _ = image.shape - return (width, height) - - class SwitchByIndex: @classmethod @@ -537,7 +516,7 @@ class SwitchByIndex: FUNCTION = "run" - CATEGORY = "♾️Mixlab/utils" + CATEGORY = "♾️Mixlab/Utils" INPUT_IS_LIST = True OUTPUT_IS_LIST = (True,) @@ -594,7 +573,7 @@ class LimitNumber: FUNCTION = "run" - CATEGORY = "♾️Mixlab/utils" + CATEGORY = "♾️Mixlab/Utils" INPUT_IS_LIST = False OUTPUT_IS_LIST = (False,) @@ -628,7 +607,7 @@ class TESTNODE_: FUNCTION = "run" - CATEGORY = "♾️Mixlab/_test" + CATEGORY = "♾️Mixlab/__TEST" INPUT_IS_LIST = True OUTPUT_IS_LIST = (True,) diff --git a/nodes/Vae.py b/nodes/Vae.py index 8ef8d44..a3508eb 100644 --- a/nodes/Vae.py +++ b/nodes/Vae.py @@ -145,7 +145,7 @@ class VAELoader: RETURN_TYPES = ("VAE",) FUNCTION = "load_vae" - CATEGORY = "♾️Mixlab/_test" + CATEGORY = "♾️Mixlab/__TEST" #TODO: scale factor? def load_vae(self, vae_name): @@ -165,7 +165,7 @@ class VAEDecode: RETURN_TYPES = ("IMAGE",) FUNCTION = "decode" - CATEGORY = "♾️Mixlab/_test" + CATEGORY = "♾️Mixlab/__TEST" def decode(self, vae, samples): image = vae.decode(samples["samples"].to("cuda:0")) diff --git a/web/javascript/watcher_mixlab.js b/web/javascript/watcher_mixlab.js index 25ec52c..01332f6 100644 --- a/web/javascript/watcher_mixlab.js +++ b/web/javascript/watcher_mixlab.js @@ -181,7 +181,7 @@ app.registerExtension({ window._mixlab_file_path_watcher = json.event_type // widget.card.innerText = window._mixlab_file_path_watcher || '' //运行 - // document.querySelector('#queue-button').click() + document.querySelector('#queue-button').click() } }) }, 1000)