【Wan2.2 + Fun Control】画像キャラを動画どおりに動かす方法|ComfyUI
この記事では、ComfyUIをインストールした直後の状態からの手順を、備忘録も兼ねて順番にまとめていきます。
今回は、Wan2.2 + Fun Control を使って、入力動画の動きを画像キャラに反映させる方法をまとめます。
ComfyUI上での基本的な流れや、実際にどういう入力を使えばうまくいきやすいのかも含めて、できるだけ分かりやすく紹介していきます。
静止画のキャラを、ただ動かすだけではなく、元動画の動きに沿って自然に動かすのが今回のポイントです。
「動画の動きを別キャラに移したい」「モーションの雰囲気を保ったままキャラだけ変えたい」という人は、ぜひ参考にしてみてください。
1. この記事の前提環境
本記事は、Stability Matrix上にComfyUIを導入した環境を前提に解説しています。
同じ環境を用意したうえで解説通りに進めたい方は、まずはこちらのYouTube動画を参考にしてください。
2. 必要モデルとカスタムノードのインストール
2.1. ComfyUI-VideoHelperSuiteのインストール
拡張機能をクリック

検索欄に「ComfyUI-VideoHelperSuite」を入力し、対象をインストール

「変更を適用」をクリック

2.2. comfyui_controlnet_auxのインストール
検索欄に「comfyui_controlnet_aux」と入力し、対象をインストール

ここでは「変更の適用」が表示されないかと思います。
一度StabilityMatrixごと終了させて再度起動させます。
起動時に必要ファイルのダウンロードが行われるため、多少時間がかかるかと思いますが、終わるまで待ちましょう。
2.3. diffusion_modelsのインストール
①wan2.2_fun_control_high_noise_14B_bf16.safetensors
②wan2.2_fun_control_high_noise_14B_fp8_scaled.safetensors
③wan2.2_fun_control_low_noise_14B_bf16.safetensors
④wan2.2_fun_control_low_noise_14B_fp8_scaled.safetensors
【bf16 / fp8 の違い】
精度と必要メモリが異なります。
・bf16
高精度。一般に重い。VRAM/RAM消費が大きい。
細部や動きの安定性がやや有利になりやすい。
・fp8
量子化されていて軽い。VRAM節約しやすい。
ただし、精度低下により結果に差が出ることがある。
軽く動かしやすい代わりに、条件によっては
動きの質・整合性・細部の安定感が少し落ちることがある。
今回はbf16を使って解説しますが、ここでは両方ダウンロードしておきます。
ダウンロードが完了したら「D:\StabilityMatrix-win-x64\Data\Packages\ComfyUI\models\diffusion_models」に格納します。
2.4. lorasのインストール
「https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/tree/main/split_files/loras」にアクセスし、以下をダウンロードします。
①wan2.2_t2v_lightx2v_4steps_lora_v1_high_noise.safetensors
②wan2.2_t2v_lightx2v_4steps_lora_v1_low_noise.safetensors
③wan2.2_t2v_lightx2v_4steps_lora_v1.1_high_noise.safetensors
④wan2.2_t2v_lightx2v_4steps_lora_v1.1_low_noise.safetensors
今回はv1.1を使用しますが、両方ダウンロードしておきます。
v1.1はv1の改良版で生成品質が少し改善されているようなので、v1.1を使用することにします。
ダウンロードが完了したら「D:\StabilityMatrix-win-x64\Data\Packages\ComfyUI\models\loras」に格納します。
2.5. text_encodersのインストール
「https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/tree/main/split_files/text_encoders」にアクセスし、以下をダウンロードします。
①umt5_xxl_fp16.safetensors
②umt5_xxl_fp8_e4m3fn_scaled.safetensors
使用するdiffusion_modelsによって使い分けます。
今回はfp16を使いますが両方ダウンロードしておきます。
ダウンロードが完了したら「D:\StabilityMatrix-win-x64\Data\Packages\ComfyUI\models\text_encoders」に格納します。
2.6. vaeのインストール
「https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/tree/main/split_files/vae」にアクセスし、以下をダウンロードします。
ダウンロードが完了したら「D:\StabilityMatrix-win-x64\Data\Packages\ComfyUI\models\vae」に格納します。
※上記完了後、F5キーで更新でもよいですが、念のため一度StabilityMatrixごと終了させて再度起動させてもよいです。
3. 画像キャラを動画どおりに動かしてみる
空のワークフローを開きます。

テンプレートをクリックします。

ビデオをクリックます。

「Wan 2.2 14B Fun制御」を選択しワークフローを開きます。

開いたテンプレートには2つのワークフローが含まれています。
今回は下のワークフローを使用します。
上のワークフローだと私のマシンではスペックに問題があるせいか、途中でマシンが落ちてしまいました。
上のワークフローで「右クリック > Bypass Group Nodes」を選択し無効化しておきます。
下のワークフローで「右クリック > Set Group Nodes Always」を選択し有効化します。

