SCAIL-2 In-Video Character Replacement (WAN 2.1)
SCAIL-2 in-video character replacement on WAN 2.1.
How to install
- Setup differs for this server — follow the Installation part of the README below.
- Claude Code:
claude mcp add <name> -- <command>. - Claude Desktop / Cursor: add it under
mcpServersin the MCP config file.
npx degit artokun/comfyui-mcp/plugin/skills/wan-scail-replacement#main ~/.claude/skills/wan-scail-replacementFor one project only, change the path to .claude/skills/wan-scail-replacement.
This one runs on your machine and can reach your files. Read the README below before you connect it.
Not working?
- Check which app you pasted it into — the steps above name the right one.
- Some skills need the paid tier of Claude or ChatGPT.
Paste into Claude, ChatGPT or Cursor.
Show the full text101 lines
SCAIL-2 In-Video Character Replacement (WAN 2.1)
SCAIL-2 (zai-org, on WAN 2.1 14B) replaces the person in a driving video with a
character you supply as a reference image, end-to-end, with no pose maps, and
with multi-character support. It is the successor to WAN Animate / motion
transfer for the "swap the subject, keep the motion" job. The official ComfyUI
template is video_wan21_scail2_character_replacement_int8, built around
WanSCAILToVideo (+ SCAIL2ColoredMask) with a SAM3 mask driving where the
character goes.
This skill documents the non-obvious behaviours that cost a full multi-minute render to discover. It is not a from-scratch graph. Start from the official template and apply the guidance below.
The one rule that costs a re-render: reference framing controls SCALE
In replacement_mode: true, the reference image's FRAMING controls the output
character's SIZE as well as its appearance. The SAM3 mask controls where the
character is placed; the reference image controls how large.
Measured on a 720x1280 driving clip where the subject occupied ~30% of frame height (subject bbox 363 px):
| Reference framing | Person bbox in output | vs driving subject |
|---|---|---|
| Full-bleed portrait (person ~93% of frame) | 621 px | 1.71x oversized |
| Reframed (person ~34% of frame) | 364 px | 1.003x — correct |
After reframing, top/bottom registration matched the driving subject within 1 px (the character stands on the same ground plane at the same height). Pose transfer was correct in both cases. Only the scale was wrong, which makes it easy to misread as "the model works" until you A/B against the source.
Guidance: pad or reframe the reference before you render.
Pad/reframe the reference image onto a canvas at the working resolution so the person occupies roughly the same fraction of frame height as the subject in the driving video. A full-bleed portrait reference against a wide-shot driving clip renders the character oversized in proportion to the framing mismatch.
It is a trap because the template's on-canvas notes do not state it, and it does not show up in the popular Civitai motion-transfer workflows. Those run animation mode, where the reference legitimately fills the frame.
Tuning trade-off: distill LoRA strength / shift leaks driving-subject detail
Running the lightx2v distill LoRA at 0.8 with ModelSamplingSD3 shift 5 (the
settings the popular Civitai workflow uses) improves colour and detail versus
1.0 / shift 8. It also increases adherence to the driving video enough
that original-subject details bleed onto the replacement character. In one
run the original golfer's neon-yellow shoe appeared on a replacement character
who wears white shoes in the reference (same seed, same reference, only those two
params changed). If you see source details you didn't ask for, raise the LoRA
strength / shift back toward 1.0 / shift 8.
Don't "fix" colour with post-hoc compositing — it's a regression
The raw SCAIL-2 output shows a measurable colour error (background ~-5 per channel from the VAE round-trip; the character loses red ~2.4x faster than green, which reads as a slight green cast). It is tempting to composite the generated character back over the original plate through the SAM3 mask to "correct" it. Don't. It measures better but looks worse:
- The mask boundary produces an obvious halo.
- Layering the original plate's props (e.g. a golf club) over generated hands severs the grip relationship the model had solved coherently.
SCAIL-2 resolves colour, edges, grip and occlusion jointly; correcting any one of them in isolation breaks the others. Leave the raw output alone.
Models (reference set)
The template's int8 build was exercised with:
wan2.1_14B_SCAIL_2_int8_convrot, the SCAIL-2 modelwan2.1_SCAIL_2_DPO_lora_bf16, the DPO LoRAlightx2v_I2V_14B_480p_cfg_step_distill_rank64_bf16, the distill LoRA (see tuning note)Wan2_1_VAE_bf16umt5_xxl_fp8_e4m3fn_scaled, the text encoderclip_vision_hsam3.1_multiplex_fp16, the SAM3 mask model
VRAM: ~22.2 GB peak at 576x1024 / 81-frame chunks on a 24 GB card.
See also
wan-t2v-video,wan-flf-videofor other WAN 2.x video pipelinesdirectorfor multi-shot scene direction for video pipelines
Sources
- Official: none found.
- Empirical: sampler values, wiring, and prompt notes from working graphs in
packs/and observed renders; not a vendor prompting guide.
| 1 | |
| 2 | name wan-scail-replacement |
| 3 | description SCAIL-2 in-video character replacement on WAN 2.1. WanSCAILToVideo + SCAIL2ColoredMask + SAM3, the reference-image framing→scale rule, and the tuning/compositing pitfalls |
| 4 | globs |
| 5 | - "**/*.json" |
| 6 | |
| 7 | |
| 8 | # SCAIL-2 In-Video Character Replacement (WAN 2.1) |
| 9 | |
| 10 | SCAIL-2 (zai-org, on WAN 2.1 14B) replaces the person in a driving video with a |
| 11 | character you supply as a reference image, end-to-end, with no pose maps, and |
| 12 | with multi-character support. It is the successor to WAN Animate / motion |
| 13 | transfer for the "swap the subject, keep the motion" job. The official ComfyUI |
| 14 | template is `video_wan21_scail2_character_replacement_int8`, built around |
| 15 | `WanSCAILToVideo` (+ `SCAIL2ColoredMask`) with a SAM3 mask driving where the |
| 16 | character goes. |
| 17 | |
| 18 | This skill documents the non-obvious behaviours that cost a full multi-minute |
| 19 | render to discover. It is not a from-scratch graph. Start from the official |
| 20 | template and apply the guidance below. |
| 21 | |
| 22 | ## The one rule that costs a re-render: reference framing controls SCALE |
| 23 | |
| 24 | **In `replacement_mode: true`, the reference image's FRAMING controls the output |
| 25 | character's SIZE as well as its appearance.** The SAM3 mask controls where the |
| 26 | character is placed; the reference image controls how large. |
| 27 | |
| 28 | Measured on a 720x1280 driving clip where the subject occupied ~30% of frame |
| 29 | height (subject bbox 363 px): |
| 30 | |
| 31 | | Reference framing | Person bbox in output | vs driving subject | |
| 32 | |---|---|---| |
| 33 | | Full-bleed portrait (person ~93% of frame) | 621 px | **1.71x oversized** | |
| 34 | | Reframed (person ~34% of frame) | 364 px | **1.003x — correct** | |
| 35 | |
| 36 | After reframing, top/bottom registration matched the driving subject within 1 px |
| 37 | (the character stands on the same ground plane at the same height). Pose transfer |
| 38 | was correct in both cases. Only the scale was wrong, which makes it easy to |
| 39 | misread as "the model works" until you A/B against the source. |
| 40 | |
| 41 | Guidance: pad or reframe the reference before you render. |
| 42 | |
| 43 | > Pad/reframe the reference image onto a canvas at the working resolution so the |
| 44 | > person occupies roughly the same fraction of frame height as the subject in the |
| 45 | > driving video. A full-bleed portrait reference against a wide-shot driving clip |
| 46 | > renders the character oversized in proportion to the framing mismatch. |
| 47 | |
| 48 | It is a trap because the template's on-canvas notes do not state it, and it does |
| 49 | not show up in the popular Civitai motion-transfer workflows. Those run |
| 50 | animation mode, where the reference legitimately fills the frame. |
| 51 | |
| 52 | ## Tuning trade-off: distill LoRA strength / shift leaks driving-subject detail |
| 53 | |
| 54 | Running the `lightx2v` distill LoRA at `0.8` with `ModelSamplingSD3 shift 5` (the |
| 55 | settings the popular Civitai workflow uses) improves colour and detail versus |
| 56 | `1.0` / `shift 8`. It also increases adherence to the driving video enough |
| 57 | that original-subject details bleed onto the replacement character. In one |
| 58 | run the original golfer's neon-yellow shoe appeared on a replacement character |
| 59 | who wears white shoes in the reference (same seed, same reference, only those two |
| 60 | params changed). If you see source details you didn't ask for, raise the LoRA |
| 61 | strength / shift back toward `1.0` / `shift 8`. |
| 62 | |
| 63 | ## Don't "fix" colour with post-hoc compositing — it's a regression |
| 64 | |
| 65 | The raw SCAIL-2 output shows a measurable colour error (background ~-5 per channel |
| 66 | from the VAE round-trip; the character loses red ~2.4x faster than green, which |
| 67 | reads as a slight green cast). It is tempting to composite the generated character |
| 68 | back over the original plate through the SAM3 mask to "correct" it. Don't. It |
| 69 | measures better but looks worse: |
| 70 | |
| 71 | The mask boundary produces an obvious halo. |
| 72 | Layering the original plate's props (e.g. a golf club) over generated hands |
| 73 | severs the grip relationship the model had solved coherently. |
| 74 | |
| 75 | SCAIL-2 resolves colour, edges, grip and occlusion jointly; correcting any one |
| 76 | of them in isolation breaks the others. Leave the raw output alone. |
| 77 | |
| 78 | ## Models (reference set) |
| 79 | |
| 80 | The template's int8 build was exercised with: |
| 81 | |
| 82 | `wan2.1_14B_SCAIL_2_int8_convrot`, the SCAIL-2 model |
| 83 | `wan2.1_SCAIL_2_DPO_lora_bf16`, the DPO LoRA |
| 84 | `lightx2v_I2V_14B_480p_cfg_step_distill_rank64_bf16`, the distill LoRA (see tuning note) |
| 85 | `Wan2_1_VAE_bf16` |
| 86 | `umt5_xxl_fp8_e4m3fn_scaled`, the text encoder |
| 87 | `clip_vision_h` |
| 88 | `sam3.1_multiplex_fp16`, the SAM3 mask model |
| 89 | |
| 90 | VRAM: ~22.2 GB peak at 576x1024 / 81-frame chunks on a 24 GB card. |
| 91 | |
| 92 | ## See also |
| 93 | |
| 94 | `wan-t2v-video`, `wan-flf-video` for other WAN 2.x video pipelines |
| 95 | `director` for multi-shot scene direction for video pipelines |
| 96 | |
| 97 | ## Sources |
| 98 | |
| 99 | **Official:** none found. |
| 100 | **Empirical:** sampler values, wiring, and prompt notes from working graphs in `packs/` and observed renders; not a vendor prompting guide. |
| 101 |