Nodes/comfyui-humo-audio-motion/HuMo Audio Attention Control v4
ComfyUI Node

HuMo Audio Attention Control v4

Boost or suppress audio attention without retraining

By ckinpdx·Created 10 months ago·Updated 9 months ago· 1
HuMo Audio Attention Control v4
  • model
  • model
enable_audio_cross_attntrue
audio_blocksmid_6-24_lipsync
audio_q_scale1.00
audio_k_scale1.00
audio_v_scale1.00
audio_o_scale1.00
enable_cross_attnfalse
cross_blocksearly_0-10_body
cross_q_scale1.00
cross_k_scale1.00
cross_v_scale1.00
cross_o_scale1.00
enable_self_attnfalse
self_blocksearly_0-10_body
self_q_scale1.00
self_k_scale1.00
self_v_scale1.00
self_o_scale1.00
audio_custom_range6-24
cross_custom_range0-10
self_custom_range0-10

The name undersells it. This isn't one knob labeled "audio influence" - it's twelve independent dials that reach into HuMo's transformer and turn its Q, K, V, and O projections up or down, per block range, at runtime. If HuMo is ByteDance's audio-to-talking model (built on the Wan 2.1 14B base, run in ComfyUI through Kijai's WanVideoWrapper), this node is the keyhole into its head.

Why you'd reach for it

HuMo listens to speech through a Whisper encoder and drives lip movement, expression, and some body motion from it. Out of the box that pathway is monolithic - you can't tell it "do the gestures but skip the lip-sync," or "lean harder on the body language." This node from the ckinpdx/comfyui-humo-audio-motion pack opens that up. The README calls it experimental, and it means it, but the core trick is simple: intercept attention outputs and scale them. No training, no model file edits, and the weights are never modified.

How it works

Every transformer block runs three attention types - audio cross-attention (the direct speech→motion path), text cross-attention, and self-attention - and each has four projection components: Q (what to look for), K (what's available), V (actual content), O (final result). The node registers forward hooks that multiply each projection's output by your scale: below 1 attenuates, exactly 1 is neutral, above 1 amplifies (up to 5). HuMo has 40 blocks, and instead of picking numbers by hand you choose a preset - early_0-10_body, mid_6-24_lipsync, all_0-39_maximum, and so on. Hooks are registered on each run and cleaned up after, so changes never accumulate across generations.

The inputs that matter

You'll set maybe four of them and leave the rest alone:

  • enable_audio_cross_attn - on by default. This is the pathway you actually care about.
  • audio_blocks - the block-range preset. The default mid_6-24_lipsync is where the strongest lip-sync sensitivity lives.
  • audio_v_scale - the Value projection, and the author's own tooltip says it outright: "THIS IS THE MAIN ONE FOR LIP-SYNC." For suppression, 0.01–0.1 on blocks 6–24. For body-motion boost, 2.0–4.0 on the early 0-10 blocks.
  • audio_custom_range (optional) - when no preset fits, a string like 0-5,25-39 for a hand-picked range.

Text cross-attention and self-attention are off by default, and you should keep them that way until you know what you're doing - every enabled type means more hooks and more memory. The output is a single model wire, still type WANVIDEOMODEL, that plugs right back into your HuMo graph: WanVideo Model Loader → this node → HuMo Embeds.

Installing it

The pack itself is a two-line install:

cd ComfyUI/custom_nodes
git clone https://github.com/ckinpdx/comfyui-humo-audio-motion

Restart ComfyUI. There's no requirements.txt - no extra Python dependencies. ComfyUI Manager users can just search "comfyui-humo-audio-motion." What it does need is the whole HuMo stack already standing: Kijai's ComfyUI-WanVideoWrapper, the HuMo weights (the fp8-scaled Wan2_1-HuMo-14B files live in Kijai's WanVideo_comfy_fp8_scaled repo), and the Whisper audio encoder. No HuMo model, nothing to hook.

Common issues

  • "Hooks not firing / no effect." Almost always torch.compile. Compilation bypasses runtime hooks, so if you compile the model, this node silently does nothing. Disable it.
  • Out of memory. Hooks add work at every attention layer. Narrow the block range, drop to a lower resolution, or disable attention types you aren't using. Fewer hooks, less memory.
  • "Registered 0 attention hooks" in the console. That line is your diagnostic. If it prints a block-doesn't-exist warning or zero hooks, your model isn't the HuMo variant of the wrapper - the node can't find audio_cross_attn_wrapper on the blocks.
  • Artifacts and desaturation. The README is upfront that no stable values exist yet. Scale aggressively and things get weird; back off and change one component at a time.

Where people get burned: they treat the sliders as "more is better." It's a fader, not a boost pedal - you're supposed to audition it. Start at 1.0, move one scale, lock your seed, compare. That's the whole workflow for a research tool like this.

CategoryWanVideoWrapper/HuMo

Inputs (22)

NameTypeDefaultDescription
modelWANVIDEOMODEL
enable_audio_cross_attnBOOLEANtrueEnable audio cross-attention modification
audio_blocksCOMBOmid_6-24_lipsync8 options: custom, early_0-5_structure, early_0-10_body, mid_6-24_lipsync, mid_10-25_gestures, late_25-39_texture, +2
audio_q_scaleFLOAT1.000.01–5Audio Query scale (<1 suppress, >1 boost)
audio_k_scaleFLOAT1.000.01–5Audio Key scale (<1 suppress, >1 boost)
audio_v_scaleFLOAT1.000.01–5Audio Value scale - THIS IS THE MAIN ONE FOR LIP-SYNC
audio_o_scaleFLOAT1.000.01–5Audio Output scale (<1 suppress, >1 boost)
enable_cross_attnBOOLEANfalseEnable text cross-attention modification
cross_blocksCOMBOearly_0-10_body8 options: custom, early_0-5_structure, early_0-10_body, mid_6-24_lipsync, mid_10-25_gestures, late_25-39_texture, +2
cross_q_scaleFLOAT1.000.01–5
cross_k_scaleFLOAT1.000.01–5
cross_v_scaleFLOAT1.000.01–5
cross_o_scaleFLOAT1.000.01–5
enable_self_attnBOOLEANfalseEnable self-attention modification
self_blocksCOMBOearly_0-10_body8 options: custom, early_0-5_structure, early_0-10_body, mid_6-24_lipsync, mid_10-25_gestures, late_25-39_texture, +2
self_q_scaleFLOAT1.000.01–5
self_k_scaleFLOAT1.000.01–5
self_v_scaleFLOAT1.000.01–5
self_o_scaleFLOAT1.000.01–5
audio_custom_rangeoptSTRING6-24Custom block range (e.g. '6-24' or '0-5,25-39')
cross_custom_rangeoptSTRING0-10
self_custom_rangeoptSTRING0-10

Outputs (1)

NameTypeDescription
modelWANVIDEOMODEL