Smart Wan First-Middle-Last Frame to Video (High Noise End)
More control over WAN's first-middle-last frame conditioning
- positive
- negative
- vae
- start_image
- middle_image
- end_image
- clip_vision_start_image
- clip_vision_middle_image
- clip_vision_end_image
- positive_high
- positive_low
- negative
- latent
ComfyUI already ships a "Wan First-Middle-Last Frame to Video" node - it's the one that lets you steer a clip with three keyframes instead of just a start and end. Smart Wan First-Middle-Last Frame to Video (High Noise End) is this pack's standalone copy with one meaningful addition: a separate strength knob for how the end frame grips the high-noise expert.
If you've used the core node, everything here is familiar. You feed it a start_image, a middle_image, and an end_image, and it builds the conditioning: keyframes pasted onto a gray canvas, VAE-encoded, masked per-expert, and injected into your positive conditioning. middle_frame_ratio (0–1, default 0.5) decides where the middle keyframe lands in the clip. The node spits out four outputs - positive_high, positive_low, negative, latent - which is the signature of WAN 2.2's two-expert MoE workflow: the high-noise expert establishes coarse structure first, then the low-noise expert refines it, and each gets its own conditioning path.
The reason this variant exists is a quirk people hit on the core node: when the end frame is anchored at full strength for the high-noise step, the tail of the clip can come out with a noise burst or a weird hard stop. The stock node gives you one end strength shared by both experts. Here you get high_noise_end_strength and low_noise_end_strength independently, plus high_noise_mid_strength and low_noise_mid_strength for the middle frame. The play: drop high_noise_end_strength toward 0.6–0.8 so the coarse-structure expert isn't forced to slam into the end frame, while keeping low_noise_end_strength at 1.0 so the refiner still lands the shot on target. When a strength is below 1, the node doesn't just weaken the mask - it also blends that keyframe toward neutral gray in the concat image, because the model still sees end-frame pixels otherwise.
Defaults lean sensible for this: low_noise_mid_strength starts at 0.2 (the refiner mostly ignores the middle frame so it doesn't stamp a still on the video), low_noise_start_strength at 1.0. The mode selector - NORMAL or SINGLE_PERSON - changes how the low-noise image canvas is built, a small concession to character work where you want the refiner to respect the subject more.
The other knob worth knowing is structural_repulsion_boost (1.0–2.0). It amplifies motion between keyframes by comparing the actual pixels of adjacent keyframes, building a spatial gradient, and relaxing the mask where the images differ most - a way to add movement without touching any strength sliders. Default 1.0 is off.
The three optional clip_vision_*_image slots are CLIP_VISION_OUTPUT ports; the node merges their token sequences and injects the result into the conditioning. They're the same shape of input the core FML node takes, so existing workflows port across.
Install through ComfyUI Manager (search "Smart Helper Nodes"), or clone:
cd ComfyUI/custom_nodes
git clone https://github.com/slvslvslv/ComfyUI-SmartHelperNodes
Restart ComfyUI afterward. Nothing heavy to download - requirements.txt is empty, no models are fetched, and it works with the WAN 2.2 checkpoint setup you already have.
Inputs (21)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| vae | VAE | — | |
| width | INT | 83216–8192 | — |
| height | INT | 48016–8192 | — |
| length | INT | 811–8192 | — |
| batch_size | INT | 11–4096 | — |
| modeopt | COMBO | NORMAL | 2 options: NORMAL, SINGLE_PERSON |
| start_imageopt | IMAGE | — | |
| middle_imageopt | IMAGE | — | |
| end_imageopt | IMAGE | — | |
| middle_frame_ratioopt | FLOAT | 0.500–1 | — |
| high_noise_mid_strengthopt | FLOAT | 0.800–1 | — |
| high_noise_end_strengthopt | FLOAT | 1.000–1 | — |
| low_noise_start_strengthopt | FLOAT | 1.000–1 | — |
| low_noise_mid_strengthopt | FLOAT | 0.200–1 | — |
| low_noise_end_strengthopt | FLOAT | 1.000–1 | — |
| structural_repulsion_boostopt | FLOAT | 1.001–2 | — |
| clip_vision_start_imageopt | CLIP_VISION_OUTPUT | — | |
| clip_vision_middle_imageopt | CLIP_VISION_OUTPUT | — | |
| clip_vision_end_imageopt | CLIP_VISION_OUTPUT | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| positive_high | CONDITIONING | — |
| positive_low | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |