Wan Camera Multi-Frame Reference
The Wan camera trick that actually handles big rotations
- positive
- negative
- vae
- camera_embedding
- start_image
- middle_image
- end_image
- positive_high
- positive_low
- negative
- latent
Every Wan camera node hits the same wall: rotate past roughly 45 degrees and the model starts inventing whatever it thinks is behind the subject - usually wrong. Your source image only shows the front of the scene, and a big yaw is a demand for content that isn't there. The standard fix in film is storyboards; the Wan 2.2 fix is reference frames at the start, middle, and end of the shot. This node is the thing that stitches all three together and stamps your camera path on top, so the model has ground truth for the whole journey, not just the first frame.
It's the most ambitious node in thepororo's Wan Camera Advanced pack - and the one with a real dependency, so read the install section before you hit the wall.
How it works
The pack doesn't reimplement multi-frame conditioning from scratch. It calls into wallen0322's ComfyUI-Wan22FMLF node - the community's First/Middle/Last-Frame conditioning for Wan 2.2 - importing its WanMultiFrameRefToVideo class at runtime and driving it directly. Your three images get VAEs-encoded and passed with reference positions 0, middle_frame, length-1, and the node's high/low strength settings map onto Wan 2.2's two-pass architecture: the high-noise pass handles motion and composition, the low-noise pass refines detail, and they accept different reference strengths for exactly that reason.
Then the clever part: after getting the multi-frame conditioning back, the node injects your camera_embedding into all three conditioning streams. So you get one clean output bundle that carries both the reference-image constraints and the camera path, ready for the high/low-noise sampler pair.
The inputs that matter
start_image,middle_image,end_image- your storyboard. The middle and end frames should be perspective-consistent with the start at your chosen rotation, i.e. what the camera would actually see there. This is the part people skip, and it's the whole point.camera_embedding- fromWanCameraEmbeddingAdvanced, same pack.middle_frame- which frame the middle reference lands on. Default 40 for an 81-frame clip, roughly the halfway point. Must be a multiple of 4 and between 4 andlength - 5, or the node throws.ref_strength_high/ref_strength_low- how hard the middle reference binds to the high- and low-noise passes. Defaults 0.75/0.30.end_strength_high/end_strength_low- same idea for the end frame, defaults 0.85/0.70. The end reference is usually allowed to bind harder since it's the destination.positive,negative,vae,width,height,length- standard fare.lengthis again 1 plus a multiple of 4.
Outputs are positive_high, positive_low, negative, and latent. In a native Wan 2.2 workflow, positive_high feeds the high-noise model's sampler and positive_low the low-noise one - that split is the two-pass architecture working as intended.
Install - read this, it's a trap
Two packs, in a specific order:
cd ComfyUI/custom_nodes
# the dependency must land in a folder literally named "wan22fmlf"
git clone https://github.com/wallen0322/ComfyUI-Wan22FMLF.git wan22fmlf
git clone https://github.com/thepororo/ComfyUI-WanCameraAdvanced.git
Restart ComfyUI. The folder name is not optional: the pack loads wan22fmlf/wan_multi_frame.py by exact path, and if you cloned the dependency with its default folder name you'll get a "Install the wan22fmlf custom node first" error even though it's right there in custom_nodes. If you already installed it via ComfyUI Manager under the wrong name, just rename the folder - nothing inside cares.
Troubleshooting
Beyond the folder trap, the failures here are the usual Wan suspects: length not being 1 + a multiple of 4, middle_frame not a multiple of 4, and mismatched aspect ratios between your three reference images and width/height. The subtle one is strength balance - if the middle frame overpowers the shot you get a stutter where the camera hits a "pinned" frame mid-move; drop ref_strength_high a notch and it becomes a suggestion instead of a command. Start with the author's defaults and only touch them when you see a specific artifact.
One honest caveat: this whole approach is Wan 2.2-specific, because it leans on the two-pass high/low-noise structure. That's fine - 2.2 is the last open Wan base anyway, and it's still what most local video runs on.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| vae | VAE | — | |
| camera_embedding | WAN_CAMERA_EMBEDDING | — | |
| start_image | IMAGE | — | |
| middle_image | IMAGE | — | |
| end_image | IMAGE | — | |
| width | INT | 83216–16384 | — |
| height | INT | 48016–16384 | — |
| length | INT | 815–16384 | — |
| middle_frame | INT | 404–9996 | — |
| ref_strength_high | FLOAT | 0.750–1 | — |
| ref_strength_low | FLOAT | 0.300–1 | — |
| end_strength_high | FLOAT | 0.850–1 | — |
| end_strength_low | FLOAT | 0.700–1 | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| positive_high | CONDITIONING | — |
| positive_low | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |