ComfyUI-WanAnimatePlus changes the canvas, not just the prompt
Seamless video connection and multi-reference image support for Wan Animate,Scail-2 and Wan Animate2
At a glance
- What is it?
- A ComfyUI custom node set that injects up to five reference images and the last 21 frames of a previous segment into the front of the Wan Animate canvas, plus Bernini, SCAIL-2 and Animate2 conditioning, with a hard rule against mixing it with WanVideoWrapper nodes.
- Who is it for?
- ComfyUI-WanAnimatePlus fits a ComfyUI user whose real problem is continuity: holding an identity across shots, extending a clip past its end, or driving a new shot from a reference clip, since prefix_frames and transition_video solve that at the pixel level rather than at the prompt level. Verify three things before rebuilding a workflow around it.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 28 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 12, 2026, and from our analysis. They are not legal advice.
Editorial analysis
Mixing WanAnimatePlus nodes with WanVideoWrapper degrades the output
The first rule is a prohibition, and it is repeated in both the installation note and the quick start. To use `prefix_frames`, `transition_video`, `Bernini` or `SCAIL_2 Embeds`, you have to replace the full workflow chain with WanAnimatePlus nodes. Mixing WanAnimatePlus nodes with original WanVideoWrapper nodes in the same workflow results in degraded output, which means there is no partial adoption path. The chain to replace is enumerated: `ModelLoader`, `VAELoader`, `ContextOptions`, `AnimateEmbeds`, `Sampler`, `Decode` and the supporting nodes around them. For SCAIL-2 and Wan Animate workflows the recommended entry points are `WanAnimatePlus Easy Sampler` or `WanAnimatePlus Easy SamplerSettings`, chosen because they keep the full sampler functionality while exposing only the common controls. The reason the rule exists is structural rather than stylistic: these nodes rewrite frame offsets and canvas layout, so a control signal produced by a stock node no longer lines up with the canvas the Plus node has built.
prefix_frames widens the pixel canvas instead of replacing a reference
Most conditioning wrappers swap one reference image for another. This one changes the geometry. `prefix_frames` passes 1 to 5 additional reference images for multi-reference guided generation, and internally it expands the canvas pixel space, encoding the reference images across the front frames. Two consequences follow from that design. Offsets are coordinated automatically for the control signals, which the node lists as pose, face, bg and mask, because adding reference frames at the front shifts where every later frame index lands. And the references are resized to the target resolution first, so images of different shapes can be mixed without the caller pre-processing them. Anything past five images is dropped rather than rejected, which is a quiet truncation: a six-image request does not error, it loses the sixth. This group and `transition_video` are documented as safe to combine, with the canvas layout and frame offsets coordinated without conflicts.
transition_video borrows 21 frames and pads the control signals backwards
`transition_video` exists to hide the seam when a clip is generated in segments. It takes the last 21 frames of the previous video segment and writes those pixel frames directly into the front of the generation canvas, so the model continues from real pixels instead of from a description of what came before. The control signals cannot simply be cut at the same point, and that is what the padding rule handles: those 21 frames get sampled and reversed padding for the control signal offsets, meaning pose and mask information is extended in the mirrored direction the sampler expects. The 21-frame figure is fixed in the description, and it is worth treating as a contract rather than a preference, because the padding scheme is built around that window. When both `prefix_frames` and `transition_video` are connected, the node coordinates the two automatically, so the front of the canvas holds carried-over frames and reference images without you computing an offset by hand.
The SCAIL-2 embedder has two prefix modes, and one of them is legacy
`WanAnimatePlus SCAIL_2 Embeds` prepares reference image, driving pose, colored pose mask, reference mask, optional prefix and transition hard-freeze latents, and prefix-aligned colored masks. It encodes `ref_image`, `pose_images`, `pose_image_mask`, `prefix_frames`, `prefix_mask`, `bg_image` and `reference_image_mask`, aligns SCAIL-2 inputs to 32-pixel multiples before VAE encoding, and supports both animation and replacement modes. The part that catches people out is the prefix default. By default `prefix_frames` are encoded as full-resolution reference latents and do not expand the output canvas; disabling `single_frame_prefix_encoding` restores the legacy layout of 37 front pixel frames. So the same input name means two different canvas shapes depending on that switch, and in single-frame prefix mode `prefix_mask` follows the same reference-mask path as `reference_image_mask`. Context-window sampling is supported, with non-first windows able to see prepended prefix or transition context without fusing those prepended predictions.
Animate2 reuses the SCAIL-2 sampler because no Animate2 sampler exists
`WanAnimatePlus Animate2 Embeds` targets official ComfyUI Animate2 models by mapping Plus-style inputs onto official conditioning: `ref_image`, `prefix_frames` and `bg_image` land on `concat_latent_image`, `concat_mask` and `pose_video_latent`. Sampling uses the same `WanAnimatePlus SCAIL_2 Flow Sampler` as SCAIL-2 Flow, and the README states plainly that there is no separate Animate2 sampler. The prefix semantics are narrower here than elsewhere: `prefix_frames` are extra frozen identity latents, capped at 5, and they are trimmed after sampling so they never reach the output. `bg_image` fills the unknown canvas instead of mid-grey and stays generated rather than being treated as fixed background. Internal looping uses a 5-frame concat and mask handoff whenever `frame_window_size` is smaller than `num_frames`. One gap is called out: the nodes do not wrap the official `WanAnimate2Cache` or `PoseBranchCache`, and those are used directly when caching is needed.
Bernini infers its task from whichever inputs you connect
The Bernini support is a separate feature group that generates condition latents from source video, reference video and reference images through VAE encoding, and there is no task selector. The mode is auto-detected from connected inputs, and four are supported: v2v, rv2v, r2v and t2v. That design makes the wiring the error surface, because a missing input does not produce a message about an unsupported task, it changes which task you are running. Two details matter for output shape. Reference images are kept at their native aspect ratio rather than being squashed to the canvas, which keeps them usable as identity references, and the latents are compatible with context windows, so long sequences can be sampled in slices. The listed use cases cover multi-shot sequences, continuation and extension of existing clips, motion transfer with multi-reference control, editing a source video against reference images, and straight reference-to-video generation.
Install is a clone into custom_nodes, and the dependency files disagree
Installation is two commands and a restart, with no package index step:
cd ComfyUI/custom_nodes
git clone https://github.com/wuwukaka/ComfyUI-WanAnimatePlus.gitAfter restarting ComfyUI the nodes appear under the `WanAnimatePlus` category. The dependency metadata is where the friction sits. requirements.txt asks for ftfy, accelerate>=1.2.1, einops, diffusers>=0.33.0, peft>=0.17.0, sentencepiece>=0.2.0, protobuf, pyloudnorm, gguf>=0.17.1, opencv-python and scipy, while pyproject.toml declares a shorter list of accelerate >= 1.2.1, diffusers >= 0.33.0, peft >= 0.17.0, ftfy, gguf >= 0.17.1 and pyloudnorm, leaving einops, sentencepiece, protobuf, opencv-python and scipy out. Neither file declares torch. Two more packaging details are worth noting: the pyproject Repository URL points at the upstream kijai wrapper rather than at this repository, and the Comfy Registry entry carries PublisherId wuwukasi with an empty Icon field.
The tree covers far more model families than Wan Animate
The directory listing is much broader than the five feature groups the documentation covers. Alongside the Animate and SCAIL-2 code, which sits in nodes.py, nodes_animate2.py, scail2_flow.py, animate2_flow.py and scail2_loop_inputs.py, there are directories named for other families: ATI, FlashVSR, HuMo, LongCat, LongVie2, MTV, Ovi, WanMove, echoshot, lynx, mocha, multitalk, qwen, recammaster, s2v, skyreels, steadydancer, taehv, uni3c, unianimate, fantasyportrait, fantasytalking and freeinit. Three files suggest the quantization and performance work is in-tree rather than delegated: fp8_optimization.py, comfy_quant_linear.py and custom_linear.py, next to a gguf directory. There is also a nodes_deprecated.py, so part of the public surface is explicitly retired. None of that is documented in the walkthrough, and the walkthrough is itself cut off mid-sentence in the SCAIL-2 Flow chain, so the remaining official-chain guidance has to come from the example_workflows directory and the docs directory.
Editorial conclusion
ComfyUI-WanAnimatePlus fits a ComfyUI user whose real problem is continuity: holding an identity across shots, extending a clip past its end, or driving a new shot from a reference clip, since prefix_frames and transition_video solve that at the pixel level rather than at the prompt level. Verify three things before rebuilding a workflow around it. First, the whole chain has to become WanAnimatePlus nodes, because partial swaps are documented to degrade the output. Second, the SCAIL-2 embedder changed its default prefix behaviour, so a workflow carried over from the 37 front pixel-frame layout needs single_frame_prefix_encoding reconsidered. Third, the two dependency files disagree, with einops, sentencepiece, protobuf, opencv-python and scipy present only in requirements.txt. Anyone expecting a small add-on should note that the repository also carries nodes for many unrelated model families and a deprecated node module.
Frequently asked questions
How do I install ComfyUI-WanAnimatePlus into ComfyUI?
Place the repository inside ComfyUI's custom_nodes directory, running cd ComfyUI/custom_nodes and then git clone https://github.com/wuwukaka/ComfyUI-WanAnimatePlus.git, and restart ComfyUI. The nodes then appear under the WanAnimatePlus category.
Can I mix ComfyUI-WanAnimatePlus nodes with WanVideoWrapper nodes?
No. prefix_frames, transition_video, Bernini and SCAIL_2 Embeds each require the full chain replaced with WanAnimatePlus counterparts, including ModelLoader, VAELoader, ContextOptions, AnimateEmbeds, Sampler and Decode. Mixing them with original WanVideoWrapper nodes is documented to produce degraded output.
What is the difference between prefix_frames and transition_video in ComfyUI-WanAnimatePlus?
prefix_frames takes 1 to 5 extra reference images, expands the canvas pixel space and encodes them across the front frames. transition_video takes the last 21 frames of the previous segment, writes them into the front of the canvas and applies sampled and reversed padding for control signal offsets. Used together, the layout and frame offsets are coordinated automatically.
Does ComfyUI-WanAnimatePlus ship a separate sampler for Animate2 models?
No. Animate2 Embeds is sampled with the same WanAnimatePlus SCAIL_2 Flow Sampler used by SCAIL-2 Flow, and there is no separate Animate2 sampler. The nodes do not wrap the official WanAnimate2Cache or PoseBranchCache, so those are used directly when caching is needed.
Which Python packages does ComfyUI-WanAnimatePlus depend on?
requirements.txt lists ftfy, accelerate>=1.2.1, einops, diffusers>=0.33.0, peft>=0.17.0, sentencepiece>=0.2.0, protobuf, pyloudnorm, gguf>=0.17.1, opencv-python and scipy. pyproject.toml declares a shorter set and leaves einops, sentencepiece, protobuf, opencv-python and scipy out, and neither file declares torch.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/wuwukaka-comfyui-wananimateplus)