AI活用

ComfyUIでEmbeddingを使う方法|Textual InversionとLoRAの違い

ComfyUIのEmbedding(Textual Inversion)はmodels/embeddingsに置き、promptにembedding:ファイル名と書くだけで使えます。LoRAとの違い、Negative Embeddingの副作用、効かないときの確認順を解説します。

この記事の目次
  1. 結論:Embeddingは「単語の追加」、LoRAは「modelの補正」
  2. Embeddingは何を追加するのか
  3. ComfyUIでEmbeddingを読み込むには
  4. Prompt内での呼び出し方
  5. LoRAと何が違うのか
  6. Negative Embeddingは万能の品質改善ではない
  7. 同一seedでEmbeddingの有無を比較する
  8. 効かないときの確認順
  9. よくある質問
  10. Embeddingに専用ノードはありますか?
  11. .ptと.safetensorsのどちらを使うべきですか?
  12. LoRAとEmbeddingを同じ概念で両方使う意味はありますか?
  13. まとめ

ComfyUIでEmbedding(Textual Inversion)を使うには、fileをComfyUI/models/embeddingsに置き、promptの中にembedding:ファイル名と書くだけです。専用ノードは不要で、Text Encoder側に「新しい単語」を足す仕組みなので、model本体に手を入れるLoRAとは適用先が違います。

情報確認日:2026年8月22日(日本時間)

結論:Embeddingは「単語の追加」、LoRAは「modelの補正」

責任範囲

  • Embeddingが何を追加するのか、Text Encoderの側から説明する
  • 配置先・一覧での認識・再読み込みの手順を現行UI(2026年8月時点)で示す
  • 公式READMEで確認した呼び出し記法と重み指定の書き方を掲載する
  • LoRAとの違いを適用先・file・強度・学習対象の4点で表にする
  • Negative Embeddingの副作用と、効かないときの確認順を示す

LoRAの配置やLoad LoRAノードの接続、trigger wordの基礎はComfyUIでLoRAを使う方法で扱っているため、この記事では繰り返しません。

スポンサーリンク

Embeddingは何を追加するのか

Embeddingは、promptを数値に変換するText Encoder(CLIP)に対して「新しい単語1つ分のベクトル」を追加するfileです。Textual Inversionという学習手法で、数枚〜数十枚の画像から「この概念を表す単語があったとしたら、どんなベクトルか」を逆算して作られます。

重要なのは、画像を描く本体(UNetやDiTなどのdiffusion model)には一切触れない点です。追加されるのは語彙だけなので、modelが元々描けない画風や物体を新しく描けるようにはなりません。「modelがすでに持っている表現のうち、言葉で指名しにくい組み合わせに名前を付ける」と理解すると、効く範囲と効かない範囲が読めます。

  1. prompt文字列をtokenに分割する
  2. 各tokenを辞書からベクトルに変換する(Embeddingはここに1語分を差し込む)
  3. Text Encoderが文脈つきのconditioningに変換する
  4. KSamplerがconditioningを手がかりにlatentを生成する

公式の例示ページにも「Embeddings are basically custom words so where you put them in the text prompt matters.」とあり、promptの中での位置が結果に影響する点はふつうの単語と同じです。

ComfyUIでEmbeddingを読み込むには

配置先はComfyUI/models/embeddingsです。LoRAと違って専用のLoaderノードがなく、読み込みはprompt側で行うため、一覧に出るかどうかを目で確認する場所がLoad LoRAほど分かりやすくありません。次の順で確認します。

  1. 配布元でbase model(SD1.5 / SDXL など)、license、fileのhashを確認する
  2. fileをComfyUI/models/embeddingsに保存する(拡張子は配布元のまま)
  3. 起動中ならRキー、またはメニューの「Refresh node definitions」で定義を再読み込みする(現行UI・2026年8月時点)
  4. CLIP Text Encodeのprompt欄にembedding:と入力し、候補にfile名が出るか確認する

候補の表示はfrontendの機能で、版によって挙動が変わります。候補が出なくても、file名が正しければembedding:ファイル名の記述自体は有効です。候補が出ないときは、後述の「効かないとき」の手順でfile名と配置先を先に疑ってください。

実行はいつもどおりCtrl + Enter(macOSはCmd + Enter)のQueue promptです。読み込みに失敗した場合、promptの中のembedding:は通常の文字列として解釈され、エラーにならないまま無視されることがあります。「エラーが出ないから効いている」とは判断できない点を覚えておいてください。

Prompt内での呼び出し方

公式READMEと例示ページで確認した記法は次のとおりです。

embedding:SDA768.pt
embedding:SDA768
(embedding:SDA768:1.2)
  • 拡張子.ptは省略できます
  • 重みは通常のprompt強調と同じ(…:1.2)の形で指定します
  • Positive側でもNegative側でも同じ記法です

subfolderに分けて置いた場合は、embedding:subfolder/ファイル名のようにpathを含めて書く必要があります。階層ごと認識されるかは環境によるため、最初はembeddings直下に置いて動作を確かめ、あとから整理するほうが切り分けしやすくなります。

書く位置にも意味があり、公式例のred embedding:catのように修飾語の後ろに置くと「赤い(Embeddingの)猫」として解釈されます。人物や画風のEmbeddingなら主語の位置、品質系なら文末など、ふつうの単語を置く場所と同じ感覚で扱います。

LoRAと何が違うのか

Embeddingは「言葉を増やす」、LoRAは「描き方を補正する」です。同じ「追加学習の成果物」でも、手を入れる層が違います。

