fix Stroke node default value

This commit is contained in:
chflame163
2024-01-19 20:43:31 +08:00
committed by GitHub
parent e920865602
commit 5f64f4cb22
10 changed files with 699 additions and 630 deletions
+3 -3
View File
@@ -73,11 +73,11 @@ Node options:
* invert_mask: Whether to reverse the mask.
* blend_mode<sup>3</sup>: Blending mode of stroke.
* opacity: Opacity of stroke.
* shrink<sup>*</sup>: Stroke shrinkage amplitude.
* expansion<sup>*</sup>: Stroke expansion amplitude.
* inner_stroke<sup>*</sup>: Stroke shrinkage amplitude.
* outer_stroke<sup>*</sup>: Stroke expansion amplitude.
* stroke_color: Stroke color, described in hexadecimal RGB format.
<sup>*</sup>The width of the stroke is equal to shrink plus expansion value. Setting two values separately can make it more convenient to adjust the border range.
<sup>*</sup>The width of the stroke is equal to inner_stroke plus outer_stroke value. Setting two values separately can make it more convenient to adjust the border range.
Output type:
* image
+2 -2
View File
@@ -70,8 +70,8 @@ ComfyUI
* invert_mask: 是否反转遮罩。
* blend_mode<sup>3</sup>: 描边的混合模式。
* opacity: 不透明度。
* shrink<sup>*</sup>: 描边收缩幅度。
* expansion<sup>*</sup>:描边扩张幅度。
* inner_stroke<sup>*</sup>: 描边向内收缩幅度。
* outer_stroke<sup>*</sup>:描边向外扩张幅度。
* stroke_color: 描边颜色,使用16进制RGB格式描述。
<sup>*</sup>描边的宽度等于收缩值加上扩张值。两个值分开设置能更方便的调整边框范围。
Binary file not shown.

Before

Width:  |  Height:  |  Size: 550 KiB

After

Width:  |  Height:  |  Size: 628 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 145 KiB

