【MiniMax H3 RefMod】軽量LoRA?学習なしで同じ人物を動画に!

【MiniMax H3 RefMod】軽量LoRA?学習なしで同じ人物を動画に! AIラボ

写真やイラストからキャラクターのファイルを作り、動画を生成するときに繰り返し呼び出せます。

RefModは、人物やキャラクターを繰り返し使うためのカスタムノードです。LoRAの学習を行わずに作成でき、ComfyUI上でファイルを選んで動画生成へ組み込めます。

開発者はこれを「Light LoRA」と紹介しています。使い方もLoRAローダーに近く、保存したファイルを選び、強度を調整する構成です。キャラクターの画像に加え、動作を含む動画や音声も素材として扱えます。

Refmod参照画像

写真やイラストを、呼び出して使えるキャラクターファイルに

通常の画像参照では、生成の材料となる写真やイラストを読み込みます。RefModでは、その素材をあらかじめ変換し、.safetensorsファイルに保存しておきます。次に動画を作るときは、このファイルをロードして使います。

保存するのは、VAEが画像や動画を数値データへ変換した潜在表現です。H3のモデルが扱える形にした素材を保存するため、作成にはH3用のVAEを使います。動画生成用モデルの重みは、そのまま使います。

同じ素材を繰り返し使う際には、VAEによる変換工程を省けます。さらに圧縮モードを選ぶと、生成時に処理する素材のデータ量も減らせます。

人物だけでなく、動きやスタイルも素材にできる

画像は人物の外見や衣装、画風などの材料として、動画は時間とともに変わる動作の材料として使えます。複数のRefModを読み込むことで、人物の画像と動作の動画を組み合わせる構成も作れます。

生成したい内容はプロンプトで指定します。人物の外見を使うのか、衣装やスタイルを使うのか、動画の動きを使うのかを文章で示し、読み込んだ素材と指示を組み合わせます。

素材を細かく残す設定と、情報量を抑える設定は次の2種類です。

モード保存する情報用途の出発点
Full Referenceリサイズ後にVAEで変換した潜在表現顔や衣装の細部を含む人物・キャラクター
Compressed Reference小さいグリッドへ圧縮した潜在表現情報量を抑えて使いたいスタイルや動画素材

ComfyUIへ導入する

custom_nodes フォルダーの空いている場所を右クリックし、ターミナルで開く を選びます。
開いたターミナルで、次のコマンドを実行します。

git clone https://github.com/Luisacaotica/ComfyUI-MiniMaxH3Mod

追加後はComfyUIを再起動します。

RefModを作成する

RefModにはいくつかのノードがあります。

  • Create H3 RefMod:画像や動画を参照
  • Create H3 RefMod Master:画像、動画、音声を参照
  • Create H3 Audio RefMod:音声だけを参照
  • Load H3 RefMod Folder:フォルダからまとめて参照
  • Inspect H3 RefMod:保存された参照の情報表示

今回は、個別に読み込む方法を取り上げます。

1. 空のワークフローにノードを追加する

キャンバスの空いている場所をダブルクリックし、次のノードを追加します。

  • Load Image:RefModに保存する参照画像を読み込みます。画像の枚数に合わせて追加します。
  • Load VAE:参照画像をMiniMax H3のデータへ変換する映像VAEを読み込みます。
  • Create H3 RefMod:画像を変換し、RefModとして保存します。
  • Preview as Text:作成結果を文字で表示します。ComfyUI標準のノードで、必須ではありません。

画像は、RefModへまとめたい参照内容に合わせて用意します。同じ対象の複数の画像をまとめる場合は、各画像を個別の Load Image で読み込みます。

2. 画像とVAEを接続する

  1. Load Image の IMAGE 出力を、Create H3 RefMod の最初の ref_image_0 入力へ接続します。
  2. 接続すると次の画像入力が現れます。複数枚を使う場合は、追加した Load Image を順に接続します。
  3. Load VAE の VAE 出力を、Create H3 RefMod の vae 入力へ接続します。
  4. Create H3 RefMod の details 出力を、Preview as Text の source 入力へ接続します。

