Character animation in 2025 did not converge on one model, it split into five families with different failure modes. This episode stops choosing: one mirror, one ComfyUI graph, five technique groups you can bypass or enable individually, so you can run the same input through all of them and pick the result that survives.
Evidence note: this episode ships no workflow JSON. The graph lives inside the deployed image; every parameter below is a value the author sets on screen or states in the video.
When this is useful
- You have a driving video and one reference image, and you do not yet know which animation family suits the shot.
- You want a same-input comparison across five techniques instead of five separate installs.
- You need very long output, and you want the graphs that support it rather than the ones that cap at a batch.
What is in the bundle
| Technique | Type | Inputs | Resolution constraint |
|---|---|---|---|
| Wan Animate 2.2 | official Wan animate model | video + character reference (+ optional face reference) | free |
| SCAIL | skeleton-guided reference animation | video + reference image | locked to 512x896 or 896x512 |
| SteadyDancer (STD) | image-to-video | reference image + video | free |
| OneToAll | reference-to-video | reference image + video | free |
| VACE Phantom merge | merged VACE + Phantom | reference image + skeleton video | tolerant of wrong aspect ratio |
What differs between the five
- Wan Animate 2.2 keeps the source background. By default it does reference editing: the generated clip retains the original video's background. To do a global reference instead, disconnect the background image and its mask. The face reference is optional; you can drop it and run global reference plus pose guidance only. The author notes this KJ-based graph should support unlimited length.
- SCAIL hard-locks the canvas. Only 512x896 and 896x512 are accepted; anything else throws. It compensates with a context node that permits unusually long generations.
- SteadyDancer is the consistency play. Because it is image-to-video at heart, it holds the reference identity very well. Same two inputs as the others, and it also carries a context node for long output.
- OneToAll needs its length understood. 81 frames is the batch length, not the total; the total comes from the load cap above it. Match the input video's frame rate to the output frame rate or the result drifts. The author wired a simple for-loop so total frames auto-derive the number of passes. His honest verdict: he does not generally trust what OneToAll reproduces.
- VACE Phantom merge is the forgiving one. In the recording the reference was fed in with a clearly wrong aspect ratio and the output still held up, which is the point of the merge: strong reference adherence.
Step by step
- Open the mirror link and deploy an instance. Pull the start command from the instance notes panel, copy it.
- The author rents a 5090: cheaper overnight, and faster for this workload. New accounts registered through the link get a small platform credit.
- Wait for JupyterLab, open any terminal, paste the start command. When the address appears, click through to ComfyUI.
- In ComfyUI, open the left workflow panel and load the workflow. There is only one, but it aggregates all five techniques.
- Enable or bypass the technique groups you want. Load the driving video and the reference image according to the table above.
- Set width, height and length. For SCAIL, use one of the two allowed sizes. For OneToAll, set total length at the load cap, not at the 81-frame batch.
- On the VACE merge group, set width, height and length at the Load Image node and lock the frame rate. Note that this group needs a Block Swap node; the original node was disabled in ComfyUI, so the author reproduced it verbatim in VS Code.
- Run each group on the same inputs and compare before committing to an upscale pass.
Parameter basis
No JSON exists for this episode, so this is a transcription of on-screen values:
| Item | Value | Note |
|---|---|---|
| SCAIL canvas | 512x896 / 896x512 | hard constraint, other sizes error |
| OneToAll batch length | 81 frames | batch, not total |
| GPU | 5090 | author's choice, night discount |
| Techniques per graph | 5 | bypass individually |
| VACE merge aspect | tolerant | demonstrated with wrong aspect ratio |
Limits
- No downloadable graph. The workflow is inside the image; there is no JSON in the episode folder.
- Five techniques in one graph is a maintenance cost. Bypass discipline is manual, and a wrong bypass silently changes which model runs.
- OneToAll is included but not endorsed. The author says the reference quality is generally not to his taste.
- Five-way comparison is visual. The ranking comes from the author watching outputs, not from a metric.
- The mirrored Block Swap node is a workaround. ComfyUI disabled the original, so a hand-rebuilt replacement is shipped; that is not an upstream-supported path.
Episode resources
- Mirror (with referral code): https://www.compshare.cn/images/sBvBlIykg7ks?referral_code=A7fTQUYY9lCDFJwA6MMvoq
- RunningHub workflow: none for this episode
- YouTube: https://www.youtube.com/watch?v=T-YVsObyH2A
- Bilibili: https://www.bilibili.com/video/BV1uRfbBLEqG
Top comments (0)