+69
View File
@@ -0,0 +1,69 @@
from .imagefunc import *
class Illumine:
def __init__(self):
pass
@classmethod
def INPUT_TYPES(self):
chop_mode = ['add', 'screen', 'lighter', 'normal']
return {
"required": {
"background_image": ("IMAGE", ), #
"layer_image": ("IMAGE",), #
"invert_mask": ("BOOLEAN", {"default": True}), # 反转mask
"blend_mode": (chop_mode,), # 混合模式
"opacity": ("INT", {"default": 100, "min": 0, "max": 100, "step": 1}), # 透明度
"iteration": ("INT", {"default": 100, "min": 0, "max": 100, "step": 1}), # 迭代
"glow_range": ("INT", {"default": 16, "min": -9999, "max": 9999, "step": 1}), # 扩张
"light_color": ("STRING", {"default": "#DFFEC2"}), # 光源颜色
"glow_color": ("STRING", {"default": "#F99F8E"}), # 辉光颜色
},
"optional": {
"layer_mask": ("MASK",), #
}
}
RETURN_TYPES = ("IMAGE",)
RETURN_NAMES = ("image",)
FUNCTION = 'illumine'
CATEGORY = '😺dzNodes'
OUTPUT_NODE = True
def illumine(self, background_image, layer_image,
invert_mask, blend_mode, opacity,
grow, blur, glow_color,
layer_mask=None,
):
_canvas = tensor2pil(background_image).convert('RGB')
_layer = tensor2pil(layer_image).convert('RGB')
_mask = tensor2pil(layer_image).convert('RGBA').split()[-1]
# 处理mask
if layer_mask is not None:
if invert_mask:
layer_mask = 1 - layer_mask
_mask = mask2image(layer_mask).convert('L')
glow_mask = expand_mask(image2mask(_mask), grow, blur, 0) #扩张,模糊
# 合成glow
glow_color = Image.new("RGB", _layer.size, color=glow_color)
alpha = tensor2pil(glow_mask).convert('L')
_glow = chop_image(tensor2pil(background_image), glow_color, blend_mode, opacity)
_canvas.paste(_glow, mask=alpha)
# 合成layer
_canvas.paste(_layer, mask=_mask)
ret_image = _canvas
# ret_mask = glow_mask
# return (pil2tensor(ret_image), ret_mask,)
return (pil2tensor(ret_image),)
NODE_CLASS_MAPPINGS = {
"LayerStyle_Illumine": Illumine
}
NODE_DISPLAY_NAME_MAPPINGS = {
"LayerStyle_Illumine": "LayerStyle: Illumine"
}
+6 -6
View File
@@ -15,8 +15,8 @@ class Stroke:
"invert_mask": ("BOOLEAN", {"default": True}), # 反转mask
"blend_mode": (chop_mode,), # 混合模式
"opacity": ("INT", {"default": 100, "min": 0, "max": 100, "step": 1}), # 透明度
"shrink": ("INT", {"default": 2, "min": 0, "max": 9999, "step": 1}), # 收缩值
"expansion": ("INT", {"default": 2, "min": 0, "max": 9999, "step": 1}), # 扩张值
"inner_stroke": ("INT", {"default": 4, "min": 0, "max": 9999, "step": 1}), # 收缩值
"outer_stroke": ("INT", {"default": 4, "min": 0, "max": 9999, "step": 1}), # 扩张值
"blur": ("INT", {"default": 0, "min": 0, "max": 100, "step": 1}), # 模糊
"stroke_color": ("STRING", {"default": "#FF0000"}), # 描边颜色
},
@@ -33,7 +33,7 @@ class Stroke:
def stroke(self, background_image, layer_image,
invert_mask, blend_mode, opacity,
shrink, expansion, blur, stroke_color,
inner_stroke, outer_stroke, blur, stroke_color,
layer_mask=None,
):
@@ -45,9 +45,9 @@ class Stroke:
layer_mask = 1 - layer_mask
_mask = mask2image(layer_mask).convert('L')
shink_mask = expand_mask(image2mask(_mask), -shrink, blur)
expansion_mask = expand_mask(image2mask(_mask), expansion, blur)
strock_mask = subtract_mask(expansion_mask, shink_mask)
inner_mask = expand_mask(image2mask(_mask), -inner_stroke, blur)
outer_mask = expand_mask(image2mask(_mask), outer_stroke, blur)
strock_mask = subtract_mask(outer_mask, inner_mask)
color_image = Image.new('RGB', size=_layer.size, color=stroke_color)
blend_image = chop_image(_layer, color_image, blend_mode, opacity)
_canvas.paste(_layer, mask=_mask)
+206 -206
View File
@@ -1,207 +1,207 @@
{
"last_node_id": 23,
"last_link_id": 58,
"nodes": [
{
"id": 22,
"type": "LayerStyle_DropShadow",
"pos": [
540,
-660
],
"size": {
"0": 315,
"1": 266
},
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"name": "background_image",
"type": "IMAGE",
"link": 54
},
{
"name": "layer_image",
"type": "IMAGE",
"link": 55
},
{
"name": "layer_mask",
"type": "MASK",
"link": 56
}
],
"outputs": [
{
"name": "image",
"type": "IMAGE",
"links": [
58
],
"shape": 3,
"slot_index": 0
}
],
"properties": {
"Node name for S&R": "LayerStyle_DropShadow"
},
"widgets_values": [
true,
"normal",
50,
5,
5,
2,
15,
"#000000"
]
},
{
"id": 23,
"type": "SaveImage",
"pos": [
890,
-660
],
"size": [
315,
270
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 58
}
],
"properties": {},
"widgets_values": [
"ComfyUI"
]
},
{
"id": 2,
"type": "LoadImage",
"pos": [
180,
-680
],
"size": {
"0": 315,
"1": 314
},
"flags": {},
"order": 0,
"mode": 0,
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
55
],
"shape": 3,
"slot_index": 0
},
{
"name": "MASK",
"type": "MASK",
"links": [
56
],
"shape": 3,
"slot_index": 1
}
],
"properties": {
"Node name for S&R": "LoadImage"
},
"widgets_values": [
"512x512.png",
"image"
]
},
{
"id": 3,
"type": "LoadImage",
"pos": [
-160,
-680
],
"size": {
"0": 315,
"1": 314
},
"flags": {},
"order": 1,
"mode": 0,
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
54
],
"shape": 3,
"slot_index": 0
},
{
"name": "MASK",
"type": "MASK",
"links": null,
"shape": 3
}
],
"properties": {
"Node name for S&R": "LoadImage"
},
"widgets_values": [
"512x512bkgd.jpg",
"image"
]
}
],
"links": [
[
54,
3,
0,
22,
0,
"IMAGE"
],
[
55,
2,
0,
22,
1,
"IMAGE"
],
[
56,
2,
1,
22,
2,
"MASK"
],
[
58,
22,
0,
23,
0,
"IMAGE"
]
],
"groups": [],
"config": {},
"extra": {},
"version": 0.4
{
"last_node_id": 23,
"last_link_id": 58,
"nodes": [
{
"id": 22,
"type": "LayerStyle_DropShadow",
"pos": [
540,
-660
],
"size": {
"0": 315,
"1": 266
},
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"name": "background_image",
"type": "IMAGE",
"link": 54
},
{
"name": "layer_image",
"type": "IMAGE",
"link": 55
},
{
"name": "layer_mask",
"type": "MASK",
"link": 56
}
],
"outputs": [
{
"name": "image",
"type": "IMAGE",
"links": [
58
],
"shape": 3,
"slot_index": 0
}
],
"properties": {
"Node name for S&R": "LayerStyle_DropShadow"
},
"widgets_values": [
true,
"normal",
50,
5,
5,
2,
15,
"#000000"
]
},
{
"id": 23,
"type": "SaveImage",
"pos": [
890,
-660
],
"size": [
315,
270
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 58
}
],
"properties": {},
"widgets_values": [
"ComfyUI"
]
},
{
"id": 2,
"type": "LoadImage",
"pos": [
180,
-680
],
"size": {
"0": 315,
"1": 314
},
"flags": {},
"order": 0,
"mode": 0,
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
55
],
"shape": 3,
"slot_index": 0
},
{
"name": "MASK",
"type": "MASK",
"links": [
56
],
"shape": 3,
"slot_index": 1
}
],
"properties": {
"Node name for S&R": "LoadImage"
},
"widgets_values": [
"512x512.png",
"image"
]
},
{
"id": 3,
"type": "LoadImage",
"pos": [
-160,
-680
],
"size": {
"0": 315,
"1": 314
},
"flags": {},
"order": 1,
"mode": 0,
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
54
],
"shape": 3,
"slot_index": 0
},
{
"name": "MASK",
"type": "MASK",
"links": null,
"shape": 3
}
],
"properties": {
"Node name for S&R": "LoadImage"
},
"widgets_values": [
"512x512bkgd.jpg",
"image"
]
}
],
"links": [
[
54,
3,
0,
22,
0,
"IMAGE"
],
[
55,
2,
0,
22,
1,
"IMAGE"
],
[
56,
2,
1,
22,
2,
"MASK"
],
[
58,
22,
0,
23,
0,
"IMAGE"
]
],
"groups": [],
"config": {},
"extra": {},
"version": 0.4
}
+201 -201
View File
@@ -1,202 +1,202 @@
{
"last_node_id": 5,
"last_link_id": 5,
"nodes": [
{
"id": 1,
"type": "LoadImage",
"pos": [
327,
175
],
"size": {
"0": 315,
"1": 314
},
"flags": {},
"order": 0,
"mode": 0,
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
1
],
"shape": 3,
"slot_index": 0
},
{
"name": "MASK",
"type": "MASK",
"links": null,
"shape": 3
}
],
"properties": {
"Node name for S&R": "LoadImage"
},
"widgets_values": [
"512x512bkgd (3).jpg",
"image"
]
},
{
"id": 2,
"type": "LoadImage",
"pos": [
680,
176
],
"size": {
"0": 315,
"1": 314
},
"flags": {},
"order": 1,
"mode": 0,
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
2
],
"shape": 3,
"slot_index": 0
},
{
"name": "MASK",
"type": "MASK",
"links": [
5
],
"shape": 3,
"slot_index": 1
}
],
"properties": {
"Node name for S&R": "LoadImage"
},
"widgets_values": [
"512x512 (5).png",
"image"
]
},
{
"id": 3,
"type": "LayerStyle_ImageBlend",
"pos": [
1041,
203
],
"size": {
"0": 315,
"1": 146
},
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"name": "background_image",
"type": "IMAGE",
"link": 1
},
{
"name": "layer_image",
"type": "IMAGE",
"link": 2
},
{
"name": "layer_mask",
"type": "MASK",
"link": 5
}
],
"outputs": [
{
"name": "image",
"type": "IMAGE",
"links": [
4
],
"shape": 3,
"slot_index": 0
}
],
"properties": {
"Node name for S&R": "LayerStyle_ImageBlend"
},
"widgets_values": [
true,
"subtract",
50
]
},
{
"id": 4,
"type": "SaveImage",
"pos": [
1401,
195
],
"size": [
315,
270
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 4
}
],
"properties": {},
"widgets_values": [
"ComfyUI"
]
}
],
"links": [
[
1,
1,
0,
3,
0,
"IMAGE"
],
[
2,
2,
0,
3,
1,
"IMAGE"
],
[
4,
3,
0,
4,
0,
"IMAGE"
],
[
5,
2,
1,
3,
2,
"MASK"
]
],
"groups": [],
"config": {},
"extra": {},
"version": 0.4
{
"last_node_id": 5,
"last_link_id": 5,
"nodes": [
{
"id": 1,
"type": "LoadImage",
"pos": [
327,
175
],
"size": {
"0": 315,
"1": 314
},
"flags": {},
"order": 0,
"mode": 0,
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
1
],
"shape": 3,
"slot_index": 0
},
{
"name": "MASK",
"type": "MASK",
"links": null,
"shape": 3
}
],
"properties": {
"Node name for S&R": "LoadImage"
},
"widgets_values": [
"512x512bkgd (3).jpg",
"image"
]
},
{
"id": 2,
"type": "LoadImage",
"pos": [
680,
176
],
"size": {
"0": 315,
"1": 314
},
"flags": {},
"order": 1,
"mode": 0,
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
2
],
"shape": 3,
"slot_index": 0
},
{
"name": "MASK",
"type": "MASK",
"links": [
5
],
"shape": 3,
"slot_index": 1
}
],
"properties": {
"Node name for S&R": "LoadImage"
},
"widgets_values": [
"512x512 (5).png",
"image"
]
},
{
"id": 3,
"type": "LayerStyle_ImageBlend",
"pos": [
1041,
203
],
"size": {
"0": 315,
"1": 146
},
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"name": "background_image",
"type": "IMAGE",
"link": 1
},
{
"name": "layer_image",
"type": "IMAGE",
"link": 2
},
{
"name": "layer_mask",
"type": "MASK",
"link": 5
}
],
"outputs": [
{
"name": "image",
"type": "IMAGE",
"links": [
4
],
"shape": 3,
"slot_index": 0
}
],
"properties": {
"Node name for S&R": "LayerStyle_ImageBlend"
},
"widgets_values": [
true,
"subtract",
50
]
},
{
"id": 4,
"type": "SaveImage",
"pos": [
1401,
195
],
"size": [
315,
270
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 4
}
],
"properties": {},
"widgets_values": [
"ComfyUI"
]
}
],
"links": [
[
1,
1,
0,
3,
0,
"IMAGE"
],
[
2,
2,
0,
3,
1,
"IMAGE"
],
[
4,
3,
0,
4,
0,
"IMAGE"
],
[
5,
2,
1,
3,
2,
"MASK"
]
],
"groups": [],
"config": {},
"extra": {},
"version": 0.4
}
+204 -204
View File
@@ -1,205 +1,205 @@
{
"last_node_id": 24,
"last_link_id": 62,
"nodes": [
{
"id": 23,
"type": "SaveImage",
"pos": [
890,
-660
],
"size": [
315,
270
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 62
}
],
"properties": {},
"widgets_values": [
"ComfyUI"
]
},
{
"id": 3,
"type": "LoadImage",
"pos": [
-160,
-680
],
"size": {
"0": 315,
"1": 314
},
"flags": {},
"order": 0,
"mode": 0,
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
59
],
"shape": 3,
"slot_index": 0
},
{
"name": "MASK",
"type": "MASK",
"links": null,
"shape": 3
}
],
"properties": {
"Node name for S&R": "LoadImage"
},
"widgets_values": [
"512x512bkgd.jpg",
"image"
]
},
{
"id": 2,
"type": "LoadImage",
"pos": [
180,
-680
],
"size": {
"0": 315,
"1": 314
},
"flags": {},
"order": 1,
"mode": 0,
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
60
],
"shape": 3,
"slot_index": 0
},
{
"name": "MASK",
"type": "MASK",
"links": [
61
],
"shape": 3,
"slot_index": 1
}
],
"properties": {
"Node name for S&R": "LoadImage"
},
"widgets_values": [
"512x512.png",
"image"
]
},
{
"id": 24,
"type": "LayerStyle_OuterGlow",
"pos": [
536,
-631
],
"size": {
"0": 315,
"1": 218
},
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"name": "background_image",
"type": "IMAGE",
"link": 59
},
{
"name": "layer_image",
"type": "IMAGE",
"link": 60
},
{
"name": "layer_mask",
"type": "MASK",
"link": 61
}
],
"outputs": [
{
"name": "image",
"type": "IMAGE",
"links": [
62
],
"shape": 3,
"slot_index": 0
}
],
"properties": {
"Node name for S&R": "LayerStyle_OuterGlow"
},
"widgets_values": [
true,
"normal",
100,
16,
20,
"#FFFFFF"
]
}
],
"links": [
[
59,
3,
0,
24,
0,
"IMAGE"
],
[
60,
2,
0,
24,
1,
"IMAGE"
],
[
61,
2,
1,
24,
2,
"MASK"
],
[
62,
24,
0,
23,
0,
"IMAGE"
]
],
"groups": [],
"config": {},
"extra": {},
"version": 0.4
{
"last_node_id": 24,
"last_link_id": 62,
"nodes": [
{
"id": 23,
"type": "SaveImage",
"pos": [
890,
-660
],
"size": [
315,
270
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 62
}
],
"properties": {},
"widgets_values": [
"ComfyUI"
]
},
{
"id": 3,
"type": "LoadImage",
"pos": [
-160,
-680
],
"size": {
"0": 315,
"1": 314
},
"flags": {},
"order": 0,
"mode": 0,
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
59
],
"shape": 3,
"slot_index": 0
},
{
"name": "MASK",
"type": "MASK",
"links": null,
"shape": 3
}
],
"properties": {
"Node name for S&R": "LoadImage"
},
"widgets_values": [
"512x512bkgd.jpg",
"image"
]
},
{
"id": 2,
"type": "LoadImage",
"pos": [
180,
-680
],
"size": {
"0": 315,
"1": 314
},
"flags": {},
"order": 1,
"mode": 0,
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
60
],
"shape": 3,
"slot_index": 0
},
{
"name": "MASK",
"type": "MASK",
"links": [
61
],
"shape": 3,
"slot_index": 1
}
],
"properties": {
"Node name for S&R": "LoadImage"
},
"widgets_values": [
"512x512.png",
"image"
]
},
{
"id": 24,
"type": "LayerStyle_OuterGlow",
"pos": [
536,
-631
],
"size": {
"0": 315,
"1": 218
},
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"name": "background_image",
"type": "IMAGE",
"link": 59
},
{
"name": "layer_image",
"type": "IMAGE",
"link": 60
},
{
"name": "layer_mask",
"type": "MASK",
"link": 61
}
],
"outputs": [
{
"name": "image",
"type": "IMAGE",
"links": [
62
],
"shape": 3,
"slot_index": 0
}
],
"properties": {
"Node name for S&R": "LayerStyle_OuterGlow"
},
"widgets_values": [
true,
"normal",
100,
16,
20,
"#FFFFFF"
]
}
],
"links": [
[
59,
3,
0,
24,
0,
"IMAGE"
],
[
60,
2,
0,
24,
1,
"IMAGE"
],
[
61,
2,
1,
24,
2,
"MASK"
],
[
62,
24,
0,
23,
0,
"IMAGE"
]
],
"groups": [],
"config": {},
"extra": {},
"version": 0.4
}
+8 -8
View File
@@ -9,10 +9,10 @@
758,
309
],
"size": [
315,
242
],
"size": {
"0": 315,
"1": 242
},
"flags": {},
"order": 2,
"mode": 0,
@@ -145,10 +145,10 @@
1105,
285
],
"size": [
299.70625443891913,
311.19479890303114
],
"size": {
"0": 299.7062683105469,
"1": 311.1947937011719
},
"flags": {},
"order": 3,
"mode": 0,