Nodes/IAMCCS-nodes/MoveAhead Enforcer (3-tier motion lock) ??
ComfyUI Node

MoveAhead Enforcer (3-tier motion lock) ??

When MoveAhead still drifts, lock the motion skeleton

By IAMCCS·Created 11 months ago·Updated 8 days ago· 113
MoveAhead Enforcer (3-tier motion lock) ??
  • model
  • model
enabledtrue
motion_lock_ratio0.15
blend_strength0.8
low_freq_ratio0.50
auto_windowtrue
manual_window_frames
blend_curveflat
motion_lock_blocks5
vram_presetnormal

IAMCCS_MoveAhead fixes most long-WAN drift. The stubborn cases - direction slowly rotating, subject wandering off over 120 frames - are what the Enforcer exists for. It's the same FreeLong spectral-blend idea, but with a "3-tier motion lock": part of the spectrum is hard-locked to the global stream, early transformer blocks run global-only attention to establish direction, and everything above a frequency cutoff stays fully local for detail. Stricter by design.

The pack's own description is the best summary: "Stricter FreeLong variant with locked motion skeleton. Use when standard MoveAhead still shows direction drift." It's not the first node you reach for - it's the one you graduate to when the soft version isn't enough. From the IAMCCS-nodes WAN section, the successor to the author's WanFreeLongEnforcer.

How it works

Where MoveAhead has one blend ratio, the Enforcer splits the frequency spectrum into three tiers. motion_lock_ratio (0.15) is the fraction 100% locked to the global stream - those frequencies are never allowed to follow the local window, so the broad motion direction can't wander. low_freq_ratio (0.5) is the upper bound of the blended mid-tier: frequencies below it are either locked or blended, frequencies above it are fully local (detail). The constraint the tooltip warns about: low_freq_ratio must be greater than motion_lock_ratio, or the tiers overlap nonsensically.

The second lock is motion_lock_blocks (5): the first N transformer blocks run global-only attention, no local stream at all. That's the "establish the motion direction early" move - by the time later blocks get local detail, the trajectory is already set. blend_strength (0.8), blend_curve, auto_window/manual_window_frames, and vram_preset all work like the basic MoveAhead.

Inputs and outputs

  • model (MODEL), enabled (BOOLEAN, true).
  • motion_lock_ratio (0.15), blend_strength (0.8), low_freq_ratio (0.5, must be > motion_lock_ratio), auto_window (true), manual_window_frames, blend_curve (flat), motion_lock_blocks (5), vram_preset (normal).

Output: model (MODEL).

How to install

Part of IAMCCS-nodes. ComfyUI Manager search "IAMCCS", or:

cd ComfyUI/custom_nodes
git clone https://github.com/IAMCCS/IAMCCS-nodes.git

Restart. No model downloads. Pack floors: ComfyUI ≥ 0.3.0, Python ≥ 3.12, Torch ≥ 2.8.

Gotchas

The lock is a trade, not a gift. motion_lock_ratio up toward 0.3–0.5 and motion_lock_blocks up toward 10+ will pin the motion down hard - and also pin down dynamism, so clips start to look like a locked-off camera with the subject pasted on. The defaults (0.15 / 5) are where "locked enough but still alive" actually lives. If the model refuses to respect your prompt's motion at higher lock values, that's the mechanism working as intended; back the ratio off. And honestly, if the Enforcer is still drifting, stop tuning and change approach - switch to segmented generation with motion bridges or VACE, which is where the community ended up for anything past ~10 seconds of continuous action.

CategoryIAMCCS/Wan

Inputs (10)

NameTypeDefaultDescription
modelMODEL
enabledBOOLEANtrueEnable / disable the Enforcer.
motion_lock_ratioFLOAT0.150–0.5Fraction of the spectrum that is 100 %% locked to the global stream. Higher = stronger motion lock but may reduce dynamism. 0.15 is a good starting point.
blend_strengthFLOAT0.80–1Overall blend strength. 0 = passthrough, 1 = full enforced blend.
low_freq_ratioFLOAT0.500–1Upper bound of the blended mid-frequency tier. Frequencies above this are fully local (detail). Must be > motion_lock_ratio.
auto_windowBOOLEANtrueAUTO window mode (recommended).
manual_window_framesSTRINGManual window size in VIDEO frames (example: 33 for 81-frame videos). Used only if AUTO window is OFF.
blend_curveCOMBOflatflat = constant blend_strength. sigmoid = ramps from near-zero in early blocks to full strength later. Combines well with motion_lock_blocks.
motion_lock_blocksINT50–20First N transformer blocks run global-only attention (no local stream). Establishes motion direction early. 5 is a good default. 0 = disable this feature.
vram_presetCOMBOnormalVRAM preset for the FFT blending implementation. low = smallest chunks (slowest, safest), normal = balanced, high = larger chunks (faster).

Outputs (1)

NameTypeDescription
modelMODEL