WAN 2.2 AI Video Clone Pipeline (Chunked)
Takes Kevin's video in, splits it into ~30s chunks, runs each through the AI pipeline, stitches them back together. Out the other side: Kev's Assistant talking in Kevin's chair with Kev's Assistant's voice.
Pipeline
Kevin's Video
│
▼
┌─────────────────────┐
│ ffmpeg split (~5s) │
└────────┬────────────┘
│
┌────▼────┐
│ chunk_0 │ chunk_1 chunk_2 ...
└────┬────┘
│ For each chunk:
├─ Extract audio (ffmpeg local)
├─ Voice clone → Kev's Assistant (ChatterboxHD / fal.ai)
├─ Merge cloned audio back (ffmpeg local)
├─ Upload merged chunk to fal.ai
├─ WAN 2.2 animate/replace (Kev's Assistant face + chunk)
└─ Download output chunk
│
┌────▼────────────────┐
│ ffmpeg stitch all │
└────────┬─────────────┘
│
▼
Kev's Assistant's Video
Prerequisites
FAL_KEYenv var (fal.ai API key)ffmpeginstalledassets/kevs-reference.png— Kev's Assistant face reference imageassets/kevs-voice-sample.mp3— Kev's Assistant voice sample for cloning- Optional:
REPLICATE_API_TOKEN(not needed if using local ffmpeg for audio)
Usage
# Basic — clone a video
node skills/wan-video-clone/scripts/wan-video-clone.js \
--video "https://example.com/kevin-video.mp4"
# Local file
node skills/wan-video-clone/scripts/wan-video-clone.js \
--video /path/to/kevin.mp4
# Custom chunk size (default 5s)
node skills/wan-video-clone/scripts/wan-video-clone.js \
--video "URL" --chunk-duration 5
# Process 2 chunks at a time (parallel)
node skills/wan-video-clone/scripts/wan-video-clone.js \
--video "URL" --parallel 2
# Skip voice clone (face only)
node skills/wan-video-clone/scripts/wan-video-clone.js \
--video "URL" --skip-voice
# Skip face swap (use Kev's Assistant ref image directly with WAN)
node skills/wan-video-clone/scripts/wan-video-clone.js \
--video "URL" --skip-face-swap
# Dry run (show plan without executing)
node skills/wan-video-clone/scripts/wan-video-clone.js \
--video "URL" --dry-run
Flags
| Flag | Default | Description |
|---|---|---|
--video |
required | Source video URL or local path |
--chunk-duration |
30 |
Seconds per chunk |
--parallel |
1 |
Max concurrent chunk processing |
--resolution |
720p |
WAN output resolution |
--kevs-image |
auto | Kev's Assistant face image URL (uses asset if not set) |
--kevs-voice |
auto | Kev's Assistant voice sample URL (uses asset if not set) |
--prompt |
auto | Face swap prompt for Nano Banana |
--skip-voice |
false | Skip voice cloning step |
--skip-face-swap |
false | Use Kev's Assistant ref image directly |
--output |
output/wan-clones/ |
Output directory |
--dry-run |
false | Show plan without executing |
Timing
- Face swap: ~1 min (one-time)
- Per chunk: ~15-20 min (WAN animate is the bottleneck)
- A 5 min video = 10 chunks × ~20 min = ~3.5 hours sequential, ~2 hours with parallel=2
- A 30s video = 1 chunk = ~20-25 min total
- Stitching: seconds
- IMPORTANT: Source video must be H.264 codec. AV1/VP9 causes WAN to hang. Script auto-re-encodes if needed.
Output
Final video saved to output/wan-clones/<timestamp>/kevs-assistant-clone-<timestamp>.mp4
Key APIs
- fal.ai Nano Banana Pro — face swap (
fal-ai/nano-banana-pro/edit) - fal.ai ChatterboxHD — voice clone (
resemble-ai/chatterboxhd/speech-to-speech) - fal.ai WAN 2.2 — animate/replace (
fal-ai/wan/v2.2-14b/animate/replace) - ffmpeg — split, extract audio, merge audio, stitch (all local, no API)