Nodes/IAMCCS-nodes/WanImageMotion
ComfyUI Node

WanImageMotion

The node that fixes WAN SVI Pro's fake slow-motion

By IAMCCS·Created 11 months ago·Updated 8 days ago· 113
WanImageMotion
  • positive
  • negative
  • anchor_samples
  • prev_samples
  • clip_vision_output
  • positive
  • negative
  • latent
length81
motion_latent_count1
motion1.15
motion_modemotion_only (prev_samples)
add_reference_latentsfalse
latent_precisionfp32
vram_profilenormal
include_padding_in_motionfalse
safety_presetsafe
lock_start_slots1
diagnostic_logfalse
use_prev_samplestrue
latent_refresh0.00
delta_max0.0

If you've run WAN 2.2 long-video chains with SVI Pro and wondered why your "camera push-in" comes out looking like a slideshow, this is the node the community points at. IAMCCS_WanImageMotion_AdaIN (display name "WanImageMotion") is a drop-in replacement for the common WAN SVI Pro I2V conditioning nodes that adds a motion amplitude control on top of the prev-sample continuity - built specifically to fix the fake slow-motion problem that plagues native SVI Pro workflows.

The mechanism is the interesting part. SVI (Stable Video Infinity) adapters let Wan survive its own autoregressive mistakes, which is how you get 20-second takes, but the conditioning can come out too rigid - everything drifts glacially even when your prompt asks for real movement. This node takes your positive/negative conditioning plus an anchor_samples latent and, instead of passing the prev-sample tail through untouched, boosts its motion amplitude in latent space. The "AdaIN" in the class name is the newer adaptive-instance-normalization flavor of that stabilization: a latent_refresh slider matches the per-channel mean and contrast of the motion tail to the anchor latent, so long chains don't drift in color and brightness.

The few inputs that matter

  • motion - the amplitude multiplier, 1.0 to 2.0, default 1.15. This is the dial everyone starts with. Crank it when things feel staticky, back it off when motion gets wild.
  • motion_mode - apply the boost only to prev_samples (default, the safe pick) or to all non-first latents (all_nonfirst) when you want the whole clip moving more.
  • motion_latent_count - how many frames of the prev tail count as "motion reference." One latent slot ≈ 4 video frames.
  • safety_preset - safe (default, per-channel stabilization + tanh limiter), safer (tighter, for motion above ~1.5), legacy (hard clamp that mirrors the PainterI2V algorithm). The tooltips here are genuinely good; trust them.
  • lock_start_slots - how many initial slots are hard-locked to the start image. Default 1 matches FLF-style start anchoring; set 0 to let motion start from frame one.
  • latent_refresh / delta_max - the AdaIN stabilizer. Start at 0.5 for chains of 3+ segments, and cap correction with delta_max (0.5–1.0) so it doesn't over-correct on big-motion shots.
  • vram_profile - normal, chunked_blocks_2/4, loop_per_frame, or cpu_offload. On a tight card this is how you survive.
  • use_prev_samples - set False on the first segment when autolink force-connects prev_samples. Flip the toggle instead of rewiring.

Outputs are positive, negative, and latent - the patched conditioning plus an empty latent sized for sampling, so it slots into a standard WAN sampler chain.

Install

It's part of IAMCCS-nodes:

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

or search "IAMCCS" in ComfyUI Manager and restart. No model downloads for this node - it transforms latents and conditioning you already have. Compatibility floor: ComfyUI ≥ 0.3.0, Python ≥ 3.12, Torch ≥ 2.8.

Where people get burned

Pushing motion past ~1.5 without safer invites color artifacts and seam degradation - that's exactly why the safety presets exist. If your clip comes out frozen, the diagnostic_log toggle prints what's actually happening with the concat mask and motion ranges; it's the fastest debug path. And remember the legacy preset is a strict-compatibility path, not a recommendation - it mirrors an older algorithm with a hard ±6 clamp. Start on safe, move to safer only when you're pushing the multiplier.

CategoryIAMCCS/Wan

Inputs (19)

NameTypeDefaultDescription
positiveCONDITIONING
negativeCONDITIONING
lengthINT811–16384
anchor_samplesLATENT
motion_latent_countINT10–16
motionFLOAT1.151–2
motion_modeCOMBOmotion_only (prev_samples)2 options: motion_only (prev_samples), all_nonfirst (anchor+motion)
add_reference_latentsBOOLEANfalse
latent_precisionCOMBOfp324 options: auto, fp16, fp32, normal
vram_profileCOMBOnormal5 options: normal, chunked_blocks_2, chunked_blocks_4, loop_per_frame (lowest_vram), cpu_offload (slowest)
include_padding_in_motionBOOLEANfalse
safety_presetCOMBOsafebase : 1:1 with WanImageToVideoSVIProFLF — no amplitude processing at all. safe : per-channel stabilisation + tanh limiter + 2-frame ramp (active at any motion value, recommended default). safer : same as safe but tighter limiter + longer ramp (best above motion=1.5). legacy : hard clamp ±6 + frame-scalar diff centering, mirrors PainterI2V algorithm.
lock_start_slotsINT10–16How many initial latent slots to hard-lock to the start image via concat_mask. Default 1 (≈ first 4 video frames) matches FLF-style start anchoring. Set 0 to allow motion immediately from the first video frame.
diagnostic_logBOOLEANfalseWhen enabled, prints compact diagnostics about concat_latent_image/mask and motion ranges. Useful to debug 'static clip' or segment discontinuities.
use_prev_samplesBOOLEANtrueWhen False, prev_samples is ignored even if the wire is connected. Use this on the first segment when autolink forces prev_samples to be connected.
latent_refreshFLOAT0.000–1Latent moment stabilization strength (0=disabled, 1=full correction). Matches per-channel mean and contrast of the motion tail to the anchor latent. Spatial residuals and motion are preserved. Start with 0.5 for chains of 3+ segments.
delta_maxFLOAT0.00–5Soft-clamp on latent mean drift magnitude (0=disabled). Caps how much mean correction can be applied per channel. Use 0.5-1.0 to prevent over-correction on large motion segments.
prev_samplesoptLATENT
clip_vision_outputoptCLIP_VISION_OUTPUT

Outputs (3)

NameTypeDescription
positiveCONDITIONING
negativeCONDITIONING
latentLATENT