ComfyUI Node

Wan FMLF (QQ)

Pin the middle frame — first/middle/last reference for Wan 2.2 I2V

By siraxe·Created 11 months ago·Updated 2 days ago· 72
Wan FMLF (QQ)
  • positive
  • negative
  • vae
  • start_image
  • middle_image
  • end_image
  • clip_vision_start_image
  • clip_vision_middle_image
  • clip_vision_end_image
  • positive_high_noise
  • positive_low_noise
  • negative
  • latent
width832
height480
length81
batch_size1
middle_frame_ratio0.50
high_noise_strength0.80
low_noise_strength0.20
motion_amplitude1.15

Standard Wan I2V gives you one anchor: the first frame. Everything after that is the model's imagination. WanFMLF gives you three anchors - first, middle, and last - so you can actually dictate what the video looks like halfway through. Want the subject to be a different pose at the exact midpoint? Feed a middle_image. Want to guarantee the ending frame? Feed an end_image. For the price of a reference image each, you get the closest thing to storyboarded video that Wan 2.2 offers.

The name comes from "First-Middle-Last Frames" (FMLF), and this node is a port/extension of wallen0322/ComfyUI-Wan22FMLF living inside siraxe/ComfyUI-WanVideoWrapper_QQ - the README calls it "a better way to add midframe control," bundled with an amplitude test, since v1.0.6.

How it works

Wan 2.2's architecture is a MoE that splits denoising into two stages: a high-noise expert that decides motion and composition, and a low-noise expert that refines detail. The FMLF trick is to condition each stage with a different strength on your middle frame - the high-noise pass locks in the trajectory (where things are moving), and the low-noise pass prevents detail flicker. That's why this node outputs two positive conditionings:

  • positive_high_noise - drives motion/trajectory (high_noise_strength, default 0.8).
  • positive_low_noise - drives detail stability (low_noise_strength, default 0.2).

The node encodes your start/middle/end images into the latent and conditioning, sizes everything to your width/height/length, and hands you the paired conditionings plus a latent for the sampler. It's explicitly designed for the LightX2V distilled workflow (8 steps: 4 high-noise + 4 low-noise) - that's the model the README targets, and the motion_amplitude parameter exists specifically to fix the slow-motion look that 4-step speed LoRAs produce (default 1.15). The clip_vision_start/middle/end_image inputs accept precomputed CLIP vision outputs if you're already computing them elsewhere, letting you skip redundant encoding.

Inputs and outputs that matter

  • positive / negative - your text conditioning.
  • vae - the Wan VAE (needed to build the latent).
  • start_image, middle_image, end_image - your three anchors. Middle is the star; leave it out and you've basically got a standard I2V.
  • middle_frame_ratio - where the middle frame sits in the timeline (default 0.5).
  • high_noise_strength / low_noise_strength - the dual-stage knobs.
  • motion_amplitude - motion boost for 4-step LoRA workflows.

Outputs: positive_high_noise, positive_low_noise, negative (CONDITIONING), and latent (LATENT) - wire the two positives into the high- and low-noise sampler stages respectively, and the latent into the sampler.

Installation

cd ComfyUI/custom_nodes
git clone https://github.com/siraxe/ComfyUI-WanVideoWrapper_QQ.git

Restart ComfyUI (or ComfyUI Manager → "WanVideoWrapper_QQ"). This node requires kijai's ComfyUI-WanVideoWrapper to be installed - it's a companion pack, and the README says so explicitly. No extra Python deps beyond that; the pack's requirements.txt is empty. After the v1.3.4 rename to ComfyUI-SA-Nodes-QQ, delete any old wanwrapper_qq folder.

Common issues

The classic failure is wiring it into a single-stage sampler: the whole point is the dual high/low-noise split, and if you feed only positive_high_noise into a normal sampler you lose half the conditioning. Look for a dual-stage sampler (the pack's WanVideoWrapper integration has one) and feed each expert its own positive. Second, high_noise_strength too high makes the middle frame a hard constraint and the motion stiff; too low and the middle frame is ignored. Start at the defaults (0.8/0.2) and treat them as the trajectory-vs-detail tradeoff they are. And remember the LightX2V framing - this node is tuned around 8-step distilled sampling; on the full 27B model the strengths will behave differently, so recalibrate rather than assuming.

CategoryComfyUI-Wan22FMLF/video

Inputs (17)

NameTypeDefaultDescription
positiveCONDITIONING
negativeCONDITIONING
vaeVAE
widthINT83216–16384
heightINT48016–16384
lengthINT811–16384
batch_sizeINT11–4096
start_imageoptIMAGE
middle_imageoptIMAGE
end_imageoptIMAGE
middle_frame_ratiooptFLOAT0.500–1
high_noise_strengthoptFLOAT0.800–1Middle frame constraint strength for high-noise stage (determines motion trajectory)
low_noise_strengthoptFLOAT0.200–1Middle frame constraint strength for low-noise stage (prevents detail flickering)
motion_amplitudeoptFLOAT1.151–2Motion amplitude enhancement (fixes 4-step LoRA slow-motion issues)
clip_vision_start_imageoptCLIP_VISION_OUTPUT
clip_vision_middle_imageoptCLIP_VISION_OUTPUT
clip_vision_end_imageoptCLIP_VISION_OUTPUT

Outputs (4)

NameTypeDescription
positive_high_noiseCONDITIONING
positive_low_noiseCONDITIONING
negativeCONDITIONING
latentLATENT