add load local model way
This commit is contained in:
@@ -1,148 +0,0 @@
|
||||
### config.py
|
||||
|
||||
import os
|
||||
import math
|
||||
|
||||
os.environ['HOME'] = os.path.expanduser("~")
|
||||
class Config():
|
||||
def __init__(self) -> None:
|
||||
# PATH settings
|
||||
self.sys_home_dir = os.environ['HOME'] # Make up your file system as: SYS_HOME_DIR/codes/dis/BiRefNet, SYS_HOME_DIR/datasets/dis/xx, SYS_HOME_DIR/weights/xx
|
||||
# TASK settings
|
||||
self.task = ['DIS5K', 'COD', 'HRSOD', 'DIS5K+HRSOD+HRS10K', 'P3M-10k'][0]
|
||||
self.training_set = {
|
||||
'DIS5K': ['DIS-TR', 'DIS-TR+DIS-TE1+DIS-TE2+DIS-TE3+DIS-TE4'][0],
|
||||
'COD': 'TR-COD10K+TR-CAMO',
|
||||
'HRSOD': ['TR-DUTS', 'TR-HRSOD', 'TR-UHRSD', 'TR-DUTS+TR-HRSOD', 'TR-DUTS+TR-UHRSD', 'TR-HRSOD+TR-UHRSD', 'TR-DUTS+TR-HRSOD+TR-UHRSD'][5],
|
||||
'DIS5K+HRSOD+HRS10K': 'DIS-TE1+DIS-TE2+DIS-TE3+DIS-TE4+DIS-TR+TE-HRS10K+TE-HRSOD+TE-UHRSD+TR-HRS10K+TR-HRSOD+TR-UHRSD', # leave DIS-VD for evaluation.
|
||||
'P3M-10k': 'TR-P3M-10k',
|
||||
}[self.task]
|
||||
self.prompt4loc = ['dense', 'sparse'][0]
|
||||
|
||||
# Faster-Training settings
|
||||
self.load_all = True
|
||||
self.compile = True # 1. Trigger CPU memory leak in some extend, which is an inherent problem of PyTorch.
|
||||
# Machines with > 70GB CPU memory can run the whole training on DIS5K with default setting.
|
||||
# 2. Higher PyTorch version may fix it: https://github.com/pytorch/pytorch/issues/119607.
|
||||
# 3. But compile in Pytorch > 2.0.1 seems to bring no acceleration for training.
|
||||
self.precisionHigh = True
|
||||
|
||||
# MODEL settings
|
||||
self.ms_supervision = True
|
||||
self.out_ref = self.ms_supervision and True
|
||||
self.dec_ipt = True
|
||||
self.dec_ipt_split = True
|
||||
self.cxt_num = [0, 3][1] # multi-scale skip connections from encoder
|
||||
self.mul_scl_ipt = ['', 'add', 'cat'][2]
|
||||
self.dec_att = ['', 'ASPP', 'ASPPDeformable'][2]
|
||||
self.squeeze_block = ['', 'BasicDecBlk_x1', 'ResBlk_x4', 'ASPP_x3', 'ASPPDeformable_x3'][1]
|
||||
self.dec_blk = ['BasicDecBlk', 'ResBlk', 'HierarAttDecBlk'][0]
|
||||
|
||||
# TRAINING settings
|
||||
self.batch_size = 4
|
||||
self.IoU_finetune_last_epochs = [
|
||||
0,
|
||||
{
|
||||
'DIS5K': -50,
|
||||
'COD': -20,
|
||||
'HRSOD': -20,
|
||||
'DIS5K+HRSOD+HRS10K': -20,
|
||||
'P3M-10k': -20,
|
||||
}[self.task]
|
||||
][1] # choose 0 to skip
|
||||
self.lr = (1e-4 if 'DIS5K' in self.task else 1e-5) * math.sqrt(self.batch_size / 4) # DIS needs high lr to converge faster. Adapt the lr linearly
|
||||
self.size = 1024
|
||||
self.num_workers = max(4, self.batch_size) # will be decrease to min(it, batch_size) at the initialization of the data_loader
|
||||
|
||||
# Backbone settings
|
||||
self.bb = [
|
||||
'vgg16', 'vgg16bn', 'resnet50', # 0, 1, 2
|
||||
'swin_v1_t', 'swin_v1_s', # 3, 4
|
||||
'swin_v1_b', 'swin_v1_l', # 5-bs9, 6-bs4
|
||||
'pvt_v2_b0', 'pvt_v2_b1', # 7, 8
|
||||
'pvt_v2_b2', 'pvt_v2_b5', # 9-bs10, 10-bs5
|
||||
][6]
|
||||
self.lateral_channels_in_collection = {
|
||||
'vgg16': [512, 256, 128, 64], 'vgg16bn': [512, 256, 128, 64], 'resnet50': [1024, 512, 256, 64],
|
||||
'pvt_v2_b2': [512, 320, 128, 64], 'pvt_v2_b5': [512, 320, 128, 64],
|
||||
'swin_v1_b': [1024, 512, 256, 128], 'swin_v1_l': [1536, 768, 384, 192],
|
||||
'swin_v1_t': [768, 384, 192, 96], 'swin_v1_s': [768, 384, 192, 96],
|
||||
'pvt_v2_b0': [256, 160, 64, 32], 'pvt_v2_b1': [512, 320, 128, 64],
|
||||
}[self.bb]
|
||||
if self.mul_scl_ipt == 'cat':
|
||||
self.lateral_channels_in_collection = [channel * 2 for channel in self.lateral_channels_in_collection]
|
||||
self.cxt = self.lateral_channels_in_collection[1:][::-1][-self.cxt_num:] if self.cxt_num else []
|
||||
|
||||
# MODEL settings - inactive
|
||||
self.lat_blk = ['BasicLatBlk'][0]
|
||||
self.dec_channels_inter = ['fixed', 'adap'][0]
|
||||
self.refine = ['', 'itself', 'RefUNet', 'Refiner', 'RefinerPVTInChannels4'][0]
|
||||
self.progressive_ref = self.refine and True
|
||||
self.ender = self.progressive_ref and False
|
||||
self.scale = self.progressive_ref and 2
|
||||
self.auxiliary_classification = False # Only for DIS5K, where class labels are saved in `dataset.py`.
|
||||
self.refine_iteration = 1
|
||||
self.freeze_bb = False
|
||||
self.model = [
|
||||
'BiRefNet',
|
||||
][0]
|
||||
if self.dec_blk == 'HierarAttDecBlk':
|
||||
self.batch_size = 2 ** [0, 1, 2, 3, 4][2]
|
||||
|
||||
# TRAINING settings - inactive
|
||||
self.preproc_methods = ['flip', 'enhance', 'rotate', 'pepper', 'crop'][:4]
|
||||
self.optimizer = ['Adam', 'AdamW'][1]
|
||||
self.lr_decay_epochs = [1e5] # Set to negative N to decay the lr in the last N-th epoch.
|
||||
self.lr_decay_rate = 0.5
|
||||
# Loss
|
||||
self.lambdas_pix_last = {
|
||||
# not 0 means opening this loss
|
||||
# original rate -- 1 : 30 : 1.5 : 0.2, bce x 30
|
||||
'bce': 30 * 1, # high performance
|
||||
'iou': 0.5 * 1, # 0 / 255
|
||||
'iou_patch': 0.5 * 0, # 0 / 255, win_size = (64, 64)
|
||||
'mse': 150 * 0, # can smooth the saliency map
|
||||
'triplet': 3 * 0,
|
||||
'reg': 100 * 0,
|
||||
'ssim': 10 * 1, # help contours,
|
||||
'cnt': 5 * 0, # help contours
|
||||
'structure': 5 * 0, # structure loss from codes of MVANet. A little improvement on DIS-TE[1,2,3], a bit more decrease on DIS-TE4.
|
||||
}
|
||||
self.lambdas_cls = {
|
||||
'ce': 5.0
|
||||
}
|
||||
# Adv
|
||||
self.lambda_adv_g = 10. * 0 # turn to 0 to avoid adv training
|
||||
self.lambda_adv_d = 3. * (self.lambda_adv_g > 0)
|
||||
|
||||
# PATH settings - inactive
|
||||
self.data_root_dir = os.path.join(self.sys_home_dir, 'datasets/dis')
|
||||
self.weights_root_dir = os.path.join(self.sys_home_dir, 'weights')
|
||||
self.weights = {
|
||||
'pvt_v2_b2': os.path.join(self.weights_root_dir, 'pvt_v2_b2.pth'),
|
||||
'pvt_v2_b5': os.path.join(self.weights_root_dir, ['pvt_v2_b5.pth', 'pvt_v2_b5_22k.pth'][0]),
|
||||
'swin_v1_b': os.path.join(self.weights_root_dir, ['swin_base_patch4_window12_384_22kto1k.pth', 'swin_base_patch4_window12_384_22k.pth'][0]),
|
||||
'swin_v1_l': os.path.join(self.weights_root_dir, ['swin_large_patch4_window12_384_22kto1k.pth', 'swin_large_patch4_window12_384_22k.pth'][0]),
|
||||
'swin_v1_t': os.path.join(self.weights_root_dir, ['swin_tiny_patch4_window7_224_22kto1k_finetune.pth'][0]),
|
||||
'swin_v1_s': os.path.join(self.weights_root_dir, ['swin_small_patch4_window7_224_22kto1k_finetune.pth'][0]),
|
||||
'pvt_v2_b0': os.path.join(self.weights_root_dir, ['pvt_v2_b0.pth'][0]),
|
||||
'pvt_v2_b1': os.path.join(self.weights_root_dir, ['pvt_v2_b1.pth'][0]),
|
||||
}
|
||||
|
||||
# Callbacks - inactive
|
||||
self.verbose_eval = True
|
||||
self.only_S_MAE = False
|
||||
self.use_fp16 = False # Bugs. It may cause nan in training.
|
||||
self.SDPA_enabled = False # Bugs. Slower and errors occur in multi-GPUs
|
||||
|
||||
# others
|
||||
self.device = [0, 'cpu'][0] # .to(0) == .to('cuda:0')
|
||||
|
||||
self.batch_size_valid = 1
|
||||
self.rand_seed = 7
|
||||
# run_sh_file = [f for f in os.listdir('.') if 'train.sh' == f] + [os.path.join('..', f) for f in os.listdir('..') if 'train.sh' == f]
|
||||
# with open(run_sh_file[0], 'r') as f:
|
||||
# lines = f.readlines()
|
||||
# self.save_last = int([l.strip() for l in lines if '"{}")'.format(self.task) in l and 'val_last=' in l][0].split('val_last=')[-1].split()[0])
|
||||
# self.save_step = int([l.strip() for l in lines if '"{}")'.format(self.task) in l and 'step=' in l][0].split('step=')[-1].split()[0])
|
||||
# self.val_step = [0, self.save_step][0]
|
||||
@@ -22,6 +22,16 @@ ___
|
||||
|
||||
示例工作流放置在`ComfyUI-BiRefNet-Hugo/workflow`中<br/>
|
||||
The demo workflow placed in `ComfyUI-BiRefNet-Hugo/workflow`
|
||||
|
||||
加载模型支持两种方式,一种是自动下载远程模型并加载模型,另外一种是加载本地模型。加载本地模型的时候需要把load_local_model设置为true,并把local_model_path设置为本地模型所在路径,例如:H:\ZhengPeng7\BiRefNet<br/>
|
||||
Loading the model supports two methods: one is to automatically download and load a remote model, and the other is to load a local model. When loading a local model, you need to set 'load_local_model' to true and 'local_model_path' to the path where the local model is located, for example: H:\ZhengPeng7\BiRefNet.
|
||||
|
||||