今回はキャニーを使わないため、Step 3の中身を削除し、少し枠を下に引き延ばします。

ノード検索メニューを表示し、検索欄に「load video」と入力します。

「Load Video (Upload)」を選択します。

ノード検索メニューを表示し、検索欄に「画像サイズの取得」と入力します。

「画像サイズ取得」を選択します。

ノード検索メニューを表示し、検索欄に「Pixcel Perfect Resolution」と入力します。

「Pixcel Perfect Resolution」を選択します。

ノード検索メニューを表示し、検索欄に「DWPose Estimator」と入力します。

「DWPose Estimator」を選択します。

各ノードを以下の通り繋ぎます。
・Load Video (Upload)の画像とDWPose Estimatorのimageを繋ぐ
・Load Video (Upload)の画像と画像サイズ取得の画像を繋ぐ
・Load Video (Upload)の画像とPixcel Perfect Resolutionのoriginal_imageを繋ぐ
・画像サイズ取得のwidthとPixcel Perfect Resolutionのimage_gen_widthを繋ぐ
・画像サイズ取得のheightとPixcel Perfect Resolutionのimage_gen_heightを繋ぐ
・Pixcel Perfect ResolutionのRESOLUTION (INT)とDWPose Estimatorのresolutionを繋ぐ
・DWPose Estimatorの画像とWan22FunControlToVideoの制御動画を繋ぐ
・オーディオ情報がある場合はLoad Video (Upload)のaudioと動画を作成のオーディオを繋ぐ

※音声がある場合は「Load Video (Upload)のaudioと動画を作成のオーディオを繋ぐ」
各ノードのパラメタを変更します。
【Step1】
・「拡散モデルを読み込む(high)」ノードのモデルを「wan2.2_fun_control_high_noise_14B_bf16.safetensors」に変更。
・「拡散モデルを読み込む(low)」ノードのモデルを「wan2.2_fun_control_low_noise_14B_bf16.safetensors」に変更。
・「CLIPを読み込む」ノードのモデルを「umt5_xxl_fp16.safetensors」に変更。
【LoRAローダーモデルのみ】
・「拡散モデルを読み込む(high)」に繋がっている「LoRAローダーモデルのみ」のモデルを「wan2.2_t2v_lightx2v_4steps_lora_v1.1_high_noise.safetensors」に変更。
・「拡散モデルを読み込む(high)」に繋がっている「LoRAローダーモデルのみ」のモデルを「wan2.2_t2v_lightx2v_4steps_lora_v1.1_low_noise.safetensors」に変更。
【Kサンプラー(高度)】
・highの「モデルサンプリングSD3」と繋がっているKサンプラーのパラメータを以下の通り変更。
ステップ:20
ステップ開始:0
ステップ終了:10
・lowの「モデルサンプリングSD3」と繋がっているKサンプラーのパラメータを以下の通り変更。
ステップ:20
ステップ開始:10
ステップ終了:20
【動画を作成】
fpsを入力動画と同じfpsに設定します。
入力動画よりもfpsを減らすと、動画の動きがスローになりました。
【Step2】
「画像を読み込む」に変更後のキャラクタの画像を設定します。
設定する画像の解像度は元となる動画の解像度と合わせた方が生成される動画が安定します。
【Step3】
・「Load Video (Upload)」に元となる動画を設定します。
動画の長さによってはメモリが枯渇してしまうため、「frame_load_cap」に処理するフレームの数を指定するとよいです。
今回は161としておきます。
・「Pixel Perfect Resolution」の「resize_mode」を「Resize and Fill」に変更。
・「DWPose Estimator」の「detect_face」を「disable」に変更。
【Step4】
・「Positive Prompt」に「The woman in the reference image is dancing.」を入力する。
【Step5】
・「Wan22FunControlToVideo」の「幅」「高さ」を入力画像のアスペクト比を保持したまま、解像度を下げて設定する。
例えば、「幅:1080」「高さ:1920」の場合は、「幅:360」「高さ:640」にする。
※幅に360を設定すると368になるかと思いますが無視してOKです。
・「Wan22FunControlToVideo」の「長さ」を入力動画で処理するフレーム数と合わせて設定します。
ここでは161にします。
実行すると、指定した画像が、元動画と同じような動きをする動画が生成されます。
生成された動画が見たい方は、こちらのYouTube動画を確認にしてください。
生成された動画の画質を上げたり、滑らかな動きにした場合はこちらの動画も参考にするとよいと思います。
なお、今回説明していませんが、「DWPose Estimator」の出力画像(棒人間の動画)を「動画を作成 → 動画を保存」で保存しておき、棒人間の動画を入力とすることも可能です。
是非試してみてください。
