commit RoundedRectangle node
This commit is contained in:
@@ -147,6 +147,7 @@ When this error has occurred, please check the network environment.
|
||||
|
||||
<font size="4">**If the dependency package error after updating, please double clicking ```repair_dependency.bat``` (for Official ComfyUI Protable) or ```repair_dependency_aki.bat``` (for ComfyUI-aki-v1.x) in the plugin folder to reinstall the dependency packages. </font><br />
|
||||
|
||||
* Commit [RoundedRectangle](#RoundedRectangle) node, Used to create rounded rectangle and mask.
|
||||
* Commit [AnyRerouter](#AnyRerouter) node, Used for reroute any type of data.
|
||||
* Commit [ICMask](#ICMask) and [ICMaskCropBack](#ICMaskCropBack) nodes, Used for generating In-Context image and mask, and automatic crop back. The code is from [lrzjason/Comfyui-In-Context-Lora-Utils](https://github.com/lrzjason/Comfyui-In-Context-Lora-Utils) , Thanks to the original author @小志Jason.
|
||||
* Commit [GetMainColorsV2](#GetMainColorsV2) node, add sorting by color area and output color values and proportions in the preview image. This part of the code was improved by @ HL, thanks.
|
||||
@@ -167,7 +168,7 @@ LayerMask: SegmentAnythingUltra, LayerMask: SegmentAnythingUltra V2, LayerMask:
|
||||
LayerUtility: UserPromptGeneratorTxt2ImgPrompt, LayerUtility: UserPromptGeneratorTxt2ImgPromptWithReference, LayerUtility: UserPromptGeneratorReplaceWord,
|
||||
LayerUtility: AddBlindWaterMark, LayerUtility: ShowBlindWaterMark, LayerMask: YoloV8Detect
|
||||
|
||||
|
||||
* Merge the PR submitted by [alexisrolland](https://github.com/alexisrolland) , commit the ```Image Blend Advanced v3``` and ```Drop Shadow v3``` nodes, support transparent background.
|
||||
* Commit [BenUltra](#BenUltra) and [LoadBenModel](#LoadBenModel) nodes. These two nodes are the implementation of [PramaLLC/BEN](https://huggingface.co/PramaLLC/BEN) project in ComfyUI.
|
||||
Download the ```BEN_Base.pth``` and ```config.json``` from [huggingface](https://huggingface.co/PramaLLC/BEN/tree/main) or [BaiduNetdisk](https://pan.baidu.com/s/17mdBxfBl_R97mtNHuiHsxQ?pwd=2jn3) and copy to ```ComfyUI/models/BEN``` folder.
|
||||
* Merge the PR submitted by [jimlee2048](https://github.com/jimlee2048), add the LoadBiRefNetModelV2 node, and support loading RMBG 2.0 models.
|
||||
@@ -1274,6 +1275,27 @@ The following changes have been made based on GradientImage:
|
||||
<sup>*</sup>Only limited to input images and masks. forcing the integration of other types of inputs will result in node errors.
|
||||
<sup>**</sup>The preset size is defined in ```custom_size.ini```, this file is located in the root directory of the plug-in, and the default name is ```custom_size.ini.example```. to use this file for the first time, you need to change the file suffix to ```.ini```. Open with text editing software. Each row represents a size, with the first value being width and the second being height, separated by a lowercase "x" in the middle. To avoid errors, please do not enter extra characters.
|
||||
|
||||
### <a id="table1">RoundedRectangle</a>
|
||||

|
||||
Generate rounded rectangles and masks.
|
||||
|
||||

|
||||
Node Options:
|
||||
* image: The image to be processed.
|
||||
* object_mask: Optional input. This mask can generate rounded rectangular regions. If have input for ```crop-box```, this option will be ignored.
|
||||
* crop_box: Optional input. This can generate a rounded rectangular area by cropping the region.
|
||||
* rounded_rect_radius: Rounded rectangle radius. The range is 0-100, and the larger the value, the more pronounced the rounded corners.
|
||||
* anti_aliasing: Anti aliasing, ranging from 0-16, with larger values indicating less pronounced aliasing. Excessive values will significantly reduce the processing speed of nodes.
|
||||
* top: Top margin of the rounded rectangle is a percentage of the image height, and negative values are allowed. If there is crox_box or object_mask input, this option will be ignored.
|
||||
* bottom: Bottom margin of the rounded rectangle is a percentage of the image height, and negative values are allowed. If there is crox_box or object_mask input, this option will be ignored.
|
||||
* left: Left margin of the rounded rectangle is a percentage of the image width, and negative values are allowed. If there is crox_box or object_mask input, this option will be ignored.
|
||||
* right: Right margin of the rounded rectangle is a percentage of the image width, and negative values are allowed. If there is crox_box or object_mask input, this option will be ignored.
|
||||
* detect: The method of detecting mask regions when object_mask is input. ```min_bounding_rect``` is the minimum bounding rectangle of block shape, ```max_inscribed_rect``` is the maximum inscribed rectangle of block shape, and ```mask-area``` is the effective area for masking pixels.
|
||||
* obj_ext_top: When object_mask or crop-box is input, the top of the rounded rectangle area expands outward as a percentage of the area height, and negative values are allowed.
|
||||
* obj_ext_bottom: When object_mask or crop-box is input, the bottom of the rounded rectangle area expands outward as a percentage of the area height, and negative values are allowed.
|
||||
* obj_ext_left: When object_mask or crop-box is input, the left of the rounded rectangle area expands outward as a percentage of the area width, and negative values are allowed.
|
||||
* obj_ext_right: When object_mask or crop-box is input, the right of the rounded rectangle area expands outward as a percentage of the area width, and negative values are allowed.
|
||||
|
||||
|
||||
### <a id="table1">SimpleTextImage</a>
|
||||
|
||||
|
||||
+23
-1
@@ -128,6 +128,7 @@ os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'
|
||||
## 更新说明
|
||||
<font size="4">**如果本插件更新后出现依赖包错误,请双击运行插件目录下的```install_requirements.bat```(官方便携包),或 ```install_requirements_aki.bat```(秋叶整合包) 重新安装依赖包。
|
||||
|
||||
* 添加 [RoundedRectangle](#RoundedRectangle) 节点,用于创建圆角矩形及遮罩。
|
||||
* 添加 [AnyRerouter](#AnyRerouter) 节点,用于将任意类型数据中转转发。
|
||||
* 添加 [ICMask](#ICMask) 和 [ICMaskCropBack](#ICMaskCropBack) 节点,用于生成一致性上下文图片和遮罩,以及自动回裁。代码来自[lrzjason/Comfyui-In-Context-Lora-Utils](https://github.com/lrzjason/Comfyui-In-Context-Lora-Utils) 感谢原作者@小志Jason
|
||||
* 添加 [GetMainColorsV2](#GetMainColorsV2) 节点,增加按颜色面积排序,并在预览图中输出色值和比例。这部分代码由@HL完善,感谢。
|
||||
@@ -148,6 +149,7 @@ LayerMask: SegmentAnythingUltra, LayerMask: SegmentAnythingUltra V2, LayerMask:
|
||||
LayerUtility: UserPromptGeneratorTxt2ImgPrompt, LayerUtility: UserPromptGeneratorTxt2ImgPromptWithReference, LayerUtility: UserPromptGeneratorReplaceWord,
|
||||
LayerUtility: AddBlindWaterMark, LayerUtility: ShowBlindWaterMark, LayerMask: YoloV8Detect
|
||||
|
||||
* 合并[alexisrolland](https://github.com/alexisrolland) 提交的分支,添加Image Blend Advanced v3 和 Drop Shadow v3 节点,支持透明背景。
|
||||
* 添加[BenUltra](#BenUltra) 和 [LoadBenModel](#LoadBenModel)节点。这两个节点是[PramaLLC/BEN](https://huggingface.co/PramaLLC/BEN) 项目在ComfyUI中的实现。
|
||||
从 [huggingface](https://huggingface.co/PramaLLC/BEN/tree/main) 或 [百度网盘](https://pan.baidu.com/s/17mdBxfBl_R97mtNHuiHsxQ?pwd=2jn3)下载```BEN_Base.pth``` 和 ```config.json``` 两个文件并复制到 ```ComfyUI/models/BEN```文件夹。
|
||||
* 合并[jimlee2048](https://github.com/jimlee2048)提交的PR, 添加[LoadBiRefNetModelV2](#LoadBiRefNetModelV2) 节点,支持加载RMBG 2.0模型。
|
||||
@@ -1132,6 +1134,27 @@ GradientImage的V2升级版。
|
||||
<sup>**</sup>预设尺寸在```custom_size.ini```中定义,这个文件位于插件根目录下, 默认名字是```custom_size.ini.example```, 初次使用这个文件需将文件后缀改为.ini。用文本编辑软件打开,编辑自定义尺寸。每行表示一个尺寸,第一个数值是宽度,第二个是高度,中间用小写的"x"分隔。为避免错误请不要输入多余的字符。
|
||||
|
||||
|
||||
### <a id="table1">RoundedRectangle</a>
|
||||

|
||||
生成圆角矩形及遮罩。
|
||||
|
||||

|
||||
节点选项说明:
|
||||
* image: 图片输入。
|
||||
* object_mask: 可选输入。可由此遮罩生成圆角矩形区域。如果```crop_box```有输入,则此选项将被忽略。
|
||||
* crop_box: 可选输入。可由此裁剪区域生成圆角矩形区域。
|
||||
* rounded_rect_radius: 圆角矩形半径。范围0-100, 数值越大圆角越明显。
|
||||
* anti_aliasing: 抗锯齿,范围从0-16,数值越大,锯齿越不明显。过高的数值将显著降低节点的处理速度。
|
||||
* top: 圆角矩形顶部边距,为图片高度的百分比,允许设置负值。如果有crop_box或者object_mask输入,此选项将被忽略。
|
||||
* bottom: 圆角矩形底部边距,为图片高度的百分比,允许设置负值。如果有crop_box或者object_mask输入,此选项将被忽略。
|
||||
* left: 圆角矩形左侧边距,为图片宽度的百分比,允许设置负值。如果有crop_box或者object_mask输入,此选项将被忽略。
|
||||
* right: 圆角矩形右侧边距,为图片宽度的百分比,允许设置负值。如果有crop_box或者object_mask输入,此选项将被忽略。
|
||||
* detect: 当object_mask输入时,检测遮罩区域的方法。```min_bounding_rect```是大块形状最小外接矩形, ```max_inscribed_rect```是大块形状最大内接矩形, ```mask_area```是遮罩像素有效区域。
|
||||
* obj_ext_top: 当object_mask或crop_box输入时,圆角矩形区域顶部外扩范围,为区域高度的百分比,允许设置负值。
|
||||
* obj_ext_bottom: 当object_mask或crop_box输入时,圆角矩形区域底部外扩范围,为区域高度的百分比,允许设置负值。
|
||||
* obj_ext_left: 当object_mask或crop_box输入时,圆角矩形区域左侧外扩范围,为区域宽度的百分比,允许设置负值。
|
||||
* obj_ext_right: 当object_mask或crop_box输入时,圆角矩形区域右侧外扩范围,为区域宽度的百分比,允许设置负值。
|
||||
|
||||
|
||||
### <a id="table1">SimpleTextImage</a>
|
||||

|
||||
@@ -1161,7 +1184,6 @@ GradientImage的V2升级版。
|
||||
文件夹里面所有的.ttf和.otf文件将在ComfyUI初始化时被收集并显示在节点的列表中。
|
||||
如果ini中设定的文件夹无效,将启用插件自带的font文件夹。
|
||||
|
||||
|
||||
### <a id="table1">TextImage</a>
|
||||

|
||||
从文字生成图片以及遮罩。支持字间距行间距调整,横排竖排调整,可设置文字的随机变化,包括大小和位置的随机变化。
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 546 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 116 KiB |
@@ -8,7 +8,7 @@ from .imagefunc import chop_image_v2, chop_mode_v2, shift_image, expand_mask
|
||||
class DropShadowV3:
|
||||
|
||||
def __init__(self):
|
||||
NODE_NAME = 'DropShadowV3'
|
||||
self.NODE_NAME = 'DropShadowV3'
|
||||
|
||||
@classmethod
|
||||
def INPUT_TYPES(self):
|
||||
|
||||
+26
-2
@@ -748,6 +748,31 @@ def gradient(start_color_inhex:str, end_color_inhex:str, width:int, height:int,
|
||||
ret_image = ret_image.resize((width, height))
|
||||
return ret_image
|
||||
|
||||
def draw_rounded_rectangle(image:Image, radius:int, bboxes:list, scale_factor:int=2, color:str="white") -> Image:
|
||||
"""
|
||||
绘制圆角矩形图像。
|
||||
image:输入图片
|
||||
radius: 半径,100为纯椭圆
|
||||
bboxes: (x1,y1,x2,y2)列表
|
||||
scale_factor: 放大倍数
|
||||
:return: 绘制好的pillow图像
|
||||
"""
|
||||
if scale_factor < 1 : scale_factor = 1
|
||||
|
||||
img = image.resize((image.width * scale_factor, image.height * scale_factor), Image.LANCZOS)
|
||||
draw = ImageDraw.Draw(img)
|
||||
|
||||
for (x1, y1, x2, y2) in bboxes:
|
||||
r = radius * min(x2-x1, y2-y1) * 0.005
|
||||
x1, y1, x2, y2 = x1 * scale_factor, y1 * scale_factor, x2 * scale_factor, y2 * scale_factor
|
||||
# 计算圆角矩形的四个角的圆弧
|
||||
draw.rounded_rectangle([x1, y1, x2, y2], radius=r * scale_factor, fill=color)
|
||||
|
||||
img = img.filter(ImageFilter.SMOOTH_MORE)
|
||||
img = img.resize((image.width, image.height), Image.LANCZOS)
|
||||
|
||||
return img
|
||||
|
||||
def draw_rect(image:Image, x:int, y:int, width:int, height:int, line_color:str, line_width:int,
|
||||
box_color:str=None) -> Image:
|
||||
draw = ImageDraw.Draw(image)
|
||||
@@ -1529,8 +1554,7 @@ class VITMatteModel:
|
||||
def load_VITMatte_model(model_name:str, local_files_only:bool=False) -> object:
|
||||
model_name = "vitmatte"
|
||||
model_repo = "hustvl/vitmatte-small-composition-1k"
|
||||
model_path = check_and_download_model(model_name, model_repo)
|
||||
|
||||
model_path = check_and_download_model(model_name, model_repo)
|
||||
from transformers import VitMatteImageProcessor, VitMatteForImageMatting
|
||||
model = VitMatteForImageMatting.from_pretrained(model_path, local_files_only=local_files_only)
|
||||
processor = VitMatteImageProcessor.from_pretrained(model_path, local_files_only=local_files_only)
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
import torch
|
||||
from PIL import Image
|
||||
from .imagefunc import log, pil2tensor, tensor2pil, image2mask, RGB2RGBA
|
||||
from .imagefunc import draw_rounded_rectangle, gaussian_blur, mask_area, max_inscribed_rect, min_bounding_rect
|
||||
|
||||
|
||||
class LS_RoundedRectangle:
|
||||
|
||||
def __init__(self):
|
||||
self.NODE_NAME = 'RoundedRectangle'
|
||||
|
||||
@classmethod
|
||||
def INPUT_TYPES(self):
|
||||
detect_mode = ['mask_area', 'min_bounding_rect', 'max_inscribed_rect']
|
||||
return {
|
||||
"required": {
|
||||
"image": ("IMAGE",),
|
||||
"rounded_rect_radius": ("INT", {"default": 50, "min": 0, "max": 100, "step": 1}),
|
||||
"anti_aliasing": ("INT", {"default": 2, "min": 0, "max": 16, "step": 1}),
|
||||
"top": ("FLOAT", {"default": 8, "min": -100, "max": 100, "step": 0.1}),
|
||||
"bottom": ("FLOAT", {"default": 8, "min": -100, "max": 100, "step": 0.1}),
|
||||
"left": ("FLOAT", {"default": 8, "min": -100, "max": 100, "step": 0.1}),
|
||||
"right": ("FLOAT", {"default": 8, "min": -100, "max": 100, "step": 0.1}),
|
||||
"detect": (detect_mode,),
|
||||
"obj_ext_top": ("FLOAT", {"default": 8, "min": -100, "max": 100, "step": 0.1}),
|
||||
"obj_ext_bottom": ("FLOAT", {"default": 8, "min": -100, "max": 100, "step": 0.1}),
|
||||
"obj_ext_left": ("FLOAT", {"default": 8, "min": -100, "max": 100, "step": 0.1}),
|
||||
"obj_ext_right": ("FLOAT", {"default": 8, "min": -100, "max": 100, "step": 0.1}),
|
||||
},
|
||||
"optional": {
|
||||
"object_mask": ("MASK",),
|
||||
"crop_box": ("BOX",),
|
||||
}
|
||||
}
|
||||
|
||||
RETURN_TYPES = ("IMAGE", "MASK",)
|
||||
RETURN_NAMES = ("image", "mask",)
|
||||
FUNCTION = 'rounded_rectangle'
|
||||
CATEGORY = '😺dzNodes/LayerUtility'
|
||||
|
||||
def rounded_rectangle(self, image, rounded_rect_radius, anti_aliasing, top, bottom, left, right,
|
||||
detect, obj_ext_top, obj_ext_bottom, obj_ext_left, obj_ext_right,
|
||||
object_mask=None, crop_box=None):
|
||||
ret_images = []
|
||||
ret_masks = []
|
||||
|
||||
for index, img in enumerate(image):
|
||||
orig_image = tensor2pil(torch.unsqueeze(img, 0)).convert('RGB')
|
||||
width, height = orig_image.size
|
||||
black_image = Image.new('L', (width, height), color="black")
|
||||
|
||||
if crop_box is not None:
|
||||
w = crop_box[2] - crop_box[0]
|
||||
h = crop_box[3] - crop_box[1]
|
||||
x1 = crop_box[0] - int(obj_ext_left * w * 0.01)
|
||||
y1 = crop_box[1] - int(obj_ext_top * h * 0.01)
|
||||
x2 = crop_box[2] + int(obj_ext_right * w * 0.01)
|
||||
y2 = crop_box[3] + int(obj_ext_bottom * h * 0.01)
|
||||
bbox = [(x1, y1, x2, y2)]
|
||||
elif object_mask is not None:
|
||||
if object_mask.dim() == 2: object_mask = torch.unsqueeze(object_mask, 0)
|
||||
mask = object_mask[index] if index < len(object_mask) else object_mask[-1]
|
||||
mask = tensor2pil(mask)
|
||||
bluredmask = gaussian_blur(mask, 20).convert('L')
|
||||
x = -10
|
||||
y = -10
|
||||
w = 4
|
||||
h = 4
|
||||
if detect == "min_bounding_rect":
|
||||
(x, y, w, h) = min_bounding_rect(bluredmask)
|
||||
elif detect == "max_inscribed_rect":
|
||||
(x, y, w, h) = max_inscribed_rect(bluredmask)
|
||||
else:
|
||||
(x, y, w, h) = mask_area(mask)
|
||||
|
||||
x1 = x - int(obj_ext_left * w * 0.01)
|
||||
y1 = y - int(obj_ext_top * h * 0.01)
|
||||
x2 = x + w + int(obj_ext_right * w * 0.01)
|
||||
y2 = y + h + int(obj_ext_bottom * h * 0.01)
|
||||
bbox = [(x1, y1, x2, y2)]
|
||||
else:
|
||||
bbox = [(int(left * width * 0.01),
|
||||
int(top * height * 0.01),
|
||||
width - int(right * width * 0.01),
|
||||
height - int(bottom * height * 0.01))
|
||||
]
|
||||
rect_mask = draw_rounded_rectangle(black_image, rounded_rect_radius, bbox, anti_aliasing, "white")
|
||||
ret_image = RGB2RGBA(orig_image, rect_mask)
|
||||
ret_images.append(pil2tensor(ret_image))
|
||||
ret_masks.append(image2mask(rect_mask))
|
||||
|
||||
return (torch.cat(ret_images, dim=0), torch.cat(ret_masks, dim=0),)
|
||||
|
||||
NODE_CLASS_MAPPINGS = {
|
||||
"LayerUtility: RoundedRectangle": LS_RoundedRectangle
|
||||
}
|
||||
|
||||
NODE_DISPLAY_NAME_MAPPINGS = {
|
||||
"LayerUtility: RoundedRectangle": "LayerUtility: RoundedRectangle"
|
||||
}
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
[project]
|
||||
name = "comfyui_layerstyle"
|
||||
description = "A set of nodes for ComfyUI it generate image like Adobe Photoshop's Layer Style. the Drop Shadow is first completed node, and follow-up work is in progress."
|
||||
version = "2.0.9"
|
||||
version = "2.0.10"
|
||||
license = "MIT"
|
||||
dependencies = ["numpy", "pillow", "torch", "matplotlib", "Scipy", "scikit_image", "scikit_learn", "opencv-contrib-python", "pymatting", "timm", "colour-science", "transformers", "blend_modes", "huggingface_hub", "loguru"]
|
||||
|
||||
|
||||
@@ -0,0 +1,585 @@
|
||||
{
|
||||
"last_node_id": 27,
|
||||
"last_link_id": 66,
|
||||
"nodes": [
|
||||
{
|
||||
"id": 2,
|
||||
"type": "LoadImage",
|
||||
"pos": [
|
||||
-4248.54541015625,
|
||||
2201.82763671875
|
||||
],
|
||||
"size": [
|
||||
315,
|
||||
314
|
||||
],
|
||||
"flags": {},
|
||||
"order": 0,
|
||||
"mode": 0,
|
||||
"inputs": [],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "IMAGE",
|
||||
"type": "IMAGE",
|
||||
"links": [
|
||||
6,
|
||||
14,
|
||||
25,
|
||||
45,
|
||||
63
|
||||
],
|
||||
"slot_index": 0
|
||||
},
|
||||
{
|
||||
"name": "MASK",
|
||||
"type": "MASK",
|
||||
"links": [],
|
||||
"slot_index": 1
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "LoadImage"
|
||||
},
|
||||
"widgets_values": [
|
||||
"girl_dino_1024.png",
|
||||
"image"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"type": "LayerUtility: RoundedRectangle",
|
||||
"pos": [
|
||||
-3487.47900390625,
|
||||
2197.4248046875
|
||||
],
|
||||
"size": [
|
||||
354.73419189453125,
|
||||
338
|
||||
],
|
||||
"flags": {},
|
||||
"order": 4,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"name": "image",
|
||||
"type": "IMAGE",
|
||||
"link": 6
|
||||
},
|
||||
{
|
||||
"name": "object_mask",
|
||||
"type": "MASK",
|
||||
"link": 23,
|
||||
"shape": 7
|
||||
},
|
||||
{
|
||||
"name": "crop_box",
|
||||
"type": "BOX",
|
||||
"link": null,
|
||||
"shape": 7
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "image",
|
||||
"type": "IMAGE",
|
||||
"links": [],
|
||||
"slot_index": 0
|
||||
},
|
||||
{
|
||||
"name": "mask",
|
||||
"type": "MASK",
|
||||
"links": [
|
||||
22,
|
||||
41
|
||||
],
|
||||
"slot_index": 1
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "LayerUtility: RoundedRectangle"
|
||||
},
|
||||
"widgets_values": [
|
||||
50,
|
||||
2,
|
||||
8,
|
||||
8,
|
||||
8,
|
||||
8,
|
||||
"mask_area",
|
||||
8,
|
||||
-8,
|
||||
8,
|
||||
8
|
||||
],
|
||||
"color": "rgba(38, 73, 116, 0.7)"
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"type": "LayerUtility: ImageBlendAdvance V3",
|
||||
"pos": [
|
||||
-2670.533447265625,
|
||||
2212.40869140625
|
||||
],
|
||||
"size": [
|
||||
345.9118347167969,
|
||||
339.0574645996094
|
||||
],
|
||||
"flags": {},
|
||||
"order": 6,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"name": "layer_image",
|
||||
"type": "IMAGE",
|
||||
"link": 60
|
||||
},
|
||||
{
|
||||
"name": "background_image",
|
||||
"type": "IMAGE",
|
||||
"link": null,
|
||||
"shape": 7
|
||||
},
|
||||
{
|
||||
"name": "layer_mask",
|
||||
"type": "MASK",
|
||||
"link": 41,
|
||||
"shape": 7
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "image",
|
||||
"type": "IMAGE",
|
||||
"links": [
|
||||
62
|
||||
],
|
||||
"slot_index": 0
|
||||
},
|
||||
{
|
||||
"name": "mask",
|
||||
"type": "MASK",
|
||||
"links": [],
|
||||
"slot_index": 1
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "LayerUtility: ImageBlendAdvance V3"
|
||||
},
|
||||
"widgets_values": [
|
||||
false,
|
||||
"normal",
|
||||
100,
|
||||
50,
|
||||
50,
|
||||
"None",
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
"lanczos",
|
||||
0
|
||||
],
|
||||
"color": "rgba(38, 73, 116, 0.7)"
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"type": "LayerStyle: DropShadow V3",
|
||||
"pos": [
|
||||
-2236.183349609375,
|
||||
2527.528564453125
|
||||
],
|
||||
"size": [
|
||||
315,
|
||||
266
|
||||
],
|
||||
"flags": {},
|
||||
"order": 7,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"name": "layer_image",
|
||||
"type": "IMAGE",
|
||||
"link": 63
|
||||
},
|
||||
{
|
||||
"name": "background_image",
|
||||
"type": "IMAGE",
|
||||
"link": 62,
|
||||
"shape": 7
|
||||
},
|
||||
{
|
||||
"name": "layer_mask",
|
||||
"type": "MASK",
|
||||
"link": 64,
|
||||
"shape": 7
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "image",
|
||||
"type": "IMAGE",
|
||||
"links": [
|
||||
65
|
||||
],
|
||||
"slot_index": 0
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "LayerStyle: DropShadow V3"
|
||||
},
|
||||
"widgets_values": [
|
||||
false,
|
||||
"normal",
|
||||
50,
|
||||
10,
|
||||
10,
|
||||
6,
|
||||
16,
|
||||
"#000000"
|
||||
],
|
||||
"color": "rgba(20, 95, 121, 0.7)"
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"type": "LayerMask: BiRefNetUltra",
|
||||
"pos": [
|
||||
-3822.2421875,
|
||||
2542.404052734375
|
||||
],
|
||||
"size": [
|
||||
277.20001220703125,
|
||||
255.6139373779297
|
||||
],
|
||||
"flags": {},
|
||||
"order": 2,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"name": "image",
|
||||
"type": "IMAGE",
|
||||
"link": 14
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "image",
|
||||
"type": "IMAGE",
|
||||
"links": [],
|
||||
"slot_index": 0
|
||||
},
|
||||
{
|
||||
"name": "mask",
|
||||
"type": "MASK",
|
||||
"links": [
|
||||
23,
|
||||
64
|
||||
],
|
||||
"slot_index": 1
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "LayerMask: BiRefNetUltra"
|
||||
},
|
||||
"widgets_values": [
|
||||
"VITMatte",
|
||||
6,
|
||||
6,
|
||||
0.01,
|
||||
0.99,
|
||||
true,
|
||||
"cuda",
|
||||
2
|
||||
],
|
||||
"color": "rgba(27, 80, 119, 0.7)"
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"type": "LayerUtility: ImageBlend V2",
|
||||
"pos": [
|
||||
-3049.285888671875,
|
||||
2058.662353515625
|
||||
],
|
||||
"size": [
|
||||
314.8190612792969,
|
||||
146
|
||||
],
|
||||
"flags": {},
|
||||
"order": 5,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"name": "background_image",
|
||||
"type": "IMAGE",
|
||||
"link": 45
|
||||
},
|
||||
{
|
||||
"name": "layer_image",
|
||||
"type": "IMAGE",
|
||||
"link": 21
|
||||
},
|
||||
{
|
||||
"name": "layer_mask",
|
||||
"type": "MASK",
|
||||
"link": 22,
|
||||
"shape": 7
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "image",
|
||||
"type": "IMAGE",
|
||||
"links": [
|
||||
60
|
||||
],
|
||||
"slot_index": 0
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "LayerUtility: ImageBlend V2"
|
||||
},
|
||||
"widgets_values": [
|
||||
false,
|
||||
"color",
|
||||
100
|
||||
],
|
||||
"color": "rgba(38, 73, 116, 0.7)"
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"type": "LayerUtility: ColorImage V2",
|
||||
"pos": [
|
||||
-3490.97900390625,
|
||||
1946.5667724609375
|
||||
],
|
||||
"size": [
|
||||
358.17816162109375,
|
||||
130
|
||||
],
|
||||
"flags": {},
|
||||
"order": 3,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"name": "size_as",
|
||||
"type": "*",
|
||||
"link": 25,
|
||||
"shape": 7
|
||||
},
|
||||
{
|
||||
"name": "color",
|
||||
"type": "STRING",
|
||||
"link": 66,
|
||||
"widget": {
|
||||
"name": "color"
|
||||
}
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "image",
|
||||
"type": "IMAGE",
|
||||
"links": [
|
||||
21
|
||||
],
|
||||
"slot_index": 0
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "LayerUtility: ColorImage V2"
|
||||
},
|
||||
"widgets_values": [
|
||||
"custom",
|
||||
512,
|
||||
512,
|
||||
"#F284F0"
|
||||
],
|
||||
"color": "rgba(38, 73, 116, 0.7)"
|
||||
},
|
||||
{
|
||||
"id": 27,
|
||||
"type": "LayerUtility: ColorPicker",
|
||||
"pos": [
|
||||
-3836.872802734375,
|
||||
1967.681640625
|
||||
],
|
||||
"size": [
|
||||
210,
|
||||
94
|
||||
],
|
||||
"flags": {},
|
||||
"order": 1,
|
||||
"mode": 0,
|
||||
"inputs": [],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "value",
|
||||
"type": "STRING",
|
||||
"links": [
|
||||
66
|
||||
],
|
||||
"slot_index": 0
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "LayerUtility: ColorPicker"
|
||||
},
|
||||
"widgets_values": [
|
||||
"#4f6fcf",
|
||||
"HEX"
|
||||
],
|
||||
"color": "rgba(38, 73, 116, 0.7)"
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"type": "PreviewImage",
|
||||
"pos": [
|
||||
-1868.6793212890625,
|
||||
2173.0986328125
|
||||
],
|
||||
"size": [
|
||||
551.9151611328125,
|
||||
378.61322021484375
|
||||
],
|
||||
"flags": {},
|
||||
"order": 8,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"name": "images",
|
||||
"type": "IMAGE",
|
||||
"link": 65
|
||||
}
|
||||
],
|
||||
"outputs": [],
|
||||
"properties": {
|
||||
"Node name for S&R": "PreviewImage"
|
||||
},
|
||||
"widgets_values": []
|
||||
}
|
||||
],
|
||||
"links": [
|
||||
[
|
||||
6,
|
||||
2,
|
||||
0,
|
||||
6,
|
||||
0,
|
||||
"IMAGE"
|
||||
],
|
||||
[
|
||||
14,
|
||||
2,
|
||||
0,
|
||||
10,
|
||||
0,
|
||||
"IMAGE"
|
||||
],
|
||||
[
|
||||
21,
|
||||
12,
|
||||
0,
|
||||
14,
|
||||
1,
|
||||
"IMAGE"
|
||||
],
|
||||
[
|
||||
22,
|
||||
6,
|
||||
1,
|
||||
14,
|
||||
2,
|
||||
"MASK"
|
||||
],
|
||||
[
|
||||
23,
|
||||
10,
|
||||
1,
|
||||
6,
|
||||
1,
|
||||
"MASK"
|
||||
],
|
||||
[
|
||||
25,
|
||||
2,
|
||||
0,
|
||||
12,
|
||||
0,
|
||||
"*"
|
||||
],
|
||||
[
|
||||
41,
|
||||
6,
|
||||
1,
|
||||
20,
|
||||
2,
|
||||
"MASK"
|
||||
],
|
||||
[
|
||||
45,
|
||||
2,
|
||||
0,
|
||||
14,
|
||||
0,
|
||||
"IMAGE"
|
||||
],
|
||||
[
|
||||
60,
|
||||
14,
|
||||
0,
|
||||
20,
|
||||
0,
|
||||
"IMAGE"
|
||||
],
|
||||
[
|
||||
62,
|
||||
20,
|
||||
0,
|
||||
25,
|
||||
1,
|
||||
"IMAGE"
|
||||
],
|
||||
[
|
||||
63,
|
||||
2,
|
||||
0,
|
||||
25,
|
||||
0,
|
||||
"IMAGE"
|
||||
],
|
||||
[
|
||||
64,
|
||||
10,
|
||||
1,
|
||||
25,
|
||||
2,
|
||||
"MASK"
|
||||
],
|
||||
[
|
||||
65,
|
||||
25,
|
||||
0,
|
||||
13,
|
||||
0,
|
||||
"IMAGE"
|
||||
],
|
||||
[
|
||||
66,
|
||||
27,
|
||||
0,
|
||||
12,
|
||||
1,
|
||||
"STRING"
|
||||
]
|
||||
],
|
||||
"groups": [],
|
||||
"config": {},
|
||||
"extra": {
|
||||
"ds": {
|
||||
"scale": 0.6934334949441395,
|
||||
"offset": [
|
||||
4564.611247752034,
|
||||
-1416.0628969763088
|
||||
]
|
||||
}
|
||||
},
|
||||
"version": 0.4
|
||||
}
|
||||
Reference in New Issue
Block a user