|
||||
|
||||
模型下载地址:https://huggingface.co/ZhengPeng7/BiRefNet/tree/main<br/>
|
||||
Model download address: https://huggingface.co/ZhengPeng7/BiRefNet/tree/main
|
||||
|
||||
|
||||
___
|
||||
工作流workflow.json的使用<br/>
|
||||
The use of workflow.json
|
||||
@@ -41,6 +51,8 @@ ___
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 社交账号 | Social Account Homepage
|
||||
- Bilibili:[我的B站主页](https://space.bilibili.com/1303099255)
|
||||
|
||||
@@ -49,20 +61,7 @@ ___
|
||||
感谢BiRefNet仓库的所有作者 [ZhengPeng7/BiRefNet](https://github.com/zhengpeng7/birefnet)
|
||||
|
||||
Thanks to BiRefNet repo owner [ZhengPeng7/BiRefNet](https://github.com/zhengpeng7/birefnet)
|
||||
```
|
||||
library_name: birefnet
|
||||
tags:
|
||||
- background-removal
|
||||
- mask-generation
|
||||
- Dichotomous Image Segmentation:二分图像分割(DIS),指分割成前景与背景,二个集合,分割出高精度效果。
|
||||
- Camouflaged Object Detection:伪装物体检测(COD),偏工程向,旨在识别“无缝”嵌入到周围环境中的物体,例如野生动物保护、军事侦察或者工业自动化。
|
||||
- Salient Object Detection:显著性目标检测(SOD),自动检测图像中最具视觉吸引力的部分。
|
||||
- pytorch_model_hub_mixin
|
||||
- model_hub_mixin
|
||||
repo_url: https://github.com/ZhengPeng7/BiRefNet
|
||||
pipeline_tag: image-segmentation
|
||||
license: mit
|
||||
```
|
||||
|
||||
部分代码参考了 [ZHO-ZHO-ZHO/ComfyUI-BiRefNet-ZHO](https://github.com/ZHO-ZHO-ZHO/ComfyUI-BiRefNet-ZHO) 感谢!
|
||||
|
||||
Some of the code references [ZHO-ZHO-ZHO/ComfyUI-BiRefNet-ZHO](https://github.com/ZHO-ZHO-ZHO/ComfyUI-BiRefNet-ZHO) Thanks!
|
||||
|
||||
+2
-1
@@ -1,3 +1,4 @@
|
||||
from .nodes import NODE_CLASS_MAPPINGS, NODE_DISPLAY_NAME_MAPPINGS
|
||||
|
||||
__all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS']
|
||||
WEB_DIRECTORY = "./js"
|
||||
__all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS","WEB_DIRECTORY"]
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 509 KiB After Width: | Height: | Size: 285 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 809 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 239 KiB After Width: | Height: | Size: 280 KiB |
@@ -4,19 +4,11 @@ from torchvision import transforms
|
||||
import numpy as np
|
||||
from PIL import Image
|
||||
import torch.nn.functional as F
|
||||
from .BiRefNet_node_config import Config
|
||||
import comfy.model_management as mm
|
||||
|
||||
Config()
|
||||
import os
|
||||
|
||||
torch.set_float32_matmul_precision(["high", "highest"][0])
|
||||
|
||||
birefnet = AutoModelForImageSegmentation.from_pretrained(
|
||||
"ZhengPeng7/BiRefNet", trust_remote_code=True
|
||||
)
|
||||
|
||||
|
||||
|
||||
transform_image = transforms.Compose(
|
||||
[
|
||||
transforms.Resize((1024, 1024)),
|
||||
@@ -25,6 +17,11 @@ transform_image = transforms.Compose(
|
||||
]
|
||||
)
|
||||
|
||||
current_path = os.getcwd()
|
||||
|
||||
## ComfyUI portable standalone build for Windows
|
||||
model_path = os.path.join(current_path, "ComfyUI"+os.sep+"models"+os.sep+"BiRefNet")
|
||||
|
||||
def tensor2pil(image):
|
||||
return Image.fromarray(np.clip(255. * image.cpu().numpy().squeeze(), 0, 255).astype(np.uint8))
|
||||
|
||||
@@ -68,8 +65,12 @@ class BiRefNet_Hugo:
|
||||
return {
|
||||
"required": {
|
||||
"image": ("IMAGE",),
|
||||
"load_local_model": ("BOOLEAN", {"default": False}),
|
||||
"background_color_name": (colors,{"default": "transparency"}),
|
||||
"device": (["auto", "cuda", "cpu", "mps", "xpu", "meta"],{"default": "auto"})
|
||||
},
|
||||
"optional": {
|
||||
"local_model_path": ("STRING", {"default":model_path}),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,13 +81,24 @@ class BiRefNet_Hugo:
|
||||
|
||||
def background_remove(self,
|
||||
image,
|
||||
load_local_model,
|
||||
device,
|
||||
background_color_name,
|
||||
*args, **kwargs
|
||||
):
|
||||
processed_images = []
|
||||
processed_masks = []
|
||||
|
||||
device = get_device_by_name(device)
|
||||
|
||||
if load_local_model:
|
||||
local_model_path = kwargs.get("local_model_path", model_path)
|
||||
birefnet = AutoModelForImageSegmentation.from_pretrained(local_model_path,trust_remote_code=True)
|
||||
else:
|
||||
birefnet = AutoModelForImageSegmentation.from_pretrained(
|
||||
"ZhengPeng7/BiRefNet", trust_remote_code=True
|
||||
)
|
||||
|
||||
birefnet.to(device)
|
||||
for image in image:
|
||||
orig_image = tensor2pil(image)
|
||||
|
||||
+160
-155
@@ -3,20 +3,32 @@
|
||||
"last_link_id": 16,
|
||||
"nodes": [
|
||||
{
|
||||
"id": 11,
|
||||
"type": "VHS_LoadVideo",
|
||||
"pos": [
|
||||
840,
|
||||
-90
|
||||
],
|
||||
"id": 13,
|
||||
"type": "VHS_VideoCombine",
|
||||
"pos": {
|
||||
"0": 1830,
|
||||
"1": -180
|
||||
},
|
||||
"size": [
|
||||
210,
|
||||
480
|
||||
360,
|
||||
928.4444444444445
|
||||
],
|
||||
"flags": {},
|
||||
"order": 0,
|
||||
"order": 2,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"name": "images",
|
||||
"type": "IMAGE",
|
||||
"link": 14,
|
||||
"label": "图像"
|
||||
},
|
||||
{
|
||||
"name": "audio",
|
||||
"type": "AUDIO",
|
||||
"link": null,
|
||||
"label": "音频"
|
||||
},
|
||||
{
|
||||
"name": "meta_batch",
|
||||
"type": "VHS_BatchManager",
|
||||
@@ -31,122 +43,47 @@
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "IMAGE",
|
||||
"type": "IMAGE",
|
||||
"links": [
|
||||
12
|
||||
],
|
||||
"shape": 3,
|
||||
"label": "图像",
|
||||
"slot_index": 0
|
||||
},
|
||||
{
|
||||
"name": "frame_count",
|
||||
"type": "INT",
|
||||
"name": "Filenames",
|
||||
"type": "VHS_FILENAMES",
|
||||
"links": null,
|
||||
"shape": 3,
|
||||
"label": "帧计数"
|
||||
},
|
||||
{
|
||||
"name": "audio",
|
||||
"type": "AUDIO",
|
||||
"links": null,
|
||||
"shape": 3,
|
||||
"label": "音频"
|
||||
},
|
||||
{
|
||||
"name": "video_info",
|
||||
"type": "VHS_VIDEOINFO",
|
||||
"links": null,
|
||||
"shape": 3,
|
||||
"label": "视频信息"
|
||||
"label": "文件名"
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "VHS_LoadVideo"
|
||||
"Node name for S&R": "VHS_VideoCombine"
|
||||
},
|
||||
"widgets_values": {
|
||||
"video": "6月28日(1).mp4",
|
||||
"force_rate": 0,
|
||||
"force_size": "Disabled",
|
||||
"custom_width": 512,
|
||||
"custom_height": 512,
|
||||
"frame_load_cap": 0,
|
||||
"skip_first_frames": 0,
|
||||
"select_every_nth": 1,
|
||||
"choose video to upload": "image",
|
||||
"frame_rate": 30,
|
||||
"loop_count": 0,
|
||||
"filename_prefix": "AnimateDiff",
|
||||
"format": "video/h265-mp4",
|
||||
"pix_fmt": "yuv420p10le",
|
||||
"crf": 22,
|
||||
"save_metadata": true,
|
||||
"pingpong": false,
|
||||
"save_output": true,
|
||||
"videopreview": {
|
||||
"hidden": false,
|
||||
"paused": false,
|
||||
"params": {
|
||||
"frame_load_cap": 0,
|
||||
"skip_first_frames": 0,
|
||||
"force_rate": 0,
|
||||
"filename": "6月28日(1).mp4",
|
||||
"type": "input",
|
||||
"format": "video/mp4",
|
||||
"select_every_nth": 1
|
||||
"filename": "AnimateDiff_00004.mp4",
|
||||
"subfolder": "",
|
||||
"type": "output",
|
||||
"format": "video/h265-mp4",
|
||||
"frame_rate": 30
|
||||
},
|
||||
"muted": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"type": "BiRefNet_Hugo",
|
||||
"pos": [
|
||||
1110,
|
||||
-60
|
||||
],
|
||||
"size": {
|
||||
"0": 210,
|
||||
"1": 60
|
||||
},
|
||||
"flags": {},
|
||||
"order": 1,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"name": "image",
|
||||
"type": "IMAGE",
|
||||
"link": 12,
|
||||
"slot_index": 0,
|
||||
"label": "image"
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "image",
|
||||
"type": "IMAGE",
|
||||
"links": [
|
||||
14
|
||||
],
|
||||
"slot_index": 0,
|
||||
"shape": 3,
|
||||
"label": "image"
|
||||
},
|
||||
{
|
||||
"name": "mask",
|
||||
"type": "MASK",
|
||||
"links": [
|
||||
15
|
||||
],
|
||||
"slot_index": 1,
|
||||
"shape": 3,
|
||||
"label": "mask"
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "BiRefNet_Hugo"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"type": "MaskToImage",
|
||||
"pos": [
|
||||
1410,
|
||||
30
|
||||
],
|
||||
"pos": {
|
||||
"0": 1466,
|
||||
"1": 93
|
||||
},
|
||||
"size": {
|
||||
"0": 210,
|
||||
"1": 30
|
||||
@@ -169,9 +106,9 @@
|
||||
"links": [
|
||||
16
|
||||
],
|
||||
"slot_index": 0,
|
||||
"shape": 3,
|
||||
"label": "图像",
|
||||
"slot_index": 0
|
||||
"label": "图像"
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
@@ -181,13 +118,13 @@
|
||||
{
|
||||
"id": 15,
|
||||
"type": "VHS_VideoCombine",
|
||||
"pos": [
|
||||
1410,
|
||||
120
|
||||
],
|
||||
"pos": {
|
||||
"0": 1409,
|
||||
"1": 210
|
||||
},
|
||||
"size": [
|
||||
360,
|
||||
660
|
||||
928.4444444444445
|
||||
],
|
||||
"flags": {},
|
||||
"order": 4,
|
||||
@@ -254,32 +191,20 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"type": "VHS_VideoCombine",
|
||||
"pos": [
|
||||
1830,
|
||||
-180
|
||||
],
|
||||
"id": 11,
|
||||
"type": "VHS_LoadVideo",
|
||||
"pos": {
|
||||
"0": 826,
|
||||
"1": -90
|
||||
},
|
||||
"size": [
|
||||
360,
|
||||
660
|
||||
210,
|
||||
466
|
||||
],
|
||||
"flags": {},
|
||||
"order": 2,
|
||||
"order": 0,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"name": "images",
|
||||
"type": "IMAGE",
|
||||
"link": 14,
|
||||
"label": "图像"
|
||||
},
|
||||
{
|
||||
"name": "audio",
|
||||
"type": "AUDIO",
|
||||
"link": null,
|
||||
"label": "音频"
|
||||
},
|
||||
{
|
||||
"name": "meta_batch",
|
||||
"type": "VHS_BatchManager",
|
||||
@@ -294,39 +219,119 @@
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "Filenames",
|
||||
"type": "VHS_FILENAMES",
|
||||
"name": "IMAGE",
|
||||
"type": "IMAGE",
|
||||
"links": [
|
||||
12
|
||||
],
|
||||
"slot_index": 0,
|
||||
"shape": 3,
|
||||
"label": "图像"
|
||||
},
|
||||
{
|
||||
"name": "frame_count",
|
||||
"type": "INT",
|
||||
"links": null,
|
||||
"shape": 3,
|
||||
"label": "文件名"
|
||||
"label": "帧计数"
|
||||
},
|
||||
{
|
||||
"name": "audio",
|
||||
"type": "AUDIO",
|
||||
"links": null,
|
||||
"shape": 3,
|
||||
"label": "音频"
|
||||
},
|
||||
{
|
||||
"name": "video_info",
|
||||
"type": "VHS_VIDEOINFO",
|
||||
"links": null,
|
||||
"shape": 3,
|
||||
"label": "视频信息"
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "VHS_VideoCombine"
|
||||
"Node name for S&R": "VHS_LoadVideo"
|
||||
},
|
||||
"widgets_values": {
|
||||
"frame_rate": 30,
|
||||
"loop_count": 0,
|
||||
"filename_prefix": "AnimateDiff",
|
||||
"format": "video/h265-mp4",
|
||||
"pix_fmt": "yuv420p10le",
|
||||
"crf": 22,
|
||||
"save_metadata": true,
|
||||
"pingpong": false,
|
||||
"save_output": true,
|
||||
"video": "6月28日(1).mp4",
|
||||
"force_rate": 0,
|
||||
"force_size": "Disabled",
|
||||
"custom_width": 512,
|
||||
"custom_height": 512,
|
||||
"frame_load_cap": 0,
|
||||
"skip_first_frames": 0,
|
||||
"select_every_nth": 1,
|
||||
"choose video to upload": "image",
|
||||
"videopreview": {
|
||||
"hidden": false,
|
||||
"paused": false,
|
||||
"params": {
|
||||
"filename": "AnimateDiff_00004.mp4",
|
||||
"subfolder": "",
|
||||
"type": "output",
|
||||
"format": "video/h265-mp4",
|
||||
"frame_rate": 30
|
||||
"frame_load_cap": 0,
|
||||
"skip_first_frames": 0,
|
||||
"force_rate": 0,
|
||||
"filename": "6月28日(1).mp4",
|
||||
"type": "input",
|
||||
"format": "video/mp4",
|
||||
"select_every_nth": 1
|
||||
},
|
||||
"muted": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"type": "BiRefNet_Hugo",
|
||||
"pos": {
|
||||
"0": 1076,
|
||||
"1": -81
|
||||
},
|
||||
"size": {
|
||||
"0": 319.6482238769531,
|
||||
"1": 154.82546997070312
|
||||
},
|
||||
"flags": {},
|
||||
"order": 1,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"name": "image",
|
||||
"type": "IMAGE",
|
||||
"link": 12,
|
||||
"slot_index": 0,
|
||||
"label": "图像"
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "image",
|
||||
"type": "IMAGE",
|
||||
"links": [
|
||||
14
|
||||
],
|
||||
"slot_index": 0,
|
||||
"shape": 3,
|
||||
"label": "图像"
|
||||
},
|
||||
{
|
||||
"name": "mask",
|
||||
"type": "MASK",
|
||||
"links": [
|
||||
15
|
||||
],
|
||||
"slot_index": 1,
|
||||
"shape": 3,
|
||||
"label": "遮罩"
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "BiRefNet_Hugo"
|
||||
},
|
||||
"widgets_values": [
|
||||
false,
|
||||
"transparency",
|
||||
"auto"
|
||||
]
|
||||
}
|
||||
],
|
||||
"links": [
|
||||
@@ -367,10 +372,10 @@
|
||||
"config": {},
|
||||
"extra": {
|
||||
"ds": {
|
||||
"scale": 0.8390545288824037,
|
||||
"scale": 1.6105100000000008,
|
||||
"offset": [
|
||||
-471.7394319558889,
|
||||
296.200180526101
|
||||
-674.0647486185928,
|
||||
271.0286531806558
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
+158
-150
@@ -2,159 +2,21 @@
|
||||
"last_node_id": 5,
|
||||
"last_link_id": 4,
|
||||
"nodes": [
|
||||
{
|
||||
"id": 1,
|
||||
"type": "BiRefNet_Hugo",
|
||||
"pos": [
|
||||
921,
|
||||
256
|
||||
],
|
||||
"size": {
|
||||
"0": 210,
|
||||
"1": 46
|
||||
},
|
||||
"flags": {},
|
||||
"order": 1,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"name": "image",
|
||||
"type": "IMAGE",
|
||||
"link": 1,
|
||||
"label": "image",
|
||||
"slot_index": 0
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "image",
|
||||
"type": "IMAGE",
|
||||
"links": [
|
||||
2
|
||||
],
|
||||
"shape": 3,
|
||||
"label": "image",
|
||||
"slot_index": 0
|
||||
},
|
||||
{
|
||||
"name": "mask",
|
||||
"type": "MASK",
|
||||
"links": [
|
||||
3
|
||||
],
|
||||
"shape": 3,
|
||||
"label": "mask",
|
||||
"slot_index": 1
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "BiRefNet_Hugo"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"type": "MaskToImage",
|
||||
"pos": [
|
||||
922,
|
||||
352
|
||||
],
|
||||
"size": {
|
||||
"0": 210,
|
||||
"1": 26
|
||||
},
|
||||
"flags": {},
|
||||
"order": 3,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"name": "mask",
|
||||
"type": "MASK",
|
||||
"link": 3,
|
||||
"label": "遮罩"
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "IMAGE",
|
||||
"type": "IMAGE",
|
||||
"links": [
|
||||
4
|
||||
],
|
||||
"shape": 3,
|
||||
"label": "图像",
|
||||
"slot_index": 0
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "MaskToImage"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"type": "PreviewImage",
|
||||
"pos": [
|
||||
1299,
|
||||
410
|
||||
],
|
||||
"size": [
|
||||
210,
|
||||
246
|
||||
],
|
||||
"flags": {},
|
||||
"order": 4,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"name": "images",
|
||||
"type": "IMAGE",
|
||||
"link": 4,
|
||||
"label": "图像"
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "PreviewImage"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"type": "PreviewImage",
|
||||
"pos": [
|
||||
1295,
|
||||
74
|
||||
],
|
||||
"size": [
|
||||
210,
|
||||
246
|
||||
],
|
||||
"flags": {},
|
||||
"order": 2,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"name": "images",
|
||||
"type": "IMAGE",
|
||||
"link": 2,
|
||||
"label": "图像"
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "PreviewImage"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"type": "LoadImage",
|
||||
"pos": [
|
||||
561,
|
||||
254
|
||||
],
|
||||
"size": [
|
||||
315,
|
||||
314
|
||||
],
|
||||
"pos": {
|
||||
"0": 561,
|
||||
"1": 254
|
||||
},
|
||||
"size": {
|
||||
"0": 315,
|
||||
"1": 314
|
||||
},
|
||||
"flags": {},
|
||||
"order": 0,
|
||||
"mode": 0,
|
||||
"inputs": [],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "IMAGE",
|
||||
@@ -180,6 +42,152 @@
|
||||
"image.webp",
|
||||
"image"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"type": "PreviewImage",
|
||||
"pos": {
|
||||
"0": 1312,
|
||||
"1": 140
|
||||
},
|
||||
"size": [
|
||||
410.6826949448018,
|
||||
214.56675819839558
|
||||
],
|
||||
"flags": {},
|
||||
"order": 2,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"name": "images",
|
||||
"type": "IMAGE",
|
||||
"link": 2,
|
||||
"label": "图像"
|
||||
}
|
||||
],
|
||||
"outputs": [],
|
||||
"properties": {
|
||||
"Node name for S&R": "PreviewImage"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"type": "MaskToImage",
|
||||
"pos": {
|
||||
"0": 933,
|
||||
"1": 473
|
||||
},
|
||||
"size": {
|
||||
"0": 210,
|
||||
"1": 26
|
||||
},
|
||||
"flags": {},
|
||||
"order": 3,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"name": "mask",
|
||||
"type": "MASK",
|
||||
"link": 3,
|
||||
"label": "遮罩"
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "IMAGE",
|
||||
"type": "IMAGE",
|
||||
"links": [
|
||||
4
|
||||
],
|
||||
"slot_index": 0,
|
||||
"shape": 3,
|
||||
"label": "图像"
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "MaskToImage"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"type": "BiRefNet_Hugo",
|
||||
"pos": {
|
||||
"0": 921,
|
||||
"1": 256
|
||||
},
|
||||
"size": [
|
||||
315.4826217026143,
|
||||
143.56669716323933
|
||||
],
|
||||
"flags": {},
|
||||
"order": 1,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"name": "image",
|
||||
"type": "IMAGE",
|
||||
"link": 1,
|
||||
"slot_index": 0,
|
||||
"label": "图像"
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "image",
|
||||
"type": "IMAGE",
|
||||
"links": [
|
||||
2
|
||||
],
|
||||
"slot_index": 0,
|
||||
"shape": 3,
|
||||
"label": "图像"
|
||||
},
|
||||
{
|
||||
"name": "mask",
|
||||
"type": "MASK",
|
||||
"links": [
|
||||
3
|
||||
],
|
||||
"slot_index": 1,
|
||||
"shape": 3,
|
||||
"label": "遮罩"
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"Node name for S&R": "BiRefNet_Hugo"
|
||||
},
|
||||
"widgets_values": [
|
||||
false,
|
||||
"transparency",
|
||||
"auto"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"type": "PreviewImage",
|
||||
"pos": {
|
||||
"0": 1316,
|
||||
"1": 425
|
||||
},
|
||||
"size": [
|
||||
430.8826461166768,
|
||||
261.3667765089424
|
||||
],
|
||||
"flags": {},
|
||||
"order": 4,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{
|
||||
"name": "images",
|
||||
"type": "IMAGE",
|
||||
"link": 4,
|
||||
"label": "图像"
|
||||
}
|
||||
],
|
||||
"outputs": [],
|
||||
"properties": {
|
||||
"Node name for S&R": "PreviewImage"
|
||||
}
|
||||
}
|
||||
],
|
||||
"links": [
|
||||
@@ -220,10 +228,10 @@
|
||||
"config": {},
|
||||
"extra": {
|
||||
"ds": {
|
||||
"scale": 1.2100000000000002,
|
||||
"scale": 1,
|
||||
"offset": [
|
||||
-299.9616678351899,
|
||||
94.8424540865177
|
||||
-172.4824996323017,
|
||||
67.43331809554974
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user