search
  1. ComfyUIのモデルの合成と保存|Model Merging

ComfyUI

ComfyUIのモデルの合成と保存|Model Merging

編集部 読了 約8分

*2026年9月29日に確認した内容です。ComfyUI の公式ドキュメントの組み込みのノードの説明(ModelMergeSimple・ModelMergeAdd・ModelMergeSubtract・ModelMergeBlocks・CLIPMergeSimple・CheckpointSave・ModelSave・VAESave・LoraSave)と、ComfyUI の公式リポジトリの comfy_extras/nodes_model_merging.py によります。画面は、編集部の PC(Windows 11・NVIDIA GeForce RTX 4060)のポータブル版(Python ごと1つのフォルダに入った Windows 向けの ComfyUI。ComfyUI v0.37.0・フロントエンド 1.52.7・画面の表示は日本語)で撮りました。

ComfyUI では、組み込みのノードで2つのモデル(画像を作るために学習した内容を入れた重みのファイル)を混ぜて、新しいモデルを作れます。2つを割合で混ぜる ModelMergeSimple のほか、足す・引く・ブロックごとに割合を変えるノードがあり、プロンプトを扱う CLIP も混ぜられます。混ぜたモデルは、Save Checkpoint などのノードでファイルに保存できます。編集部は、SD1.5 と dreamshaper_8 を混ぜて保存するところまで動かしました。

モデルの合成は2つのモデルを混ぜて新しいモデルを作ること

モデルの合成(マージ)は、2つのモデルの重みを、決めた割合で組み合わせることです。公式ドキュメントでは、ModelMergeSimple を、2つの入力のモデルの強みや特徴を組み合わせたモデルを作るノードとしています。公式ドキュメントのモデルのページによると、コミュニティでは、ベースモデルを混ぜて、新しいチェックポイントや LoRA が作られています。

合成と保存のノードは、ノードライブラリ(画面の左のサイドバーの「ノード」)の「モデル」→「マージ」の分類にあります(LoraSave だけは、編集部の PC では「実験的」の分類にありました)。モデルを混ぜるノード(ModelMerge で始まるもの)は、どれも、チェックポイントを読み込むノードの「モデル」の出力を2つ受け取り、混ぜた「モデル」を出力します。

2つのモデルを割合で混ぜる:ModelMergeSimple

「モデルマージシンプル」(ModelMergeSimple)は、2つのモデルを、「比率」の値で混ぜるノードです。公式ドキュメントでは、比率が 1 なら出力は モデル1 が100%、0 なら モデル2 が100% としています。比率の初めの値は 1.0 です。

dreamshaper_8 は、Civitai で配られているチェックポイントで、Civitai のページでは元のモデルは SD 1.5 です。編集部は、次の手順で、SD1.5(Stable Diffusion v1.5。v1-5-pruned-emaonly-fp16.safetensors)と dreamshaper_8 を混ぜて、保存しました。

  1. キャンバスに「チェックポイントを読み込む」を2つ置き、1つ目で SD1.5、2つ目で dreamshaper_8 を選ぶ
  2. 「モデルマージシンプル」を置き、1つ目の「モデル」の出力を「モデル1」に、2つ目の「モデル」の出力を「モデル2」につなぐ
  3. 「比率」を 0.50 にする
  4. 「チェックポイントを保存」を置き、「モデル」に「モデルマージシンプル」の出力を、「clip」と「vae」に1つ目の「チェックポイントを読み込む」の CLIP と VAE をつなぐ
  5. 画面の右上の「実行する」を押す
2つのチェックポイントを読み込むのノードから、モデルマージシンプル(比率0.50)を通ってチェックポイントを保存へつないだワークフロー
SD1.5 と dreamshaper_8 を比率 0.50 で混ぜて保存するワークフロー。CLIP と VAE は SD1.5 のものを使っている(v0.37.0・フロントエンド 1.52.7)

比率の向きを確かめるため、編集部は、同じプロンプト・同じシード(乱数の種)の 42・20ステップ(ノイズを除く処理をくり返す回数)で、SD1.5 だけ・dreamshaper_8 だけ・混ぜたモデルの画像を作って比べました。比率 1.0 で混ぜた画像は、SD1.5 だけの画像とほぼ同じでした(1画素あたりの差の平均は、0から255の中で 0.36)。比率 0.0 で混ぜた画像は、dreamshaper_8 だけの画像とほぼ同じでした(同じく 0.21)。

左からSD1.5・比率0.5で混ぜたモデル・dreamshaper_8で作った居間の画像。真ん中の画像は左右の中間の見た目
同じプロンプト(a modern living room interior, large windows, natural light, wooden floor, sofa)とシードで作った3枚。真ん中が比率 0.5 で混ぜたモデルの画像(v0.37.0)