Load VAE は minimax_h3_video_vae_int8_convrot.safetensors を選択します。

3. Create H3 RefModを設定する

  • name:保存するファイルの名前です。任意の名前を入力します。同じ保存先で同じ名前を使うと上書きされるため、別のRefModとして残すときは名前を変えます。
  • mode:保存する参照データの圧縮方法です。初期値の Compressed Reference は、変換したデータを小さい格子へ圧縮します。Full Reference はVAE変換後のデータを保存します。細部を残すことを優先する構成では Full Reference を選択します。参照情報量と処理負荷を抑えたい場合は Compressed Reference を選択します。
  • concept_type:参照内容の分類をファイルへ記録します。人物・キャラクターなら identity、ポーズ・動きなら pose_motion、服装なら clothing、背景なら background、画風なら style、分類を指定しない内容や混合した参照なら generic を選択します。Full Referenceの画像変換処理は、これらの分類で共通です。
  • background_retention:マスクを接続したとき、指定領域の外側をどの程度残すかを調整します。0では外側を強くぼかし、1では元の情報を残します。
  • ref_resolution:変換前の参照画像の短辺に対する解像度の上限です。256~2048、64刻みで設定します。短辺が設定値より大きい画像を縮小し、縦横を32ピクセル単位へ調整します。複数画像は最初の画像に処理サイズをそろえ、必要に応じて中央を切り抜きます。
  • pool_h / pool_w:Compressed Referenceで保存する格子の縦・横のサイズです。初期値は各16です。Full Referenceの構成では初期値を維持します。
  • latent_frames:動画参照のフレーム数を制御します。初期値は16、最小値は1です。静止画は1枚につき1フレームとして処理されます。
  • Refinement Steps:Compressed Referenceで、圧縮したデータを元の変換データへ近づける調整回数です。0~2000、50刻みで設定します。Full Referenceの構成では初期値の500を維持します。
  • merge:Compressed Referenceで複数の参照をまとめる方法です。stack は各参照を順に保持し、merge は共有するデータへまとめます。Full Referenceの構成では初期状態の stack を維持します。
  • motion_only:Compressed Referenceで動画のフレーム間変化を取り出す実験的な設定です。画像を使う構成では初期状態の full を維持します。
  • multiplier:作成した参照データを繰り返す回数です。1~10で設定し、増やすと保存するデータ量とトークン数も増えます。
  • max_tokens:保存する参照データのトークン数の上限です。初期値は5120、0で上限を解除します。
  • extraction_preset:作成設定のプリセットです。用途別のプリセットを選ぶと、対象項目がプリセットの値で上書きされます。個別に設定した値を使う構成では manual を選択します。
  • subfolder:RefModの保存先に作るサブフォルダーです。直下へ保存するときは空欄にします。
  • description:参照内容の説明を保存する任意の欄です。必要に応じて記入します。
  • save:ファイルへ保存する設定です。後から読み込んで使う場合は有効にします。
  • budget_policy:トークン上限を超えた場合の処理です。初期値の truncate は保持するフレームを減らして上限へ収めます。error は保存を止め、上限超過をエラーで知らせます。

modeがFull Referenceでの作成では、name を入力し、concept_type を参照内容に合わせます。そのほかは初期値で始め、トークン上限を作成結果に合わせて調整します。

4. 実行して保存先と作成結果を確認する

save を有効にしている場合は Create H3 RefMod は、作成とファイル保存まで実行します。

保存先は ComfyUI\models\refmods です。ファイル名は name に入力した名前に .safetensors を付けたものになります。subfolder を指定した場合は、その下のフォルダーへ保存します。extra_model_paths.yaml で refmods の保存先を登録している環境では、登録された保存先が使われます。実際の保存場所は結果の saved_paths で確認できます。

