Nodes/AnimateDiff Evolved/AD Per Block+ (SD1.5) πŸŽ­πŸ…πŸ…“
ComfyUI Node Runs on cloud

AD Per Block+ (SD1.5) πŸŽ­πŸ…πŸ…“

One control per SD1.5 UNet stage, instead of 21

By KosinkadinkΒ·Created 3 years agoΒ·Updated 8 days agoΒ· 3,519
AD Per Block+ (SD1.5) πŸŽ­πŸ…πŸ…“
  • down_0
  • down_1
  • down_2
  • down_3
  • mid
  • up_0
  • up_1
  • up_2
  • up_3
  • PER_BLOCK

Displayed as AD Per Block+ (SD1.5), this sits between the two ends of this pack's per-block tuning ladder. The plain AD Per Block node gives you three knobs - down, mid, up - for the whole UNet at once. AD Per Block++ goes all the way to 21, one per individual sub-block. This one lands in the middle: nine knobs, one per structural stage, without splitting each stage into its individual sub-blocks.

Why the middle level exists

SD 1.5's UNet has four down (encoder) stages, one mid (bottleneck) block, and four up (decoder) stages, and each of the down/up stages is itself made of two or three sub-blocks - that finer split is what ADE_PerBlock_SD15_LowLevel exposes as down_0__0/down_0__1 and so on. Most of the time you don't need that level of resolution. If a motion artifact traces to "somewhere deep in the decoder" rather than one specific sub-block within it, targeting up_2 and up_3 directly here is faster and more legible than deciding between two or three sub-block sockets each. This node is that stage-level granularity: nine addressable slots instead of three or 21.

Each slot takes an AD_BLOCK value, built elsewhere with ADE_ADBlockCombo (one effect, one scale) or ADE_ADBlockIndiv (effect plus split scale_0/scale_1) - the same builder nodes the low-level and high-level per-block nodes use, since AD_BLOCK is a shared type across the whole family.

Inputs and output

All nine optional and independent, type AD_BLOCK each:

  • down_0, down_1, down_2, down_3 - one per encoder stage.
  • mid - the bottleneck.
  • up_0, up_1, up_2, up_3 - one per decoder stage.

Leave any unwired and that stage keeps its default, unmodified motion behavior. Output is a single PER_BLOCK, which feeds an Apply node's per_block input, or a keyframe's per_block_replace if you want the configuration to change partway through the clip rather than staying static.

How to install it

ComfyUI Manager: search AnimateDiff Evolved, confirm the author is Kosinkadink, install, restart. Manual:

cd ComfyUI/custom_nodes
git clone https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved

No model download for this node itself - a configuration layer on top of a motion module you've already loaded.

Common issues & troubleshooting

Not sure whether this or the low-level node is the right pick. Start here. If a stage-level adjustment (say, dampening up_2 and up_3) gets you the result you're after, you're done - there's no need to descend to the 21-socket version. Only drop to ADE_PerBlock_SD15_LowLevel if you need to separate the sub-blocks within one stage specifically.

No documented mapping from "my problem" to "which stage to touch." Fair warning, and true of this whole per-block system - neither the README nor the wider community documents a clean symptom-to-stage table. Down stages tend to affect broader, lower-resolution structure; up stages tend to affect finer detail; mid sits in between. Treat that as a starting hypothesis, change one stage at a time, and compare renders - there's no shortcut to testing here.

Wired stages and generation looks unchanged. Confirm the PER_BLOCK output is actually reaching your Apply node's per_block input or a keyframe's per_block_replace slot - a disconnected configuration, however many stages you've filled in, does nothing.

Even nine knobs feels like more than you need. It might be. Try the plain AD Per Block node (down/mid/up, three total) first - for most "motion is too strong/weak in a general area" adjustments, three coarse knobs are enough, and per-block tuning at any level is a deliberate escalation, not a default.

CategoryAnimate Diff πŸŽ­πŸ…πŸ…“/per block

Inputs (9)

NameTypeDefaultDescription
down_0optAD_BLOCKβ€”
down_1optAD_BLOCKβ€”
down_2optAD_BLOCKβ€”
down_3optAD_BLOCKβ€”
midoptAD_BLOCKβ€”
up_0optAD_BLOCKβ€”
up_1optAD_BLOCKβ€”
up_2optAD_BLOCKβ€”
up_3optAD_BLOCKβ€”

Outputs (1)

NameTypeDescription
PER_BLOCKPER_BLOCKβ€”