足す・引く・ブロックごとに混ぜる

ModelMergeSimple のほかの合成のノードと、公式ドキュメントの説明は、次のとおりです。

英語の名前すること値
ModelMergeAdd2つ目のモデルの重みを、1つ目のモデルに足すなし
ModelMergeSubtract1つ目のモデルから2つ目のモデルの重みを引き、その差に乗数をかける乗数
ModelMergeBlocksモデルの入力・中間・出力の層ごとに、別の割合で混ぜる入力・中間・出力

このほかに、モデルの形ごとに層を細かく分けて混ぜるノード(ModelMergeSD1・ModelMergeSDXL・ModelMergeFlux1・ModelMergeSD3_2B・ModelMergeSD35_Large・ModelMergeAuraflow・ModelMergeLTXV・ModelMergeMochiPreview・ModelMergeCosmos7B・ModelMergeCosmos14B・ModelMergeCosmosPredict2_2B・ModelMergeCosmosPredict2_14B・ModelMergeWAN2_1・ModelMergeQwenImage・ModelMergeKrea2)が、公式ドキュメントに並んでいます。

CLIPを混ぜる

CLIP(プロンプトの文章をモデルが扱える形に変えるテキストエンコーダ)も、同じように混ぜられます。

英語の名前すること
CLIPMergeSimple2つの CLIP を「比率」で混ぜる
CLIPMergeAdd2つ目の CLIP の重みを、1つ目に足す
CLIPMergeSubtract1つ目の CLIP から2つ目の CLIP の重みを引き、その差に乗数をかける

CLIPMergeSimple の比率の向きは、公式ドキュメントの説明と ComfyUI のプログラムとで食い違っています。公式ドキュメントでは、比率 1.0 で2つ目の CLIP だけを使うとしています。ComfyUI v0.37.0 のプログラム(nodes_model_merging.py)では、CLIPMergeSimple は ModelMergeSimple と同じ計算で混ぜていて、比率 1.0 で1つ目の CLIP だけを使う形になります。編集部は、CLIP を混ぜた画像では確かめていません。

合成したモデルを保存する

混ぜたモデルは、次のノードでファイルに保存します。保存先は、ComfyUI のフォルダの中の output の下です。

画面の名前(英語の名前)保存するもの初めのファイル名の頭(保存先)
チェックポイントを保存(CheckpointSave)モデル・CLIP・VAE を1つのチェックポイントにcheckpoints/ComfyUI
モデルを保存(ModelSave)モデル(拡散モデル)だけdiffusion_models/ComfyUI
CLIPを保存(CLIPSave)CLIP だけclip/ComfyUI
VAEを保存(VAESave)VAE だけvae/ComfyUI_vae
LoRAを抽出して保存(LoraSave)2つのモデルの差から取り出した LoRAloras/ComfyUI_extracted_lora

公式ドキュメントによると、保存するファイルの名前は、ファイル名の頭(初めは checkpoints/ComfyUI など)のあとに5けたの番号を付けたもの(例:ComfyUI_00001_.safetensors)で、同じ名前があると番号が増えます。形式は .safetensors です。

編集部の PC では、比率 0.50 で混ぜたモデルが、ComfyUI/output/checkpoints/ComfyUI_00001_.safetensors(2,132,628,710 バイト・約2GB)に保存されました。チェックポイントを読み込むノードが読むのは ComfyUI/models/checkpoints なので、保存したモデルを使うときは、そのフォルダに移します。編集部は、確かめたあとで保存したモデルを消しました。

LoraSave は、ModelMergeSubtract や CLIPMergeSubtract で取り出した2つのモデルの差を、LoRA(絵柄などを足す軽い追加のモデル)に変えて保存するノードです。公式ドキュメントでは、「ランク」(初めは 8)と「lora_type」(standard・locon・loha・lokr・dylora)を選べるとしています。

モデルを読み込むノードは「ComfyUIのモデルを読み込むノード|Load Checkpoint・Load Diffusion Model・Load CLIP・Load VAE」の記事で、ComfyUI の中で LoRA を学習する方法は「ComfyUIのLoRAの学習|組み込みの学習ノード」の記事で解説しています。

会員登録(無料)

記事やテーマのお気に入り・学習履歴・フォローが使えます。

この記事について

PERSC編集部が、建築の制作に関わる知識を実務目線で整理しています。内容は公開・更新日時点の情報にもとづきます。誤りや古い情報にお気づきの場合はお問い合わせよりご連絡ください。

あわせて読みたい