Preview as Text に表示された結果を、次の項目で確認します。

項目確認する内容
name保存名
kind保存形式。1フレームはimage、複数フレームはvideo
latent_frames実際に保存されたフレーム数
tokens実際に保存されたトークン数
source_shape入力ごとのVAE変換直後の形状
saved_paths保存されたファイルの絶対パス

複数の静止画を保存した場合は、latent_frames と入力枚数を照合します。truncate によって枚数が減っていたら、max_tokens を調整して再実行します。

source_shape の各項目は フレーム数×高さ×幅 です。各項目の積を合計し、4で割ると、VAE変換直後の参照データに必要なトークン数を求められます。multiplier が1の構成では、この値以上になるように max_tokens を512刻みで設定します。再実行後に latent_frames と tokens を確認します。

保存を別ノードへ分ける場合は Save H3 RefMods を使います。Create H3 RefMod の save を無効にし、mods 出力を Save H3 RefMods の mods 入力へ接続して保存します。上記の構成は、作成ノード内の保存機能を使います。

トークンの算出

Create H3 RefModノードのdtailsにPreview as Textノードを接続するとRefModの作成結果が表示されます。

source_shapeに「1x64x64 +1x64x64 +1x64x64 +1x64x64 +1x64x64」のような式が出ますので、そのままgoogleで検索すると電卓と計算結果の20480が表示されます。これを4で割って出た5120がトークン数となります。

"latent_frames": 3,
"tokens": 4524,
"source_shape": "1x58x104 +1x58x104 +1x58x104 +1x58x104 +1x58x104",

上記の場合7540トークンで設定よりオーバーして2つの画像が欠落してるのでmax_tokensに7680(512刻み)を入力して調整。

公式T2VワークフローにRefModを組み込む

生成モデルは Ref2VA を使用します。

ApplyとText Encodeの違い

Apply H3 RefMod は、プロンプトをエンコードした後の生成条件へ参照データを追加します。H3 RefMod Text Encode は、保存した画像・映像の参照を復元して画像・テキストエンコーダーにも渡し、プロンプトと参照を一緒にエンコードします。

Apply・Text Encodeの両方式で、subject_definitionsに人物と参照元の対応を定義し、<Subject 1>・<Subject 2>で人物ごとの配置や動作を指定します。

Applyを使う接続

サブグラフ内に Load H3 RefMods と Apply H3 RefMod を追加します。

接続元接続先
MiniMax H3 Image to Video:positiveApply H3 RefMod:conditioning
Load H3 RefMods:modsApply H3 RefMod:mods
Apply H3 RefMod:conditioningBasic Guider:conditioning

プロンプトは既存の MiniMax H3 Image to Video に記述します。

Text Encodeを使う接続

Applyを使う接続に代えて、H3 RefMod Text Encode でプロンプトと参照をエンコードします。

接続元接続先
Load CLIP:CLIPH3 RefMod Text Encode:clip
Load VAE:VAEH3 RefMod Text Encode:vae
Load H3 RefMods:modsH3 RefMod Text Encode:mods
H3 RefMod Text Encode:conditioningBasic Guider:conditioning

プロンプトの入力先は H3 RefMod Text Encode、生成用LATENTの供給元は既存の MiniMax H3 Image to Video です。Text Encodeの conditioning は参照データを含み、Basic Guider へ直接接続する構成です。

読み込むRefModと強度

Load H3 RefMods の RefMod library は、保存したRefModを一覧で選ぶ画面です。読み込み先の欄(mod_1 など)を選び、対象ファイルの Use を押すと選択が反映されます。保存時の concept_type は分類、description は説明として表示されます。

読み込み欄は + Add RefMod で増やせます。作成直後のファイルは Refresh RefMods またはライブラリ内の Refresh で一覧を更新します。

以下は、各参照を強度1・1組ずつ読み込む設定例です。

