ComfyUI-DragNUWA 插件保姆级教程
1. 插件简介
插件地址: https://github.com/chaojie/ComfyUI-DragNUWA
这个插件就像是一个神奇的视频魔法师,专门用来制作各种动态视频效果。想象一下,你有一个万能的动画制作工具,能够:
- 拖拽动画 - 就像用鼠标拖动画面中的物体,让它们按照你指定的路径移动
- 运动轨迹控制 - 就像导演一样,精确控制画面中每个元素的运动方向和速度
- 相机运动 - 就像摄影师一样,让整个画面产生左右移动、放大缩小等效果
- 光流处理 - 就像分析师一样,理解画面中物体的运动规律
- 姿态动画 - 就像动画师一样,让人物按照特定的姿态序列运动
这个插件特别适合用来:
- 制作产品展示动画
- 创建人物动作视频
- 生成相机运动效果
- 制作物体移动动画
- 创作创意短视频内容
2. 如何安装
2.1 自动安装(推荐)
- 安装 ComfyUI Manager 插件
- 在 Manager 中搜索 "DragNUWA"
- 点击安装即可
2.2 手动安装
- 打开你的 ComfyUI 安装目录
- 进入
custom_nodes文件夹 - 下载插件:
git clone https://github.com/chaojie/ComfyUI-DragNUWA.git
- 安装依赖:
pip install -r requirements.txt
2.3 模型下载
这个插件需要下载专门的模型文件:
- 将模型文件放在
ComfyUI/models/checkpoints/目录下 - 推荐使用
drag_nuwa_svd.pth模型
3. 节点详细解析
3.1 LoadCheckPointDragNUWA 节点 - 模型加载器
这个节点就像是一个专业的模型管理员,负责加载和初始化DragNUWA模型。
参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| ckpt_name | ckpt_name | 选择列表 | drag_nuwa_svd.pth | 模型文件名,就像选择不同的大脑 | 检查点文件名称 | 选择drag_nuwa_svd.pth作为主模型 |
| dimension | dimension | 选择列表 | 576x320 | 视频尺寸,就像选择画布大小 | 输出视频的宽高尺寸 | 576x320适合横屏视频,320x576适合竖屏 |
| model_length | model_length | 整数 | 14 | 视频长度,就像设定动画帧数 | 生成视频的帧数长度 | 设置为14表示生成14帧的短视频 |
3.2 DragNUWARun 节点 - 基础运行器
这个节点就像是一个动画导演,根据你画的轨迹路径来制作动画视频。
参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| model | model | DragNUWA | 必需 | 加载好的模型,就像准备好的工具 | DragNUWA模型实例 | 连接LoadCheckPointDragNUWA的输出 |
| image | image | IMAGE | 必需 | 起始图片,就像动画的第一帧 | 输入的静态图像 | 上传一张你想要制作动画的图片 |
| tracking_points | tracking_points | STRING | [[[25,25],[128,128]]] | 运动轨迹,就像画出的移动路径 | 轨迹点坐标的JSON格式 | [[[50,50],[100,100]]]表示从(50,50)移动到(100,100) |
| inference_batch_size | inference_batch_size | 1 | 1 | 处理批次大小,就像一次处理多少个 | 推理时的批处理大小 | 设置为1表示一次处理一个 |
| motion_bucket_id | motion_bucket_id | 1-100 | 4 | 运动强度,就像调节运动的激烈程度 | 运动桶标识符 | 数值越大运动越明显 |
| use_optical_flow | use_optical_flow | BOOLEAN | False | 是否使用光流,就像是否分析运动规律 | 是否启用光流处理 | 设置为True可以更精确地控制运动 |
| directory | directory | STRING | 路径 | 光流文件目录,就像存放运动数据的文件夹 | 光流文件的存储路径 | 指向包含.flo文件的文件夹 |
3.3 DragNUWARunMotionBrush 节点 - 运动画笔运行器
这个节点就像是一个专业的动画师,使用预制的运动画笔来制作动画。
参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| model | model | DragNUWA | 必需 | 加载好的模型 | DragNUWA模型实例 | 连接LoadCheckPointDragNUWA的输出 |
| image | image | IMAGE | 必需 | 起始图片 | 输入的静态图像 | 上传要制作动画的图片 |
| motion_brush | motion_brush | MotionBrush | 必需 | 运动画笔,就像预设的运动模式 | 运动画笔数据 | 连接其他运动画笔节点的输出 |
| inference_batch_size | inference_batch_size | 1 | 1 | 处理批次大小 | 推理时的批处理大小 | 通常设置为1 |
| motion_bucket_id | motion_bucket_id | 1-100 | 4 | 运动强度 | 运动桶标识符 | 控制运动的明显程度 |
3.4 InstantCameraMotionBrush 节点 - 即时相机运动画笔
这个节点就像是一个摄影师的运动控制器,能快速创建各种相机运动效果。
参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| model_length | model_length | 整数 | 14 | 动画长度,就像设定拍摄时间 | 生成动画的帧数 | 设置为14生成14帧动画 |
| width | width | 整数 | 576 | 画面宽度,就像设定画布宽度 | 视频宽度像素 | 576适合横屏视频 |
| height | height | 整数 | 320 | 画面高度,就像设定画布高度 | 视频高度像素 | 320配合576形成16:9比例 |
| action | action | 选择列表 | left | 相机运动方向,就像选择拍摄手法 | 相机运动类型 | left左移、right右移、up上移、down下移、zoomin放大、zoomout缩小 |
| speed | speed | 浮点数 | 1 | 运动速度,就像调节运动快慢 | 运动速度系数 | 数值越大运动越快 |
3.5 InstantObjectMotionBrush 节点 - 即时物体运动画笔
这个节点就像是一个物体动画师,能让画面中特定区域的物体产生运动。
参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| model_length | model_length | 整数 | 14 | 动画长度 | 生成动画的帧数 | 设置动画持续的帧数 |
| brush_mask | brush_mask | MASK | 必需 | 运动区域遮罩,就像选择要动的部分 | 定义运动区域的遮罩 | 用遮罩选择要运动的物体区域 |
| action | action | 选择列表 | left | 物体运动方向 | 物体运动类型 | 选择物体的运动方向 |
| speed | speed | 浮点数 | 5 | 运动速度 | 运动速度系数 | 控制物体运动的快慢 |
3.6 LoadMotionBrushFromTrackingPoints 节点 - 从轨迹点加载运动画笔
这个节点就像是一个轨迹翻译器,把你画的路径转换成运动画笔。
参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| model | model | DragNUWA | 必需 | 模型实例 | DragNUWA模型实例 | 连接模型加载器的输出 |
| tracking_points | tracking_points | STRING | [[[25,25],[128,128]]] | 轨迹点坐标,就像画出的路径 | 轨迹点的JSON格式数据 | 输入你想要的运动轨迹坐标 |
3.7 LoadMotionBrushFromTrackingPointsWithoutModel 节点 - 无模型轨迹加载器
这个节点就像是一个独立的轨迹处理器,不需要模型就能处理轨迹数据。
参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| model_length | model_length | 整数 | 14 | 动画长度 | 生成动画的帧数 | 设置动画帧数 |
| width | width | 整数 | 36 | 画面宽度 | 处理区域的宽度 | 设置处理区域宽度 |
| height | height | 整数 | 20 | 画面高度 | 处理区域的高度 | 设置处理区域高度 |
| tracking_points | tracking_points | STRING | [[[1,1],[2,2]]] | 轨迹点坐标 | 轨迹点的JSON格式数据 | 输入运动轨迹坐标 |
3.8 LoadMotionBrushFromOpticalFlowDirectory 节点 - 从光流目录加载
这个节点就像是一个光流文件读取器,从文件夹中读取光流数据。
参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| model | model | DragNUWA | 必需 | 模型实例 | DragNUWA模型实例 | 连接模型加载器 |
| optical_flow_directory | optical_flow_directory | STRING | 路径 | 光流文件夹路径,就像存放运动数据的地方 | 包含光流文件的目录路径 | 指向包含.flo文件的文件夹 |
3.9 LoadMotionBrushFromOpticalFlow 节点 - 从光流数据加载
这个节点就像是一个光流数据转换器,直接处理光流数据。
参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| model | model | DragNUWA | 必需 | 模型实例 | DragNUWA模型实例 | 连接模型加载器 |
| optical_flow | optical_flow | OPTICAL_FLOW | 必需 | 光流数据,就像运动的详细记录 | 光流数据流 | 连接光流处理节点的输出 |
3.10 LoadMotionBrushFromOpticalFlowWithoutModel 节点 - 无模型光流加载器
这个节点就像是一个简单的光流传递器,直接传递光流数据。
参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| optical_flow | optical_flow | OPTICAL_FLOW | 必需 | 光流数据 | 光流数据流 | 直接传递光流数据 |
3.11 BrushMotion 节点 - 画笔运动处理器
这个节点就像是一个运动区域定制器,把运动画笔应用到特定区域。
参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| model | model | DragNUWA | 必需 | 模型实例 | DragNUWA模型实例 | 连接模型加载器 |
| motion_brush | motion_brush | MotionBrush | 必需 | 运动画笔数据 | 运动画笔数据流 | 连接运动画笔节点 |
| brush_mask | brush_mask | MASK | 必需 | 画笔遮罩,就像选择涂抹区域 | 定义运动区域的遮罩 | 用遮罩选择要应用运动的区域 |
3.12 CompositeMotionBrush 节点 - 运动画笔合成器
这个节点就像是一个图层混合器,把两个运动画笔合并成一个。
参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| model | model | DragNUWA | 必需 | 模型实例 | DragNUWA模型实例 | 连接模型加载器 |
| motion_brush_layer0 | motion_brush_layer0 | MotionBrush | 必需 | 底层运动画笔,就像背景层 | 第一层运动画笔数据 | 连接第一个运动画笔 |
| motion_brush_layer1 | motion_brush_layer1 | MotionBrush | 必需 | 顶层运动画笔,就像前景层 | 第二层运动画笔数据 | 连接第二个运动画笔 |
| mode | mode | 选择列表 | override | 合成模式,就像图层混合方式 | 运动画笔合成模式 | override表示上层覆盖下层 |
3.13 CompositeMotionBrushWithoutModel 节点 - 无模型运动画笔合成器
这个节点就像是一个简化的图层混合器,不需要模型就能合并运动画笔。
参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| motion_brush_layer0 | motion_brush_layer0 | MotionBrush | 必需 | 底层运动画笔 | 第一层运动画笔数据 | 连接第一个运动画笔 |
| motion_brush_layer1 | motion_brush_layer1 | MotionBrush | 必需 | 顶层运动画笔 | 第二层运动画笔数据 | 连接第二个运动画笔 |
| mode | mode | 选择列表 | override | 合成模式 | 运动画笔合成模式 | 选择合成方式 |
3.14 LoadPoseKeyPoints 节点 - 姿态关键点加载器
这个节点就像是一个姿态数据读取器,从文件中读取人体姿态信息。
参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| file_name | file_name | 选择列表 | PoseKeypoint_00001.json | 姿态文件名,就像选择动作数据 | 姿态关键点文件名 | 选择包含人体姿态数据的JSON文件 |
3.15 SplitTrackingPoints 节点 - 轨迹点分割器
这个节点就像是一个动作片段提取器,从连续的姿态数据中提取特定片段。
参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| pose_kps | pose_kps | POSE_KEYPOINT | 必需 | 姿态关键点数据 | 姿态关键点数据流 | 连接姿态加载器的输出 |
| split_index | split_index | 整数 | 0 | 分割索引,就像选择第几段动作 | 分割的起始索引 | 设置为0表示从第一段开始 |
| height | height | 整数 | 320 | 画面高度 | 处理区域高度 | 设置处理区域的高度 |
| width | width | 整数 | 576 | 画面宽度 | 处理区域宽度 | 设置处理区域的宽度 |
| last_pose_kps | last_pose_kps | POSE_KEYPOINT | 可选 | 上一段姿态数据,就像动作的连接点 | 前一个姿态关键点数据 | 用于连接动作片段 |
3.16 GetFirstImage 节点 - 获取首帧图像
这个节点就像是一个图片提取器,从图片序列中取出第一张。
参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| images | images | IMAGE | 必需 | 图片序列,就像一叠照片 | 图像序列数据 | 连接包含多张图片的节点 |
3.17 GetLastImage 节点 - 获取末帧图像
这个节点就像是一个图片提取器,从图片序列中取出最后一张。
参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| images | images | IMAGE | 必需 | 图片序列 | 图像序列数据 | 连接包含多张图片的节点 |
3.18 Loop 节点 - 循环控制器
这个节点就像是一个循环开关,用来控制工作流程的循环执行。
参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| 无参数 | 无参数 | 无 | 无 | 循环控制标识,就像循环的开关 | 循环控制对象 | 用于标识循环的开始 |
3.19 LoopStart_IMAGE 节点 - 图像循环开始
这个节点就像是一个循环的起点,定义循环中图像的初始状态。
参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| first_loop | first_loop | IMAGE | 必需 | 首次循环的图像,就像循环的起始图片 | 循环初始图像数据 | 连接要循环处理的初始图像 |
| loop | loop | LOOP | 必需 | 循环控制器 | 循环控制对象 | 连接Loop节点的输出 |
3.20 LoopEnd_IMAGE 节点 - 图像循环结束
这个节点就像是一个循环的终点,将处理结果传递给下一次循环。
参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| send_to_next_loop | send_to_next_loop | IMAGE | 必需 | 传递给下次循环的图像 | 传递到下一循环的图像数据 | 连接处理后的图像结果 |
| loop | loop | LOOP | 必需 | 循环控制器 | 循环控制对象 | 连接Loop节点的输出 |
3.21 MotionBrashTransform 节点 - 运动画笔变换器
这个节点就像是一个运动效果调节器,可以对运动画笔进行各种变换。
参数详解
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| motion_brush | motion_brush | MotionBrush | 必需 | 运动画笔数据 | 运动画笔数据流 | 连接运动画笔节点 |
| left | left | 整数 | 0 | 左移距离,就像向左推动 | 水平向左偏移像素 | 设置为10向左移动10像素 |
| top | top | 整数 | 0 | 上移距离,就像向上推动 | 垂直向上偏移像素 | 设置为5向上移动5像素 |
| rotate | rotate | 整数 | 0 | 旋转角度,就像转动方向盘 | 旋转角度(度) | 设置为45顺时针旋转45度 |
| scalex | scalex | 整数 | 1 | 水平缩放,就像拉伸宽度 | X轴缩放系数 | 设置为2水平放大2倍 |
| scaley | scaley | 整数 | 1 | 垂直缩放,就像拉伸高度 | Y轴缩放系数 | 设置为0.5垂直缩小一半 |
3.22 前端工具 - 轨迹绘制器
这个插件还包含了两个HTML工具,就像是专门的轨迹绘制软件:
draw.html - 多轨迹绘制工具
- 功能:就像一个专业的路径绘制器,可以在图片上画出多条运动轨迹
- 使用方法:
- 上传图片作为背景
- 在图片上点击绘制轨迹路径
- 点击"new line"开始绘制新的轨迹
- 复制生成的JSON数据到tracking_points参数中
index.html - 实时预览工具
- 功能:就像一个实时动画预览器,可以边画轨迹边看效果
- 使用方法:
- 上传图片
- 在图片上绘制轨迹
- 实时查看动画预览效果
- 获取轨迹数据用于节点
4. 使用技巧和建议
4.1 轨迹绘制技巧
- 简单路径:初学者建议从简单的直线或弧线开始
- 路径长度:轨迹点不要太密集,适当间隔效果更好
- 多物体运动:可以为不同物体绘制不同的轨迹路径
4.2 运动效果优化
- 运动强度:motion_bucket_id参数控制运动明显程度,从小开始调试
- 帧数设置:model_length建议设置为14-25帧,太长可能影响质量
- 尺寸选择:576x320适合大多数场景,512x512适合方形构图
4.3 相机运动建议
- 速度控制:相机运动速度不宜过快,建议从1.0开始调试
- 运动方向:结合画面内容选择合适的运动方向
- 组合效果:可以组合多种运动类型创造复杂效果
4.4 光流处理技巧
- 文件格式:确保光流文件是.flo格式
- 文件命名:光流文件需要按顺序命名
- 质量要求:光流数据质量直接影响最终动画效果
5. 常见问题解答
5.1 安装问题
Q: 模型加载失败怎么办?
A: 检查模型文件是否正确放置在checkpoints目录下,确保文件名正确。
Q: 依赖安装失败?
A: 确保Python环境正确,可能需要单独安装某些依赖包。
5.2 使用问题
Q: 轨迹绘制没有效果?
A: 检查轨迹点格式是否正确,确保是有效的JSON格式。
Q: 动画效果不明显?
A: 尝试增加motion_bucket_id的值,或者调整轨迹路径的长度。
Q: 生成的视频质量不好?
A: 检查输入图片质量,尝试调整模型参数或减少帧数。
5.3 性能问题
Q: 处理速度很慢?
A: 确保使用GPU加速,减少不必要的帧数设置。
Q: 内存不足?
A: 降低图片分辨率,减少batch_size设置。
6. 工作流程示例
6.1 基础拖拽动画流程
- 加载模型 → LoadCheckPointDragNUWA
- 准备图片 → 连接到DragNUWARun的image输入
- 设置轨迹 → 在tracking_points中输入轨迹坐标
- 运行生成 → 获得动画视频
6.2 相机运动流程
- 加载模型 → LoadCheckPointDragNUWA
- 创建相机运动 → InstantCameraMotionBrush设置运动类型
- 应用运动 → DragNUWARunMotionBrush处理图片
- 输出动画 → 获得相机运动效果
6.3 复杂组合流程
- 创建多个运动画笔 → 使用不同的运动生成节点
- 合成运动效果 → CompositeMotionBrush组合多种运动
- 应用到图片 → DragNUWARunMotionBrush生成最终动画
- 循环处理 → 使用Loop节点创建连续动画
7. 高级应用
7.1 姿态动画制作
- 使用LoadPoseKeyPoints加载人体姿态数据
- 通过SplitTrackingPoints分割动作片段
- 创建连续的人物动作动画
7.2 光流动画制作
- 准备光流数据文件(.flo格式)
- 使用LoadMotionBrushFromOpticalFlowDirectory加载
- 创建基于真实运动的动画效果
7.3 循环动画制作
- 使用Loop、LoopStart_IMAGE、LoopEnd_IMAGE节点
- 创建无缝循环的动画效果
- 适合制作GIF动画或循环视频
这个插件为创作者提供了强大的视频动画制作能力,通过简单的拖拽和设置就能创造出专业级的动画效果。无论是产品展示、创意视频还是艺术创作,都能找到合适的应用场景!