standardize log outputs

This commit is contained in:
chflame163
2024-02-16 15:26:45 +08:00
parent c98917e64c
commit f3cff7bb11
51 changed files with 56 additions and 53 deletions
+2
View File
@@ -1,6 +1,8 @@
# ComfyUI Layer Style
A set of nodes for ComfyUI that can composite layer and mask to achieve Photoshop like functionality.
It migrate some basic functions of PhotoShop to ComfyUI, aiming to centralize the workflow and reduce the frequency of software switching.
![image](image/title.png)
Nodes are divided into 5 groups according to their functions: LayerStyle, LayerColor, LayerMask, LayerUtility and LayerFilter.
+1 -1
View File
@@ -1,5 +1,5 @@
# ComfyUI Layer Style
一组为ComfyUI设计的节点,可以合成图层达到类似Photoshop的功能。
一组为ComfyUI设计的节点,可以合成图层达到类似Photoshop的功能。这些节点将PhotoShop的一部分基本功能迁移到ComfyUI,旨在集中工作流程,减少软件切换的频率。
![image](image/title.png)
节点按照功能分为5组:LayerStyle, LayerColor, LayerMask, LayerUtility和LayerFilter。
+1 -1
View File
@@ -53,7 +53,7 @@ class ChannelShake:
ret_image = Image.merge('RGB', [R, G, B])
ret_images.append(pil2tensor(ret_image))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -47,7 +47,7 @@ class ColorAdapter:
ret_images.append(pil2tensor(ret_image))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -44,7 +44,7 @@ class ColorCorrectHSV:
ret_images.append(pil2tensor(ret_image))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -44,7 +44,7 @@ class ColorCorrectLAB:
ret_images.append(pil2tensor(ret_image))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -34,7 +34,7 @@ class ColorCorrectLUTapply:
ret_image = lut_apply(_image, lut_file)
ret_images.append(pil2tensor(ret_image))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -44,7 +44,7 @@ class ColorCorrectRGB:
ret_images.append(pil2tensor(ret_image))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -44,7 +44,7 @@ class ColorCorrectYUV:
ret_images.append(pil2tensor(ret_image))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -46,7 +46,7 @@ class ColorCorrectBrightnessAndContrast:
_image = color_image.enhance(factor=saturation)
ret_images.append(pil2tensor(_image))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -40,7 +40,7 @@ class ColorCorrectExposure:
t = np.clip((t - bp) * scale, 0.0, 1.0)
ret_images.append(torch.from_numpy(t))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0),)
+1 -1
View File
@@ -35,7 +35,7 @@ class ColorCorrectGamma:
ret_images.append(pil2tensor(ret_image))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -44,7 +44,7 @@ class ColorMap:
ret_images.append(pil2tensor(ret_image))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -77,7 +77,7 @@ class ColorOverlay:
ret_images.append(pil2tensor(_canvas))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -85,7 +85,7 @@ class CropByMask:
ret_images.append(pil2tensor(_canvas.crop(crop_box)))
ret_masks.append(image2mask(_mask.crop(crop_box)))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0), torch.cat(ret_masks, dim=0), list(crop_box), pil2tensor(preview_image),)
+1 -1
View File
@@ -93,7 +93,7 @@ class DropShadow:
ret_images.append(pil2tensor(_canvas))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0),)
+1 -1
View File
@@ -76,7 +76,7 @@ class ExtendCanvas:
ret_images.append(pil2tensor(_canvas))
ret_masks.append(image2mask(_mask_canvas))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0), torch.cat(ret_masks, dim=0),)
+1 -1
View File
@@ -34,7 +34,7 @@ class GaussianBlur:
ret_images.append(pil2tensor(gaussian_blur(_canvas, blur)))
log(f'GaussianBlur Processed {len(ret_images)} image(s).')
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -89,7 +89,7 @@ class GradientOverlay:
ret_images.append(pil2tensor(_canvas))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -73,7 +73,7 @@ class ImageBlend:
_canvas.paste(_comp, mask=_mask)
ret_images.append(pil2tensor(_canvas))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -121,7 +121,7 @@ class ImageBlendAdvance:
ret_images.append(pil2tensor(_canvas))
ret_masks.append(image2mask(_compmask))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0), torch.cat(ret_masks, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -59,7 +59,7 @@ class ImageChannelMerge:
ret_images.append(pil2tensor(ret_image))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -41,7 +41,7 @@ class ImageChannelSplit:
c3_images.append(pil2tensor(channel3))
c4_images.append(pil2tensor(channel4))
log(f"{NODE_NAME} Processed {len(c1_images)} image(s).")
log(f"{NODE_NAME} Processed {len(c1_images)} image(s).", message_type='finish')
return (torch.cat(c1_images, dim=0), torch.cat(c2_images, dim=0), torch.cat(c3_images, dim=0), torch.cat(c4_images, dim=0),)
NODE_CLASS_MAPPINGS = {
+3 -3
View File
@@ -77,13 +77,13 @@ class ImageMaskScaleAs:
_mask = fit_resize_image(_mask, target_width, target_height, fit, resize_sampler).convert('L')
ret_masks.append(image2mask(_mask))
if len(ret_images) > 0 and len(ret_masks) >0:
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0), torch.cat(ret_masks, dim=0), [orig_width, orig_height],)
elif len(ret_images) > 0 and len(ret_masks) == 0:
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0), None,)
elif len(ret_images) == 0 and len(ret_masks) > 0:
log(f"{NODE_NAME} Processed {len(ret_masks)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_masks)} image(s).", message_type='finish')
return (None, torch.cat(ret_masks, dim=0), [orig_width, orig_height],)
else:
log(f"Error: {NODE_NAME} skipped, because the available image or mask is not found.", message_type='error')
+1 -1
View File
@@ -74,7 +74,7 @@ class ImageOpacity:
ret_images.append(pil2tensor(ret_image))
ret_masks.append(image2mask(ret_mask))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0), torch.cat(ret_masks, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -98,7 +98,7 @@ class ImageScaleRestore:
ret_images.append(pil2tensor(ret_image))
ret_masks.append(image2mask(ret_mask))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0), torch.cat(ret_masks, dim=0), [orig_width, orig_height],)
+1 -1
View File
@@ -78,7 +78,7 @@ class ImageShift:
ret_masks.append(image2mask(_mask))
ret_border_masks.append(image2mask(_border))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0), torch.cat(ret_masks, dim=0), torch.cat(ret_border_masks, dim=0),)
NODE_CLASS_MAPPINGS = {
+4 -2
View File
@@ -26,9 +26,11 @@ def log(message:str, message_type:str='info'):
name = 'LayerStyle'
if message_type == 'error':
message = '\033[1;31m' + message + '\033[m'
message = '\033[1;41m' + message + '\033[m'
elif message_type == 'warning':
message = '\033[1;35m' + message + '\033[m'
message = '\033[1;31m' + message + '\033[m'
elif message_type == 'finish':
message = '\033[1;32m' + message + '\033[m'
else:
message = '\033[1;33m' + message + '\033[m'
print(f"# 😺dzNodes: {name} -> {message}")
+1 -1
View File
@@ -94,7 +94,7 @@ class InnerGlow:
_layer.paste(_canvas, mask=ImageChops.invert(_mask))
ret_images.append(pil2tensor(_layer))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0),)
+1 -1
View File
@@ -90,7 +90,7 @@ class InnerShadow:
ret_images.append(pil2tensor(_canvas))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -62,7 +62,7 @@ class MaskBoxDetect:
preview_image = tensor2pil(mask).convert('RGB')
preview_image = draw_rect(preview_image, x - x_adjust, y - y_adjust, width, height, line_color="#F00000", line_width=int(preview_image.height / 60))
preview_image = draw_rect(preview_image, x, y, width, height, line_color="#00F000", line_width=int(preview_image.height / 40))
log(f"{NODE_NAME} Processed.")
log(f"{NODE_NAME} Processed.", message_type='finish')
return ( pil2tensor(preview_image), round(x_percent, 2), round(y_percent, 2), _width, _height, x, y,)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -66,7 +66,7 @@ class MaskByDifferent:
ret_masks.append(image2mask(_mask))
log(f"{NODE_NAME} Processed {len(ret_masks)} mask(s).")
log(f"{NODE_NAME} Processed {len(ret_masks)} mask(s).", message_type='finish')
return (torch.cat(ret_masks, dim=0),)
+1 -1
View File
@@ -67,7 +67,7 @@ class MaskEdgeShrink:
ret_masks.append(image2mask(_layer))
log(f"{NODE_NAME} Processed {len(ret_masks)} mask(s).")
log(f"{NODE_NAME} Processed {len(ret_masks)} mask(s).", message_type='finish')
return (torch.cat(ret_masks, dim=0),)
+1 -1
View File
@@ -65,7 +65,7 @@ class MaskEdgeUltraDetail:
ret_images.append(pil2tensor(ret_image))
ret_masks.append(image2mask(_mask))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0), torch.cat(ret_masks, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -136,7 +136,7 @@ class MaskGradient:
_canvas = chop_image(_mask, _canvas, 'normal', opacity)
ret_masks.append(image2mask(_canvas))
log(f"{NODE_NAME} Processed {len(ret_masks)} mask(s).")
log(f"{NODE_NAME} Processed {len(ret_masks)} mask(s).", message_type='finish')
return (torch.cat(ret_masks, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -45,7 +45,7 @@ class MaskGrow:
_mask = l_masks[i]
ret_masks.append(expand_mask(image2mask(_mask), grow, blur) )
log(f"{NODE_NAME} Processed {len(ret_masks)} mask(s).")
log(f"{NODE_NAME} Processed {len(ret_masks)} mask(s).", message_type='finish')
return (torch.cat(ret_masks, dim=0),)
-1
View File
@@ -37,7 +37,6 @@ class MaskInvert:
_mask = l_masks[i]
ret_masks.append(mask_invert(image2mask(_mask)))
log(f"{NODE_NAME} Processed {len(ret_masks)} mask(s).")
return (torch.cat(ret_masks, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -45,7 +45,7 @@ class MaskMotionBlur:
_blurimage = motion_blur(_mask, angle, blur)
ret_masks.append(image2mask(_blurimage))
log(f"{NODE_NAME} Processed {len(ret_masks)} mask(s).")
log(f"{NODE_NAME} Processed {len(ret_masks)} mask(s).", message_type='finish')
return (torch.cat(ret_masks, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -51,7 +51,7 @@ class MaskStroke:
stroke_mask = subtract_mask(outer_mask, inner_mask)
ret_masks.append(stroke_mask)
log(f"{NODE_NAME} Processed {len(ret_masks)} mask(s).")
log(f"{NODE_NAME} Processed {len(ret_masks)} mask(s).", message_type='finish')
return (torch.cat(ret_masks, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -36,7 +36,7 @@ class MotionBlur:
ret_images.append(pil2tensor(motion_blur(_canvas, angle, blur)))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -93,7 +93,7 @@ class OuterGlow:
ret_images.append(pil2tensor(_canvas))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0),)
+1 -1
View File
@@ -71,7 +71,7 @@ class PixelSpread:
ret_images.append(torch.from_numpy(fg.astype(np.float32)))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -40,7 +40,7 @@ class RemBgUltra:
ret_images.append(pil2tensor(ret_image))
ret_masks.append(image2mask(_mask))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0), torch.cat(ret_masks, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -70,7 +70,7 @@ class RestoreCropBox:
ret_images.append(pil2tensor(_canvas))
ret_masks.append(image2mask(ret_mask))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0), torch.cat(ret_masks, dim=0),)
+1 -1
View File
@@ -61,7 +61,7 @@ class SegmentAnythingUltra:
empty_mask = torch.zeros((1, height, width), dtype=torch.uint8, device="cpu")
return (empty_mask, empty_mask)
log(f"{NODE_NAME} Processed {len(ret_masks)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_masks)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0), torch.cat(ret_masks, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -60,7 +60,7 @@ class SharpAndSoft:
details = (imgB / imgG - 1) * detail_mult + 1
dup[index] = np.clip(details * imgG - imgB + image, 0, 1)
log(f"{NODE_NAME} Processed {dup.shape[0]} image(s).")
log(f"{NODE_NAME} Processed {dup.shape[0]} image(s).", message_type='finish')
return (torch.from_numpy(dup),)
+1 -1
View File
@@ -50,7 +50,7 @@ class SkinBeauty:
ret_images.append(pil2tensor(_canvas))
ret_masks.append(image2mask(light_mask))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0), torch.cat(ret_masks, dim=0),)
+1 -1
View File
@@ -49,7 +49,7 @@ class SoftLight:
ret_images.append(pil2tensor(_canvas))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -90,7 +90,7 @@ class Stroke:
ret_images.append(pil2tensor(_canvas))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -125,7 +125,7 @@ class TextImage:
_color = Image.new('RGB', size=(width, height), color=text_color)
_canvas.paste(_color, mask=_mask.convert('L'))
_canvas = RGB2RGBA(_canvas, _mask)
log(f"{NODE_NAME} Processed.")
log(f"{NODE_NAME} Processed.", message_type='finish')
return (pil2tensor(_canvas), image2mask(_mask),)
NODE_CLASS_MAPPINGS = {
+1 -1
View File
@@ -39,7 +39,7 @@ class WaterColor:
ret_images.append(pil2tensor(ret_image))
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).")
log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
return (torch.cat(ret_images, dim=0),)
NODE_CLASS_MAPPINGS = {