XB_WanFunControlToVideo
One node for control-video conditioning
- positive
- negative
- vae
- clip_vision_output
- start_image
- control_video
- positive
- negative
- latent
Wan 2.2 Fun Control is Alibaba's official control model - you feed it a driving video (pose, depth, whatever signal you preprocessed) and it makes your generation follow that motion. The problem is that the stock ComfyUI graph for it is a wall of latent-concat and conditioning plumbing that's easy to get subtly wrong. XB_WanFunControlToVideo is the XB_ToolBox pack's one-node wrapper for that plumbing: it takes your start image plus a control_video, VAE-encodes both, and builds the doubled-channel concat_latent_image the Fun Control model expects - then hands you clean positive, negative and latent outputs.
The display name is the raw class name (XB_WanFunControlToVideo), no fancy label - this is one of the pack's more "power user, here's a function" nodes rather than its hand-holding front door.
How it works
The Fun Control model wants a control signal interleaved into the latent as a second channel stack. The node builds a concat_latent with twice the latent channels (a Wan21().process_out normalized zero tensor repeated across 2× channels), then:
start_image→ VAE-encoded and written into the second half of the channel stack (the actual image content to animate).control_video→ upscaled to your resolution, VAE-encoded, and written into the first half (the control signal driving the motion).
Both conditioning paths (positive and negative) get stamped with the same concat latent - and if you pass a clip_vision_output, it's attached to both sides too. Outputs are the three sockets a sampler wants: positive, negative, latent.
Inputs that matter
width/height default to 832×480 (landscape - Fun Control demos are usually landscape), length 81, vae_tile_size 64. The two inputs that do the real work are start_image (what you're animating) and control_video (how it moves). Supply a clip_vision_output from a CLIP Vision encode of your subject for better identity retention. scale_method/crop_mode fit the control video to your target resolution - worth checking that your control frames and target share an aspect ratio, because an aggressive center crop can shift the pose you spent time preprocessing.
Install & context
Same as every node here: ComfyUI Manager → XB_ToolBox, or:
cd ComfyUI/custom_nodes
git clone https://github.com/wjluoxiao/XB_ToolBox.git
restart. The pack's declared pip deps are opencv-python and easyocr; no weights ship - you need a Wan 2.2 Fun Control checkpoint (Wan2.2-Fun-Control-14B) plus the usual VAE/CLIP/T5, and the control video itself usually comes from a pose/depth preprocessing pass elsewhere in your graph.
Two honest caveats. First, this node only does the conditioning - the sampling, control strength and masking live in the rest of your graph, so it's one component of a Fun Control workflow, not the whole thing. Second, Fun Control is a 14B model and it's slow; pair it with a distilled/speed-LoRA regime (CFG 1.0, a few steps) or you'll be waiting a long time per clip.
Inputs (13)
| 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 | — |
| vae_tile_size | INT | 6464–3840 | — |
| clip_vision_outputopt | CLIP_VISION_OUTPUT | — | |
| start_imageopt | IMAGE | — | |
| control_videoopt | IMAGE | — | |
| scale_methodopt | COMBO | lanczos | 5 options: lanczos, bilinear, bicubic, nearest-exact, area |
| crop_modeopt | COMBO | center | 2 options: center, disabled |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |