4.2 KiB
4.2 KiB
Documentation
- Class name: CompositeMotionBrushWithoutModel
- Category: DragNUWA
- Output node: False
- Repo Ref: https://github.com/chaojie/ComfyUI-DragNUWA.git
该节点整合两层运动信息以产生复合运动刷效果。它基于定义的操作模式,优先考虑某些层的运动数据融合原则。节点的目的是通过对输入层的合理结合,增强运动表示,创造出连贯且视觉上吸引人的效果。
Input types
Required
- motion_brush_layer0
- 第一层运动信息,作为复合效果的基础层。它在建立将与第二层结合进一步细化的运动初始表示中至关重要。
- Comfy dtype: MotionBrush
- Python dtype: numpy.ndarray
- motion_brush_layer1
- 第二层运动信息,提供与基础层混合的额外运动线索。它的重要性在于能够引入新的运动元素并调整整体的复合效果。
- Comfy dtype: MotionBrush
- Python dtype: numpy.ndarray
- mode
- 模式参数决定了两层运动信息如何结合。它在控制最终输出中至关重要,因为它决定了哪些运动元素优先以及它们在复合中如何相互作用。
- Comfy dtype: CompositeMotionBrushMode
- Python dtype: CompositeMotionBrushMode
Output types
- results
- 输出代表最终的复合运动刷,它是根据指定模式对两个输入层的混合。它封装了集成的运动数据,准备进行进一步的处理或可视化。
- Comfy dtype: MotionBrush
- Python dtype: numpy.ndarray
Usage tips
- Infra type: CPU
Source code
class CompositeMotionBrushWithoutModel:
@classmethod
def INPUT_TYPES(cls):
return {'required': {'motion_brush_layer0': ('MotionBrush',), 'motion_brush_layer1': ('MotionBrush',), 'mode': (CompositeMotionBrushMode, {'default': 'override'})}}
RETURN_TYPES = ('MotionBrush',)
FUNCTION = 'run_inference'
CATEGORY = 'DragNUWA'
def run_inference(self, motion_brush_layer0, motion_brush_layer1, mode):
model_length = motion_brush_layer0.shape[0]
height = motion_brush_layer0.shape[1]
width = motion_brush_layer0.shape[2]
results = motion_brush_layer0
for i in range(model_length):
xmasked = False
for x in range(0, width):
xpremasked = xmasked
xmasked = False
masked = False
for y in range(0, height):
premasked = masked
masked = False
if abs(float(motion_brush_layer1[i][y][x][0])) > 0.0001 or abs(float(motion_brush_layer1[i][y][x][1])) > 0.0001:
masked = True
xmasked = True
elif premasked and y + 1 < height:
y1max = height
if y + 50 < y1max:
y1max = y + 50
for y1 in range(y + 1, y1max):
if abs(float(motion_brush_layer1[i][y1][x][0])) > 0.0001 or abs(float(motion_brush_layer1[i][y1][x][1])) > 0.0001:
masked = True
xmasked = True
if masked:
results[i][y][x][0] = motion_brush_layer1[i][y][x][0]
results[i][y][x][1] = motion_brush_layer1[i][y][x][1]
else:
if xpremasked and x + 1 < width:
x1max = width
if x + 50 < x1max:
x1max = x + 50
for x1 in range(x + 1, x1max):
if abs(float(motion_brush_layer1[i][y][x1][0])) > 0.0001 or abs(float(motion_brush_layer1[i][y][x1][1])) > 0.0001:
masked = True
xmasked = True
if masked:
results[i][y][x][0] = motion_brush_layer1[i][y][x][0]
results[i][y][x][1] = motion_brush_layer1[i][y][x][1]
else:
results[i][y][x][0] = motion_brush_layer0[i][y][x][0]
results[i][y][x][1] = motion_brush_layer0[i][y][x][1]
return (results,)