diff --git a/README.MD b/README.MD
index 30cf056..a8ba9dc 100644
--- a/README.MD
+++ b/README.MD
@@ -73,11 +73,11 @@ Node options:
* invert_mask: Whether to reverse the mask.
* blend_mode3: Blending mode of stroke.
* opacity: Opacity of stroke.
-* shrink*: Stroke shrinkage amplitude.
-* expansion*: Stroke expansion amplitude.
+* inner_stroke*: Stroke shrinkage amplitude.
+* outer_stroke*: Stroke expansion amplitude.
* stroke_color: Stroke color, described in hexadecimal RGB format.
-*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.
+*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
diff --git a/README_CN.MD b/README_CN.MD
index 5894e41..4d0b7e5 100644
--- a/README_CN.MD
+++ b/README_CN.MD
@@ -70,8 +70,8 @@ ComfyUI
* invert_mask: 是否反转遮罩。
* blend_mode3: 描边的混合模式。
* opacity: 不透明度。
-* shrink*: 描边收缩幅度。
-* expansion*:描边扩张幅度。
+* inner_stroke*: 描边向内收缩幅度。
+* outer_stroke*:描边向外扩张幅度。
* stroke_color: 描边颜色,使用16进制RGB格式描述。
*描边的宽度等于收缩值加上扩张值。两个值分开设置能更方便的调整边框范围。
diff --git a/image/stroke_example.png b/image/stroke_example.png
index 8b2eb84..b9e354b 100644
Binary files a/image/stroke_example.png and b/image/stroke_example.png differ
diff --git a/image/stroke_node.png b/image/stroke_node.png
index 881fb81..58decdc 100644
Binary files a/image/stroke_node.png and b/image/stroke_node.png differ
diff --git a/py/illumine.py b/py/illumine.py
new file mode 100644
index 0000000..94116a6
--- /dev/null
+++ b/py/illumine.py
@@ -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"
+}
\ No newline at end of file
diff --git a/py/stroke.py b/py/stroke.py
index 97ea8a9..ca4c76c 100644
--- a/py/stroke.py
+++ b/py/stroke.py
@@ -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)
diff --git a/workflow/drop_shadow_example.json b/workflow/drop_shadow_example.json
index a4241ed..4ec4bd8 100644
--- a/workflow/drop_shadow_example.json
+++ b/workflow/drop_shadow_example.json
@@ -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
}
\ No newline at end of file
diff --git a/workflow/image_blend_example.json b/workflow/image_blend_example.json
index 8eddc19..f3fb892 100644
--- a/workflow/image_blend_example.json
+++ b/workflow/image_blend_example.json
@@ -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
}
\ No newline at end of file
diff --git a/workflow/outer_glow_example.json b/workflow/outer_glow_example.json
index 56e788c..c6e1151 100644
--- a/workflow/outer_glow_example.json
+++ b/workflow/outer_glow_example.json
@@ -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
}
\ No newline at end of file
diff --git a/workflow/stroke_example.json b/workflow/stroke_example.json
index 8709cf4..00da33e 100644
--- a/workflow/stroke_example.json
+++ b/workflow/stroke_example.json
@@ -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,