ComfyUI AnimateDiff
作者:CYCHENYUE
来源:开源的Ai知识库
项目地址 https://github.com/guoyww/animatediff/
需要注意的是,Animatediff这里有一个关键的lora对图像模型进行了微调
lora地址 https://huggingface.co/guoyww/animatediff/blob/main/v3_sd15_adapter.ckpt
关于lora的强度, 这个强度越高, 画面就越稳定, 但是需要在合理的范围
AnimateDiff节点和模型
AD源项目(非官方是分支更全):https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved
AD模型下載:https://huggingface.co/guoyww/animatediff/tree/main
AnimateDiff 工作流经常会使用这些有用的节点包:
- ComfyUI_FizzNodes 用于与 BatchPromptSchedule 节点一起。由 FizzleDorf 维护。
- ComfyUI-Advanced-ControlNet 用于使 ControlNets 与上下文选项配合使用,并控制哪些潜变量应受到 ControlNet 输入的影响。包括 SparseCtrl 支持。
- ComfyUI-VideoHelperSuite 用于加载视频,将图像合并为视频,并执行各种图像/潜在操作,如追加、拆分、复制、选择或计数。由 AustinMroz。
- comfyui_controlnet_aux 用于在原始 ComfyUI 中不存在的 ControlNet 预处理器。由 Fannovel16 维护。
- ComfyUI_IPAdapter_plus 用于 IPAdapter 支持。由 cubiq(matt3o)维护。
里面我们用到的节点是ComfyUI-AnimateDiff-Evolved, 调用animatediff有两个版本, 现在比较建议使用新的版本(第二个版本),因为第一个版本官方说是存在内存的多次调用。
两个版本的对照:
第一个版本:
第二个版本:
关于视频增稳的:
freeNoise,还可以在这个基础上再进行二次迭代。
- 将模型放置在以下位置之一(如果需要,您可以重命名模型):
ComfyUI/custom_nodes/ComfyUI-AnimateDiff-Evolved/models
ComfyUI/models/animatediff_models
注意:您还可以通过使用 ComfyUI extra_model_paths.yaml
文件来使用自定义位置的模型/运动 loras。运动模型文件夹的 id 是 animatediff_models
,运动 lora 文件夹的 id 是 animatediff_motion_lora
。
这些节点提供了一些技术,用于扩展动画的长度,以绕过 AnimateDiff 模型(通常为 16 帧)和 HotshotXL 模型(8 帧)的限制。
有两种上下文/视图选项:标准和循环。标准选项不会在输出中引起循环。循环选项,顾名思义,会在输出中引起循环(从末尾到开头)。在代码重构之前,唯一可用的上下文是循环类型。我建议在不想要循环输出时首先使用标准静态
这个上面文可以这样理解: 原来AnimateDiff 只能做2s的视频, 现在是引入了这个上下文, 把多个2秒钟拼合在一起了, 所以能生成更长的视频, 但是生成的长视频, 需要上下文相关,前面的2s是后面2s的基础起到一个承上启下的作用, 所以需要这个上下文.
上下文选项-循环统一
参数解释:
🟦context_length: 一次扩散的潜变量数量(一次要推理多少张图像, 看我们的显存大小决定)。
这里的context_length是决定一次是绘制多少张图片
🟦context_stride:相邻潜变量之间的最大距离为2^(stride-1)(是一帧一帧的推理还是跳帧推理, 一般选择1, 会比较细腻一些)
🟦context_overlap: 相邻窗口之间的最小公共潜变量。上下文跨度:相邻潜在变量之间的最大距离为 2^(步幅-1)。(叠加帧数, 前面多少帧数与后面重叠, 这个是让图像前后相关的)。
🟦closed_loop: 当为 True 时,添加额外的窗口以增强循环。
🟦fuse_method: 窗口结果平均化的方法。
🟦use_on_equal_length: 当为 True 时,允许在潜在计数与上下文长度相匹配时使用上下文 - 允许在潜在计数 == 上下文长度时进行循环。
🟦start_percent: 当多个上下文选项链接在一起时,允许进行调度。
🟦guarantee_steps: 在调度上下文时,确定应使用上下文的最小采样步骤数。
🟦context_length: 一次扩散的潜变量数量。
🟨prev_context: 允许上下文的链接。
🟨view_options: 当 context_length > view_length(除非另有说明),允许在每个上下文窗口中使用 view_options
采样器
这里采样器选择 autoselect 有时候可能会让图像褪色,如果遇到这样的问题, 可以尝试选择其他的, 比如 avg, 如果你是用的 lcm , 可以试下 lcm avg.
controlNet高级控件
ComfyUI-Advanced-ControlNet https://github.com/Kosinkadink/ComfyUI-Advanced-ControlNet
在时间步和批处理潜变量之间调度 ControlNet 强度的节点,以及应用自定义权重和注意力掩码。这里的 ControlNet 节点完全支持滑动上下文采样,就像 ComfyUI-AnimateDiff-Evolved 节点中使用的那种。目前支持 ControlNets、T2IAdapters、ControlLoRAs、ControlLLLite、SparseCtrls、SVD-ControlNets 和 Reference。
输入
- postitive:提示词(正面)。
- negative: 提示词(负面)。
- 🟩control_net:加载了控制网络;如果是支持的类型,此节点将自动转换为高级版本。
- 🟩image:用于指导控制网络的图像 - 如果加载的控制网络需要,它们必须预处理图像。如果提供了一张图像,将用于所有潜在因素。如果提供了更多图像,将分别为每个潜在因素使用每个图像。如果没有足够的图像来满足潜在因素的数量,将重复从开头开始的图像以匹配基本的控制网络功能。
- 🟨mask_optional:应用于控制网络的注意力掩码;基本上,决定了图像的哪个部分应用于控制网络(以及相对强度,如果掩码不是二进制)。如果提供多个掩码,则与图像输入相同,每个掩码可以应用于不同的潜在因素。
- 🟨timestep_kf:时间步关键帧,用于在采样步骤中引导控制网络效果。
- 🟨latent_kf_override:潜在关键帧的覆盖,如果不需要来自时间步关键帧的其他特征,则很有用。注意:此潜在关键帧将应用于所有时间步,而不管是否有其他潜在关键帧附加到连接的时间步关键帧上。
- weights_override:权重覆盖,如果不需要来自时间步关键帧的其他特征,则很有用。注意:此权重将应用于所有时间步,而不管是否连接的时间步关键帧附有其他权重。
- 🟦strength:控制网络的强度;1.0 表示完全强度,0.0 表示没有任何效果。
- 🟦start_percent:控制网应开始应用的采样步骤百分比 - 无论时间步关键帧上设置了什么 start_percent,直到达到此 start_percent,它们才会生效。
- 🟦stop_percent:控制网在采样步骤百分比达到此值时应停止应用 - 无论时间步关键帧上设置了什么 start_percent,一旦达到此 end_percent,它们将不会生效。
输出
- 🟪postitive:使用控制网络进行调节(积极)
- negative:使用控制网络进行条件化(负面)
控制模型
https://huggingface.co/crishhh/animatediff_controlnet/blob/main/controlnet_checkpoint.ckpt
运动控制网络:https://huggingface.co/crishhh/animatediff_controlnet/resolve/main/controlnet_checkpoint.ckpt?download=true
https://huggingface.co/crishhh/animatediff_controlnet/tree/main
人物姿态的控制
https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/blob/main/control_v11p_sd15_openpose_fp16.safetensors
重点是controlNet的控制器, 也是难点, 需要理解管道为什么要这样来链接的
控制帧变化FIZZ
FizzNodes https://github.com/FizzleDorf/ComfyUI_FizzNodes
特别注意一下, 选择提示词调度(批次)
在使用FIZZ控制帧的变化时候, 要注意context_length的值, 如果是16, 对应的帧变化也应该是每隔16一个提示词。 因为context_length表示是一次绘制多少张图,
比如在context_length=16下, FIZZ里面写了0:red,8:black,那么这两个会作用在一个context上
如果是0:red,16:black,则分别作用在第一个和第二个context上
采样补帧插件-Frame
ComfyUI Frame Interpolation (ComfyUI VFI) (WIP)
https://github.com/Fannovel16/ComfyUI-Frame-Interpolation
图生视频SparseCtrl
两个(RGB 图像/草图)SparseCtrl 编码器,可以使用任意数量的条件图来控制生成过程.
SparseCtrl
https://guoyww.github.io/projects/SparseCtrl/?ref=aiartweekly
视频生视频