項目 Embedding(Textual Inversion) LoRA
適用先 Text Encoder(CLIP)の語彙 MODELとCLIPの重み(Load LoRAで両方に適用)
fileと配置先 数KB〜数百KB、models/embeddings 数MB〜数百MB、models/loras
読み込み方 promptにembedding:名前 Load LoRAノードを配線
強度調整 prompt強調(…:1.2)のみ strength_modelstrength_clipを別々に
学習対象 単語ベクトル(modelの表現力の範囲内) modelの内部表現(新しい画風・形状も学習可)
得意なこと 指名しにくい概念・人物・品質傾向に名前を付ける 画風・キャラクター・衣装など表現そのものを変える

判断の目安は「modelが元々描けるか」です。すでに描ける要素を呼び出しやすくしたいならEmbedding、描けない要素を足したいならLoRAが候補になります。両方を同時に使うこともできますが、効果の切り分けが難しくなるため、最初は片方ずつ確認するのが安全です。複数のLoRAを重ねるときの考え方はComfyUIで複数LoRAを使う方法に分けています。

Negative Embeddingは万能の品質改善ではない

Negative promptに入れる前提で配布される「悪い手」「低品質」をまとめたEmbeddingがあります。手軽なので常用されがちですが、Text Encoderに「避ける概念」を1語で大量に渡す仕組みなので、狙った欠点以外も一緒に遠ざけます。

期待できること

  • 長いNegative promptを1語で置き換えられる
  • 学習元と近いmodelでは崩れやすい部位の改善が見込める

起こりうる副作用

  • 画風が学習元の傾向に引き寄せられ、狙いのLoRAと喧嘩する
  • 色味・コントラストが一律に変わる
  • base modelが違うと効かないどころか破綻を増やす

効果量は配布元の主張ではなく、自分のmodelとpromptで同一seedの有無比較をして決めてください。「入れると良くなる」という一般論は、学習元と同じ系統のmodelでしか成り立ちません。

同一seedでEmbeddingの有無を比較する

比較はEmbeddingだけを変数にします。seedの固定方法とcontrol_after_generateの扱いはComfyUIでSeedを固定する方法を参照してください。

固定するもの
- checkpoint・VAE
- prompt本文・negative prompt本文
- seed(control_after_generate は fixed)
- sampler・scheduler・steps・CFG
- width・height
- LoRA・ControlNet は外す

変えるもの
- embedding:名前 の有無(または重みだけ)
条件 狙った部位の変化 狙っていない変化(色・画風・構図) 破綻 判定
なし(基準) 基準
あり(重み1.0)
あり(重み0.7)
あり(重み1.3)

見るのは「狙った部位が変わったか」より先に「狙っていない部分がどれだけ動いたか」です。同一seedで初期ノイズが同じでも、Text Encoderの出力が変われば生成経路が変わるため、構図が大きく動くこと自体は異常ではありません。構図が動きすぎて比較にならないときは重みを下げ、それでも差が見えないならbase互換性を疑います。

効かないときの確認順

確認は互換性から始めます。Embeddingはエラーを出さずに無視されることがあるため、配線やfile名より前にbase modelを疑うほうが早く原因にたどり着けます。

  1. base modelの系統が一致しているか。SD1.5用のEmbeddingはText Encoderの次元が違うSDXLでは使えません。SDXLはText Encoderを2つ持つため、SDXL用として配布されたfileだけが対象です。FLUXなどCLIP以外のText Encoderを主に使うmodelでは、従来のEmbeddingがそのまま効くとは限らないため、配布元の対応modelを確認してください。
  2. 配置先がmodels/embeddingsか。extra_model_pathsで別pathを指定している場合はそちらも確認します。
  3. file名の綴りとpathが一致しているか。空白や全角文字を含むfile名は改名してから試します。
  4. 再読み込みしたか。Rキーで定義を更新し、それでも候補に出なければ再起動します。
  5. 書いた場所が正しいText Encodeか。Load LoRAを挟んでいる場合、CLIPがLoRA適用後のものかも確認します。
  6. 重みが極端でないか。重みを極端に下げると変化が見えにくく、極端に上げると破綻が先に出やすくなります。1.0を基準に上下して比較します。
  7. 他の要素と干渉していないか。LoRA・ControlNet・長いNegative promptを外し、Embeddingだけの状態で比較し直します。

コンソールにembeddingを含む警告が出ていれば、読み込み失敗の直接の手がかりになります。ログの文言は版で変わるため、file名が含まれる行を探してください。

よくある質問

Embeddingに専用ノードはありますか?

標準ノードにはありません。CLIP Text Encodeのprompt欄にembedding:名前と書くのが公式の方法です。custom nodeで一覧表示を補助するものはありますが、記法自体は変わりません。

.ptと.safetensorsのどちらを使うべきですか?

配布元が提供する形式をそのまま使います。.ptはPythonのpickle形式で任意コードを含められるため、出所が不明なfileは避け、hashを配布元と照合してから置いてください。

LoRAとEmbeddingを同じ概念で両方使う意味はありますか?

作者が「LoRAと対になるEmbedding」として配布している場合は意味があります。そうでない組み合わせは、どちらが効いたか分からなくなるため、片方ずつ同一seedで確認してから重ねてください。

まとめ

Embeddingはmodels/embeddingsに置き、promptにembedding:名前と書けば使えます。足されるのはText Encoderの語彙だけで、modelの描き方を変えるLoRAとは役割が違います。効かないときは配線より先にbase modelの系統を確認し、Negative Embeddingも含めて同一seedの有無比較で自分の環境での効果を確かめてください。

スポンサーリンク