WanImageMotionPro Legacy
The old motion Pro you probably only need if a saved workflow demands it
- positive
- negative
- anchor_samples
- prev_samples
- end_samples
- positive
- negative
- latent
- trim_slots
IAMCCS_WanImageMotionProLegacy ("WanImageMotionPro Legacy") is the earlier generation of IAMCCS's end-frame-lock motion node, kept in the pack so older workflows keep loading. If you're starting fresh today, you almost certainly want the newer WanImageMotionPro or the trimmed Plus Simple instead - this one exists for compatibility, not because it's better.
That's not to say it's broken. The Legacy variant already has the two headline features of the family: motion amplitude boost on the prev-sample tail, and FLF-style end-frame locking via use_end_frame, end_lock_slots, and end_overshoot_slots with a trim_slots output. The shared core is all here: motion (1.0–2.0), motion_mode, motion_latent_count, safety_preset (base/safe/safer/legacy), lock_start_slots, vram_profile, and the diagnostic_log toggle.
What it's missing
Compare the schema with the current Pro and the differences are obvious. There's no clip_vision_mode routing (the fix for SVI-Pro crossfade bleed when anchor and end are the same image), no latent_refresh/delta_max AdaIN stabilization, no prev_samples_profile/prev_tail_pick_mode/prev_anchor_blend for handling ragged SVI tails, and no raw_mode parity switch. It's the 1.3.5-era feature set - good enough for straightforward A→B chunks, but it can't handle the messy continuation cases the modern node was built for.
The end_transition_frames input is also here, deprecated with the same warning as everywhere else in this family: keep it at 0, because blending latents toward the end frame in latent space produces frozen, static output. The VAE latent space just doesn't interpolate linearly.
When to use it (honestly)
Three scenarios. You loaded an old workflow and don't want to rewire - fine, it'll run. You need exact bit-for-bit behavior of an older run for comparison. Or you're deliberately avoiding the newer node's added complexity and want the small, predictable surface. Otherwise, pick the current node.
Outputs are the family standard: positive, negative, latent, and trim_slots for cutting the overshoot tail. Same end_overshoot_slots warning applies - if you have KJNodes FETA/wrapped-attention WAN optimizations active, overshoot > 0 can crash with an einops shape mismatch; set it to 0 or update KJNodes.
Install
Same pack, same routine:
cd ComfyUI/custom_nodes
git clone https://github.com/IAMCCS/IAMCCS-nodes.git
or ComfyUI Manager → search "IAMCCS" → restart. No models, no extra deps. Compatibility floor: ComfyUI ≥ 0.3.0, Python ≥ 3.12, Torch ≥ 2.8.
The practical takeaway: keep the pack updated, let legacy nodes retire in your saved graphs, and only reach for this one when a workflow literally references it.
Inputs (21)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| length | INT | 811–16384 | — |
| anchor_samples | LATENT | — | |
| motion_latent_count | INT | 10–16 | — |
| motion | FLOAT | 1.151–2 | — |
| motion_mode | COMBO | motion_only (prev_samples) | 2 options: motion_only (prev_samples), all_nonfirst (anchor+motion) |
| add_reference_latents | BOOLEAN | false | — |
| latent_precision | COMBO | fp32 | 4 options: auto, fp16, fp32, normal |
| vram_profile | COMBO | normal | 5 options: normal, chunked_blocks_2, chunked_blocks_4, loop_per_frame (lowest_vram), cpu_offload (slowest) |
| include_padding_in_motion | BOOLEAN | false | — |
| safety_preset | COMBO | safe | base : 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. |
| use_end_frame | BOOLEAN | true | When False, end_samples is ignored even if the wire is connected. Use this to safely bypass the end-frame encoder without disconnecting the node, preventing ping-pong artifacts. |
| end_transition_frames | INT | 00–32 | DEPRECATED - keep at 0. Values > 0 blend padding latents toward the end frame in latent space, which produces static/frozen output because VAE latent interpolation is not linear. 0 = hard cut, identical to the original FLF node behavior. |
| end_lock_slots | INT | 11–16 | How many final latent slots to hard-lock to end_samples. Default 1 = only the very last slot (~last 4 video frames) is locked, so the end frame appears exactly at the last frame defined by 'length'. Increase only if a single locked slot is not enough for convergence. Set 16 for 1:1 parity with the original FLF node (locks min(T_end, total_latents)). |
| lock_start_slots | INT | 10–16 | How 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_log | BOOLEAN | false | When enabled, prints compact diagnostics about concat_latent_image/mask and motion/end-lock ranges. Useful to debug 'static clip' or segment discontinuities. |
| use_prev_samples | BOOLEAN | true | When 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. |
| end_overshoot_slots | INT | 00–8 | Extends the internal generation window by this many latent slots when the end lock is active (use_end_frame=True + end_samples connected). The end image is locked at the tail of the EXTENDED range, so the visible clip converges toward the end frame without hard-freezing on it. Use the trim_slots output to cut the overshoot frames after sampling. 0 = disabled, original behavior. 1 = +4 video frames (recommended). 2 = +8 video frames (looser convergence). NOTE: If you have KJNodes WAN attention optimizations (FETA / wrapped_attention) enabled, some versions may crash with an einops shape mismatch when overshoot > 0. Workaround: set end_overshoot_slots=0 or disable/update that KJNodes optimization. |
| prev_samplesopt | LATENT | — | |
| end_samplesopt | LATENT | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |
| trim_slots | INT | — |