WAN 2.2 Image Guides (All-in-One)
The one-node WAN 2.2 keyframe stage you'll actually start with
- positive
- negative
- vae
- start_images
- ref_image
- control_video
- positive_high
- positive_low
- negative
- latent
If you just want to feed WAN 2.2 a handful of storyboard frames and get guided conditioning out the other side, this is the node to grab first. WAN22MultiImageI2VGuide is the pack's all-in-one: the guide picker, the frame timeline, and the conditioning/latent output all on a single canvas node. No manager-to-apply handoff, no wiring two nodes together just to see your first keyframed clip.
It comes from comfyui-helto-wan22, and it's basically the pack's other two nodes fused - the WAN22ImageGuideManager's shot-list UI and shared settings, plus the WAN22ApplyImageGuides conditioning machinery - collapsed into one. The display name is "WAN 2.2 Image Guides (All-in-One)," which is confusingly close to the Manager's name. Don't overthink it: the Manager outputs a reusable WAN22_IMAGE_GUIDES payload; this node outputs conditioning and a latent, ready to sample. The naming difference is the whole distinction.
How it works
Everything about the mechanism matches WAN22ApplyImageGuides: your guide images get spliced into a neutral-frame timeline, VAE-encoded once, and attached to the conditioning via WAN's native concat_latent_image / concat_mask / concat_mask_index. WAN I2V models expose dedicated image-conditioning channels, and this node speaks directly to them. The difference is where the settings live. On the Apply node, timing and strength settings travel inside the payload from a separate Manager. Here, the settings are plain inputs on the node itself - fps, timing_mode, resize_mode, duplicate_policy, pad_color, global_strength, start_images_strength, and structural_repulsion_boost - so you tune the whole stage in one place. Same knobs, different home.
The custom UI is the same storyboard interface: folder browser, thumbnails, per-guide frame position and strength, enable toggles, saved guide sets. Everything serializes into the hidden guides_json widget, so a saved workflow carries your shot list with it.
Inputs and outputs that matter
Required inputs: positive/negative conditioning (from the WAN text encoder), a WAN 2.2 vae, width/height, length (frame count; WAN latent length is ((length - 1) // 4) + 1), batch_size, and the hidden guides_json that the UI writes. The optional trio - start_images (a sequence inserted from frame 0), ref_image (encoded to reference_latents), and control_video (encoded into the first concat slot) - are the same across the pack.
Outputs: positive_high, positive_low, negative (conditioning), and latent. Wire positive_high into your high-noise sampler, positive_low into the low-noise sampler after the switch step, negative into both, and feed the empty latent to whichever sampler runs first. This is a stage node - it won't give you frames until a sampler and VAE decode come after it.
How to install
Same pack, same drill. No requirements.txt, no bundled models:
cd ComfyUI/custom_nodes
git clone https://github.com/helto4real/comfyui-helto-wan22
Restart ComfyUI (or install "comfyui-helto-wan22" via ComfyUI Manager). The WAN 2.2 I2V high/low models, WAN VAE, and umt5 text encoder still go in your models/ folders the normal way.
Where people get burned
- The classic duplicate-frame error. Default
duplicate_policyiserror, so two guides landing in the same 4-frame group will stop the run. Setkeep_first,keep_last, oroffset_nextonce you have overlapping shots. - It's easy to mistake this for a generator. No sampler inside - the output
latentand conditioning need real sampler nodes (or the pack'sWAN22GenerateAllInOne) to become frames. If you've wired it to nothing and see nothing, that's expected. - Guides reference files by path, so moving a source image after arranging your timeline breaks the run at encode time.
The split-node route (Manager → Apply) still wins when you'll reuse the same shot list across several workflows - the payload is the reusable artifact. But for a self-contained keyframed I2V stage, this all-in-one is the fastest path to a first result, and you can always refactor into the split later.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | Positive conditioning to augment with WAN 2.2 image guide metadata. | |
| negative | CONDITIONING | Negative conditioning to augment with matching WAN 2.2 image guide metadata. | |
| vae | VAE | WAN 2.2 VAE used to encode inserted guide frames. | |
| width | INT | 128032–16384 | — |
| height | INT | 70432–16384 | — |
| length | INT | 491–16384 | Output video frame count. WAN latent length is ((length - 1) // 4) + 1. |
| batch_size | INT | 11–4096 | — |
| fps | FLOAT | 24.001–240 | Frames per second used when timing_mode is seconds. |
| timing_mode | COMBO | frame | Interpret guide positions as frame indexes or seconds. |
| resize_mode | COMBO | contain | How guide images are resized before VAE encoding. contain/pad preserves aspect ratio with padding. |
| duplicate_policy | COMBO | error | How to handle guide images that resolve to the same frame. |
| pad_color | STRING | 0,0,0 | RGB padding color for contain/pad resize mode. Accepts r,g,b or #rrggbb. |
| global_strength | FLOAT | 1.000–1 | Multiplier applied to every guide strength and start image strength. |
| start_images_strength | FLOAT | 0.850–1 | Strength for the optional start image sequence before global_strength is applied. |
| structural_repulsion_boost | FLOAT | 1.001–2 | High-noise structural repulsion boost between guide anchors. 1.0 disables the extra transition guidance. |
| guides_json | STRING | {"version":1,"guides":[]} | Hidden serialized guide data used by the custom UI and saved in workflows. |
| start_imagesopt | IMAGE | Optional IMAGE batch inserted from frame 0. | |
| ref_imageopt | IMAGE | Optional WAN 2.2 reference image encoded as reference_latents. | |
| control_videoopt | IMAGE | Optional WAN 2.2 control video encoded into the first concat slot. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| positive_high | CONDITIONING | — |
| positive_low | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |