WanVideo Add Dual Control Embeds
Combine dense and sparse control on Wan
- embeds
- vae
- dense
- sparse
- prev_images
- image_embeds
The "dual" is the whole story here: this node takes two control signals - a dense one and a sparse one - and folds both into your Wan embeds at once. Dense control is the per-pixel-ish kind: a full depth video, a dense pose sequence, edges on every frame. Sparse control is looser: a handful of keyframes, a partial guide, a signal that doesn't cover every frame. Combining them lets you pin structure hard where you have it and stay loose where you don't.
Unlike its single-control sibling, this node encodes its control images itself, which is why it needs a VAE handed to it directly. It also carries a strength knob and a first-frame noise control, so it's the more configurable of the two control-embeds nodes.
How it works
You feed it your Wan embeds, a Wan VAE, and up to two control image sequences - dense and sparse. It VAE-encodes those into control latents, mixes them into the embeds under a strength and a timing window, and outputs modified embeds. The prev_images input lets you carry frames from a previous chunk for continuation, and first_frame_noise_level controls how much the opening frame is perturbed - relevant when you're anchoring on a known first frame and don't want it frozen stiff.
The inputs that matter
Required:
embeds(WANVIDIMAGE_EMBEDS) - the embeds being modified.vae(WANVAE) - needed because this node encodes the control images itself.strength(default 1.0, range 0–10) - overall control intensity. Your main dial; the wide range means you can genuinely overdrive it.start_percent(0) /end_percent(1) - the sampling window where control applies.first_frame_noise_level(default ~0.926) - how much noise on the first frame. Leave it near default unless your first-frame anchoring looks wrong.
Optional, and this is where the actual control goes in:
dense(IMAGE) - the dense control sequence.sparse(IMAGE) - the sparse control sequence.prev_images(IMAGE) - previous frames, for chunked continuation.
Output: image_embeds (WANVIDIMAGE_EMBEDS) for the sampler.
How to install it
Part of Kijai's WanVideoWrapper. ComfyUI Manager: search ComfyUI-WanVideoWrapper, install, restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/kijai/ComfyUI-WanVideoWrapper
pip install -r ComfyUI-WanVideoWrapper/requirements.txt
then restart. You need a Wan control model that understands dual control plus the Wan VAE this node consumes; the control preprocessors (depth, pose) that produce your dense/sparse images live upstream. As with all of Wan, real VRAM is assumed.
Common issues & troubleshooting
One control does nothing. You can run with just dense or just sparse - but if you meant to use both and one is ignored, check it's actually connected and non-empty. The node happily runs with either.
Over-controlled, plasticky output. With a 0–10 strength range it's easy to crank too hard. Speed LoRAs already push Wan toward "flux level plastic skin" per the KB's PSA thread; heavy control on top compounds it. Drop strength back toward 1 and shorten the end_percent window.
Forgot the VAE. This node encodes its own control images, so the vae input is required, not decorative. If you're used to the single-control node (which takes pre-encoded latents), the VAE requirement here trips people up.
First frame looks frozen or wrong. That's first_frame_noise_level. The odd default (~0.926) is deliberate; only touch it if your anchored first frame is misbehaving.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| embeds | WANVIDIMAGE_EMBEDS | — | |
| vae | WANVAE | VAE model | |
| strength | FLOAT | 1.000–10 | Strength of the reference embedding |
| start_percent | FLOAT | 0.000–1 | Start percentage of the embedding application |
| end_percent | FLOAT | 1.000–1 | End percentage of the embedding application |
| first_frame_noise_level | FLOAT | 0.92590–1 | Noise level for the first frame when using previous frames |
| denseopt | IMAGE | Dense control signal (depth) video input | |
| sparseopt | IMAGE | Sparse control signal (tracks) video input | |
| prev_imagesopt | IMAGE | Previous frames for temporal consistency, default is 8 frames |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image_embeds | WANVIDIMAGE_EMBEDS | — |