diff --git a/README.MD b/README.MD
index cc02d20..b66f94b 100644
--- a/README.MD
+++ b/README.MD
@@ -70,6 +70,9 @@ When this error has occurred, please check the network environment.
## Update
**If the dependency package error after updating, please reinstall the relevant dependency packages.
+
+* Commit [SaveImagePlus](#SaveImagePlus) node,It can customize the directory where the picture is saved, add a timestamp to the file name, select the save format, set the image compression rate, set whether to save the workflow, and optionally add invisible watermarks to the picture.
+* Commit [AddBlindWaterMark](#AddBlindWaterMark), [ShowBlindWaterMark](#ShowBlindWaterMark) nodes, Add invisible watermark and decoded watermark to the picture. Commit [CreateQRCode](#CreateQRCode), [DecodeQRCode](#DecodeQRCode) nodes, It can generate two-dimensional code pictures and decode two-dimensional codes.
* [ImageScaleRestoreV2](#ImageScaleRestoreV2), [ImageScaleByAspectRatioV2](#ImageScaleByAspectRatioV2), [ImageAutoCropV2](#ImageAutoCropV2) nodes add options for ```width``` and ```height```, which can specify width or height as fixed values.
* Commit [PurgeVRAM](#PurgeVRAM) node, Clean up VRAM an RAM.
* Commit [AutoAdjust](#AutoAdjust) node, it can automatically adjust image contrast and white balance.
@@ -1094,6 +1097,55 @@ Node Options:
* purge_models: Unload all loaded models。
+
+### SaveImagePlus
+Enhanced save image node. You can customize the directory where the picture is saved, add a timestamp to the file name, select the save format, set the image compression rate, set whether to save the workflow, and optionally add invisible watermarks to the picture. (Add information in a way that is invisible to the naked eye, and use the ```ShowBlindWaterMark``` node to decode the watermark. )
+
+Node Options:
+![image](image/save_image_plus_node.png)
+* iamge: The input image.
+* custom_path: User-defined directory, enter the directory name in the correct format. If empty, it is saved in the default output directory of ComfyUI. Note that when the file is set to save to the user directory, the picture preview cannot be seen, which is normal.
+* filename_prefix: The prefix of file name.
+* timestamp: Timestamp the file name, opting for date, time to seconds, and time to milliseconds.
+* format: The format of image save. Currently available in ```png``` and ```jpg```. Note that only png format is supported for RGBA mode pictures.
+* quality: Image quality, the value range 10-100, the higher the value, the better the picture quality, the volume of the file also correspondingly increases.
+* meta_data: Whether to save metadata, that is workflow information. Set this to false if you do not want the workflow to be leaked.
+* blind_watermark: The text entered here (does not support multilingualism) will be converted into a QR code and saved as an invisible watermark. Use ```ShowBlindWaterMark``` node can decode watermarks. Note that pictures with watermarks are recommended to be saved in png format, and lower-quality jpg format will cause watermark information to be lost.
+
+### AddBlindWaterMark
+![image](image/watermark_example.png)
+Add an invisible watermark to a picture. Add the watermark image in a way that is invisible to the naked eye, and use the ```ShowBlindWaterMark``` node to decode the watermark.
+
+Node Options:
+![image](image/add_blind_watermark_node.png)
+* iamge: The input image.
+* watermark_image: Watermark image. The image entered here will automatically be converted to a square black and white image as a watermark. It is recommended to use a QR code as a watermark.
+
+
+### ShowBlindWaterMark
+Decoding the invisible watermark added to the ```AddBlindWaterMark``` and ```SaveImagePlus``` nodes.
+![image](image/show_blind_watermark_node.png)
+
+
+### CreateQRCode
+Generate a square QR code picture.
+
+Node Options:
+![image](image/create_qrcode_node.png)
+* size: The side length of image.
+* border: The size of the border around the QR code, the larger the value, the wider the border.
+* text: Enter the text content of the QR code here, and multi-language is not supported.
+
+### DecodeQRCode
+Decoding the QR code.
+
+Node Options:
+![image](image/decode_qrcode_node.png)
+* image: The input QR code image.
+* pre_blur: Pre-blurring, you can try to adjust this value for QR codes that are difficult to identify.
+
+
+
# LayerMask
![image](image/layermask_nodes.png)
diff --git a/README_CN.MD b/README_CN.MD
index cb3676a..56cf6cd 100644
--- a/README_CN.MD
+++ b/README_CN.MD
@@ -70,6 +70,9 @@ git clone https://github.com/chflame163/ComfyUI_LayerStyle.git
## 更新说明
**如果本插件更新后出现依赖包错误,请重新安装相关依赖包。
+
+* 添加 [SaveImagePlus](#SaveImagePlus)节点,可自定义保存图片的目录,文件名增加时间戳,选择保存格式,设置图片压缩率,设置是否保存工作流,以及可选给图片添加隐形水印。
+* 添加 [AddBlindWaterMark](#AddBlindWaterMark), [ShowBlindWaterMark](#ShowBlindWaterMark)节点,为图片增加隐形水印和解码水印。添加 [CreateQRCode](#CreateQRCode), [DecodeQRCode](#DecodeQRCode)节点,可生成二维码图片和解码二维码。
* [ImageScaleRestoreV2](#ImageScaleRestoreV2), [ImageScaleByAspectRatioV2](#ImageScaleByAspectRatioV2), [ImageAutoCropV2](#ImageAutoCropV2)节点增加```width```和```height```选项,可指定宽度或高度为固定值。
* 添加 [PurgeVRAM](#PurgeVRAM) 节点, 清理显存和内存。
* 添加 [AutoAdjust](#AutoAdjust) 节点, 自动调整图片对比度和白平衡。
@@ -1083,6 +1086,55 @@ cropped_mask: 裁切后的遮罩。
* purge_models: 清理已加载的模型。
+### SaveImagePlus
+增强版的保存图片节点。可自定义保存图片的目录,文件名增加时间戳,选择保存格式,设置图片压缩率,设置是否保存工作流,以及可选给图片添加隐形水印。(以肉眼无法觉察的方式添加信息,使用配套的```ShowBlindWaterMark```节点可以解码水印。)
+
+节点选项说明:
+![image](image/save_image_plus_node.png)
+* iamge: 输入的图片。
+* custom_path: 用户自定义目录,请按正确的格式输入目录名。如果为空则保存在ComfyUI默认的output目录。注意当文件被设置为保存到用户目录时,无法看到图片预览,这是正常现象。
+* filename_prefix:文件名前缀。
+* timestamp: 为文件名加上时间戳,可选择日期、时间到秒和时间到毫秒。
+* format:图片保存格式。目前提供png和jpg两种。注意RGBA模式的图片仅支持png格式。
+* quality:图片质量,数值范围10-100,数值越高,图片质量越好,文件的体积也对应增大。
+* meta_data:是否保存元数据即工作流信息。如果不希望泄露工作流,请把这里设置为false。
+* blind_watermark:这里输入的文字(不支持多语言)将被转换为二维码作为隐形水印保存,使用```ShowBlindWaterMark```节点可以解码水印。注意有水印的图片建议保存为png格式,质量较低的jpg格式将导致水印信息丢失。
+
+### AddBlindWaterMark
+![image](image/watermark_example.png)
+给图片添加隐形水印。以肉眼无法觉察的方式添加水印图片,使用```ShowBlindWaterMark```节点可以解码水印。
+
+节点选项说明:
+![image](image/add_blind_watermark_node.png)
+* iamge: 输入的图片。
+* watermark_image: 水印图片。这里输入的图片将自动转为正方形的黑白图片作为水印。建议使用二维码作为水印。
+
+
+### ShowBlindWaterMark
+对```AddBlindWaterMark``` 和 ```SaveImagePlus``` 节点添加的隐形水印解码。
+![image](image/show_blind_watermark_node.png)
+
+
+### CreateQRCode
+生成一个正方形的二维码图片。
+
+节点选项说明:
+![image](image/create_qrcode_node.png)
+* size: 生成图片的边长。
+* border: 二维码四周边框的大小,数值越大,边框越宽。
+* text: 这里输入二维码文字内容,不支持多语言。
+
+### DecodeQRCode
+解码二维码。
+
+节点选项说明:
+![image](image/decode_qrcode_node.png)
+* image: 输入二维码图片。
+* pre_blur: 预模糊,对难以识别的二维码可以尝试调整此数值。
+
+
+
+
# LayerMask
![image](image/layermask_nodes.png)
diff --git a/image/HSV_node.jpg b/image/HSV_node.jpg
new file mode 100644
index 0000000..17e1513
Binary files /dev/null and b/image/HSV_node.jpg differ
diff --git a/image/HSV_node.png b/image/HSV_node.png
deleted file mode 100644
index 61a6325..0000000
Binary files a/image/HSV_node.png and /dev/null differ
diff --git a/image/LAB_node.jpg b/image/LAB_node.jpg
new file mode 100644
index 0000000..9ca4cee
Binary files /dev/null and b/image/LAB_node.jpg differ
diff --git a/image/LAB_node.png b/image/LAB_node.png
deleted file mode 100644
index cdfbf59..0000000
Binary files a/image/LAB_node.png and /dev/null differ
diff --git a/image/RGB_node.jpg b/image/RGB_node.jpg
new file mode 100644
index 0000000..7c4ec5a
Binary files /dev/null and b/image/RGB_node.jpg differ
diff --git a/image/RGB_node.png b/image/RGB_node.png
deleted file mode 100644
index 41bffd1..0000000
Binary files a/image/RGB_node.png and /dev/null differ
diff --git a/image/RGB_value_example.jpg b/image/RGB_value_example.jpg
new file mode 100644
index 0000000..c6e1595
Binary files /dev/null and b/image/RGB_value_example.jpg differ
diff --git a/image/RGB_value_example.png b/image/RGB_value_example.png
deleted file mode 100644
index d6590f6..0000000
Binary files a/image/RGB_value_example.png and /dev/null differ
diff --git a/image/YUV_node.jpg b/image/YUV_node.jpg
new file mode 100644
index 0000000..1129798
Binary files /dev/null and b/image/YUV_node.jpg differ
diff --git a/image/YUV_node.png b/image/YUV_node.png
deleted file mode 100644
index 8ff49cc..0000000
Binary files a/image/YUV_node.png and /dev/null differ
diff --git a/image/add_blind_watermark_node.jpg b/image/add_blind_watermark_node.jpg
new file mode 100644
index 0000000..f2c95fb
Binary files /dev/null and b/image/add_blind_watermark_node.jpg differ
diff --git a/image/auto_adjust_example.jpg b/image/auto_adjust_example.jpg
new file mode 100644
index 0000000..ccec70e
Binary files /dev/null and b/image/auto_adjust_example.jpg differ
diff --git a/image/auto_adjust_example.png b/image/auto_adjust_example.png
deleted file mode 100644
index 806803d..0000000
Binary files a/image/auto_adjust_example.png and /dev/null differ
diff --git a/image/auto_adjust_node.jpg b/image/auto_adjust_node.jpg
new file mode 100644
index 0000000..3ac9828
Binary files /dev/null and b/image/auto_adjust_node.jpg differ
diff --git a/image/auto_adjust_node.png b/image/auto_adjust_node.png
deleted file mode 100644
index 0b44bfb..0000000
Binary files a/image/auto_adjust_node.png and /dev/null differ
diff --git a/image/auto_brightness_example.jpg b/image/auto_brightness_example.jpg
new file mode 100644
index 0000000..368ca93
Binary files /dev/null and b/image/auto_brightness_example.jpg differ
diff --git a/image/auto_brightness_example.png b/image/auto_brightness_example.png
deleted file mode 100644
index d5e76aa..0000000
Binary files a/image/auto_brightness_example.png and /dev/null differ
diff --git a/image/auto_brightness_node.jpg b/image/auto_brightness_node.jpg
new file mode 100644
index 0000000..0d108b3
Binary files /dev/null and b/image/auto_brightness_node.jpg differ
diff --git a/image/auto_brightness_node.png b/image/auto_brightness_node.png
deleted file mode 100644
index 38ef795..0000000
Binary files a/image/auto_brightness_node.png and /dev/null differ
diff --git a/image/birefnet_ultra_example.jpg b/image/birefnet_ultra_example.jpg
new file mode 100644
index 0000000..7ec3f83
Binary files /dev/null and b/image/birefnet_ultra_example.jpg differ
diff --git a/image/birefnet_ultra_example.png b/image/birefnet_ultra_example.png
deleted file mode 100644
index e56b3c1..0000000
Binary files a/image/birefnet_ultra_example.png and /dev/null differ
diff --git a/image/birefnet_ultra_node.jpg b/image/birefnet_ultra_node.jpg
new file mode 100644
index 0000000..10ee79b
Binary files /dev/null and b/image/birefnet_ultra_node.jpg differ
diff --git a/image/birefnet_ultra_node.png b/image/birefnet_ultra_node.png
deleted file mode 100644
index 5d52281..0000000
Binary files a/image/birefnet_ultra_node.png and /dev/null differ
diff --git a/image/blend_mode_result.jpg b/image/blend_mode_result.jpg
new file mode 100644
index 0000000..732d7b8
Binary files /dev/null and b/image/blend_mode_result.jpg differ
diff --git a/image/blend_mode_result.png b/image/blend_mode_result.png
deleted file mode 100644
index 64c955c..0000000
Binary files a/image/blend_mode_result.png and /dev/null differ
diff --git a/image/blend_mode_v2_example.jpg b/image/blend_mode_v2_example.jpg
new file mode 100644
index 0000000..b2fbaad
Binary files /dev/null and b/image/blend_mode_v2_example.jpg differ
diff --git a/image/blend_mode_v2_example.png b/image/blend_mode_v2_example.png
deleted file mode 100644
index a8e8043..0000000
Binary files a/image/blend_mode_v2_example.png and /dev/null differ
diff --git a/image/blendif_mask_example.jpg b/image/blendif_mask_example.jpg
new file mode 100644
index 0000000..fc71239
Binary files /dev/null and b/image/blendif_mask_example.jpg differ
diff --git a/image/blendif_mask_example.png b/image/blendif_mask_example.png
deleted file mode 100644
index 95c8351..0000000
Binary files a/image/blendif_mask_example.png and /dev/null differ
diff --git a/image/blendif_mask_node.jpg b/image/blendif_mask_node.jpg
new file mode 100644
index 0000000..c2cbc01
Binary files /dev/null and b/image/blendif_mask_node.jpg differ
diff --git a/image/blendif_mask_node.png b/image/blendif_mask_node.png
deleted file mode 100644
index d7f0f48..0000000
Binary files a/image/blendif_mask_node.png and /dev/null differ
diff --git a/image/boolean_node.jpg b/image/boolean_node.jpg
new file mode 100644
index 0000000..2c749e8
Binary files /dev/null and b/image/boolean_node.jpg differ
diff --git a/image/boolean_node.png b/image/boolean_node.png
deleted file mode 100644
index eb1e2ab..0000000
Binary files a/image/boolean_node.png and /dev/null differ
diff --git a/image/boolean_operator_node.jpg b/image/boolean_operator_node.jpg
new file mode 100644
index 0000000..3b734d5
Binary files /dev/null and b/image/boolean_operator_node.jpg differ
diff --git a/image/boolean_operator_node.png b/image/boolean_operator_node.png
deleted file mode 100644
index f3ff1e3..0000000
Binary files a/image/boolean_operator_node.png and /dev/null differ
diff --git a/image/brightness_&_contrast_node.jpg b/image/brightness_&_contrast_node.jpg
new file mode 100644
index 0000000..f32c9d8
Binary files /dev/null and b/image/brightness_&_contrast_node.jpg differ
diff --git a/image/brightness_&_contrast_node.png b/image/brightness_&_contrast_node.png
deleted file mode 100644
index ff65225..0000000
Binary files a/image/brightness_&_contrast_node.png and /dev/null differ
diff --git a/image/channel_shake_example.jpg b/image/channel_shake_example.jpg
new file mode 100644
index 0000000..f76f904
Binary files /dev/null and b/image/channel_shake_example.jpg differ
diff --git a/image/channel_shake_example.png b/image/channel_shake_example.png
deleted file mode 100644
index 0a55b1f..0000000
Binary files a/image/channel_shake_example.png and /dev/null differ
diff --git a/image/channel_shake_node.jpg b/image/channel_shake_node.jpg
new file mode 100644
index 0000000..2879dea
Binary files /dev/null and b/image/channel_shake_node.jpg differ
diff --git a/image/channel_shake_node.png b/image/channel_shake_node.png
deleted file mode 100644
index e7a2391..0000000
Binary files a/image/channel_shake_node.png and /dev/null differ
diff --git a/image/color_adapter_example.jpg b/image/color_adapter_example.jpg
new file mode 100644
index 0000000..08a17e3
Binary files /dev/null and b/image/color_adapter_example.jpg differ
diff --git a/image/color_adapter_example.png b/image/color_adapter_example.png
deleted file mode 100644
index cfddfcb..0000000
Binary files a/image/color_adapter_example.png and /dev/null differ
diff --git a/image/color_adapter_node.jpg b/image/color_adapter_node.jpg
new file mode 100644
index 0000000..3c41662
Binary files /dev/null and b/image/color_adapter_node.jpg differ
diff --git a/image/color_adapter_node.png b/image/color_adapter_node.png
deleted file mode 100644
index a48b1b7..0000000
Binary files a/image/color_adapter_node.png and /dev/null differ
diff --git a/image/color_balance_example.jpg b/image/color_balance_example.jpg
new file mode 100644
index 0000000..e019e68
Binary files /dev/null and b/image/color_balance_example.jpg differ
diff --git a/image/color_balance_example.png b/image/color_balance_example.png
deleted file mode 100644
index 33a63c5..0000000
Binary files a/image/color_balance_example.png and /dev/null differ
diff --git a/image/color_balance_node.jpg b/image/color_balance_node.jpg
new file mode 100644
index 0000000..aeaa81e
Binary files /dev/null and b/image/color_balance_node.jpg differ
diff --git a/image/color_balance_node.png b/image/color_balance_node.png
deleted file mode 100644
index f1e5bd4..0000000
Binary files a/image/color_balance_node.png and /dev/null differ
diff --git a/image/color_image_example.jpg b/image/color_image_example.jpg
new file mode 100644
index 0000000..fe6567a
Binary files /dev/null and b/image/color_image_example.jpg differ
diff --git a/image/color_image_example.png b/image/color_image_example.png
deleted file mode 100644
index 211a03b..0000000
Binary files a/image/color_image_example.png and /dev/null differ
diff --git a/image/color_image_node.jpg b/image/color_image_node.jpg
new file mode 100644
index 0000000..38b4477
Binary files /dev/null and b/image/color_image_node.jpg differ
diff --git a/image/color_image_node.png b/image/color_image_node.png
deleted file mode 100644
index 8f2e92f..0000000
Binary files a/image/color_image_node.png and /dev/null differ
diff --git a/image/color_image_v2_node.jpg b/image/color_image_v2_node.jpg
new file mode 100644
index 0000000..c343475
Binary files /dev/null and b/image/color_image_v2_node.jpg differ
diff --git a/image/color_image_v2_node.png b/image/color_image_v2_node.png
deleted file mode 100644
index 119bfd1..0000000
Binary files a/image/color_image_v2_node.png and /dev/null differ
diff --git a/image/color_map_node.jpg b/image/color_map_node.jpg
new file mode 100644
index 0000000..99fd5f9
Binary files /dev/null and b/image/color_map_node.jpg differ
diff --git a/image/color_map_node.png b/image/color_map_node.png
deleted file mode 100644
index ad0bfc6..0000000
Binary files a/image/color_map_node.png and /dev/null differ
diff --git a/image/color_of_shadow_and_highlight_example.jpg b/image/color_of_shadow_and_highlight_example.jpg
new file mode 100644
index 0000000..49973b9
Binary files /dev/null and b/image/color_of_shadow_and_highlight_example.jpg differ
diff --git a/image/color_of_shadow_and_highlight_example.png b/image/color_of_shadow_and_highlight_example.png
deleted file mode 100644
index 6ae0cd1..0000000
Binary files a/image/color_of_shadow_and_highlight_example.png and /dev/null differ
diff --git a/image/color_of_shadow_and_highlight_node.jpg b/image/color_of_shadow_and_highlight_node.jpg
new file mode 100644
index 0000000..b7e695a
Binary files /dev/null and b/image/color_of_shadow_and_highlight_node.jpg differ
diff --git a/image/color_of_shadow_and_highlight_node.png b/image/color_of_shadow_and_highlight_node.png
deleted file mode 100644
index eda217e..0000000
Binary files a/image/color_of_shadow_and_highlight_node.png and /dev/null differ
diff --git a/image/color_overlay_example.jpg b/image/color_overlay_example.jpg
new file mode 100644
index 0000000..99c2ef1
Binary files /dev/null and b/image/color_overlay_example.jpg differ
diff --git a/image/color_overlay_example.png b/image/color_overlay_example.png
deleted file mode 100644
index 01eca7a..0000000
Binary files a/image/color_overlay_example.png and /dev/null differ
diff --git a/image/color_overlay_node.jpg b/image/color_overlay_node.jpg
new file mode 100644
index 0000000..2a9b38a
Binary files /dev/null and b/image/color_overlay_node.jpg differ
diff --git a/image/color_overlay_node.png b/image/color_overlay_node.png
deleted file mode 100644
index 367dcff..0000000
Binary files a/image/color_overlay_node.png and /dev/null differ
diff --git a/image/color_picker.jpg b/image/color_picker.jpg
new file mode 100644
index 0000000..7323337
Binary files /dev/null and b/image/color_picker.jpg differ
diff --git a/image/color_picker.png b/image/color_picker.png
deleted file mode 100644
index 6bade89..0000000
Binary files a/image/color_picker.png and /dev/null differ
diff --git a/image/color_temperature_example.jpg b/image/color_temperature_example.jpg
new file mode 100644
index 0000000..3e93e0e
Binary files /dev/null and b/image/color_temperature_example.jpg differ
diff --git a/image/color_temperature_example.png b/image/color_temperature_example.png
deleted file mode 100644
index 9447311..0000000
Binary files a/image/color_temperature_example.png and /dev/null differ
diff --git a/image/color_temperature_node.jpg b/image/color_temperature_node.jpg
new file mode 100644
index 0000000..faa7f78
Binary files /dev/null and b/image/color_temperature_node.jpg differ
diff --git a/image/color_temperature_node.png b/image/color_temperature_node.png
deleted file mode 100644
index 90c20a8..0000000
Binary files a/image/color_temperature_node.png and /dev/null differ
diff --git a/image/colormap_result.jpg b/image/colormap_result.jpg
new file mode 100644
index 0000000..2a7ea28
Binary files /dev/null and b/image/colormap_result.jpg differ
diff --git a/image/colormap_result.png b/image/colormap_result.png
deleted file mode 100644
index 3e42aa8..0000000
Binary files a/image/colormap_result.png and /dev/null differ
diff --git a/image/corp_box_resolve_node.jpg b/image/corp_box_resolve_node.jpg
new file mode 100644
index 0000000..66fe0d3
Binary files /dev/null and b/image/corp_box_resolve_node.jpg differ
diff --git a/image/corp_box_resolve_node.png b/image/corp_box_resolve_node.png
deleted file mode 100644
index 718beee..0000000
Binary files a/image/corp_box_resolve_node.png and /dev/null differ
diff --git a/image/corp_by_mask_example.jpg b/image/corp_by_mask_example.jpg
new file mode 100644
index 0000000..43e1efb
Binary files /dev/null and b/image/corp_by_mask_example.jpg differ
diff --git a/image/corp_by_mask_example.png b/image/corp_by_mask_example.png
deleted file mode 100644
index 595f799..0000000
Binary files a/image/corp_by_mask_example.png and /dev/null differ
diff --git a/image/corp_by_mask_node.jpg b/image/corp_by_mask_node.jpg
new file mode 100644
index 0000000..a02cefe
Binary files /dev/null and b/image/corp_by_mask_node.jpg differ
diff --git a/image/corp_by_mask_node.png b/image/corp_by_mask_node.png
deleted file mode 100644
index 41f803a..0000000
Binary files a/image/corp_by_mask_node.png and /dev/null differ
diff --git a/image/corp_by_mask_v2_node.jpg b/image/corp_by_mask_v2_node.jpg
new file mode 100644
index 0000000..bb5ba7e
Binary files /dev/null and b/image/corp_by_mask_v2_node.jpg differ
diff --git a/image/corp_by_mask_v2_node.png b/image/corp_by_mask_v2_node.png
deleted file mode 100644
index 1c4d9b8..0000000
Binary files a/image/corp_by_mask_v2_node.png and /dev/null differ
diff --git a/image/create_gradient_mask_example.jpg b/image/create_gradient_mask_example.jpg
new file mode 100644
index 0000000..df04384
Binary files /dev/null and b/image/create_gradient_mask_example.jpg differ
diff --git a/image/create_gradient_mask_example.png b/image/create_gradient_mask_example.png
deleted file mode 100644
index 2502a1d..0000000
Binary files a/image/create_gradient_mask_example.png and /dev/null differ
diff --git a/image/create_gradient_mask_example2.jpg b/image/create_gradient_mask_example2.jpg
new file mode 100644
index 0000000..d3a7876
Binary files /dev/null and b/image/create_gradient_mask_example2.jpg differ
diff --git a/image/create_gradient_mask_example2.png b/image/create_gradient_mask_example2.png
deleted file mode 100644
index a1652dd..0000000
Binary files a/image/create_gradient_mask_example2.png and /dev/null differ
diff --git a/image/create_gradient_mask_node.jpg b/image/create_gradient_mask_node.jpg
new file mode 100644
index 0000000..16e01db
Binary files /dev/null and b/image/create_gradient_mask_node.jpg differ
diff --git a/image/create_gradient_mask_node.png b/image/create_gradient_mask_node.png
deleted file mode 100644
index 449fe35..0000000
Binary files a/image/create_gradient_mask_node.png and /dev/null differ
diff --git a/image/create_qrcode_node.jpg b/image/create_qrcode_node.jpg
new file mode 100644
index 0000000..87d1a17
Binary files /dev/null and b/image/create_qrcode_node.jpg differ
diff --git a/image/data_nodes_example.jpg b/image/data_nodes_example.jpg
new file mode 100644
index 0000000..6995c09
Binary files /dev/null and b/image/data_nodes_example.jpg differ
diff --git a/image/data_nodes_example.png b/image/data_nodes_example.png
deleted file mode 100644
index c17bc75..0000000
Binary files a/image/data_nodes_example.png and /dev/null differ
diff --git a/image/decode_qrcode_node.jpg b/image/decode_qrcode_node.jpg
new file mode 100644
index 0000000..569814d
Binary files /dev/null and b/image/decode_qrcode_node.jpg differ
diff --git a/image/drop_shadow_example.jpg b/image/drop_shadow_example.jpg
new file mode 100644
index 0000000..f21fe18
Binary files /dev/null and b/image/drop_shadow_example.jpg differ
diff --git a/image/drop_shadow_example.png b/image/drop_shadow_example.png
deleted file mode 100644
index 4c64938..0000000
Binary files a/image/drop_shadow_example.png and /dev/null differ
diff --git a/image/drop_shadow_node.jpg b/image/drop_shadow_node.jpg
new file mode 100644
index 0000000..04c8589
Binary files /dev/null and b/image/drop_shadow_node.jpg differ
diff --git a/image/drop_shadow_node.png b/image/drop_shadow_node.png
deleted file mode 100644
index c481aff..0000000
Binary files a/image/drop_shadow_node.png and /dev/null differ
diff --git a/image/exposure_example.jpg b/image/exposure_example.jpg
new file mode 100644
index 0000000..79f6bc2
Binary files /dev/null and b/image/exposure_example.jpg differ
diff --git a/image/exposure_example.png b/image/exposure_example.png
deleted file mode 100644
index d70b598..0000000
Binary files a/image/exposure_example.png and /dev/null differ
diff --git a/image/extend_canvas_example.jpg b/image/extend_canvas_example.jpg
new file mode 100644
index 0000000..7e15756
Binary files /dev/null and b/image/extend_canvas_example.jpg differ
diff --git a/image/extend_canvas_example.png b/image/extend_canvas_example.png
deleted file mode 100644
index cc65b2e..0000000
Binary files a/image/extend_canvas_example.png and /dev/null differ
diff --git a/image/extend_canvas_node.jpg b/image/extend_canvas_node.jpg
new file mode 100644
index 0000000..743b68d
Binary files /dev/null and b/image/extend_canvas_node.jpg differ
diff --git a/image/extend_canvas_node.png b/image/extend_canvas_node.png
deleted file mode 100644
index 2dc01e5..0000000
Binary files a/image/extend_canvas_node.png and /dev/null differ
diff --git a/image/extend_canvas_v2_node.jpg b/image/extend_canvas_v2_node.jpg
new file mode 100644
index 0000000..99873a7
Binary files /dev/null and b/image/extend_canvas_v2_node.jpg differ
diff --git a/image/extend_canvas_v2_node.png b/image/extend_canvas_v2_node.png
deleted file mode 100644
index ab220c3..0000000
Binary files a/image/extend_canvas_v2_node.png and /dev/null differ
diff --git a/image/film_example.jpg b/image/film_example.jpg
new file mode 100644
index 0000000..1e59ce7
Binary files /dev/null and b/image/film_example.jpg differ
diff --git a/image/film_example.png b/image/film_example.png
deleted file mode 100644
index 50e706b..0000000
Binary files a/image/film_example.png and /dev/null differ
diff --git a/image/film_node.jpg b/image/film_node.jpg
new file mode 100644
index 0000000..19e8312
Binary files /dev/null and b/image/film_node.jpg differ
diff --git a/image/film_node.png b/image/film_node.png
deleted file mode 100644
index e386990..0000000
Binary files a/image/film_node.png and /dev/null differ
diff --git a/image/float_node.jpg b/image/float_node.jpg
new file mode 100644
index 0000000..13509d6
Binary files /dev/null and b/image/float_node.jpg differ
diff --git a/image/float_node.png b/image/float_node.png
deleted file mode 100644
index fd9190e..0000000
Binary files a/image/float_node.png and /dev/null differ
diff --git a/image/gamma_node.jpg b/image/gamma_node.jpg
new file mode 100644
index 0000000..9c34762
Binary files /dev/null and b/image/gamma_node.jpg differ
diff --git a/image/gamma_node.png b/image/gamma_node.png
deleted file mode 100644
index e15210b..0000000
Binary files a/image/gamma_node.png and /dev/null differ
diff --git a/image/gaussian_blur_example.jpg b/image/gaussian_blur_example.jpg
new file mode 100644
index 0000000..1fc3533
Binary files /dev/null and b/image/gaussian_blur_example.jpg differ
diff --git a/image/gaussian_blur_example.png b/image/gaussian_blur_example.png
deleted file mode 100644
index 9f1730f..0000000
Binary files a/image/gaussian_blur_example.png and /dev/null differ
diff --git a/image/get_color_tone_example.jpg b/image/get_color_tone_example.jpg
new file mode 100644
index 0000000..a3dbaad
Binary files /dev/null and b/image/get_color_tone_example.jpg differ
diff --git a/image/get_color_tone_example.png b/image/get_color_tone_example.png
deleted file mode 100644
index d9f9571..0000000
Binary files a/image/get_color_tone_example.png and /dev/null differ
diff --git a/image/get_color_tone_node.jpg b/image/get_color_tone_node.jpg
new file mode 100644
index 0000000..197dc95
Binary files /dev/null and b/image/get_color_tone_node.jpg differ
diff --git a/image/get_color_tone_node.png b/image/get_color_tone_node.png
deleted file mode 100644
index 57c2fff..0000000
Binary files a/image/get_color_tone_node.png and /dev/null differ
diff --git a/image/get_color_tone_v2_example.jpg b/image/get_color_tone_v2_example.jpg
new file mode 100644
index 0000000..15ffef1
Binary files /dev/null and b/image/get_color_tone_v2_example.jpg differ
diff --git a/image/get_color_tone_v2_example.png b/image/get_color_tone_v2_example.png
deleted file mode 100644
index d635fd2..0000000
Binary files a/image/get_color_tone_v2_example.png and /dev/null differ
diff --git a/image/get_color_tone_v2_node.jpg b/image/get_color_tone_v2_node.jpg
new file mode 100644
index 0000000..8717c99
Binary files /dev/null and b/image/get_color_tone_v2_node.jpg differ
diff --git a/image/get_color_tone_v2_node.png b/image/get_color_tone_v2_node.png
deleted file mode 100644
index 9504705..0000000
Binary files a/image/get_color_tone_v2_node.png and /dev/null differ
diff --git a/image/get_image_size_node.jpg b/image/get_image_size_node.jpg
new file mode 100644
index 0000000..419e0bf
Binary files /dev/null and b/image/get_image_size_node.jpg differ
diff --git a/image/get_image_size_node.png b/image/get_image_size_node.png
deleted file mode 100644
index f8bc6cf..0000000
Binary files a/image/get_image_size_node.png and /dev/null differ
diff --git a/image/gradient_image_example.jpg b/image/gradient_image_example.jpg
new file mode 100644
index 0000000..c8ced06
Binary files /dev/null and b/image/gradient_image_example.jpg differ
diff --git a/image/gradient_image_example.png b/image/gradient_image_example.png
deleted file mode 100644
index b77184d..0000000
Binary files a/image/gradient_image_example.png and /dev/null differ
diff --git a/image/gradient_image_node.jpg b/image/gradient_image_node.jpg
new file mode 100644
index 0000000..e86c332
Binary files /dev/null and b/image/gradient_image_node.jpg differ
diff --git a/image/gradient_image_node.png b/image/gradient_image_node.png
deleted file mode 100644
index 83ceb77..0000000
Binary files a/image/gradient_image_node.png and /dev/null differ
diff --git a/image/gradient_image_node_v2.jpg b/image/gradient_image_node_v2.jpg
new file mode 100644
index 0000000..ba2a313
Binary files /dev/null and b/image/gradient_image_node_v2.jpg differ
diff --git a/image/gradient_image_node_v2.png b/image/gradient_image_node_v2.png
deleted file mode 100644
index cca747d..0000000
Binary files a/image/gradient_image_node_v2.png and /dev/null differ
diff --git a/image/gradient_overlay_example.jpg b/image/gradient_overlay_example.jpg
new file mode 100644
index 0000000..7bcb141
Binary files /dev/null and b/image/gradient_overlay_example.jpg differ
diff --git a/image/gradient_overlay_example.png b/image/gradient_overlay_example.png
deleted file mode 100644
index a3ecc9c..0000000
Binary files a/image/gradient_overlay_example.png and /dev/null differ
diff --git a/image/gradient_overlay_node.jpg b/image/gradient_overlay_node.jpg
new file mode 100644
index 0000000..59d4d63
Binary files /dev/null and b/image/gradient_overlay_node.jpg differ
diff --git a/image/gradient_overlay_node.png b/image/gradient_overlay_node.png
deleted file mode 100644
index 2c7feb3..0000000
Binary files a/image/gradient_overlay_node.png and /dev/null differ
diff --git a/image/hdr_effects_example.jpg b/image/hdr_effects_example.jpg
new file mode 100644
index 0000000..bc09611
Binary files /dev/null and b/image/hdr_effects_example.jpg differ
diff --git a/image/hdr_effects_example.png b/image/hdr_effects_example.png
deleted file mode 100644
index c205f52..0000000
Binary files a/image/hdr_effects_example.png and /dev/null differ
diff --git a/image/hdr_effects_node.jpg b/image/hdr_effects_node.jpg
new file mode 100644
index 0000000..7460d41
Binary files /dev/null and b/image/hdr_effects_node.jpg differ
diff --git a/image/hdr_effects_node.png b/image/hdr_effects_node.png
deleted file mode 100644
index fa4e7dc..0000000
Binary files a/image/hdr_effects_node.png and /dev/null differ
diff --git a/image/image_auto_crop_example.jpg b/image/image_auto_crop_example.jpg
new file mode 100644
index 0000000..59377b9
Binary files /dev/null and b/image/image_auto_crop_example.jpg differ
diff --git a/image/image_auto_crop_example.png b/image/image_auto_crop_example.png
deleted file mode 100644
index 7f6d23a..0000000
Binary files a/image/image_auto_crop_example.png and /dev/null differ
diff --git a/image/image_auto_crop_node.jpg b/image/image_auto_crop_node.jpg
new file mode 100644
index 0000000..d3d2f83
Binary files /dev/null and b/image/image_auto_crop_node.jpg differ
diff --git a/image/image_auto_crop_node.png b/image/image_auto_crop_node.png
deleted file mode 100644
index 9763d02..0000000
Binary files a/image/image_auto_crop_node.png and /dev/null differ
diff --git a/image/image_auto_crop_v2_node.jpg b/image/image_auto_crop_v2_node.jpg
new file mode 100644
index 0000000..8420c78
Binary files /dev/null and b/image/image_auto_crop_v2_node.jpg differ
diff --git a/image/image_auto_crop_v2_node.png b/image/image_auto_crop_v2_node.png
deleted file mode 100644
index d0f7e00..0000000
Binary files a/image/image_auto_crop_v2_node.png and /dev/null differ
diff --git a/image/image_blend_advance_example.jpg b/image/image_blend_advance_example.jpg
new file mode 100644
index 0000000..a28a6ab
Binary files /dev/null and b/image/image_blend_advance_example.jpg differ
diff --git a/image/image_blend_advance_example.png b/image/image_blend_advance_example.png
deleted file mode 100644
index f2954a2..0000000
Binary files a/image/image_blend_advance_example.png and /dev/null differ
diff --git a/image/image_blend_advance_node.jpg b/image/image_blend_advance_node.jpg
new file mode 100644
index 0000000..88c33e6
Binary files /dev/null and b/image/image_blend_advance_node.jpg differ
diff --git a/image/image_blend_advance_node.png b/image/image_blend_advance_node.png
deleted file mode 100644
index 04879c2..0000000
Binary files a/image/image_blend_advance_node.png and /dev/null differ
diff --git a/image/image_blend_example.jpg b/image/image_blend_example.jpg
new file mode 100644
index 0000000..ee8751d
Binary files /dev/null and b/image/image_blend_example.jpg differ
diff --git a/image/image_blend_example.png b/image/image_blend_example.png
deleted file mode 100644
index 519e77e..0000000
Binary files a/image/image_blend_example.png and /dev/null differ
diff --git a/image/image_blend_node.jpg b/image/image_blend_node.jpg
new file mode 100644
index 0000000..e6a32fe
Binary files /dev/null and b/image/image_blend_node.jpg differ
diff --git a/image/image_blend_node.png b/image/image_blend_node.png
deleted file mode 100644
index 04da7eb..0000000
Binary files a/image/image_blend_node.png and /dev/null differ
diff --git a/image/image_channel_merge_example.jpg b/image/image_channel_merge_example.jpg
new file mode 100644
index 0000000..f7ba676
Binary files /dev/null and b/image/image_channel_merge_example.jpg differ
diff --git a/image/image_channel_merge_example.png b/image/image_channel_merge_example.png
deleted file mode 100644
index 7d8f88d..0000000
Binary files a/image/image_channel_merge_example.png and /dev/null differ
diff --git a/image/image_channel_merge_node.jpg b/image/image_channel_merge_node.jpg
new file mode 100644
index 0000000..7607ae7
Binary files /dev/null and b/image/image_channel_merge_node.jpg differ
diff --git a/image/image_channel_merge_node.png b/image/image_channel_merge_node.png
deleted file mode 100644
index 80c8605..0000000
Binary files a/image/image_channel_merge_node.png and /dev/null differ
diff --git a/image/image_channel_split_example.jpg b/image/image_channel_split_example.jpg
new file mode 100644
index 0000000..9410d4c
Binary files /dev/null and b/image/image_channel_split_example.jpg differ
diff --git a/image/image_channel_split_example.png b/image/image_channel_split_example.png
deleted file mode 100644
index 5deb1d6..0000000
Binary files a/image/image_channel_split_example.png and /dev/null differ
diff --git a/image/image_channel_split_node.jpg b/image/image_channel_split_node.jpg
new file mode 100644
index 0000000..e2e694f
Binary files /dev/null and b/image/image_channel_split_node.jpg differ
diff --git a/image/image_channel_split_node.png b/image/image_channel_split_node.png
deleted file mode 100644
index 3def086..0000000
Binary files a/image/image_channel_split_node.png and /dev/null differ
diff --git a/image/image_combine_alpha_node.jpg b/image/image_combine_alpha_node.jpg
new file mode 100644
index 0000000..9544553
Binary files /dev/null and b/image/image_combine_alpha_node.jpg differ
diff --git a/image/image_combine_alpha_node.png b/image/image_combine_alpha_node.png
deleted file mode 100644
index 3da0655..0000000
Binary files a/image/image_combine_alpha_node.png and /dev/null differ
diff --git a/image/image_hub_example.jpg b/image/image_hub_example.jpg
new file mode 100644
index 0000000..f3506b0
Binary files /dev/null and b/image/image_hub_example.jpg differ
diff --git a/image/image_hub_example.png b/image/image_hub_example.png
deleted file mode 100644
index a170b31..0000000
Binary files a/image/image_hub_example.png and /dev/null differ
diff --git a/image/image_hub_node.jpg b/image/image_hub_node.jpg
new file mode 100644
index 0000000..f315618
Binary files /dev/null and b/image/image_hub_node.jpg differ
diff --git a/image/image_hub_node.png b/image/image_hub_node.png
deleted file mode 100644
index 7fa5309..0000000
Binary files a/image/image_hub_node.png and /dev/null differ
diff --git a/image/image_mask_scale_as_example.jpg b/image/image_mask_scale_as_example.jpg
new file mode 100644
index 0000000..43710e0
Binary files /dev/null and b/image/image_mask_scale_as_example.jpg differ
diff --git a/image/image_mask_scale_as_example.png b/image/image_mask_scale_as_example.png
deleted file mode 100644
index d53426b..0000000
Binary files a/image/image_mask_scale_as_example.png and /dev/null differ
diff --git a/image/image_mask_scale_as_node.jpg b/image/image_mask_scale_as_node.jpg
new file mode 100644
index 0000000..d008110
Binary files /dev/null and b/image/image_mask_scale_as_node.jpg differ
diff --git a/image/image_mask_scale_as_node.png b/image/image_mask_scale_as_node.png
deleted file mode 100644
index dd6f5e1..0000000
Binary files a/image/image_mask_scale_as_node.png and /dev/null differ
diff --git a/image/image_opacity_example.jpg b/image/image_opacity_example.jpg
new file mode 100644
index 0000000..a0212ea
Binary files /dev/null and b/image/image_opacity_example.jpg differ
diff --git a/image/image_opacity_example.png b/image/image_opacity_example.png
deleted file mode 100644
index 29994b0..0000000
Binary files a/image/image_opacity_example.png and /dev/null differ
diff --git a/image/image_remove_alpha_example.jpg b/image/image_remove_alpha_example.jpg
new file mode 100644
index 0000000..7d25b49
Binary files /dev/null and b/image/image_remove_alpha_example.jpg differ
diff --git a/image/image_remove_alpha_example.png b/image/image_remove_alpha_example.png
deleted file mode 100644
index b5c542d..0000000
Binary files a/image/image_remove_alpha_example.png and /dev/null differ
diff --git a/image/image_remove_alpha_node.jpg b/image/image_remove_alpha_node.jpg
new file mode 100644
index 0000000..c43d624
Binary files /dev/null and b/image/image_remove_alpha_node.jpg differ
diff --git a/image/image_remove_alpha_node.png b/image/image_remove_alpha_node.png
deleted file mode 100644
index 0e48d71..0000000
Binary files a/image/image_remove_alpha_node.png and /dev/null differ
diff --git a/image/image_reward_filter_example.jpg b/image/image_reward_filter_example.jpg
new file mode 100644
index 0000000..1024b3e
Binary files /dev/null and b/image/image_reward_filter_example.jpg differ
diff --git a/image/image_reward_filter_example.png b/image/image_reward_filter_example.png
deleted file mode 100644
index ddb633f..0000000
Binary files a/image/image_reward_filter_example.png and /dev/null differ
diff --git a/image/image_reward_filter_node.jpg b/image/image_reward_filter_node.jpg
new file mode 100644
index 0000000..8de28f8
Binary files /dev/null and b/image/image_reward_filter_node.jpg differ
diff --git a/image/image_reward_filter_node.png b/image/image_reward_filter_node.png
deleted file mode 100644
index 6251660..0000000
Binary files a/image/image_reward_filter_node.png and /dev/null differ
diff --git a/image/image_scale_by_aspect_ratio_example.jpg b/image/image_scale_by_aspect_ratio_example.jpg
new file mode 100644
index 0000000..fefc5bb
Binary files /dev/null and b/image/image_scale_by_aspect_ratio_example.jpg differ
diff --git a/image/image_scale_by_aspect_ratio_example.png b/image/image_scale_by_aspect_ratio_example.png
deleted file mode 100644
index 9b0a137..0000000
Binary files a/image/image_scale_by_aspect_ratio_example.png and /dev/null differ
diff --git a/image/image_scale_by_aspect_ratio_node.jpg b/image/image_scale_by_aspect_ratio_node.jpg
new file mode 100644
index 0000000..5101253
Binary files /dev/null and b/image/image_scale_by_aspect_ratio_node.jpg differ
diff --git a/image/image_scale_by_aspect_ratio_node.png b/image/image_scale_by_aspect_ratio_node.png
deleted file mode 100644
index 9375f9b..0000000
Binary files a/image/image_scale_by_aspect_ratio_node.png and /dev/null differ
diff --git a/image/image_scale_by_aspect_ratio_v2_node.jpg b/image/image_scale_by_aspect_ratio_v2_node.jpg
new file mode 100644
index 0000000..faffd00
Binary files /dev/null and b/image/image_scale_by_aspect_ratio_v2_node.jpg differ
diff --git a/image/image_scale_by_aspect_ratio_v2_node.png b/image/image_scale_by_aspect_ratio_v2_node.png
deleted file mode 100644
index 33ce0c0..0000000
Binary files a/image/image_scale_by_aspect_ratio_v2_node.png and /dev/null differ
diff --git a/image/image_scale_restore_example.jpg b/image/image_scale_restore_example.jpg
new file mode 100644
index 0000000..f9f4992
Binary files /dev/null and b/image/image_scale_restore_example.jpg differ
diff --git a/image/image_scale_restore_example.png b/image/image_scale_restore_example.png
deleted file mode 100644
index ddfc58b..0000000
Binary files a/image/image_scale_restore_example.png and /dev/null differ
diff --git a/image/image_scale_restore_node.jpg b/image/image_scale_restore_node.jpg
new file mode 100644
index 0000000..76ee428
Binary files /dev/null and b/image/image_scale_restore_node.jpg differ
diff --git a/image/image_scale_restore_node.png b/image/image_scale_restore_node.png
deleted file mode 100644
index 6634f4b..0000000
Binary files a/image/image_scale_restore_node.png and /dev/null differ
diff --git a/image/image_scale_restore_v2_node.jpg b/image/image_scale_restore_v2_node.jpg
new file mode 100644
index 0000000..af76907
Binary files /dev/null and b/image/image_scale_restore_v2_node.jpg differ
diff --git a/image/image_scale_restore_v2_node.png b/image/image_scale_restore_v2_node.png
deleted file mode 100644
index 05f68d2..0000000
Binary files a/image/image_scale_restore_v2_node.png and /dev/null differ
diff --git a/image/image_shift_example.jpg b/image/image_shift_example.jpg
new file mode 100644
index 0000000..3f2c04e
Binary files /dev/null and b/image/image_shift_example.jpg differ
diff --git a/image/image_shift_example.png b/image/image_shift_example.png
deleted file mode 100644
index 3d31901..0000000
Binary files a/image/image_shift_example.png and /dev/null differ
diff --git a/image/image_shift_node.jpg b/image/image_shift_node.jpg
new file mode 100644
index 0000000..3213b05
Binary files /dev/null and b/image/image_shift_node.jpg differ
diff --git a/image/image_shift_node.png b/image/image_shift_node.png
deleted file mode 100644
index c553f96..0000000
Binary files a/image/image_shift_node.png and /dev/null differ
diff --git a/image/inner_glow_example.jpg b/image/inner_glow_example.jpg
new file mode 100644
index 0000000..97f24f7
Binary files /dev/null and b/image/inner_glow_example.jpg differ
diff --git a/image/inner_glow_example.png b/image/inner_glow_example.png
deleted file mode 100644
index f7321c9..0000000
Binary files a/image/inner_glow_example.png and /dev/null differ
diff --git a/image/inner_glow_node.jpg b/image/inner_glow_node.jpg
new file mode 100644
index 0000000..edbe125
Binary files /dev/null and b/image/inner_glow_node.jpg differ
diff --git a/image/inner_glow_node.png b/image/inner_glow_node.png
deleted file mode 100644
index d65e06b..0000000
Binary files a/image/inner_glow_node.png and /dev/null differ
diff --git a/image/inner_shadow_example.jpg b/image/inner_shadow_example.jpg
new file mode 100644
index 0000000..a56312b
Binary files /dev/null and b/image/inner_shadow_example.jpg differ
diff --git a/image/inner_shadow_example.png b/image/inner_shadow_example.png
deleted file mode 100644
index dd9f2d3..0000000
Binary files a/image/inner_shadow_example.png and /dev/null differ
diff --git a/image/inner_shadow_node.jpg b/image/inner_shadow_node.jpg
new file mode 100644
index 0000000..7650221
Binary files /dev/null and b/image/inner_shadow_node.jpg differ
diff --git a/image/inner_shadow_node.png b/image/inner_shadow_node.png
deleted file mode 100644
index 981eb66..0000000
Binary files a/image/inner_shadow_node.png and /dev/null differ
diff --git a/image/integer_node.jpg b/image/integer_node.jpg
new file mode 100644
index 0000000..24de5b3
Binary files /dev/null and b/image/integer_node.jpg differ
diff --git a/image/integer_node.png b/image/integer_node.png
deleted file mode 100644
index fb4f4e4..0000000
Binary files a/image/integer_node.png and /dev/null differ
diff --git a/image/lama_example.jpg b/image/lama_example.jpg
new file mode 100644
index 0000000..68f9e5e
Binary files /dev/null and b/image/lama_example.jpg differ
diff --git a/image/lama_example.png b/image/lama_example.png
deleted file mode 100644
index bce050a..0000000
Binary files a/image/lama_example.png and /dev/null differ
diff --git a/image/lama_node.jpg b/image/lama_node.jpg
new file mode 100644
index 0000000..a870081
Binary files /dev/null and b/image/lama_node.jpg differ
diff --git a/image/lama_node.png b/image/lama_node.png
deleted file mode 100644
index 1264140..0000000
Binary files a/image/lama_node.png and /dev/null differ
diff --git a/image/layer_image_transform_example.jpg b/image/layer_image_transform_example.jpg
new file mode 100644
index 0000000..6252b6c
Binary files /dev/null and b/image/layer_image_transform_example.jpg differ
diff --git a/image/layer_image_transform_example.png b/image/layer_image_transform_example.png
deleted file mode 100644
index bb805a4..0000000
Binary files a/image/layer_image_transform_example.png and /dev/null differ
diff --git a/image/layer_image_transform_node.jpg b/image/layer_image_transform_node.jpg
new file mode 100644
index 0000000..f1d9c61
Binary files /dev/null and b/image/layer_image_transform_node.jpg differ
diff --git a/image/layer_image_transform_node.png b/image/layer_image_transform_node.png
deleted file mode 100644
index 0cee284..0000000
Binary files a/image/layer_image_transform_node.png and /dev/null differ
diff --git a/image/layer_mask_transform_node.jpg b/image/layer_mask_transform_node.jpg
new file mode 100644
index 0000000..5cb7317
Binary files /dev/null and b/image/layer_mask_transform_node.jpg differ
diff --git a/image/layer_mask_transform_node.png b/image/layer_mask_transform_node.png
deleted file mode 100644
index cd3ff28..0000000
Binary files a/image/layer_mask_transform_node.png and /dev/null differ
diff --git a/image/layercolor_nodes.jpg b/image/layercolor_nodes.jpg
new file mode 100644
index 0000000..4e9f5ee
Binary files /dev/null and b/image/layercolor_nodes.jpg differ
diff --git a/image/layercolor_nodes.png b/image/layercolor_nodes.png
deleted file mode 100644
index 867eb86..0000000
Binary files a/image/layercolor_nodes.png and /dev/null differ
diff --git a/image/layercolor_title.jpg b/image/layercolor_title.jpg
new file mode 100644
index 0000000..96b0ac0
Binary files /dev/null and b/image/layercolor_title.jpg differ
diff --git a/image/layercolor_title.png b/image/layercolor_title.png
deleted file mode 100644
index 727353b..0000000
Binary files a/image/layercolor_title.png and /dev/null differ
diff --git a/image/layerfilter_nodes.jpg b/image/layerfilter_nodes.jpg
new file mode 100644
index 0000000..b410b32
Binary files /dev/null and b/image/layerfilter_nodes.jpg differ
diff --git a/image/layerfilter_nodes.png b/image/layerfilter_nodes.png
deleted file mode 100644
index 51d9240..0000000
Binary files a/image/layerfilter_nodes.png and /dev/null differ
diff --git a/image/layermask_nodes.jpg b/image/layermask_nodes.jpg
new file mode 100644
index 0000000..be17cff
Binary files /dev/null and b/image/layermask_nodes.jpg differ
diff --git a/image/layermask_nodes.png b/image/layermask_nodes.png
deleted file mode 100644
index 335386e..0000000
Binary files a/image/layermask_nodes.png and /dev/null differ
diff --git a/image/layerstyle_nodes.jpg b/image/layerstyle_nodes.jpg
new file mode 100644
index 0000000..b7f1307
Binary files /dev/null and b/image/layerstyle_nodes.jpg differ
diff --git a/image/layerstyle_nodes.png b/image/layerstyle_nodes.png
deleted file mode 100644
index 13c78f5..0000000
Binary files a/image/layerstyle_nodes.png and /dev/null differ
diff --git a/image/layerstyle_title.jpg b/image/layerstyle_title.jpg
new file mode 100644
index 0000000..d034b76
Binary files /dev/null and b/image/layerstyle_title.jpg differ
diff --git a/image/layerstyle_title.png b/image/layerstyle_title.png
deleted file mode 100644
index 8b6b846..0000000
Binary files a/image/layerstyle_title.png and /dev/null differ
diff --git a/image/layerutility_nodes.jpg b/image/layerutility_nodes.jpg
new file mode 100644
index 0000000..b67e407
Binary files /dev/null and b/image/layerutility_nodes.jpg differ
diff --git a/image/layerutility_nodes.png b/image/layerutility_nodes.png
deleted file mode 100644
index ec8e1ab..0000000
Binary files a/image/layerutility_nodes.png and /dev/null differ
diff --git a/image/levels_example.jpg b/image/levels_example.jpg
new file mode 100644
index 0000000..0c292ad
Binary files /dev/null and b/image/levels_example.jpg differ
diff --git a/image/levels_example.png b/image/levels_example.png
deleted file mode 100644
index 3a9ee63..0000000
Binary files a/image/levels_example.png and /dev/null differ
diff --git a/image/levels_node.jpg b/image/levels_node.jpg
new file mode 100644
index 0000000..ffb5b68
Binary files /dev/null and b/image/levels_node.jpg differ
diff --git a/image/levels_node.png b/image/levels_node.png
deleted file mode 100644
index 871dfc8..0000000
Binary files a/image/levels_node.png and /dev/null differ
diff --git a/image/light_leak_example.jpg b/image/light_leak_example.jpg
new file mode 100644
index 0000000..bff5535
Binary files /dev/null and b/image/light_leak_example.jpg differ
diff --git a/image/light_leak_example.png b/image/light_leak_example.png
deleted file mode 100644
index 5d74f2a..0000000
Binary files a/image/light_leak_example.png and /dev/null differ
diff --git a/image/light_leak_node.jpg b/image/light_leak_node.jpg
new file mode 100644
index 0000000..597e1dd
Binary files /dev/null and b/image/light_leak_node.jpg differ
diff --git a/image/light_leak_node.png b/image/light_leak_node.png
deleted file mode 100644
index 25c0bd4..0000000
Binary files a/image/light_leak_node.png and /dev/null differ
diff --git a/image/lut_apply_example.jpg b/image/lut_apply_example.jpg
new file mode 100644
index 0000000..659dc55
Binary files /dev/null and b/image/lut_apply_example.jpg differ
diff --git a/image/lut_apply_example.png b/image/lut_apply_example.png
deleted file mode 100644
index 71152ad..0000000
Binary files a/image/lut_apply_example.png and /dev/null differ
diff --git a/image/lut_apply_node.jpg b/image/lut_apply_node.jpg
new file mode 100644
index 0000000..181e589
Binary files /dev/null and b/image/lut_apply_node.jpg differ
diff --git a/image/lut_apply_node.png b/image/lut_apply_node.png
deleted file mode 100644
index c089c00..0000000
Binary files a/image/lut_apply_node.png and /dev/null differ
diff --git a/image/mask_box_detect_example.jpg b/image/mask_box_detect_example.jpg
new file mode 100644
index 0000000..8d5c4c9
Binary files /dev/null and b/image/mask_box_detect_example.jpg differ
diff --git a/image/mask_box_detect_example.png b/image/mask_box_detect_example.png
deleted file mode 100644
index ccbbc73..0000000
Binary files a/image/mask_box_detect_example.png and /dev/null differ
diff --git a/image/mask_box_detect_node.jpg b/image/mask_box_detect_node.jpg
new file mode 100644
index 0000000..46c586f
Binary files /dev/null and b/image/mask_box_detect_node.jpg differ
diff --git a/image/mask_box_detect_node.png b/image/mask_box_detect_node.png
deleted file mode 100644
index 0180fcd..0000000
Binary files a/image/mask_box_detect_node.png and /dev/null differ
diff --git a/image/mask_by_different_example.jpg b/image/mask_by_different_example.jpg
new file mode 100644
index 0000000..f114ce4
Binary files /dev/null and b/image/mask_by_different_example.jpg differ
diff --git a/image/mask_by_different_example.png b/image/mask_by_different_example.png
deleted file mode 100644
index 1efd9d8..0000000
Binary files a/image/mask_by_different_example.png and /dev/null differ
diff --git a/image/mask_by_different_node.jpg b/image/mask_by_different_node.jpg
new file mode 100644
index 0000000..489db5d
Binary files /dev/null and b/image/mask_by_different_node.jpg differ
diff --git a/image/mask_by_different_node.png b/image/mask_by_different_node.png
deleted file mode 100644
index 05212b6..0000000
Binary files a/image/mask_by_different_node.png and /dev/null differ
diff --git a/image/mask_edge_compare.jpg b/image/mask_edge_compare.jpg
new file mode 100644
index 0000000..fb52eb1
Binary files /dev/null and b/image/mask_edge_compare.jpg differ
diff --git a/image/mask_edge_compare.png b/image/mask_edge_compare.png
deleted file mode 100644
index 461ba9a..0000000
Binary files a/image/mask_edge_compare.png and /dev/null differ
diff --git a/image/mask_edge_shrink_example.jpg b/image/mask_edge_shrink_example.jpg
new file mode 100644
index 0000000..e74bc83
Binary files /dev/null and b/image/mask_edge_shrink_example.jpg differ
diff --git a/image/mask_edge_shrink_example.png b/image/mask_edge_shrink_example.png
deleted file mode 100644
index f6c04a4..0000000
Binary files a/image/mask_edge_shrink_example.png and /dev/null differ
diff --git a/image/mask_edge_shrink_node.jpg b/image/mask_edge_shrink_node.jpg
new file mode 100644
index 0000000..e10296b
Binary files /dev/null and b/image/mask_edge_shrink_node.jpg differ
diff --git a/image/mask_edge_shrink_node.png b/image/mask_edge_shrink_node.png
deleted file mode 100644
index 6f5aeef..0000000
Binary files a/image/mask_edge_shrink_node.png and /dev/null differ
diff --git a/image/mask_edge_ultra_detail_example.jpg b/image/mask_edge_ultra_detail_example.jpg
new file mode 100644
index 0000000..16332d4
Binary files /dev/null and b/image/mask_edge_ultra_detail_example.jpg differ
diff --git a/image/mask_edge_ultra_detail_example.png b/image/mask_edge_ultra_detail_example.png
deleted file mode 100644
index 75651f4..0000000
Binary files a/image/mask_edge_ultra_detail_example.png and /dev/null differ
diff --git a/image/mask_edge_ultra_detail_node.jpg b/image/mask_edge_ultra_detail_node.jpg
new file mode 100644
index 0000000..7361f34
Binary files /dev/null and b/image/mask_edge_ultra_detail_node.jpg differ
diff --git a/image/mask_edge_ultra_detail_node.png b/image/mask_edge_ultra_detail_node.png
deleted file mode 100644
index f05d068..0000000
Binary files a/image/mask_edge_ultra_detail_node.png and /dev/null differ
diff --git a/image/mask_edge_ultra_detail_v2_example.jpg b/image/mask_edge_ultra_detail_v2_example.jpg
new file mode 100644
index 0000000..a888b6b
Binary files /dev/null and b/image/mask_edge_ultra_detail_v2_example.jpg differ
diff --git a/image/mask_edge_ultra_detail_v2_example.png b/image/mask_edge_ultra_detail_v2_example.png
deleted file mode 100644
index 1116131..0000000
Binary files a/image/mask_edge_ultra_detail_v2_example.png and /dev/null differ
diff --git a/image/mask_edge_ultra_detail_v2_node.jpg b/image/mask_edge_ultra_detail_v2_node.jpg
new file mode 100644
index 0000000..d5e1f85
Binary files /dev/null and b/image/mask_edge_ultra_detail_v2_node.jpg differ
diff --git a/image/mask_edge_ultra_detail_v2_node.png b/image/mask_edge_ultra_detail_v2_node.png
deleted file mode 100644
index 506be01..0000000
Binary files a/image/mask_edge_ultra_detail_v2_node.png and /dev/null differ
diff --git a/image/mask_gradient_example.jpg b/image/mask_gradient_example.jpg
new file mode 100644
index 0000000..078a156
Binary files /dev/null and b/image/mask_gradient_example.jpg differ
diff --git a/image/mask_gradient_example.png b/image/mask_gradient_example.png
deleted file mode 100644
index 2cdcca1..0000000
Binary files a/image/mask_gradient_example.png and /dev/null differ
diff --git a/image/mask_gradient_node.jpg b/image/mask_gradient_node.jpg
new file mode 100644
index 0000000..3d01978
Binary files /dev/null and b/image/mask_gradient_node.jpg differ
diff --git a/image/mask_gradient_node.png b/image/mask_gradient_node.png
deleted file mode 100644
index fe3aa2d..0000000
Binary files a/image/mask_gradient_node.png and /dev/null differ
diff --git a/image/mask_grow_example.jpg b/image/mask_grow_example.jpg
new file mode 100644
index 0000000..be89c6d
Binary files /dev/null and b/image/mask_grow_example.jpg differ
diff --git a/image/mask_grow_example.png b/image/mask_grow_example.png
deleted file mode 100644
index 5f23bc0..0000000
Binary files a/image/mask_grow_example.png and /dev/null differ
diff --git a/image/mask_grow_node.jpg b/image/mask_grow_node.jpg
new file mode 100644
index 0000000..35b83f8
Binary files /dev/null and b/image/mask_grow_node.jpg differ
diff --git a/image/mask_grow_node.png b/image/mask_grow_node.png
deleted file mode 100644
index 6529ac7..0000000
Binary files a/image/mask_grow_node.png and /dev/null differ
diff --git a/image/mask_invert.jpg b/image/mask_invert.jpg
new file mode 100644
index 0000000..98f8a54
Binary files /dev/null and b/image/mask_invert.jpg differ
diff --git a/image/mask_invert.png b/image/mask_invert.png
deleted file mode 100644
index 923b3a8..0000000
Binary files a/image/mask_invert.png and /dev/null differ
diff --git a/image/mask_invert_node.jpg b/image/mask_invert_node.jpg
new file mode 100644
index 0000000..b340f8c
Binary files /dev/null and b/image/mask_invert_node.jpg differ
diff --git a/image/mask_invert_node.png b/image/mask_invert_node.png
deleted file mode 100644
index f710903..0000000
Binary files a/image/mask_invert_node.png and /dev/null differ
diff --git a/image/mask_motion_blur_example.jpg b/image/mask_motion_blur_example.jpg
new file mode 100644
index 0000000..2e5dabe
Binary files /dev/null and b/image/mask_motion_blur_example.jpg differ
diff --git a/image/mask_motion_blur_example.png b/image/mask_motion_blur_example.png
deleted file mode 100644
index 12558d4..0000000
Binary files a/image/mask_motion_blur_example.png and /dev/null differ
diff --git a/image/mask_motion_blur_node.jpg b/image/mask_motion_blur_node.jpg
new file mode 100644
index 0000000..a7ef18c
Binary files /dev/null and b/image/mask_motion_blur_node.jpg differ
diff --git a/image/mask_motion_blur_node.png b/image/mask_motion_blur_node.png
deleted file mode 100644
index 2b96293..0000000
Binary files a/image/mask_motion_blur_node.png and /dev/null differ
diff --git a/image/mask_preview_example.jpg b/image/mask_preview_example.jpg
new file mode 100644
index 0000000..653b056
Binary files /dev/null and b/image/mask_preview_example.jpg differ
diff --git a/image/mask_preview_example.png b/image/mask_preview_example.png
deleted file mode 100644
index 63c3702..0000000
Binary files a/image/mask_preview_example.png and /dev/null differ
diff --git a/image/mask_stroke_example.jpg b/image/mask_stroke_example.jpg
new file mode 100644
index 0000000..cb998e2
Binary files /dev/null and b/image/mask_stroke_example.jpg differ
diff --git a/image/mask_stroke_example.png b/image/mask_stroke_example.png
deleted file mode 100644
index a664f80..0000000
Binary files a/image/mask_stroke_example.png and /dev/null differ
diff --git a/image/mask_stroke_node.jpg b/image/mask_stroke_node.jpg
new file mode 100644
index 0000000..923a2c9
Binary files /dev/null and b/image/mask_stroke_node.jpg differ
diff --git a/image/mask_stroke_node.png b/image/mask_stroke_node.png
deleted file mode 100644
index c328157..0000000
Binary files a/image/mask_stroke_node.png and /dev/null differ
diff --git a/image/menu_layer_color.jpg b/image/menu_layer_color.jpg
new file mode 100644
index 0000000..b5b74e6
Binary files /dev/null and b/image/menu_layer_color.jpg differ
diff --git a/image/menu_layer_color.png b/image/menu_layer_color.png
deleted file mode 100644
index 254dc6f..0000000
Binary files a/image/menu_layer_color.png and /dev/null differ
diff --git a/image/menu_layer_filter.jpg b/image/menu_layer_filter.jpg
new file mode 100644
index 0000000..40278c8
Binary files /dev/null and b/image/menu_layer_filter.jpg differ
diff --git a/image/menu_layer_filter.png b/image/menu_layer_filter.png
deleted file mode 100644
index a002271..0000000
Binary files a/image/menu_layer_filter.png and /dev/null differ
diff --git a/image/menu_layer_mask.jpg b/image/menu_layer_mask.jpg
new file mode 100644
index 0000000..e75329c
Binary files /dev/null and b/image/menu_layer_mask.jpg differ
diff --git a/image/menu_layer_mask.png b/image/menu_layer_mask.png
deleted file mode 100644
index 90bc5f6..0000000
Binary files a/image/menu_layer_mask.png and /dev/null differ
diff --git a/image/menu_layer_style.jpg b/image/menu_layer_style.jpg
new file mode 100644
index 0000000..82c8040
Binary files /dev/null and b/image/menu_layer_style.jpg differ
diff --git a/image/menu_layer_style.png b/image/menu_layer_style.png
deleted file mode 100644
index 54cfbc8..0000000
Binary files a/image/menu_layer_style.png and /dev/null differ
diff --git a/image/menu_layer_utility.jpg b/image/menu_layer_utility.jpg
new file mode 100644
index 0000000..7b69ece
Binary files /dev/null and b/image/menu_layer_utility.jpg differ
diff --git a/image/menu_layer_utility.png b/image/menu_layer_utility.png
deleted file mode 100644
index ba122f8..0000000
Binary files a/image/menu_layer_utility.png and /dev/null differ
diff --git a/image/motion_blur_example.jpg b/image/motion_blur_example.jpg
new file mode 100644
index 0000000..8f29ed8
Binary files /dev/null and b/image/motion_blur_example.jpg differ
diff --git a/image/motion_blur_example.png b/image/motion_blur_example.png
deleted file mode 100644
index b98dead..0000000
Binary files a/image/motion_blur_example.png and /dev/null differ
diff --git a/image/node-menu.jpg b/image/node-menu.jpg
new file mode 100644
index 0000000..8edcf7f
Binary files /dev/null and b/image/node-menu.jpg differ
diff --git a/image/node-menu.png b/image/node-menu.png
deleted file mode 100644
index 4962e17..0000000
Binary files a/image/node-menu.png and /dev/null differ
diff --git a/image/node-search.jpg b/image/node-search.jpg
new file mode 100644
index 0000000..47ac217
Binary files /dev/null and b/image/node-search.jpg differ
diff --git a/image/node-search.png b/image/node-search.png
deleted file mode 100644
index 1e993c2..0000000
Binary files a/image/node-search.png and /dev/null differ
diff --git a/image/number_calculator_node.jpg b/image/number_calculator_node.jpg
new file mode 100644
index 0000000..80c424e
Binary files /dev/null and b/image/number_calculator_node.jpg differ
diff --git a/image/number_calculator_node.png b/image/number_calculator_node.png
deleted file mode 100644
index 92751ae..0000000
Binary files a/image/number_calculator_node.png and /dev/null differ
diff --git a/image/outer_glow_example.jpg b/image/outer_glow_example.jpg
new file mode 100644
index 0000000..2955587
Binary files /dev/null and b/image/outer_glow_example.jpg differ
diff --git a/image/outer_glow_example.png b/image/outer_glow_example.png
deleted file mode 100644
index 8907e6c..0000000
Binary files a/image/outer_glow_example.png and /dev/null differ
diff --git a/image/outer_glow_node.jpg b/image/outer_glow_node.jpg
new file mode 100644
index 0000000..196af9e
Binary files /dev/null and b/image/outer_glow_node.jpg differ
diff --git a/image/outer_glow_node.png b/image/outer_glow_node.png
deleted file mode 100644
index e38c958..0000000
Binary files a/image/outer_glow_node.png and /dev/null differ
diff --git a/image/person_mask_ultra_example.jpg b/image/person_mask_ultra_example.jpg
new file mode 100644
index 0000000..a5f7645
Binary files /dev/null and b/image/person_mask_ultra_example.jpg differ
diff --git a/image/person_mask_ultra_example.png b/image/person_mask_ultra_example.png
deleted file mode 100644
index 0e64bc2..0000000
Binary files a/image/person_mask_ultra_example.png and /dev/null differ
diff --git a/image/person_mask_ultra_node.jpg b/image/person_mask_ultra_node.jpg
new file mode 100644
index 0000000..4f4773e
Binary files /dev/null and b/image/person_mask_ultra_node.jpg differ
diff --git a/image/person_mask_ultra_node.png b/image/person_mask_ultra_node.png
deleted file mode 100644
index 88d2df5..0000000
Binary files a/image/person_mask_ultra_node.png and /dev/null differ
diff --git a/image/person_mask_ultra_v2_node.jpg b/image/person_mask_ultra_v2_node.jpg
new file mode 100644
index 0000000..af9d915
Binary files /dev/null and b/image/person_mask_ultra_v2_node.jpg differ
diff --git a/image/person_mask_ultra_v2_node.png b/image/person_mask_ultra_v2_node.png
deleted file mode 100644
index d601db7..0000000
Binary files a/image/person_mask_ultra_v2_node.png and /dev/null differ
diff --git a/image/pixel_spread_example.jpg b/image/pixel_spread_example.jpg
new file mode 100644
index 0000000..753ef9f
Binary files /dev/null and b/image/pixel_spread_example.jpg differ
diff --git a/image/pixel_spread_example.png b/image/pixel_spread_example.png
deleted file mode 100644
index 9e92e93..0000000
Binary files a/image/pixel_spread_example.png and /dev/null differ
diff --git a/image/pixel_spread_node.jpg b/image/pixel_spread_node.jpg
new file mode 100644
index 0000000..6367910
Binary files /dev/null and b/image/pixel_spread_node.jpg differ
diff --git a/image/pixel_spread_node.png b/image/pixel_spread_node.png
deleted file mode 100644
index 648730e..0000000
Binary files a/image/pixel_spread_node.png and /dev/null differ
diff --git a/image/print_info_node.jpg b/image/print_info_node.jpg
new file mode 100644
index 0000000..31fcf7a
Binary files /dev/null and b/image/print_info_node.jpg differ
diff --git a/image/print_info_node.png b/image/print_info_node.png
deleted file mode 100644
index c12c0a8..0000000
Binary files a/image/print_info_node.png and /dev/null differ
diff --git a/image/prompt_embellish_example.jpg b/image/prompt_embellish_example.jpg
new file mode 100644
index 0000000..4cc14d8
Binary files /dev/null and b/image/prompt_embellish_example.jpg differ
diff --git a/image/prompt_embellish_example.png b/image/prompt_embellish_example.png
deleted file mode 100644
index 91eb06b..0000000
Binary files a/image/prompt_embellish_example.png and /dev/null differ
diff --git a/image/prompt_embellish_node.jpg b/image/prompt_embellish_node.jpg
new file mode 100644
index 0000000..b8ca5dc
Binary files /dev/null and b/image/prompt_embellish_node.jpg differ
diff --git a/image/prompt_embellish_node.png b/image/prompt_embellish_node.png
deleted file mode 100644
index 1d69f80..0000000
Binary files a/image/prompt_embellish_node.png and /dev/null differ
diff --git a/image/prompt_tagger_example.jpg b/image/prompt_tagger_example.jpg
new file mode 100644
index 0000000..1dd9727
Binary files /dev/null and b/image/prompt_tagger_example.jpg differ
diff --git a/image/prompt_tagger_example.png b/image/prompt_tagger_example.png
deleted file mode 100644
index b4b5142..0000000
Binary files a/image/prompt_tagger_example.png and /dev/null differ
diff --git a/image/prompt_tagger_example1.jpg b/image/prompt_tagger_example1.jpg
new file mode 100644
index 0000000..07d1d9f
Binary files /dev/null and b/image/prompt_tagger_example1.jpg differ
diff --git a/image/prompt_tagger_example1.png b/image/prompt_tagger_example1.png
deleted file mode 100644
index 5da52cb..0000000
Binary files a/image/prompt_tagger_example1.png and /dev/null differ
diff --git a/image/prompt_tagger_node.jpg b/image/prompt_tagger_node.jpg
new file mode 100644
index 0000000..dde7564
Binary files /dev/null and b/image/prompt_tagger_node.jpg differ
diff --git a/image/prompt_tagger_node.png b/image/prompt_tagger_node.png
deleted file mode 100644
index 1c5640f..0000000
Binary files a/image/prompt_tagger_node.png and /dev/null differ
diff --git a/image/purge_vram_example.jpg b/image/purge_vram_example.jpg
new file mode 100644
index 0000000..981dfff
Binary files /dev/null and b/image/purge_vram_example.jpg differ
diff --git a/image/purge_vram_example.png b/image/purge_vram_example.png
deleted file mode 100644
index d65158a..0000000
Binary files a/image/purge_vram_example.png and /dev/null differ
diff --git a/image/qwen_image2prompt_example.jpg b/image/qwen_image2prompt_example.jpg
new file mode 100644
index 0000000..99f84bb
Binary files /dev/null and b/image/qwen_image2prompt_example.jpg differ
diff --git a/image/qwen_image2prompt_example.png b/image/qwen_image2prompt_example.png
deleted file mode 100644
index 3264824..0000000
Binary files a/image/qwen_image2prompt_example.png and /dev/null differ
diff --git a/image/rembg_ultra_example.jpg b/image/rembg_ultra_example.jpg
new file mode 100644
index 0000000..dae672c
Binary files /dev/null and b/image/rembg_ultra_example.jpg differ
diff --git a/image/rembg_ultra_example.png b/image/rembg_ultra_example.png
deleted file mode 100644
index 8e76ccb..0000000
Binary files a/image/rembg_ultra_example.png and /dev/null differ
diff --git a/image/rembg_ultra_node.jpg b/image/rembg_ultra_node.jpg
new file mode 100644
index 0000000..1ae3d78
Binary files /dev/null and b/image/rembg_ultra_node.jpg differ
diff --git a/image/rembg_ultra_node.png b/image/rembg_ultra_node.png
deleted file mode 100644
index a6f0818..0000000
Binary files a/image/rembg_ultra_node.png and /dev/null differ
diff --git a/image/restore_crop_box_node.jpg b/image/restore_crop_box_node.jpg
new file mode 100644
index 0000000..8086142
Binary files /dev/null and b/image/restore_crop_box_node.jpg differ
diff --git a/image/restore_crop_box_node.png b/image/restore_crop_box_node.png
deleted file mode 100644
index bcf3716..0000000
Binary files a/image/restore_crop_box_node.png and /dev/null differ
diff --git a/image/rmbg_ultra_v2_node.jpg b/image/rmbg_ultra_v2_node.jpg
new file mode 100644
index 0000000..d006dd6
Binary files /dev/null and b/image/rmbg_ultra_v2_node.jpg differ
diff --git a/image/rmbg_ultra_v2_node.png b/image/rmbg_ultra_v2_node.png
deleted file mode 100644
index 1e03987..0000000
Binary files a/image/rmbg_ultra_v2_node.png and /dev/null differ
diff --git a/image/save_image_plus_node.jpg b/image/save_image_plus_node.jpg
new file mode 100644
index 0000000..28ff0a2
Binary files /dev/null and b/image/save_image_plus_node.jpg differ
diff --git a/image/segment_anything_ultra_compare.jpg b/image/segment_anything_ultra_compare.jpg
new file mode 100644
index 0000000..550df2c
Binary files /dev/null and b/image/segment_anything_ultra_compare.jpg differ
diff --git a/image/segment_anything_ultra_compare.png b/image/segment_anything_ultra_compare.png
deleted file mode 100644
index f1b1447..0000000
Binary files a/image/segment_anything_ultra_compare.png and /dev/null differ
diff --git a/image/segment_anything_ultra_example.jpg b/image/segment_anything_ultra_example.jpg
new file mode 100644
index 0000000..e816dc2
Binary files /dev/null and b/image/segment_anything_ultra_example.jpg differ
diff --git a/image/segment_anything_ultra_example.png b/image/segment_anything_ultra_example.png
deleted file mode 100644
index b6404f6..0000000
Binary files a/image/segment_anything_ultra_example.png and /dev/null differ
diff --git a/image/segment_anything_ultra_node.jpg b/image/segment_anything_ultra_node.jpg
new file mode 100644
index 0000000..6abb2e0
Binary files /dev/null and b/image/segment_anything_ultra_node.jpg differ
diff --git a/image/segment_anything_ultra_node.png b/image/segment_anything_ultra_node.png
deleted file mode 100644
index 7b3616d..0000000
Binary files a/image/segment_anything_ultra_node.png and /dev/null differ
diff --git a/image/segment_anything_ultra_v2_node.jpg b/image/segment_anything_ultra_v2_node.jpg
new file mode 100644
index 0000000..8152b12
Binary files /dev/null and b/image/segment_anything_ultra_v2_node.jpg differ
diff --git a/image/segment_anything_ultra_v2_node.png b/image/segment_anything_ultra_v2_node.png
deleted file mode 100644
index bd54636..0000000
Binary files a/image/segment_anything_ultra_v2_node.png and /dev/null differ
diff --git a/image/shadow_and_highlight_mask_example.jpg b/image/shadow_and_highlight_mask_example.jpg
new file mode 100644
index 0000000..6f275d0
Binary files /dev/null and b/image/shadow_and_highlight_mask_example.jpg differ
diff --git a/image/shadow_and_highlight_mask_example.png b/image/shadow_and_highlight_mask_example.png
deleted file mode 100644
index 8b47b60..0000000
Binary files a/image/shadow_and_highlight_mask_example.png and /dev/null differ
diff --git a/image/shadow_and_highlight_mask_node.jpg b/image/shadow_and_highlight_mask_node.jpg
new file mode 100644
index 0000000..b2eb6bf
Binary files /dev/null and b/image/shadow_and_highlight_mask_node.jpg differ
diff --git a/image/shadow_and_highlight_mask_node.png b/image/shadow_and_highlight_mask_node.png
deleted file mode 100644
index e534889..0000000
Binary files a/image/shadow_and_highlight_mask_node.png and /dev/null differ
diff --git a/image/sharp_and_soft_example.jpg b/image/sharp_and_soft_example.jpg
new file mode 100644
index 0000000..6aff6a9
Binary files /dev/null and b/image/sharp_and_soft_example.jpg differ
diff --git a/image/sharp_and_soft_example.png b/image/sharp_and_soft_example.png
deleted file mode 100644
index ac2425e..0000000
Binary files a/image/sharp_and_soft_example.png and /dev/null differ
diff --git a/image/sharp_and_soft_node.jpg b/image/sharp_and_soft_node.jpg
new file mode 100644
index 0000000..7e2b092
Binary files /dev/null and b/image/sharp_and_soft_node.jpg differ
diff --git a/image/sharp_and_soft_node.png b/image/sharp_and_soft_node.png
deleted file mode 100644
index a0e5f88..0000000
Binary files a/image/sharp_and_soft_node.png and /dev/null differ
diff --git a/image/show_blind_watermark_node.jpg b/image/show_blind_watermark_node.jpg
new file mode 100644
index 0000000..166ffa5
Binary files /dev/null and b/image/show_blind_watermark_node.jpg differ
diff --git a/image/simple_text_image_example.jpg b/image/simple_text_image_example.jpg
new file mode 100644
index 0000000..882313f
Binary files /dev/null and b/image/simple_text_image_example.jpg differ
diff --git a/image/simple_text_image_example.png b/image/simple_text_image_example.png
deleted file mode 100644
index e253c6d..0000000
Binary files a/image/simple_text_image_example.png and /dev/null differ
diff --git a/image/simple_text_image_node.jpg b/image/simple_text_image_node.jpg
new file mode 100644
index 0000000..e402cb6
Binary files /dev/null and b/image/simple_text_image_node.jpg differ
diff --git a/image/simple_text_image_node.png b/image/simple_text_image_node.png
deleted file mode 100644
index 7935bf3..0000000
Binary files a/image/simple_text_image_node.png and /dev/null differ
diff --git a/image/skin_beauty_example.jpg b/image/skin_beauty_example.jpg
new file mode 100644
index 0000000..96ee143
Binary files /dev/null and b/image/skin_beauty_example.jpg differ
diff --git a/image/skin_beauty_example.png b/image/skin_beauty_example.png
deleted file mode 100644
index d786833..0000000
Binary files a/image/skin_beauty_example.png and /dev/null differ
diff --git a/image/skin_beauty_node.jpg b/image/skin_beauty_node.jpg
new file mode 100644
index 0000000..f81788d
Binary files /dev/null and b/image/skin_beauty_node.jpg differ
diff --git a/image/skin_beauty_node.png b/image/skin_beauty_node.png
deleted file mode 100644
index d5d174b..0000000
Binary files a/image/skin_beauty_node.png and /dev/null differ
diff --git a/image/soft_light_example.jpg b/image/soft_light_example.jpg
new file mode 100644
index 0000000..bd85585
Binary files /dev/null and b/image/soft_light_example.jpg differ
diff --git a/image/soft_light_example.png b/image/soft_light_example.png
deleted file mode 100644
index aa172eb..0000000
Binary files a/image/soft_light_example.png and /dev/null differ
diff --git a/image/soft_light_node.jpg b/image/soft_light_node.jpg
new file mode 100644
index 0000000..af736dd
Binary files /dev/null and b/image/soft_light_node.jpg differ
diff --git a/image/soft_light_node.png b/image/soft_light_node.png
deleted file mode 100644
index f27bfab..0000000
Binary files a/image/soft_light_node.png and /dev/null differ
diff --git a/image/stroke_example.jpg b/image/stroke_example.jpg
new file mode 100644
index 0000000..ac382b3
Binary files /dev/null and b/image/stroke_example.jpg differ
diff --git a/image/stroke_example.png b/image/stroke_example.png
deleted file mode 100644
index 775942f..0000000
Binary files a/image/stroke_example.png and /dev/null differ
diff --git a/image/stroke_node.jpg b/image/stroke_node.jpg
new file mode 100644
index 0000000..8e485bf
Binary files /dev/null and b/image/stroke_node.jpg differ
diff --git a/image/stroke_node.png b/image/stroke_node.png
deleted file mode 100644
index 8d050d8..0000000
Binary files a/image/stroke_node.png and /dev/null differ
diff --git a/image/text_box_node.jpg b/image/text_box_node.jpg
new file mode 100644
index 0000000..62e107c
Binary files /dev/null and b/image/text_box_node.jpg differ
diff --git a/image/text_box_node.png b/image/text_box_node.png
deleted file mode 100644
index aeec959..0000000
Binary files a/image/text_box_node.png and /dev/null differ
diff --git a/image/text_image_example.jpg b/image/text_image_example.jpg
new file mode 100644
index 0000000..35f62c3
Binary files /dev/null and b/image/text_image_example.jpg differ
diff --git a/image/text_image_example.png b/image/text_image_example.png
deleted file mode 100644
index 6f3726b..0000000
Binary files a/image/text_image_example.png and /dev/null differ
diff --git a/image/text_image_node.jpg b/image/text_image_node.jpg
new file mode 100644
index 0000000..3b17fdd
Binary files /dev/null and b/image/text_image_node.jpg differ
diff --git a/image/text_image_node.png b/image/text_image_node.png
deleted file mode 100644
index 17cc2e2..0000000
Binary files a/image/text_image_node.png and /dev/null differ
diff --git a/image/text_join_example.jpg b/image/text_join_example.jpg
new file mode 100644
index 0000000..0c97dd6
Binary files /dev/null and b/image/text_join_example.jpg differ
diff --git a/image/text_join_example.png b/image/text_join_example.png
deleted file mode 100644
index 7a65eeb..0000000
Binary files a/image/text_join_example.png and /dev/null differ
diff --git a/image/title.jpg b/image/title.jpg
new file mode 100644
index 0000000..854647e
Binary files /dev/null and b/image/title.jpg differ
diff --git a/image/title.png b/image/title.png
deleted file mode 100644
index c488844..0000000
Binary files a/image/title.png and /dev/null differ
diff --git a/image/ultra_v2_nodes_example.jpg b/image/ultra_v2_nodes_example.jpg
new file mode 100644
index 0000000..d9b06c4
Binary files /dev/null and b/image/ultra_v2_nodes_example.jpg differ
diff --git a/image/ultra_v2_nodes_example.png b/image/ultra_v2_nodes_example.png
deleted file mode 100644
index b67b294..0000000
Binary files a/image/ultra_v2_nodes_example.png and /dev/null differ
diff --git a/image/water_color_example.jpg b/image/water_color_example.jpg
new file mode 100644
index 0000000..3642972
Binary files /dev/null and b/image/water_color_example.jpg differ
diff --git a/image/water_color_example.png b/image/water_color_example.png
deleted file mode 100644
index 8b26709..0000000
Binary files a/image/water_color_example.png and /dev/null differ
diff --git a/image/water_color_node.jpg b/image/water_color_node.jpg
new file mode 100644
index 0000000..8a66baa
Binary files /dev/null and b/image/water_color_node.jpg differ
diff --git a/image/water_color_node.png b/image/water_color_node.png
deleted file mode 100644
index 563130a..0000000
Binary files a/image/water_color_node.png and /dev/null differ
diff --git a/image/watermark_example.jpg b/image/watermark_example.jpg
new file mode 100644
index 0000000..e3b4c09
Binary files /dev/null and b/image/watermark_example.jpg differ
diff --git a/image/xy2percent_example.jpg b/image/xy2percent_example.jpg
new file mode 100644
index 0000000..ec37751
Binary files /dev/null and b/image/xy2percent_example.jpg differ
diff --git a/image/xy2percent_example.png b/image/xy2percent_example.png
deleted file mode 100644
index cb581bb..0000000
Binary files a/image/xy2percent_example.png and /dev/null differ
diff --git a/image/xy2percent_node.jpg b/image/xy2percent_node.jpg
new file mode 100644
index 0000000..20a1f4a
Binary files /dev/null and b/image/xy2percent_node.jpg differ
diff --git a/image/xy2percent_node.png b/image/xy2percent_node.png
deleted file mode 100644
index 2f80527..0000000
Binary files a/image/xy2percent_node.png and /dev/null differ
diff --git a/image/yolov8_detect_example.jpg b/image/yolov8_detect_example.jpg
new file mode 100644
index 0000000..1dccdec
Binary files /dev/null and b/image/yolov8_detect_example.jpg differ
diff --git a/image/yolov8_detect_example.png b/image/yolov8_detect_example.png
deleted file mode 100644
index a1f3050..0000000
Binary files a/image/yolov8_detect_example.png and /dev/null differ
diff --git a/image/yolov8_detect_node.jpg b/image/yolov8_detect_node.jpg
new file mode 100644
index 0000000..ea1a6b3
Binary files /dev/null and b/image/yolov8_detect_node.jpg differ
diff --git a/image/yolov8_detect_node.png b/image/yolov8_detect_node.png
deleted file mode 100644
index ef3aaaa..0000000
Binary files a/image/yolov8_detect_node.png and /dev/null differ
diff --git a/py/imagefunc.py b/py/imagefunc.py
index 9c275be..48b49fe 100644
--- a/py/imagefunc.py
+++ b/py/imagefunc.py
@@ -1162,6 +1162,96 @@ def generate_text_image(text:str, font_path:str, font_size:int, text_color:str="
index += 1
return (image.convert('RGB'), image.split()[3])
+def watermark_image_size(image:Image) -> int:
+ size = int(math.sqrt(image.width * image.height * 0.015625) * 0.9)
+ return size
+
+def add_invisibal_watermark(image:Image, watermark_image:Image) -> Image:
+ """
+ Adds an invisible watermark to an image.
+ """
+ orig_image_mode = image.mode
+ temp_dir = os.path.join(folder_paths.get_temp_directory(), generate_random_name('_watermark_', '_temp', 16))
+ if os.path.isdir(temp_dir):
+ shutil.rmtree(temp_dir)
+ image_dir = os.path.join(temp_dir, 'image')
+ wm_dir = os.path.join(temp_dir, 'wm')
+ result_dir = os.path.join(temp_dir, 'result')
+
+ try:
+ os.makedirs(image_dir)
+ os.makedirs(wm_dir)
+ os.makedirs(result_dir)
+ except Exception as e:
+ print(e)
+ log(f"Error: {NODE_NAME} skipped, because unable to create temporary folder.", message_type='error')
+ return (image,)
+
+ image_file_name = os.path.join(generate_random_name('watermark_orig_', '_temp', 16) + '.png')
+ wm_file_name = os.path.join(generate_random_name('watermark_image_', '_temp', 16) + '.png')
+ output_file_name = os.path.join(generate_random_name('watermark_output_', '_temp', 16) + '.png')
+
+ try:
+ if image.mode != "RGB":
+ image = image.convert("RGB")
+ image.save(os.path.join(image_dir, image_file_name))
+ watermark_image.save(os.path.join(wm_dir, wm_file_name))
+ except IOError as e:
+ print(e)
+ log(f"Error: {NODE_NAME} skipped, because unable to create temporary file.", message_type='error')
+ return (image,)
+
+ from blind_watermark import WaterMark
+ bwm1 = WaterMark(password_img=1, password_wm=1)
+ bwm1.read_img(os.path.join(image_dir, image_file_name))
+ bwm1.read_wm(os.path.join(wm_dir, wm_file_name))
+ output_image = os.path.join(result_dir, output_file_name)
+ bwm1.embed(output_image, compression_ratio=100)
+
+ return Image.open(output_image).convert(orig_image_mode)
+
+def decode_watermark(image:Image, watermark_image_size:int=94) -> Image:
+ temp_dir = os.path.join(folder_paths.get_temp_directory(), generate_random_name('_watermark_', '_temp', 16))
+ if os.path.isdir(temp_dir):
+ shutil.rmtree(temp_dir)
+ image_dir = os.path.join(temp_dir, 'decode_image')
+ result_dir = os.path.join(temp_dir, 'decode_result')
+
+ try:
+ os.makedirs(image_dir)
+ os.makedirs(result_dir)
+ except Exception as e:
+ print(e)
+ log(f"Error: {NODE_NAME} skipped, because unable to create temporary folder.", message_type='error')
+ return (image,)
+
+ image_file_name = os.path.join(generate_random_name('watermark_decode_', '_temp', 16) + '.png')
+ output_file_name = os.path.join(generate_random_name('watermark_decode_output_', '_temp', 16) + '.png')
+
+ try:
+ image.save(os.path.join(image_dir, image_file_name))
+ except IOError as e:
+ print(e)
+ log(f"Error: {NODE_NAME} skipped, because unable to create temporary file.", message_type='error')
+ return (image,)
+
+ from blind_watermark import WaterMark
+ bwm1 = WaterMark(password_img=1, password_wm=1)
+ decode_image = os.path.join(image_dir, image_file_name)
+ output_image = os.path.join(result_dir, output_file_name)
+
+ try:
+ bwm1.extract(filename=decode_image, wm_shape=(watermark_image_size, watermark_image_size),
+ out_wm_name=os.path.join(output_image),)
+ ret_image = Image.open(output_image)
+ except Exception as e:
+ log(f"blind watermark extract fail, {e}")
+ ret_image = Image.new("RGB", (64, 64), color="black")
+
+ ret_image = normalize_gray(ret_image)
+
+ return ret_image
+
'''Mask Functions'''
@lru_cache(maxsize=1, typed=False)
diff --git a/py/qrcode.py b/py/qrcode.py
new file mode 100644
index 0000000..b4a7718
--- /dev/null
+++ b/py/qrcode.py
@@ -0,0 +1,87 @@
+from .imagefunc import *
+
+class CreateQRCode:
+
+ def __init__(self):
+ pass
+
+ @classmethod
+ def INPUT_TYPES(self):
+
+ return {
+ "required": {
+ "size": ("INT", {"default": 512, "min": 4, "max": 99999, "step": 1}),
+ "border": ("INT", {"default": 1, "min": 1, "max": 10, "step": 1}),
+ "text": ("STRING", {"default": "", "multiline": True}),
+ },
+ "optional": {
+ }
+ }
+
+ RETURN_TYPES = ("IMAGE", )
+ RETURN_NAMES = ("image", )
+ FUNCTION = 'create_qrcode'
+ CATEGORY = '😺dzNodes/LayerUtility'
+
+ def create_qrcode(self, size, border, text):
+ import qrcode
+ qr = qrcode.QRCode(
+ version=1,
+ error_correction=qrcode.constants.ERROR_CORRECT_H,
+ box_size=20,
+ border=border,
+ )
+ qr.add_data(text.encode('utf-8'))
+ qr.make(fit=True)
+ ret_image = qr.make_image(fill_color="black", back_color="white")
+ ret_image = ret_image.resize((size, size), Image.BICUBIC)
+
+ return (pil2tensor(ret_image.convert("RGB")), )
+
+class DecodeQRCode:
+
+ def __init__(self):
+ pass
+
+ @classmethod
+ def INPUT_TYPES(self):
+
+ return {
+ "required": {
+ "image": ("IMAGE",),
+ "pre_blur": ("INT", {"default": 2, "min": 0, "max": 16, "step": 1}),
+ },
+ "optional": {
+ }
+ }
+
+ RETURN_TYPES = ("STRING", )
+ RETURN_NAMES = ("string", )
+ FUNCTION = 'decode_qrcode'
+ CATEGORY = '😺dzNodes/LayerUtility'
+
+ def decode_qrcode(self, image, pre_blur):
+ ret_texts = []
+ from pyzbar.pyzbar import decode
+ for i in image:
+ _image = torch.unsqueeze(i, 0)
+ _image = tensor2pil(_image)
+ if pre_blur:
+ _image = gaussian_blur(_image, pre_blur)
+ qrmessage = decode(_image)
+ if len(qrmessage) > 0:
+ ret_texts.append(qrmessage[0][0].decode('utf-8'))
+ else:
+ ret_texts.append("Cannot recognize QR")
+
+ return (ret_texts, )
+
+NODE_CLASS_MAPPINGS = {
+ "LayerUtility: CreateQRCode": CreateQRCode,
+ "LayerUtility: DecodeQRCode": DecodeQRCode
+}
+
+NODE_DISPLAY_NAME_MAPPINGS = {
+ "LayerUtility: CreateQRCode": "LayerUtility: Create QRCode",
+ "LayerUtility: DecodeQRCode": "LayerUtility: Decode QRCode"
+}
\ No newline at end of file
diff --git a/py/save_image_plus.py b/py/save_image_plus.py
new file mode 100644
index 0000000..dda3f2f
--- /dev/null
+++ b/py/save_image_plus.py
@@ -0,0 +1,123 @@
+import os.path
+from PIL.PngImagePlugin import PngInfo
+import datetime
+from .imagefunc import *
+
+NODE_NAME = 'SaveImagePlus'
+
+class SaveImagePlus:
+ def __init__(self):
+ self.output_dir = folder_paths.get_output_directory()
+ self.type = "output"
+ self.prefix_append = ""
+ self.compress_level = 4
+
+ @classmethod
+ def INPUT_TYPES(s):
+ return {"required":
+ {"images": ("IMAGE", ),
+ "custom_path": ("STRING", {"default": ""}),
+ "filename_prefix": ("STRING", {"default": "comfyui"}),
+ "timestamp": (["None", "second", "millisecond"],),
+ "format": (["png", "jpg"],),
+ "quality": ("INT", {"default": 100, "min": 10, "max": 100, "step": 1}),
+ "meta_data": ("BOOLEAN", {"default": False}),
+ "blind_watermark": ("STRING", {"default": ""}),
+ },
+ "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"},
+ }
+
+ RETURN_TYPES = ()
+ FUNCTION = "save_image_plus"
+ OUTPUT_NODE = True
+ CATEGORY = '😺dzNodes/LayerUtility'
+
+ def save_image_plus(self, images, custom_path, filename_prefix, timestamp, format, quality,
+ meta_data, blind_watermark, prompt=None, extra_pnginfo=None):
+
+
+ filename_prefix += self.prefix_append
+ full_output_folder, filename, counter, subfolder, filename_prefix = folder_paths.get_save_image_path(filename_prefix, self.output_dir, images[0].shape[1], images[0].shape[0])
+ results = list()
+ for image in images:
+ i = 255. * image.cpu().numpy()
+ img = Image.fromarray(np.clip(i, 0, 255).astype(np.uint8))
+
+ if blind_watermark != "":
+ img_mode = img.mode
+ wm_size = watermark_image_size(img)
+ import qrcode
+ qr = qrcode.QRCode(
+ version=1,
+ error_correction=qrcode.constants.ERROR_CORRECT_H,
+ box_size=20,
+ border=1,
+ )
+ qr.add_data(blind_watermark.encode('utf-8'))
+ qr.make(fit=True)
+ qr_image = qr.make_image(fill_color="black", back_color="white")
+ qr_image = qr_image.resize((wm_size, wm_size), Image.BICUBIC).convert("L")
+
+ y, u, v, _ = image_channel_split(img, mode='YCbCr')
+ _u = add_invisibal_watermark(u, qr_image)
+ wm_img = image_channel_merge((y, _u, v), mode='YCbCr')
+
+ if img.mode == "RGBA":
+ img = RGB2RGBA(wm_img, img.split()[-1])
+ else:
+ img = wm_img.convert(img_mode)
+
+ metadata = None
+ if meta_data:
+ metadata = PngInfo()
+ if prompt is not None:
+ metadata.add_text("prompt", json.dumps(prompt))
+ if extra_pnginfo is not None:
+ for x in extra_pnginfo:
+ metadata.add_text(x, json.dumps(extra_pnginfo[x]))
+
+ if timestamp == "millisecond":
+ file = f'{filename}_{datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S-%f")[:-3]}.{format}'
+ elif timestamp == "second":
+ file = f'{filename}_{datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")}.{format}'
+ else:
+ file = f'{filename}_{counter:05}.{format}'
+
+ if not os.path.exists(custom_path):
+ if custom_path != "":
+ raise FileNotFoundError("custom_path is not a valid path")
+ else:
+ full_output_folder = os.path.normpath(custom_path)
+
+ while os.path.isfile(os.path.join(full_output_folder, file)):
+ counter += 1
+ if timestamp == "millisecond":
+ file = f'{filename}_{datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S-%f")[:-3]}_{counter:05}.{format}'
+ elif timestamp == "second":
+ file = f'{filename}_{datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")}_{counter:05}.{format}'
+ else:
+ file = f"{filename}_{counter:05}.{format}"
+
+ if format == "png":
+ img.save(os.path.join(full_output_folder, file), pnginfo=metadata, compress_level= (100 - quality) // 10)
+ else:
+ if img.mode == "RGBA":
+ img = img.convert("RGB")
+ img.save(os.path.join(full_output_folder, file), quality=quality)
+
+ results.append({
+ "filename": file,
+ "subfolder": subfolder,
+ "type": self.type
+ })
+ counter += 1
+
+ return { "ui": { "images": results } }
+
+NODE_CLASS_MAPPINGS = {
+ "LayerUtility: SaveImagePlus": SaveImagePlus
+}
+
+NODE_DISPLAY_NAME_MAPPINGS = {
+ "LayerUtility: SaveImagePlus": "LayerUtility: SaveImage Plus"
+}
\ No newline at end of file
diff --git a/py/watermark.py b/py/watermark.py
new file mode 100644
index 0000000..dc70d64
--- /dev/null
+++ b/py/watermark.py
@@ -0,0 +1,111 @@
+from .imagefunc import *
+
+
+
+class EncodeBlindWaterMark:
+
+ def __init__(self):
+ pass
+
+ @classmethod
+ def INPUT_TYPES(self):
+
+ return {
+ "required": {
+ "image": ("IMAGE", ), #
+ "watermark_image": ("IMAGE",), #
+ },
+ "optional": {
+ }
+ }
+
+ RETURN_TYPES = ("IMAGE",)
+ RETURN_NAMES = ("image",)
+ FUNCTION = 'watermark_encode'
+ CATEGORY = '😺dzNodes/LayerUtility'
+
+ def watermark_encode(self, image, watermark_image):
+
+ NODE_NAME = 'Add BlindWaterMark'
+
+ l_images = []
+ w_images = []
+ ret_images = []
+
+ for l in image:
+ l_images.append(torch.unsqueeze(l, 0))
+ for w in watermark_image:
+ w_images.append(torch.unsqueeze(w, 0))
+
+ for i in range(len(l_images)):
+ _image = tensor2pil(l_images[i])
+ wm_size = watermark_image_size(_image)
+ _wm_image = w_images[i] if i < len(w_images) else w_images[-1]
+ _wm_image = tensor2pil(_wm_image)
+ _wm_image = _wm_image.resize((wm_size, wm_size), Image.LANCZOS)
+ _wm_image = _wm_image.convert("L")
+
+ y, u, v, _ = image_channel_split(_image, mode='YCbCr')
+ _u = add_invisibal_watermark(u, _wm_image)
+ ret_image = image_channel_merge((y, _u, v), mode='YCbCr')
+
+ if _image.mode == "RGBA":
+ ret_image = RGB2RGBA(ret_image, _image.split()[-1])
+ ret_images.append(pil2tensor(ret_image))
+
+ log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
+ return (torch.cat(ret_images, dim=0),)
+
+
+
+class DecodeBlindWaterMark:
+
+ def __init__(self):
+ pass
+
+ @classmethod
+ def INPUT_TYPES(self):
+
+ return {
+ "required": {
+ "image": ("IMAGE",), #
+ },
+ "optional": {
+ }
+ }
+
+ RETURN_TYPES = ("IMAGE", )
+ RETURN_NAMES = ("watermark_image",)
+ FUNCTION = 'watermark_decode'
+ CATEGORY = '😺dzNodes/LayerUtility'
+
+ def watermark_decode(self, image):
+
+ NODE_NAME = 'Decode BlindWaterMark'
+
+ ret_images = []
+
+ for i in image:
+ _image = torch.unsqueeze(i,0)
+ _image = tensor2pil(_image)
+ wm_size = watermark_image_size(_image)
+ y, u, v, _ = image_channel_split(_image, mode='YCbCr')
+ ret_image = decode_watermark(u, wm_size)
+ ret_image = ret_image.resize((512, 512), Image.LANCZOS)
+ ret_image = normalize_gray(ret_image)
+ ret_images.append(pil2tensor(ret_image.convert('RGB')))
+
+ log(f"{NODE_NAME} Processed {len(ret_images)} image(s).", message_type='finish')
+ return (torch.cat(ret_images, dim=0), )
+
+
+
+NODE_CLASS_MAPPINGS = {
+ "LayerUtility: AddBlindWaterMark": EncodeBlindWaterMark,
+ "LayerUtility: ShowBlindWaterMark": DecodeBlindWaterMark
+}
+
+NODE_DISPLAY_NAME_MAPPINGS = {
+ "LayerUtility: AddBlindWaterMark": "LayerUtility: Add BlindWaterMark",
+ "LayerUtility: ShowBlindWaterMark": "LayerUtility: Show BlindWaterMark"
+}
\ No newline at end of file
diff --git a/requirements.txt b/requirements.txt
index 6b555cf..ff570b5 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -25,4 +25,7 @@ transformers
kornia
image-reward
ultralytics
-blend_modes
\ No newline at end of file
+blend_modes
+blind-watermark
+qrcode
+pyzbar
diff --git a/workflow/watermark_example.json b/workflow/watermark_example.json
new file mode 100644
index 0000000..e241ad6
--- /dev/null
+++ b/workflow/watermark_example.json
@@ -0,0 +1,592 @@
+{
+ "last_node_id": 27,
+ "last_link_id": 27,
+ "nodes": [
+ {
+ "id": 1,
+ "type": "LayerUtility: AddBlindWaterMark",
+ "pos": [
+ 1135,
+ 670
+ ],
+ "size": {
+ "0": 268.79998779296875,
+ "1": 46
+ },
+ "flags": {},
+ "order": 4,
+ "mode": 0,
+ "inputs": [
+ {
+ "name": "image",
+ "type": "IMAGE",
+ "link": 1,
+ "slot_index": 0
+ },
+ {
+ "name": "watermark_image",
+ "type": "IMAGE",
+ "link": 8
+ }
+ ],
+ "outputs": [
+ {
+ "name": "image",
+ "type": "IMAGE",
+ "links": [
+ 3,
+ 4
+ ],
+ "shape": 3,
+ "slot_index": 0
+ }
+ ],
+ "properties": {
+ "Node name for S&R": "LayerUtility: AddBlindWaterMark"
+ }
+ },
+ {
+ "id": 2,
+ "type": "LoadImage",
+ "pos": [
+ 682,
+ 468
+ ],
+ "size": {
+ "0": 397.7324523925781,
+ "1": 323.5675354003906
+ },
+ "flags": {},
+ "order": 0,
+ "mode": 0,
+ "outputs": [
+ {
+ "name": "IMAGE",
+ "type": "IMAGE",
+ "links": [
+ 1
+ ],
+ "shape": 3
+ },
+ {
+ "name": "MASK",
+ "type": "MASK",
+ "links": null,
+ "shape": 3
+ }
+ ],
+ "properties": {
+ "Node name for S&R": "LoadImage"
+ },
+ "widgets_values": [
+ "1344x768_beach (1).png",
+ "image"
+ ]
+ },
+ {
+ "id": 9,
+ "type": "LayerUtility: CreateQRCode",
+ "pos": [
+ 683,
+ 868
+ ],
+ "size": {
+ "0": 400,
+ "1": 200
+ },
+ "flags": {},
+ "order": 1,
+ "mode": 0,
+ "outputs": [
+ {
+ "name": "image",
+ "type": "IMAGE",
+ "links": [
+ 8
+ ],
+ "shape": 3,
+ "slot_index": 0
+ }
+ ],
+ "properties": {
+ "Node name for S&R": "LayerUtility: CreateQRCode"
+ },
+ "widgets_values": [
+ 512,
+ 1,
+ "LayerStyle"
+ ]
+ },
+ {
+ "id": 5,
+ "type": "LayerUtility: ShowBlindWaterMark",
+ "pos": [
+ 1520,
+ 850
+ ],
+ "size": {
+ "0": 277.20001220703125,
+ "1": 30.475421905517578
+ },
+ "flags": {},
+ "order": 7,
+ "mode": 0,
+ "inputs": [
+ {
+ "name": "image",
+ "type": "IMAGE",
+ "link": 4
+ }
+ ],
+ "outputs": [
+ {
+ "name": "watermark_image",
+ "type": "IMAGE",
+ "links": [
+ 5,
+ 9
+ ],
+ "shape": 3,
+ "slot_index": 0
+ }
+ ],
+ "properties": {
+ "Node name for S&R": "LayerUtility: ShowBlindWaterMark"
+ }
+ },
+ {
+ "id": 10,
+ "type": "LayerUtility: DecodeQRCode",
+ "pos": [
+ 1855,
+ 853
+ ],
+ "size": {
+ "0": 315,
+ "1": 58
+ },
+ "flags": {},
+ "order": 11,
+ "mode": 0,
+ "inputs": [
+ {
+ "name": "image",
+ "type": "IMAGE",
+ "link": 9
+ }
+ ],
+ "outputs": [
+ {
+ "name": "string",
+ "type": "STRING",
+ "links": [
+ 10
+ ],
+ "shape": 3,
+ "slot_index": 0
+ }
+ ],
+ "properties": {
+ "Node name for S&R": "LayerUtility: DecodeQRCode"
+ },
+ "widgets_values": [
+ 2
+ ]
+ },
+ {
+ "id": 6,
+ "type": "PreviewImage",
+ "pos": [
+ 1523,
+ 962
+ ],
+ "size": {
+ "0": 262.6583251953125,
+ "1": 255.0736846923828
+ },
+ "flags": {},
+ "order": 10,
+ "mode": 0,
+ "inputs": [
+ {
+ "name": "images",
+ "type": "IMAGE",
+ "link": 5
+ }
+ ],
+ "properties": {
+ "Node name for S&R": "PreviewImage"
+ }
+ },
+ {
+ "id": 19,
+ "type": "LayerUtility: AddBlindWaterMark",
+ "pos": [
+ 1160,
+ 1600
+ ],
+ "size": {
+ "0": 268.79998779296875,
+ "1": 46
+ },
+ "flags": {},
+ "order": 5,
+ "mode": 0,
+ "inputs": [
+ {
+ "name": "image",
+ "type": "IMAGE",
+ "link": 20,
+ "slot_index": 0
+ },
+ {
+ "name": "watermark_image",
+ "type": "IMAGE",
+ "link": 27
+ }
+ ],
+ "outputs": [
+ {
+ "name": "image",
+ "type": "IMAGE",
+ "links": [
+ 22,
+ 23
+ ],
+ "shape": 3,
+ "slot_index": 0
+ }
+ ],
+ "properties": {
+ "Node name for S&R": "LayerUtility: AddBlindWaterMark"
+ }
+ },
+ {
+ "id": 22,
+ "type": "LayerUtility: ShowBlindWaterMark",
+ "pos": [
+ 1540,
+ 1780
+ ],
+ "size": {
+ "0": 277.20001220703125,
+ "1": 30.475421905517578
+ },
+ "flags": {},
+ "order": 9,
+ "mode": 0,
+ "inputs": [
+ {
+ "name": "image",
+ "type": "IMAGE",
+ "link": 23
+ }
+ ],
+ "outputs": [
+ {
+ "name": "watermark_image",
+ "type": "IMAGE",
+ "links": [
+ 24
+ ],
+ "shape": 3,
+ "slot_index": 0
+ }
+ ],
+ "properties": {
+ "Node name for S&R": "LayerUtility: ShowBlindWaterMark"
+ }
+ },
+ {
+ "id": 23,
+ "type": "PreviewImage",
+ "pos": [
+ 1550,
+ 1890
+ ],
+ "size": {
+ "0": 262.6583251953125,
+ "1": 255.0736846923828
+ },
+ "flags": {},
+ "order": 12,
+ "mode": 0,
+ "inputs": [
+ {
+ "name": "images",
+ "type": "IMAGE",
+ "link": 24
+ }
+ ],
+ "properties": {
+ "Node name for S&R": "PreviewImage"
+ }
+ },
+ {
+ "id": 20,
+ "type": "LoadImage",
+ "pos": [
+ 700,
+ 1400
+ ],
+ "size": {
+ "0": 397.7324523925781,
+ "1": 323.5675354003906
+ },
+ "flags": {},
+ "order": 2,
+ "mode": 0,
+ "outputs": [
+ {
+ "name": "IMAGE",
+ "type": "IMAGE",
+ "links": [
+ 20
+ ],
+ "shape": 3
+ },
+ {
+ "name": "MASK",
+ "type": "MASK",
+ "links": null,
+ "shape": 3
+ }
+ ],
+ "properties": {
+ "Node name for S&R": "LoadImage"
+ },
+ "widgets_values": [
+ "1344x768_girl2.png",
+ "image"
+ ]
+ },
+ {
+ "id": 4,
+ "type": "PreviewImage",
+ "pos": [
+ 1518,
+ 456
+ ],
+ "size": [
+ 494.42527914239736,
+ 315.20930867362824
+ ],
+ "flags": {},
+ "order": 6,
+ "mode": 0,
+ "inputs": [
+ {
+ "name": "images",
+ "type": "IMAGE",
+ "link": 3
+ }
+ ],
+ "properties": {
+ "Node name for S&R": "PreviewImage"
+ }
+ },
+ {
+ "id": 8,
+ "type": "Display Any (rgthree)",
+ "pos": [
+ 1904,
+ 957
+ ],
+ "size": {
+ "0": 242.66796875,
+ "1": 87.94121551513672
+ },
+ "flags": {},
+ "order": 13,
+ "mode": 0,
+ "inputs": [
+ {
+ "name": "source",
+ "type": "*",
+ "link": 10,
+ "dir": 3
+ }
+ ],
+ "properties": {
+ "Node name for S&R": "Display Any (rgthree)"
+ },
+ "widgets_values": [
+ ""
+ ]
+ },
+ {
+ "id": 27,
+ "type": "LoadImage",
+ "pos": [
+ 770,
+ 1820
+ ],
+ "size": [
+ 315,
+ 314.00000381469727
+ ],
+ "flags": {},
+ "order": 3,
+ "mode": 0,
+ "outputs": [
+ {
+ "name": "IMAGE",
+ "type": "IMAGE",
+ "links": [
+ 27
+ ],
+ "shape": 3,
+ "slot_index": 0
+ },
+ {
+ "name": "MASK",
+ "type": "MASK",
+ "links": null,
+ "shape": 3
+ }
+ ],
+ "properties": {
+ "Node name for S&R": "LoadImage"
+ },
+ "widgets_values": [
+ "ComfyUI_temp_pzmea_00009_.png",
+ "image"
+ ]
+ },
+ {
+ "id": 21,
+ "type": "PreviewImage",
+ "pos": [
+ 1540,
+ 1390
+ ],
+ "size": {
+ "0": 490.22747802734375,
+ "1": 323.8782653808594
+ },
+ "flags": {},
+ "order": 8,
+ "mode": 0,
+ "inputs": [
+ {
+ "name": "images",
+ "type": "IMAGE",
+ "link": 22
+ }
+ ],
+ "properties": {
+ "Node name for S&R": "PreviewImage"
+ }
+ }
+ ],
+ "links": [
+ [
+ 1,
+ 2,
+ 0,
+ 1,
+ 0,
+ "IMAGE"
+ ],
+ [
+ 3,
+ 1,
+ 0,
+ 4,
+ 0,
+ "IMAGE"
+ ],
+ [
+ 4,
+ 1,
+ 0,
+ 5,
+ 0,
+ "IMAGE"
+ ],
+ [
+ 5,
+ 5,
+ 0,
+ 6,
+ 0,
+ "IMAGE"
+ ],
+ [
+ 8,
+ 9,
+ 0,
+ 1,
+ 1,
+ "IMAGE"
+ ],
+ [
+ 9,
+ 5,
+ 0,
+ 10,
+ 0,
+ "IMAGE"
+ ],
+ [
+ 10,
+ 10,
+ 0,
+ 8,
+ 0,
+ "*"
+ ],
+ [
+ 20,
+ 20,
+ 0,
+ 19,
+ 0,
+ "IMAGE"
+ ],
+ [
+ 22,
+ 19,
+ 0,
+ 21,
+ 0,
+ "IMAGE"
+ ],
+ [
+ 23,
+ 19,
+ 0,
+ 22,
+ 0,
+ "IMAGE"
+ ],
+ [
+ 24,
+ 22,
+ 0,
+ 23,
+ 0,
+ "IMAGE"
+ ],
+ [
+ 27,
+ 27,
+ 0,
+ 19,
+ 1,
+ "IMAGE"
+ ]
+ ],
+ "groups": [],
+ "config": {},
+ "extra": {
+ "ds": {
+ "scale": 0.7513148009015778,
+ "offset": [
+ 419.816938926498,
+ -337.6024702455139
+ ]
+ }
+ },
+ "version": 0.4
+}
\ No newline at end of file