ComfyUI动画工作流安装:AnimateDiff+OpenPose+Depth配置排错
简介:这份压缩包面向希望入门或进阶AI动画生成的创作者、设计学习者与相关研究者,围绕ComfyUI、AnimateDiff、ControlNet及OpenPose+Depth的组合应用,提供一套可参考的动画生成素材与工作流样本,解决从技术概念到实际案例之间缺少直观对照的问题。包内共202个文件,以200张jpg连续帧图为主,另含1个mp4视频和1个json配置文件,整体约8.27MB;帧图便于观察动画过渡与画面细节,视频可查看动态效果,json则保留工作流与参数组织线索。已有787人学习下载,说明该主题在AI动画社区具有一定关注度。读者可据此拆解OpenPose姿态控制与Depth深度信息在动画生成中的配合方式,对照帧序列理解连贯性、镜头变化与控制强度,并参考配置梳理节点连接和参数设置,为复现、改参与二次创作提供可操作的样本,也为排查画面抖动、动作偏移等问题提供对照依据。
1. ComfyUI 动画工作流安装:先别急着点生成
装 ComfyUI + AnimateDiff + ControlNet 的 OpenPose + Depth 动画工作流,最容易翻车的点往往不是节点没装,而是模型目录和控制器权重对不上:预览里骨架明明生成了,采样器却像没看见,出来的人物动作依旧散。这个组合在 AI 动画生成里很常见,OpenPose 管身体姿态,Depth 管前后景空间,AnimateDiff 负责帧间连贯;少一个环节,动画不是抖就是糊。它适合已经能跑通 ComfyUI 基础出图、想把手绘姿态或实拍视频转成可控动画的开发者。下面按我装这套环境的顺序,从版本选择、目录规划、节点安装、ControlNet 配置到验证排错,一步步落地。
2. 环境准备:ComfyUI 主程序、Python 与 PyTorch 的版本取舍
2.1 先定目录和磁盘:别把模型塞进系统盘
这套环境真正占空间的是模型,不是 ComfyUI 主程序。底模、AnimateDiff 运动模块、OpenPose 控制模型、Depth 控制模型,再加预处理器权重,十几个 GB 很常见。我一般把主程序、虚拟环境、模型目录放在同一个独立盘位,Windows 用D:\ai\comfyui,Linux 用/opt/ai/comfyui。这样做的好处是后面迁移、备份、回滚都只动一个目录,不用去系统 Python 里翻残留。
先建目录并确认当前用户有写权限,不要用 root 跑 ComfyUI,否则后面装节点、下载预处理器权重容易出现权限错乱。下面以 Linux 为例,Windows 把路径换成对应盘符即可。
sudo mkdir -p /opt/ai/comfyui sudo chown -R "$USER":"$USER" /opt/ai/comfyui cd /opt/ai/comfyui mkdir -p app models/checkpoints models/controlnet models/animatediff_models models/animatediff_motion_lora这段命令先把根目录建好,再把所有权交回当前用户;后面app放 ComfyUI 主程序,models下的四个子目录分别对应底模、ControlNet 模型、AnimateDiff 运动模块和运动 LoRA。目录先建出来不是为了好看,而是为了让extra_model_paths.yaml有固定落点,减少“模型明明放了但节点读不到”的情况。
提示:模型目录不要放在中文路径或带空格的路径下,部分自定义节点拼接路径时容易出问题。
2.2 Python、PyTorch、CUDA 的版本取舍
版本选择上,我一般优先 Python 3.10 或 3.11。Python 3.12 不是不能用,但部分自定义节点依赖的轮子发布慢,遇到编译问题排查成本高;这套环境里 AnimateDiff 节点包、ControlNet 预处理器节点包都依赖 Python 侧依赖,版本太新容易在pip install阶段卡住。PyTorch 选 2.x 的 CUDA 版本,具体是 cu121 还是 cu124,不要只看教程,先看显卡驱动支持到哪一档。驱动太旧时,torch.cuda.is_available()会直接返回False,后面所有采样都跑在 CPU 上,速度慢到没法验证。
| 组件 | 建议范围 | 取舍原因 |
|---|---|---|
| Python | 3.10 / 3.11 | 自定义节点轮子覆盖更全,出问题资料多 |
| PyTorch | 2.x | 与当前 ComfyUI 生态匹配,支持较新的 CUDA |
| CUDA | 12.x 中的驱动可支持版本 | 不追最高,先保证显卡能识别 |
| 显存 | 12GB 以上更从容 | 双 ControlNet 加动画帧会明显吃显存 |
| 内存 | 16GB 起步,32GB 更稳 | 预处理器和视频拆帧也吃内存 |
显存 8GB 也能跑,但要把分辨率压到 512×512、帧数压到 16,并且一次只开一个 ControlNet 做对比。不要一上来就 768×768、32 帧、OpenPose 和 Depth 全开,那样很容易在采样中途看到CUDA out of memory。
2.3 建虚拟环境并安装 ComfyUI
虚拟环境一定要独立,不要和系统 Python 混用。后面装 AnimateDiff 节点包、ControlNet 预处理器节点包时,依赖版本冲突很常见,独立环境出问题可以直接删掉重建,不会影响机器上其他项目。
cd /opt/ai/comfyui python3.11 -m venv venv source venv/bin/activate python -m pip install --upgrade pip wheel setuptools pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 git clone https://github.com/comfyanonymous/ComfyUI.git app cd app pip install -r requirements.txtpython3.11 -m venv venv建的是隔离环境;source venv/bin/activate后,python和pip都指向这个环境。PyTorch 安装命令里的cu121要按你的驱动改,驱动支持 cu124 就换 cu124,不要两个都装。ComfyUI 主程序放在app目录,后面启动、装节点、改配置都围绕这个目录进行。Windows 下对应命令是py -3.11 -m venv venv、venv\Scripts\activate,后面pip install部分相同。
安装完成后先别急着启动,检查一次 PyTorch 是否真的识别到显卡:
python -c "import torch; print(torch.__version__); print(torch.cuda.is_available()); print(torch.version.cuda)"输出里torch.cuda.is_available()应该是True。如果是False,先看显卡驱动,再看安装的 PyTorch 是不是 CPU 版本;不要继续装节点,否则后面采样速度异常,容易误判成 AnimateDiff 的问题。
2.4 首次启动:端口、日志和访问范围
第一次启动用最小参数,只监听本机,确认页面能打开、日志没有报错。不要一上来就开局域网访问,先把环境跑通再改。
cd /opt/ai/comfyui/app source ../venv/bin/activate python main.py --listen 127.0.0.1 --port 8188 2>&1 | tee comfyui-start.log--listen 127.0.0.1表示只允许本机访问,--port 8188是默认端口,被占用时改成 8189 之类。2>&1 | tee comfyui-start.log把标准错误也写进日志,后面节点加载失败、模型路径读不到,都能在这个文件里找到线索。浏览器打开http://127.0.0.1:8188,能看到默认工作流和节点菜单,说明主程序层面已经通了。此时不要急着加载动画工作流,先把模型目录配置好。
3. 装 AnimateDiff 与 ControlNet:OpenPose、Depth 模型和节点怎么配
3.1 节点包安装:AnimateDiff 与 ControlNet 预处理器
ComfyUI 主程序只带基础节点,AnimateDiff 和 ControlNet 预处理器需要额外装节点包。我一般进custom_nodes目录用 git 拉取,装完必须重启 ComfyUI,浏览器缓存也清一次,否则节点菜单里可能只显示一半。节点包安装前确认当前终端还在虚拟环境里,which python指向/opt/ai/comfyui/venv/bin/python,不要用系统 Python 装依赖。
cd /opt/ai/comfyui/app/custom_nodes git clone https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved.git git clone https://github.com/Fannovel16/comfyui_controlnet_aux.git cd ComfyUI-AnimateDiff-Evolved pip install -r requirements.txt cd ../comfyui_controlnet_aux pip install -r requirements.txt前两个git clone分别拉 AnimateDiff 节点包和 ControlNet 预处理器节点包;后面的pip install -r requirements.txt装各自依赖。如果某个目录没有requirements.txt,跳过对应命令即可,不要强行造一个空文件。装完回到app目录重启,日志里出现节点加载成功的信息,再打开节点菜单确认 AnimateDiff Loader、ControlNet Apply、OpenPose 预处理器、Depth 预处理器这些节点存在。
注意:节点包装完不重启,工作流里会显示红框或提示缺少节点,这不是模型问题。
3.2 模型落位:四个目录别放错
模型放错目录是这套环境里最常见的坑。ComfyUI 的节点下拉框只认指定目录,文件放在models根目录、放在二级子目录、或者后缀名不对,都可能不显示。下面这张表按我平时的落位方式整理,文件名只是示例,实际以你压缩包里的文件名为准。
| 文件类型 | 放置目录 | 常见命名特征 | 用途 |
|---|---|---|---|
| 底模 Checkpoint | models/checkpoints | *.safetensors | 决定画面风格和基础质量 |
| AnimateDiff 运动模块 | models/animatediff_models | mm_sd15*.ckpt一类 | 提供帧间运动先验 |
| 运动 LoRA | models/animatediff_motion_lora | *motion*lora* | 调整运动幅度和风格 |
| ControlNet OpenPose | models/controlnet | 文件名含openpose | 约束身体骨架 |
| ControlNet Depth | models/controlnet | 文件名含depth | 约束前后景空间 |
| 预处理器权重 | 由预处理器节点首次运行拉取 | 控制台会打印路径 | OpenPose、Depth 估计 |
如果模型放在独立盘位,不想反复复制,可以在 ComfyUI 根目录建extra_model_paths.yaml,把路径指过去。下面是一份最小配置,base_path换成你的实际路径。
comfyui: base_path: /opt/ai/comfyui/app checkpoints: models/checkpoints controlnet: models/controlnet animatediff_models: models/animatediff_models animatediff_motion_lora: models/animatediff_motion_lorabase_path是根路径,下面四项是相对这个根的目录。YAML 对缩进敏感,冒号后面要留空格;改完必须重启 ComfyUI。配置生效后,节点下拉框里应该能看到对应模型。如果仍然看不到,先检查文件是不是放在二级子目录里,再把文件名改成全英文、无空格。
3.3 OpenPose 控制链:从视频到骨架批次
OpenPose 的作用是把参考视频或图片里的人体姿态转成骨架图,再交给 ControlNet 约束生成。这里的关键不是“有没有骨架图”,而是骨架图要按帧组成批次输入。只放一张静态骨架,生成出来就是一张姿态重复的动画,动作不会跟参考视频走。
我一般先用 ffmpeg 把参考视频拆成统一尺寸的 PNG 序列,帧率设 8 或 12,和后面 AnimateDiff 的输出帧率保持一致。下面命令把视频缩放到 512×512,短边不足时补边,避免比例变形。
mkdir -p /opt/ai/comfyui/ref_frames/pose ffmpeg -i pose_ref.mp4 -vf "fps=8,scale=512:512:force_original_aspect_ratio=decrease,pad=512:512:(ow-iw)/2:(oh-ih)/2" /opt/ai/comfyui/ref_frames/pose/pose_%04d.pngfps=8表示每秒抽 8 帧,scale=512:512是目标尺寸,pad负责补边。拆完后用批次加载节点把pose_%04d.png读成图像批次,再接 OpenPose 预处理器。预处理器输出接ControlNet Apply Advanced的image输入,正向提示词的 conditioning 接同一节点的conditioning输入,ControlNet 模型选 OpenPose 那个文件。权重我一般从 0.8 到 1.0 之间试,低于 0.6 动作容易散,高于 1.0 画面会僵。
3.4 Depth 控制链:空间层次怎么压
Depth 和 OpenPose 的职责不一样。OpenPose 管“人怎么动”,Depth 管“人和背景谁在前谁在后”。两个一起开时,Depth 权重不要太高,否则画面会发灰、细节被压平。我一般把 Depth 权重放在 0.4 到 0.6,起止百分比设成 0 到 0.7,让后半段采样更多交给画面自身细节。
Depth 预处理器可以直接吃同一批参考帧,也可以单独用一张背景图估计深度。用视频帧时,注意预处理器输出也是批次,不要只接第一帧。ControlNet 模型选文件名含depth的那个,底模必须和 ControlNet 模型匹配:SD1.5 的 ControlNet 配 SD1.5 底模,不要拿 SDXL 底模硬套,否则模型加载阶段就可能报错。
| 控制类型 | 建议权重 | 起止百分比 | 调整方向 |
|---|---|---|---|
| OpenPose | 0.8–1.0 | 0–1.0 | 动作散就加,画面僵就减 |
| Depth | 0.4–0.6 | 0–0.7 | 画面灰就减,空间乱就加 |
| 双控制同开 | 先各降 0.1 | 先短后长 | 先确认单控制生效再叠加 |
3.5 AnimateDiff 采样参数:帧数、context length、权重
AnimateDiff 不是帧数越多越好。第一次验证用 16 帧、512×512、batch size 1,先把 OpenPose 和 Depth 的开关对比跑出来。context_length一般设 16,和总帧数对齐;总帧数设 32 时,运动模块会分段处理,显存不够就回到 16。采样步数 20 到 28,CFG 7 到 8,motion_scale 从 1.0 起调,运动太弱加到 1.1,画面抖得厉害就降到 0.9。
工作流连接顺序可以按这个思路搭:Checkpoint 加载底模,接 AnimateDiff Loader 加载运动模块,再依次接 OpenPose 的 ControlNet Apply 和 Depth 的 ControlNet Apply,最后进 KSampler、VAE Decode、动画保存节点。控制图要接到对应 Apply 节点的image输入,不要把 ControlNet 模型当成底模加载。保存节点选动画格式,不要用单图保存节点,否则输出只有一帧。
4. 避坑与排查:ComfyUI 动画工作流最常见的 5 个翻车点
4.1 节点菜单里能看到,工作流却提示缺少节点
现象:加载示例工作流时,节点显示红框,控制台提示某个节点类型不存在,但custom_nodes目录里明明有这个节点包。原因通常是节点包装进了系统 Python,而不是 ComfyUI 的虚拟环境;或者装完没有重启,浏览器还拿着旧缓存。解决时先确认当前 Python 路径,再回节点目录补依赖,最后重启并强制刷新浏览器。
which python python -c "import sys; print(sys.executable)" cd /opt/ai/comfyui/app/custom_nodes/ComfyUI-AnimateDiff-Evolved pip install -r requirements.txtwhich python应该指向venv/bin/python。如果指向系统路径,先source venv/bin/activate再装。重启后仍然缺节点,再看节点包目录名有没有被改过,部分节点包对目录名敏感。
4.2 模型文件在目录里,节点下拉框读不到
现象:models/controlnet里能看到*openpose*文件,但 ControlNet 加载节点下拉框里没有。原因多半是文件放在二级子目录、后缀名不被识别,或者extra_model_paths.yaml缩进写错。先用find确认文件层级,再把模型放到目录第一层,改完重启。
cd /opt/ai/comfyui/app find models/controlnet -maxdepth 2 -type f | sort find models/animatediff_models -maxdepth 2 -type f | sort如果文件在models/controlnet/sd15/openpose.pth这种二级目录里,节点可能扫不到,移到models/controlnet/openpose.pth再试。YAML 配置里冒号后没空格也会导致整段不生效,日志里通常能看到解析失败的提示。
4.3 OpenPose 骨架生成了,动画动作却没跟上
现象:预览里能看到骨架图,生成的动画人物动作和参考视频关系不大,或者每帧姿态几乎一样。原因通常是控制图只接了单张,没有按帧组成批次;或者 ControlNet 模型和底模不匹配;也可能是 OpenPose 权重太低。解决时先检查批次加载节点,确认输出是图像批次而不是单图,再把权重提到 0.9 做一次对比。
还有一种情况是 ControlNet Apply 节点接在了 AnimateDiff Loader 之前,条件没有进入采样链。按“底模 → AnimateDiff → ControlNet Apply → KSampler”的顺序检查,控制图的image输入和正向提示词的conditioning输入都要接对。
4.4 Depth 一开画面发灰、细节糊
现象:只开 OpenPose 时画面正常,叠加 Depth 后人物边缘发灰,背景细节像被压平。原因是 Depth 权重过高,或者end_percent设到了 1.0,整个采样过程都被深度图压着。解决时先把 Depth 权重降到 0.5,end_percent设 0.7,再跑 16 帧小样对比。
如果仍然灰,检查 Depth 预处理器的输出是不是正确灰度图,别把彩色参考图直接接进 Depth 控制节点。先只开 Depth 跑一次,确认它单独能约束空间,再和 OpenPose 叠加。
4.5 采样到一半显存炸了,或者输出只有单帧
现象:日志出现CUDA out of memory,采样中断;或者跑完只得到一张图。显存问题通常是分辨率、帧数、双 ControlNet 叠加导致,先把 512×512、16 帧、batch size 1 跑通,再逐项加。输出单帧则要检查保存节点是不是动画保存节点,以及batch_size有没有设成 1。
cd /opt/ai/comfyui/app source ../venv/bin/activate python main.py --listen 127.0.0.1 --port 8188 --lowvram 2>&1 | tee comfyui-lowvram.log--lowvram会把部分模型分片加载,速度慢一些,但能先排除显存不足。输出帧数不对时,把总帧数、context_length、batch_size三个值对齐到 16 再做一次;保存节点换成动画格式,不要用单图保存。
4.6 装坏了怎么救:节点目录改名比直接删更稳
节点包装冲突时,我一般不给它“判死刑”,先把目录改名停用,再重启看主程序是否恢复。这样比直接删目录多留一份后悔药,后面定位到具体是哪个节点包的问题,还能改回来。
cd /opt/ai/comfyui/app/custom_nodes mv comfyui_controlnet_aux ../custom_nodes_disabled_controlnet_aux mv ComfyUI-AnimateDiff-Evolved ../custom_nodes_disabled_animatediff改名后重启,如果主程序恢复,再逐个移回来排查。虚拟环境也可以用pip freeze > requirements-backup.txt留一份依赖快照,后面重建环境时不用凭记忆装。启动日志用tee留档,黑匣子就在comfyui-start.log里。
5. 验证跑通:用一段 16 帧动画检查 OpenPose 与 Depth 是否真的生效
装完不要直接上长片。我一般先跑 16 帧、512×512、单人物、纯色背景的测试段:OpenPose 用一段 3 秒抬手视频拆帧,Depth 用同序列估计图,AnimateDiff 总帧数 16,context_length16,采样 20 步。导出后先看三件事:帧数、分辨率、动作是否跟骨架走。以 mp4 输出为例,用 ffprobe 读视频信息:
ffprobe -v error -select_streams v:0 \ -show_entries stream=width,height,nb_frames,r_frame_rate \ -of default=nw=1 output/anim_test_00001.mp4width和height应该是你设定的 512×512,nb_frames应该是 16 或接近 16,r_frame_rate和你保存节点里的帧率一致。如果你用的是 animated webp,路径换成对应文件,命令仍然适用。帧数对不上时,先查总帧数和batch_size,不要先怀疑模型。
| 检查项 | 合格表现 | 不合格先看 |
|---|---|---|
| 帧数 | 16 帧完整输出 | 总帧数、batch_size、保存节点 |
| 分辨率 | 与设定一致,无拉伸 | 参考帧缩放、pad 参数 |
| 动作 | 手部和肩膀跟随骨架 | OpenPose 权重、批次输入 |
| 空间 | 人物与背景前后关系清楚 | Depth 权重、end_percent |
| 日志 | 模型加载路径正确,无缺节点 | extra_model_paths、节点重启 |
再做一个开关对比:复制一份工作流,只关 Depth 跑一次,再只关 OpenPose 跑一次。只开 OpenPose 时动作应该更明显,只开 Depth 时空间关系更清楚;两个都关,动作会散、背景会飘。这个对比能快速判断问题出在控制链还是采样参数。从那以后我每次装完 ComfyUI 动画环境,都先拿 16 帧小样走一遍 OpenPose 和 Depth 的开关对比,再跑正式片段;这样出问题能立刻判断是模型没加载、控制权重不对,还是显存撑不住。希望帮到你。
本文还有配套的精品资源,点击获取