---
title: [ComfyMaster3]ゼロからつくるとよく分かる！ComfyUIワークフロー作成で学ぶStable Diffusionの内部動作
description: ComfyUIワークフロー作成でStable Diffusionの内部動作を学ぶ。手順からモデルのロード、プロンプト設定、画像保存まで詳細解説。次回はカスタムノードとモデルのダウンロードについて。
---

[AICU](https://corp.aicu.ai/ja)

# [\[ComfyMaster3\]ゼロからつくるとよく分かる！ComfyUIワークフロー作成で学ぶStable Diffusionの内部動作](https://corp.aicu.ai/ja/comfyui20240807)

 作成者: [AICU Japan](https://corp.aicu.ai/ja/author/aidx-lab)｜2024/08/08 22:43:59 Z

おかげさまで第3回となりました！  
今回の「ComfyUIマスターガイド」では、連載第3回はComfyUIに初期設定されている標準のワークフローを自分の手で一から作成し、ノード、Stable Diffusionの内部動作の理解を深めていきます！

前回は[こちら](https://ja.aicu.ai/comfyui20240802/)

## 1. ワークフローの作成手順

今回作成するワークフローは、ComfyUIの初回起動時に表示される標準のワークグラフになります。Stable Diffusion 1.5を使った標準的なグラフで画像生成を実現するシンプルなグラフになります。

<https://assets.st-note.com/img/1722819892356-GWE0WRv4Yh.png?width=2000&height=2000&fit=bounds&quality=85>

上図のように、左側からノードを順に追加していき、最後に各ノードの入力/出力ポートを接続します。

## 2. ワークフローのクリア

ComfyUIを起動すると、以下の画像のように標準のグラフが表示されます。今回は、一からこのグラフを作成するため、全てのノードを削除します。ここで、右下のコントローラから「Clear」を選択します。

<https://assets.st-note.com/img/1722594108760-6OJ52909zV.png?width=2000&height=2000&fit=bounds&quality=85>

上部に以下のようなダイアログが表示され、「Clear workflow?」と尋ねられるので、「OK」ボタンを押下します。

<https://assets.st-note.com/img/1722594107957-cu9FC41YHf.png?width=2000&height=2000&fit=bounds&quality=85>

そうすると、画面上の全てのコンポーネントが削除され、真っさらな状態になります。

<https://assets.st-note.com/img/1722594107971-jwb8smTJXW.png?width=2000&height=2000&fit=bounds&quality=85>

<https://corp.aicu.ai/hs/cta/wi/redirect?encryptedPayload=AVxigLLspLM7hzT%2Fd2733AYD%2BIos%2BqL%2Fo3xQhmvkCZ1LYNKjRNbi6do1ZKBvBLNZqQs2bFQACmfsCAQ9tyhurg3mZJd%2FdUcgXHgbbMMIOUQFsZiyFcPGUyVnpHCyGchusyaiKVhFJJcswdgj1%2B7mHzkrfYPd%2FVxJGgSrp4c6xzw%3D&webInteractiveContentId=185006873759&portalId=43845236&hsLang=ja>

<https://corp.aicu.ai/hs/cta/wi/redirect?encryptedPayload=AVxigLKGMJyc3rzYMBpoj2FJWEQDCfSHzLfkCO5oRXZmbZTj2wo4UJ5KWC2BJuB19BURgNOuVKxiuYdKl1BRKCKD8ss6uSI8tH%2FkMiPcQubgy26OSemcz6uMtxmN%2B%2B%2FNUwovoBnt%2BWqzwY4qb9efIqwFjo0qRiCyCfWx1n2Zcqw%3D&webInteractiveContentId=185263496576&portalId=43845236&hsLang=ja>

## 3. モデルのロード (Load Checkpoint)

まずは、モデルをロードするノード**「Load Checkpoint」**を追加します。  
グラフ上の何もない箇所で左ダブルクリックします。そうすると、ノードの検索ダイアログが表示されます。

<https://assets.st-note.com/img/1722594108554-zwjLlyb9eu.png?width=2000&height=2000&fit=bounds&quality=85>

検索ダイアログの検索バーに「load checkpoint」と入力します。検索バーの下部のノード一覧に検索にヒットしたノードが表示されます。ここから**「Load Checkpoint」**を選択します。

<https://assets.st-note.com/img/1722594108318-61uNMoT7gc.png?width=2000&height=2000&fit=bounds&quality=85>

**Load Checkpoint**がワークグラフ上に追加されます。

<https://assets.st-note.com/img/1722594108442-p4MMJV0LXQ.png?width=2000&height=2000&fit=bounds&quality=85>

**Load Checkpoint**では、使用するモデルを選択します。**Load Checkpoint**のパラメータ「ckpt\_name」をクリックすると、インストール済みのモデル一覧が表示されます。今回は、「v1-5-pruned-emaonly.ckpt」を選択します。  
このファイルは Stable Diffusion 1.5のベースとなるモデルチェックポイントファイルとなります。

<https://assets.st-note.com/img/1722594107980-ikpHjQfywF.png?width=2000&height=2000&fit=bounds&quality=85>

これで**Load Checkpoint**の作成が完了になります。ワークグラフ上には、**Load Checkpoint**のみが組み込まれている状態になります。

<https://assets.st-note.com/img/1722594107994-sDyKAqNuAW.png?width=2000&height=2000&fit=bounds&quality=85>

## 4. プロンプトの設定 (CLIP Text Encode (Prompt))

次は、プロンプトを設定するノード**「CLIP Text Encode (Prompt)」**を追加します。前項と同様に、グラフ上の何もないところでダブルクリックして検索ダイアログを開き、検索バーに**「clip text encode」**と入力し、表示されたノードから**「CLIP Text Encode (Prompt)」**を選択します。

<https://assets.st-note.com/img/1722594107915-RxyEaz7KMH.png?width=2000&height=2000&fit=bounds&quality=85>

ワークグラフ上に**CLIP Text Encode (Prompt)**が追加されます。

<https://assets.st-note.com/img/1722594108483-cbo6am6HRu.png?width=2000&height=2000&fit=bounds&quality=85>

プロンプトは、**ポジティブプロンプト**と**ネガティブプロンプト**が必要になるため、**CLIP Text Encode (Prompt)**は2つ必要になります。先ほど追加した**CLIP Text Encode (Prompt)**を複製し、プロンプト用のノードを2つ用意します。

先ほど追加した**CLIP Text Encode (Prompt)**上で右クリックすると、ノード用のコンテキストメニューが表示されます。この中から「Clone」を選択します。

<https://assets.st-note.com/img/1722823832269-yuDR5S8Uwc.png?width=2000&height=2000&fit=bounds&quality=85>

「Clone」が実行され、**CLIP Text Encode (Prompt)**が複製されます。複製された直後は、複製元のノードと重なって表示されるため、1つのノードに見えますが、しっかり複製されています。重なっていると見づらいため、ノードをドラッグし、下の方に移動しましょう。

<https://assets.st-note.com/img/1722594108491-GotplJTqmo.png?width=2000&height=2000&fit=bounds&quality=85>

今回は、作成した2つのノードのうち、上のノードをポジティブプロンプト、下のノードをネガティブプロンプトとして利用します。

※もし見分けがつきにくいときは、「Colors」からノードの色を変えてみると良いかもしれません。

<https://assets.st-note.com/img/1722824215383-JhAKzabmPP.png?width=2000&height=2000&fit=bounds&quality=85>

入力するプロンプトは、お好みのプロンプトを入力して問題ありませんが、  
今回は標準のワークフローに記載されていた内容を入力してみましょう。

ポジティブプロンプトには、  
「**beautiful scenery nature glass bottle landscape, purple galaxy bottle**」  
を入力します。

<https://assets.st-note.com/img/1722824827762-dlMK09X67y.png?width=2000&height=2000&fit=bounds&quality=85>

ネガティブプロンプトには、  
「**worst quality, low quality, normal quality**」  
を入力します。  
ここでは、低いクオリティの画像が生成されないように「見たくものを入れる指示」を与えています。部品としては画像を生成するためのプロンプト（ポジティブプロンプト）と同じCLIPというテキストと画像の対比を学習した条件付けのためのモデルを利用しています。

<https://assets.st-note.com/img/1723041414424-6o3GfvHdt8.png?width=2000&height=2000&fit=bounds&quality=85>

これでプロンプトの設定が完了です。現状のワークグラフ上には、**Load Checkpoint**、**CLIP Text Encode (Prompt)**が2つ表示されている状態になります。

<https://assets.st-note.com/img/1722594107970-pR9nDcd06Y.png?width=2000&height=2000&fit=bounds&quality=85>

## 5. 空の潜在空間の画像の作成 (Empty Latent Image)

次に空の潜在空間の画像を作成するノード**「Empty Latent Image」**を追加します。前項と同様に検索ダイアログを開き、検索バーに「empty latent image」と入力し、表示されたノードから**「Empty Latent Image」**を選択します。

<https://assets.st-note.com/img/1722594107916-gWin69Y3nu.png?width=2000&height=2000&fit=bounds&quality=85>

ワークグラフ上に**Empty Latent Image**が追加されます。

<https://assets.st-note.com/img/1722594108549-5Cs6afZQMe.png?width=2000&height=2000&fit=bounds&quality=85>

**Empty Latent Image**の各パラメータの設定は、初期値をそのまま利用します。  
Stabled Diffusion 1.5の場合はデフォルトのまま「512×512」、「batch\_size = 1」で構いません。Stable Diffusion XL (SDXL) の場合は「1024×1024」です。

<https://assets.st-note.com/img/1722594107913-677Poe9wyB.png?width=2000&height=2000&fit=bounds&quality=85>

これで空の潜在空間の画像を作成するノードの追加が完了です。ワークグラフ上には、**Load Checkpoint**、**CLIP Text Encode (Prompt)**が2つ、**Empty Latent Image**が表示されている状態になります。

<https://assets.st-note.com/img/1722594108070-zH0K8ldyLo.png?width=2000&height=2000&fit=bounds&quality=85>

※Stable Diffusion XL (SDXL) を使用する場合はEmpty Latent Imageの width, heightは 1024 にすべきであることをお忘れなく。

<https://assets.st-note.com/img/1723041205777-dPcccLnWzB.png?width=2000&height=2000&fit=bounds&quality=85>

## 6. サンプリングの実行 (KSampler)

次は、サンプリングを実行するノード**「KSampler」**を追加します。前項と同様に検索ダイアログを開き、検索バーに「ksampler」と入力し、表示されたノードから**「KSampler」**を選択します。

<https://assets.st-note.com/img/1722594107913-15UthSwgjp.png?width=2000&height=2000&fit=bounds&quality=85>

ワークグラフに**KSampler**が追加されました。

<https://assets.st-note.com/img/1722594108583-rtcblMqH4y.png?width=2000&height=2000&fit=bounds&quality=85>

**KSampler**の各パラメータの設定は、初期値をそのまま利用します。

<https://assets.st-note.com/img/1722594107944-ulwCWmFVG5.png?width=2000&height=2000&fit=bounds&quality=85>

これでサンプリングの実行ノードの追加が完了です。ワークグラフ上には、**Load Checkpoint**、**CLIP Text Encode (Prompt)**が2つ、**Empty Latent Image**、**KSampler**が表示されている状態になります。

<https://assets.st-note.com/img/1722594108048-N4h1Rs6jqx.png?width=2000&height=2000&fit=bounds&quality=85>

## 7. 潜在空間のデコード (VAE Decode)

次は、潜在空間のでコードを行うノード**「VAE Decode」**を追加します。前項と同様に検索ダイアログを開き、検索バーに「vae decode」と入力し、表示されたノードから**「VAE Decode」**を選択します。

<https://assets.st-note.com/img/1722594107955-PybfbitLXL.png?width=2000&height=2000&fit=bounds&quality=85>

ワークグラフ上に**VAE Decode**が追加されます。

<https://assets.st-note.com/img/1722594108569-BkUOBX34iu.png?width=2000&height=2000&fit=bounds&quality=85>

VAE Decodeはパラメータを持たないので、これでVAE Decodeの追加が完了になります。現状のワークグラフには、**Load Checkpoint**、**CLIP Text Encode (Prompt)**が2つ、**Empty Latent Image**、**KSampler**、**VAE Decode**が表示されている状態になります。

<https://assets.st-note.com/img/1722594108005-cAQYUJ674v.png?width=2000&height=2000&fit=bounds&quality=85>

## 8. 画像の保存 (Save Image)

次は、生成した画像の保存を行うノード**「Save Image」**を追加します。前項と同様に検索ダイアログを開き、検索バーに「save image」と入力し、表示されたノードから**「Save Image」**を選択します。

<https://assets.st-note.com/img/1722594107933-ivCkjTGPy4.png?width=2000&height=2000&fit=bounds&quality=85>

ワークグラフ上に**Save Image**が追加されます。

<https://assets.st-note.com/img/1722594108603-AHsCGCEi9B.png?width=2000&height=2000&fit=bounds&quality=85>

**Save Image**のパラメータでファイル名のプレフィックスを設定できます。お好みのプレフィックスを設定してください。今回は、初期値の「ComfyUI」を使用します。

<https://assets.st-note.com/img/1722594107910-Je3UKEdfBB.png?width=2000&height=2000&fit=bounds&quality=85>

これで画像の保存ノードの追加が完了です。現状のワークグラフは、**Load Checkpoint**、**CLIP Text Encode (Prompt)**が2つ、**Empty Latent Image**、**KSampler**、**Save Image**が表示されている状態になります。

<https://assets.st-note.com/img/1722594108038-2wa1nNUqhl.png?width=2000&height=2000&fit=bounds&quality=85>

## 9. 各ノードの接続

ここまでに追加した各ノードを接続していきます。

### Load CheckpointとCLIP Text Encode (Prompt)の接続

最初に**Load Checkpoint**の出力ポート「CLIP」と、2つの**CLIP Text Encode (Prompt)**の入力ポート「clip」を接続します。まずは、ポジティブプロンプト用の**CLIP Text Encode (Prompt)**と接続するために、**Load Checkpoint**の出力ポート「CLIP」の黄色のドットをドラッグします。

<https://assets.st-note.com/img/1722594108545-TidOLwrnun.png?width=2000&height=2000&fit=bounds&quality=85>

ドラッグした状態でマウスを動かすと、以下の画像のようにポートから線が伸びます。

<https://assets.st-note.com/img/1722594108485-d1Hx3053HK.png?width=2000&height=2000&fit=bounds&quality=85>

この状態で**CLIP Text Encode (Prompt)**の入力ポート「clip」の黄色のドットまでマウスを移動させます。

<https://assets.st-note.com/img/1722594108541-D0cEMBp9Hj.png?width=2000&height=2000&fit=bounds&quality=85>

**CLIP Text Encode (Prompt)**の入力ポート「clip」の黄色のドットの上にドロップすることで、ノードを接続することができます。

<https://assets.st-note.com/img/1722594108598-WupbXwNCbZ.png?width=2000&height=2000&fit=bounds&quality=85>

同様にネガティブプロンプト用の**CLIP Text Encode (Prompt)**と接続させます。

<https://assets.st-note.com/img/1722594108634-NGNPaQNDcB.png?width=2000&height=2000&fit=bounds&quality=85>

### CLIP Text Encode (Prompt)とKSamplerの接続

**CLIP Text Encode (Prompt)**の出力ポート「CONDITIONING」と、**KSampler**の入力ポート「positive」および「negative」を接続します。

まずは、ポジティブプロンプト用の**CLIP Text Encode (Prompt)**（上部のノード）の出力ポート「CONDITIONING」と、**KSampler**の入力ポート「positive」を接続します。前述した方法でポートを接続してください。

<https://assets.st-note.com/img/1722594108497-WYhJM9yvvS.png?width=2000&height=2000&fit=bounds&quality=85>

次に、ネガティブプロンプト用の**CLIP Text Encode (Prompt)**（下部のノード）の出力ポート「CONDITIONING」と、**KSampler**の入力ポート「negative」を接続します。

<https://assets.st-note.com/img/1722594108548-luXpq0J114.png?width=2000&height=2000&fit=bounds&quality=85>

### Load CheckpointとKSamplerの接続

**Load Checkpoint**の出力ポート「MODEL」と、**KSampler**の入力ポート「model」を接続します。前述した方法でポートを接続してください。  
**CLIP Text Encode (Prompt)**を跨いで接続するため見づらいですが、紫色の線で繋がっています。

<https://assets.st-note.com/img/1722594108502-A4qXRK3Oms.png?width=2000&height=2000&fit=bounds&quality=85>

### Empty Latent ImageとKSamplerの接続

**Empty Latent Image**の出力ポート「LATENT」と、**KSampler**の入力ポート「latent\_image」を接続します。前述した方法でポートを接続してください。

<https://assets.st-note.com/img/1722594108636-l3ZhSikPil.png?width=2000&height=2000&fit=bounds&quality=85>

### Load CheckpointとVAE Decodeの接続

**Load Checkpoint**の出力ポート「VAE」と、**VAE Decode**の入力ポート「vae」を接続します。前述した方法でポートを接続してください。  
複数のノードを跨いで接続するため見づらいですが、赤色の線で繋がっています。

<https://assets.st-note.com/img/1722594108987-5SE7dttDQc.png?width=2000&height=2000&fit=bounds&quality=85>

### KSamplerとVAE Decodeの接続

**KSampler**の出力ポート「LATENT」と、**VAE Decode**の入力ポート「samples」を接続します。前述した方法でポートを接続してください。

<https://assets.st-note.com/img/1722594108595-TTOeKC8SiO.png?width=2000&height=2000&fit=bounds&quality=85>

### VAE DecodeとSave Imageの接続

**VAE Decode**の出力ポート「IMAGE」と、**Save Image**の入力ポート「images」を接続します。前述した方法でポートを接続してください。

<https://assets.st-note.com/img/1722594108605-G5JmQGjpXo.png?width=2000&height=2000&fit=bounds&quality=85>

## 10. ワークフローの完成！

これでワークフローが完成しました。最終的なグラフは、以下の画像のようになっています。

<https://assets.st-note.com/img/1722594108025-OcQm5gcPQu.png?width=2000&height=2000&fit=bounds&quality=85>

それでは、作成したワークフローで画像生成ができるか試してみましょう。「Queue Prompt」をクリックして、画像生成を実行します。

<https://assets.st-note.com/img/1722594108723-LS1ShwUXMA.png?width=2000&height=2000&fit=bounds&quality=85>

無事に画像生成が成功しました。皆様の環境でも画像生成が成功したでしょうか。失敗した場合は、どこかに誤りがある可能性があるので、ここまでの内容を再度見直してみると解決できると思います。

今回、ワークフローを一から組んでいくことで個々のノードについてと、ノードとノードを繋げていくことでのワークフロー全体への理解や、Stable Diffusionの内部動作への理解を深めることができました！

次回はカスタムノードとモデルのダウンロードについてお送りしたいと思います！

**✨️オトクなメンバーシップについての詳細はこちら**

<https://corp.aicu.ai/hs/cta/wi/redirect?encryptedPayload=AVxigLL%2FCsOE4h31UfeWp7iEd%2Br8upPF2ljbMVCM6KU3xA%2FaktRw%2B5ri0HewZXm8tjt50slz8B5RXEaaHwMzWgPGlLw%2BWqwdbF39U%2Bj4bkGBtIUsk%2F61Uvf%2BBXQZr%2FwXcQf86t135TPWojhiyrfsedOv127pcfIKF%2FUO&webInteractiveContentId=185006873894&portalId=43845236&hsLang=ja>

この記事の続きはこちらから [https://note.com/aicu/n/n843e3cdbb190](https://note.com/aicu/n/n843e3cdbb190)

Originally published at [https://note.com ](https://note.com/aicu/n/n843e3cdbb190)on Aug 7, 2024.

[完全な記事を表示](https://corp.aicu.ai/ja/comfyui20240807)

```json
{
  "@context" : "http://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@type" : "Person",
    "name" : "AICU Japan"
  },
  "dateModified" : "2025-03-08T00:48:03.352Z",
  "datePublished" : "2024-08-08T22:43:59Z",
  "headline" : "[ComfyMaster3]ゼロからつくるとよく分かる！ComfyUIワークフロー作成で学ぶStable Diffusionの内部動作",
  "image" : {
    "@type" : "ImageObject",
    "height" : 629,
    "url" : "https://ja.aicu.ai/wp-content/uploads/2024/08/rectangle_large_type_2_6b8b04d761e8dd4a9910655305ad7235.webp.webp",
    "width" : 1200
  },
  "mainEntityOfPage" : "https://corp.aicu.ai/ja/comfyui20240807",
  "publisher" : {
    "@type" : "Organization",
    "logo" : {
      "@type" : "ImageObject",
      "height" : 60.0,
      "url" : "https://corp.aicu.ai/hubfs/AICU-Transp-512x512.png",
      "width" : 60.0
    },
    "name" : "AICU"
  }
}
```