項目値動作
strength1保存した参照を元の強度で渡す
copies1各参照を1組渡す
componentsAll保存された画像・映像・音声を読み込む
visual_strength1画像・映像側の追加倍率
audio_strength1音声側の追加倍率
max_total_tokens0読み込み全体の上限を解除

画像参照の強度を下げると、ぼかした参照データが混ざります。copies を増やすと同じ参照が複製され、トークン数も増えます。画像だけを保存したファイルは、components=All で画像参照が読み込まれます。

Apply H3 RefModの設定

参照全体を強度1で渡す設定例です。

項目値動作
overridefalseノード上の設定を使用
retention1読み込み側の強度に掛ける倍率
curve_directionconstant各参照フレームへ一定の強度を適用
curve_shapelinearconstantと組み合わせて強度を維持
curve_value1カーブ側の強度
scramble_seed-1参照の順序を維持
graph_preset(none)上記のカーブ設定を使用
max_total_tokens0Apply側の上限を解除

scramble_seed=-1 では、並べ替えの設定は実行されません。この設定例の save_preset_as は空欄です。

RefModのプロンプトの書き方

人物と参照元の対応を subject_definitions で定義し、本文の detailed_description では <Subject 1>・<Subject 2> を使って衣装や動作を書き分けます。

参照番号と人物の対応

参照番号は kind=image が <Picture n>、kind=video が <Video n> です。番号は種類ごとの読み込み順で付き、強度0の参照を除外し、copies による複製も数えます。複数の画像を kind=video として作成したRefModも、1件の <Video n> として扱います。

MiniMax H3の参照用プロンプトの書式

MiniMax H3のRef2VA用の書式は、次の6項目から成ります。

  • subject_definitions:参照する人物や物体と、参照元の対応。
  • summary:生成する動画と参照の用途の要約。
  • retention_analysis:参照から引き継ぐ内容と、登場するショット。
  • detailed_description:映像・動作・音をショット順に記述する本文。
  • overall_soundscape:環境音。
  • non_diegetic_music:BGM。

人物には <Subject n>、参照元には <Picture n>・<Video n> を使います。subject_definitions で人物と参照元を対応付け、以降は同じSubjectラベルでその人物を記述します。

RefModの参照番号

RefModの参照番号は、kind=image が <Picture n>、kind=video が <Video n> です。種類ごとの読み込み順で番号が付き、強度0の参照を除外し、copies による複製も数えます。複数の画像から作成した kind=video のRefModは、1件の <Video n> に対応します。

検証で使った書き換え例

この検証例では、元の場面・構図・動作を引き継ぎ、T2Vの3項目から上記の6項目へ変更しました。subject_definitions・summary・retention_analysis を加え、本文の項目名を integrated_multimodal_description から detailed_description に変更しています。

参照には、画像5枚ずつから作成した kind=video のRefModを2件使いました。人物の髪型・服装の列挙を省き、人物定義を次のように記述しました。検証で使ったプロンプトからの抜粋です。

subject_definitions:
<Subject 1> is the woman in <Video 1>.
<Subject 2> is the woman in <Video 2>.

元の本文では、左右の位置で人物の動作を書き分けていました。

From 0 to 2 seconds, the left woman gives a small wave toward the camera.
From 2 to 5 seconds, the right woman nods once and smiles.

書き換え後の本文では、配置と動作をSubjectラベルで指定しました。この作例では、1人目を左、2人目を右に配置しています。

[Shot 1] <Subject 1> stands on the left beside <Subject 2> on the right on a quiet Japanese city sidewalk.
From 0 to 2 seconds, <Subject 1> gives a small wave toward the camera.
From 2 to 5 seconds, <Subject 2> nods once and smiles.

この6項目のプロンプトをApply版とText Encode版で使用しました。それぞれの生成動画で、参照1の人物が左で手を振り、参照2の人物が右でうなずき、左右の配置を全尺で維持しました。