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,