跳转到内容

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,还可以在这个基础上再进行二次迭代。

  1. 将模型放置在以下位置之一(如果需要,您可以重命名模型):
    • 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

视频生视频