🦊Wan-Animate
🏠 | 🦊雑に学ぶComfyUI
👈 | 🦊Wan2.1
👉 |
Wan-Animateは、人・キャラへのモーション転送に特化したWan2.1-14B-I2Vベースのモデルです
入力した画像を参照動画の人物の動きを元に動かすAnimationモード
入力した動画の人物を参照画像の人物に置き換えるReplacementモード
この二種類がありますが、ReplacementモードはAnimationモードの延長にあります
目次
🦊Wan-Animate#68d4a5c600000000001ac8f3必要なカスタムノード
🦊Wan-Animate#68d4a5bd00000000001ac8f1モデルのダウンロード
🦊Wan-Animate#68d4b05800000000001ac901Animationモード
🦊Wan-Animate#68d4b05d00000000001ac905Replacementモード
🦊Wan-Animate#68d53156000000000098b3ae6ステップ推論
🦊Wan-Animate#68d53460000000000098b3c2長尺動画のために処理を繰り返す
🦊Wan-Animate#68d5857d0000000000ea1052GGUF
参考
https://blog.comfy.org/p/wan22-animate-and-qwen-image-edit-2509WAN2.2 Animate & Qwen-Image-Edit 2509 Native Support in ComfyUI
https://github.com/kijai/ComfyUI-WanVideoWrapper/blob/main/example_workflows/wanvideo_WanAnimate_example_01.jsonwanvideo_WanAnimate_example_01.json (Kijai)
必要なカスタムノード
https://github.com/kijai/ComfyUI-WanAnimatePreprocessComfyUI-WanAnimatePreprocess
(モデルの手動ダウンロードが必要)
https://github.com/kijai/ComfyUI-segment-anything-2ComfyUI-segment-anything-2
モデルのダウンロード
https://huggingface.co/Kijai/WanVideo_comfy_fp8_scaled/blob/main/Wan22Animate/Wan2_2-Animate-14B_fp8_e4m3fn_scaled_KJ.safetensorsWan2_2-Animate-14B_fp8_e4m3fn_scaled_KJ.safetensors
https://huggingface.co/Kijai/WanVideo_comfy/blob/main/LoRAs/Wan22_relight/WanAnimate_relight_lora_fp16.safetensorsWanAnimate_relight_lora_fp16.safetensors
https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/blob/main/split_files/clip_vision/clip_vision_h.safetensorsclip_vision_h.safetensors
https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/tree/main/split_files/text_encodersumt5_xxl (fp16 or fp8).safetensors
https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/blob/main/split_files/vae/wan_2.1_vae.safetensorswan_2.1_vae.safetensors
code:models
📂ComfyUI/
└── 📂models/
├── 📂clip_vision/
│ └── clip_vision_h.safetensors
├── 📂diffusion_models/
│ └── Wan2_2-Animate-14B_fp8_e4m3fn_scaled_KJ.safetensors
├── 📂loras/
│ └── WanAnimate_relight_lora_fp16.safetensors
├── 📂text_encoders/
│ └── umt5_xxl (fp16 or fp8).safetensors
└── 📂vae/
└── wan_2.1_vae.safetensors
Animationモード
https://gyazo.com/d25335c059e8117f9e617de4ffffefca
Wan2.2-Animate_Animation.json
基本は🦊Wan2.1#6823f9300000000000eb7bd6 (image2video)の形
入力する画像にあわせて生成する動画の解像度が設定されます
PCのスペックに合わせて、Scale Image to Total Pixelsノードの値を調整してください
解像度は16の倍数にする必要があるのでクロップします
🟩WanAnimateToVideoノードに必要な情報を追加で入力する
reference_image
動かしたい静止画
face_video
🟦動画から顔の部分をクロップして入力します
YOLOにより自動で検出します
cf. ComfyUI-WanAnimatePreprocess#68d3dbe70000000000058e63
pose_video
🟦動画からVitPoseで棒人間を生成して入力します
ただし、動画の人物と動かしたい画像の人物は、骨格や立っている位置が違うためretarget処理を行い調整します
cf. ComfyUI-WanAnimatePreprocess#68d3ddaa0000000000058e7f
入力した動画のfpsに合わせ、出力動画のfpsを設定
16fpsにこだわる必要はあまりなさそうnomadoor.icon
https://gyazo.com/9f0e0e20d750b2e207b01adc56858202https://gyazo.com/d7f66b4153473136c37e48c7066709a1 https://gyazo.com/86ed4c6aa64af79325ce18359a4021bc
Replacementモード
https://gyazo.com/ab3d36d1e2ddfd5d7e452778dbab411c
Wan2.2-Animate_Replacement.json
🟪入れ替えた人物を背景に溶け込ませるためのリライトLoRAを追加
今回基準になるのは動画なので、動画の解像度に合わせて参照画像をpaddingします
🟩WanAnimateToVideoノード
pose_video
🟦棒人間のretargetは今回しないため、Pose and Face Detectionノードのretarget_imageは空に
Animationモードと比べて2つパラメータが増えます
background_video
character_mask
🟥character_maskとbackground_videoを作ります
Pose and Face Detectionノードが取得した人物座標をSAM2.1に繋ぎマスク生成
マスクを少し大きくする
大きくしたマスクをBlockify — ドット絵のようなカクカクしたマスクに変換 → character_mask
これをしないと縁が残ります
マスクした部分を黒で埋める → background_video
https://gyazo.com/f14909bbf4415e5477b67870379c6719https://gyazo.com/59dda8074526ca42245b1220bbb4420fhttps://gyazo.com/280c5916091919526db60ea0625d441a
6ステップ推論
サンプリングのステップ数を減らせるLoRAを使用して、高速化します
cf. Self Forcing
モデルのダウンロード
https://huggingface.co/lightx2v/Wan2.1-I2V-14B-480P-StepDistill-CfgDistill-Lightx2v/blob/main/loras/Wan21_I2V_14B_lightx2v_cfg_step_distill_lora_rank64.safetensorsWan21_I2V_14B_lightx2v_cfg_step_distill_lora_rank64.safetensors
$ ComfyUI/models/loras/Wan21_I2V_14B_lightx2v_cfg_step_distill_lora_rank64.safetensors
🎨Animationモード
https://gyazo.com/c8ff6a05cd057198146cd2cffb16d733
Wan2.2-Animate_Animation_lightx2v.json
🟪LoRAの読み込み
KSamplerの設定
steps : 4 ~ 6
cfg : 1
https://gyazo.com/86ed4c6aa64af79325ce18359a4021bchttps://gyazo.com/67326f2a1a4d803ab4c6a40799aef8a7
normal / 6steps
動きを作り出す必要がないので、6stepでもほとんど出力に影響がなさそうnomadoor.icon
🔁Replacementモード
https://gyazo.com/6e70b69630dea6bcf813917d8eb2c18a
Wan2.2-Animate_Replacement_lightx2v.json
長尺動画のために処理を繰り返す
Wan2.1ベースなので77フレームしか生成できませんが、🦊Wan2.1_VACEのExtensionのように最後の数フレームを抽出し、その続きを生成する、ということを何回も繰り返し無限長の動画を生成できるようにする機能があります
そういえば、なんで81フレームじゃなくて77なのか謎だnomadoor.icon
🎨Animationモード
https://gyazo.com/a489fad9b07fb1f1745d556fa130c731
Wan2.2-Animate_Animation_lightx2v_repeat.json
Set/Get使わないと大変なことになったんで使ってしまいました…nomadoor.icon
🟩1回目の推論で77フレーム生成したとしたら、2回目の推論ではface_videoやpose_videoは78フレーム目から使う必要があります
ただ、手動でその調整をしなくてもにvideo_frame_offsetにフレーム数を入力すれば勝手に調整されます
continue_motion_max_framesは、(N-1)回目から引き継ぐフレーム数です
例えばこれを5、legthを77にするなら、1回目の動画の最後の5フレームを使い、残り72フレームを生成します
🟦最初の5フレームは1回目と二回目の動画で被ってしまっているので、二回目の動画からImageFromBatchノードで最初の5フレームを捨てます
このグループを繰り返し、前動画とvideo_frame_offsetの入力だけすれば、いくらでも長い時間の動画を作れます
https://gyazo.com/a19071391ba2f112105df6493827fe0ahttps://gyazo.com/4fe4c76b1e6cf1b35f0041a5bb6a492b
🔁Replacementモード
https://gyazo.com/5efe20ed9671e3eb4960fd5ddc70cb46
Wan2.2-Animate_Replacement_lightx2v_repeat.json
GGUF
カスタムノードのインストール
https://github.com/city96/ComfyUI-GGUFComfyUI-GGUF
モデルの追加ダウンロード
https://huggingface.co/QuantStack/Wan2.2-Animate-14B-GGUF/tree/mainWan2.2-Animate-14B-GGUF
code:model
📂ComfyUI/
└── 📂models/
└── 📂unet/
└── Wan2.2-Animate-14B.gguf
https://gyazo.com/87f9176174a91e6a8666bd1fb027fc05
Wan2.2-Animate_Animation_gguf.json