T-CREATOR

ComfyUI とは?ノードベースで組む最新画像生成ワークフローを完全解説【2025 年版】

ComfyUI とは?ノードベースで組む最新画像生成ワークフローを完全解説【2025 年版】

AI 画像生成の世界では、Stable Diffusion や Midjourney などが広く知られていますが、より高度で柔軟な制御を求める方にとって、ComfyUI は革命的なツールとなっています。ノードベースの直感的なインターフェースで、複雑な画像生成ワークフローを視覚的に構築できるこのツールは、初心者から上級者まで幅広いユーザーに支持されているんです。

本記事では、ComfyUI の基本概念から実践的な使い方、そして 2025 年最新の機能まで、徹底的に解説していきます。

ComfyUI の基本概念

ComfyUI とは何か

ComfyUI は、Stable Diffusion をベースとした画像生成のためのノードベース UI ツールです。従来のテキストボックスに prompt を入力するだけのシンプルな UI とは異なり、画像生成プロセス全体を視覚的なノードグラフとして表現できます。

各処理ステップをノードとして配置し、それらを線で繋ぐことで、データの流れを直感的に理解しながらワークフローを構築できるのが最大の特徴ですね。

以下の図は、ComfyUI の基本的なデータフローを示しています。

mermaidflowchart LR
    prompt["プロンプト<br/>入力"] --> encoder["テキスト<br/>エンコーダー"]
    encoder --> sampler["サンプラー"]
    model["モデル<br/>読み込み"] --> sampler
    latent["Latent<br/>イメージ"] --> sampler
    sampler --> decoder["VAE<br/>デコーダー"]
    decoder --> output["画像<br/>出力"]

このように、テキストから画像が生成されるまでの各ステップが明確に分離されており、どの段階でも介入・調整が可能になっています。

ノードベース UI の利点

ノードベース UI は、映像編集ソフトの Blender や音楽制作ツールの Max/MSP などでも採用されている、プロフェッショナル向けの UI パターンです。ComfyUI がこの方式を採用した理由には、以下のようなメリットがあります。

処理フローの可視化により、どのパラメータがどこに影響するのかが一目瞭然になります。例えば、プロンプトの変更が最終的な画像にどう反映されるか、その経路を視覚的に追跡できるんです。

再利用性も大きな利点でしょう。一度作成したワークフローは JSON ファイルとして保存でき、他のプロジェクトでも簡単に再利用できます。

#特徴従来の UIComfyUI
1処理フローの可視性★★★★★
2細かいパラメータ制御★★★★★★★
3ワークフローの再利用★★★★★
4学習曲線★★★★★★★
5処理速度の最適化★★★★★★★

ComfyUI のアーキテクチャ

ComfyUI は Python ベースで開発されており、バックエンドには PyTorch を使用しています。フロントエンドは Web ベースで構築されているため、ブラウザからアクセスして操作するのが基本です。

以下は ComfyUI のシステム構成を示した図です。

mermaidflowchart TB
    browser["ブラウザ<br/>(UI)"] <-->|WebSocket| server["ComfyUI<br/>サーバー"]
    server <--> pytorch["PyTorch<br/>エンジン"]
    pytorch <--> models["モデル<br/>ファイル"]
    server <--> custom["カスタム<br/>ノード"]
    models --> sd["Stable Diffusion"]
    models --> lora["LoRA"]
    models --> vae["VAE"]

このアーキテクチャにより、ローカル環境での高速な処理と、ブラウザからの直感的な操作を両立しています。

ComfyUI のインストールと環境構築

システム要件

ComfyUI を快適に動作させるには、ある程度のハードウェアスペックが必要です。特に GPU は画像生成速度に直結するため、重要な要素となります。

最小要件

  • OS: Windows 10/11, macOS 11+, Linux (Ubuntu 20.04+)
  • GPU: NVIDIA GTX 1060 (6GB VRAM) 以上、または AMD Radeon RX 6000 シリーズ
  • RAM: 16GB 以上
  • ストレージ: SSD 推奨、空き容量 20GB 以上

推奨要件

  • GPU: NVIDIA RTX 3060 (12GB VRAM) 以上
  • RAM: 32GB 以上
  • ストレージ: NVMe SSD、空き容量 50GB 以上

VRAM が多いほど、高解像度の画像生成や複数のモデルの同時読み込みが可能になりますね。

インストール手順(Windows)

Windows 環境での ComfyUI のインストールは、いくつかの方法がありますが、ここでは最も確実な方法を紹介します。

まず、Python 3.10 以上がインストールされているか確認しましょう。

bashpython --version

Python がインストールされていない場合は、公式サイトから Python 3.10 または 3.11 をダウンロードしてインストールしてください。

次に、Git をインストールします。Git は ComfyUI のリポジトリをクローンするために必要です。

bashgit --version

Git がインストールされていれば、バージョンが表示されます。インストールされていない場合は、Git 公式サイトからインストーラーをダウンロードしてください。

ComfyUI のリポジトリをクローンします。

bashgit clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI

依存パッケージをインストールします。ここでは仮想環境を作成してから、必要なパッケージをインストールする方法を推奨します。

bashpython -m venv venv
venv\Scripts\activate

仮想環境が有効化されたら、必要なパッケージをインストールしましょう。

bashpip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install -r requirements.txt

PyTorch のインストール時には、使用する CUDA のバージョンに応じて URL を変更する必要があります。上記は CUDA 12.1 用ですが、環境に合わせて調整してくださいね。

インストール手順(macOS)

macOS では、Apple Silicon (M1/M2/M3) と Intel Mac で若干手順が異なります。ここでは Apple Silicon を前提に説明します。

Homebrew がインストールされていることを確認します。

bashbrew --version

Homebrew を使って Python をインストールします。

bashbrew install python@3.11

ComfyUI リポジトリをクローンします。

bashgit clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI

仮想環境を作成し、依存パッケージをインストールします。

bashpython3 -m venv venv
source venv/bin/activate
pip install --upgrade pip

macOS の場合、PyTorch のインストールコマンドが異なります。

bashpip install torch torchvision torchaudio
pip install -r requirements.txt

Apple Silicon Mac では、MPS (Metal Performance Shaders) を使用することで、GPU アクセラレーションを活用できます。

Docker を使用したインストール

環境構築を簡単にしたい場合、Docker を使用する方法もあります。Docker を使えば、依存関係の問題を気にせずに ComfyUI を起動できますね。

まず、Docker と Docker Compose がインストールされていることを確認します。

bashdocker --version
docker-compose --version

ComfyUI 用の Dockerfile を作成します。

dockerfileFROM nvidia/cuda:12.1.0-runtime-ubuntu22.04

# 基本パッケージのインストール
RUN apt-get update && apt-get install -y \
    python3.11 \
    python3-pip \
    git \
    wget \
    && rm -rf /var/lib/apt/lists/*

Python と pip のセットアップを行います。

dockerfile# Python エイリアスの設定
RUN ln -s /usr/bin/python3.11 /usr/bin/python

# pip のアップグレード
RUN pip install --upgrade pip

ComfyUI のクローンと依存関係のインストールを行います。

dockerfile# 作業ディレクトリの作成
WORKDIR /app

# ComfyUI のクローン
RUN git clone https://github.com/comfyanonymous/ComfyUI.git .

# 依存パッケージのインストール
RUN pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
RUN pip install -r requirements.txt

エントリーポイントとポート公開の設定をします。

dockerfile# ポート公開
EXPOSE 8188

# ComfyUI の起動コマンド
CMD ["python", "main.py", "--listen", "0.0.0.0"]

docker-compose.yml ファイルを作成して、より簡単に管理できるようにします。

yamlversion: '3.8'

services:
  comfyui:
    build: .
    ports:
      - '8188:8188'
    volumes:
      - ./models:/app/models
      - ./output:/app/output
      - ./input:/app/input

GPU を使用するための設定を追加します。

yamldeploy:
  resources:
    reservations:
      devices:
        - driver: nvidia
          count: 1
          capabilities: [gpu]

Docker Compose でビルドして起動します。

bashdocker-compose up --build

これで、http://localhost:8188 にアクセスすれば ComfyUI が使用できるようになります。

初回起動と動作確認

インストールが完了したら、ComfyUI を起動してみましょう。

仮想環境が有効化されていることを確認してから、main.py を実行します。

bashpython main.py

サーバーが起動すると、以下のようなメッセージが表示されます。

textStarting server
To see the GUI go to: http://127.0.0.1:8188

ブラウザで http://127.0.0.1:8188 にアクセスすると、ComfyUI のインターフェースが表示されます。

初回起動時には、デフォルトのワークフローが読み込まれているはずです。このワークフローを使って、まずは動作確認をしてみましょう。

ただし、画像生成を実行するには、Stable Diffusion のモデルファイルが必要になります。次のセクションで、モデルの配置方法を説明しますね。

基本的なワークフローの構築

ノードの種類と役割

ComfyUI には多数のノードタイプが用意されており、それぞれが特定の役割を持っています。主要なノードを理解することが、効果的なワークフロー構築の第一歩です。

以下の図は、基本的な画像生成ワークフローで使用される主要ノードの関係性を示しています。

mermaidflowchart TB
    subgraph Input ["入力ノード群"]
        ckpt["CheckpointLoader<br/>モデル読み込み"]
        prompt_pos["CLIPTextEncode<br/>正プロンプト"]
        prompt_neg["CLIPTextEncode<br/>負プロンプト"]
        latent["EmptyLatentImage<br/>空のLatent"]
    end

    subgraph Process ["処理ノード群"]
        sampler["KSampler<br/>サンプリング"]
    end

    subgraph Output ["出力ノード群"]
        decode["VAEDecode<br/>デコード"]
        save["SaveImage<br/>保存"]
    end

    ckpt -->|MODEL| sampler
    ckpt -->|CLIP| prompt_pos
    ckpt -->|CLIP| prompt_neg
    ckpt -->|VAE| decode
    prompt_pos -->|CONDITIONING| sampler
    prompt_neg -->|CONDITIONING| sampler
    latent -->|LATENT| sampler
    sampler -->|LATENT| decode
    decode -->|IMAGE| save

各ノードグループの役割を詳しく見ていきましょう。

入力ノードは、ワークフローの起点となるデータを提供します。CheckpointLoader はモデルファイルを読み込み、CLIPTextEncode はテキストプロンプトをエンコードするんです。

処理ノードは、実際の画像生成処理を実行します。KSampler が最も重要なノードで、ここで潜在空間でのサンプリングが行われます。

出力ノードは、生成された画像をデコードして保存します。VAEDecode が潜在表現を画像に変換し、SaveImage がファイルとして保存しますね。

最小限のワークフロー作成

ComfyUI で画像を生成するための最小限のワークフローを、実際に構築してみましょう。

まず、UI の右側にあるノード追加メニューから必要なノードを追加していきます。右クリックまたは空白エリアをダブルクリックすると、ノード追加メニューが表示されます。

CheckpointLoader ノードの追加

メニューから「Add Node」→「loaders」→「CheckpointLoaderSimple」を選択します。

textこのノードは 3 つの出力を持ちます
- MODEL: 画像生成に使用する拡散モデル
- CLIP: テキストエンコーディング用のモデル
- VAE: 画像のエンコード/デコード用のモデル

ノードのドロップダウンメニューから、使用するチェックポイント(モデルファイル)を選択してください。

CLIPTextEncode ノードの追加(正プロンプト)

「Add Node」→「conditioning」→「CLIPTextEncode」を選択します。

textこのノードは 2 つの入力と 1 つの出力を持ちます
- 入力 clip: CheckpointLoader からの CLIP 出力を接続
- 入力 text: 生成したい画像を説明するテキスト
- 出力 CONDITIONING: エンコードされたプロンプト情報

text フィールドに、例えば「a beautiful landscape with mountains and lake, sunset」などのプロンプトを入力します。

CLIPTextEncode ノードの追加(負プロンプト)

もう一度「Add Node」→「conditioning」→「CLIPTextEncode」を選択します。

text負プロンプトは、生成したくない要素を指定します
例: "blurry, low quality, watermark, text"

このノードも CheckpointLoader の CLIP 出力に接続しますが、テキストには除外したい要素を記述します。

EmptyLatentImage ノードの追加

「Add Node」→「latent」→「EmptyLatentImage」を選択します。

textこのノードは生成画像のサイズを決定します
- width: 画像の幅(ピクセル)
- height: 画像の高さ(ピクセル)
- batch_size: 一度に生成する画像の枚数

Stable Diffusion v1.5 では 512×512、SDXL では 1024×1024 が基本サイズです。

KSampler ノードの追加

「Add Node」→「sampling」→「KSampler」を選択します。

textKSampler の主要パラメータ
- seed: ランダムシードで、同じ値で同じ結果を再現可能
- steps: サンプリングステップ数(20-30 が一般的)
- cfg: プロンプトへの従順度(7.0-11.0 が推奨)
- sampler_name: サンプリングアルゴリズム
- scheduler: ノイズスケジューリング方法

これらのパラメータを調整することで、生成される画像の品質やスタイルが変わります。

VAEDecode ノードの追加

「Add Node」→「latent」→「VAEDecode」を選択します。

textこのノードは 2 つの入力を持ちます
- samples: KSampler からの LATENT 出力
- vae: CheckpointLoader からの VAE 出力
出力として IMAGE が得られます

潜在空間の表現を、実際の画像データに変換する重要なステップですね。

SaveImage ノードの追加

「Add Node」→「image」→「SaveImage」を選択します。

textこのノードは生成された画像を保存します
- images: VAEDecode からの IMAGE 出力を接続
- filename_prefix: 保存ファイル名のプレフィックス

これで、基本的なワークフローの全ノードが揃いました。

ノードの接続方法

ノードを追加したら、それらを正しく接続していきましょう。接続は、出力ソケットから入力ソケットへドラッグ&ドロップで行います。

以下の順序で接続を作成してください。

  1. CheckpointLoader の MODEL 出力 → KSampler の model 入力
  2. CheckpointLoader の CLIP 出力 → 正プロンプト CLIPTextEncode の clip 入力
  3. CheckpointLoader の CLIP 出力 → 負プロンプト CLIPTextEncode の clip 入力
  4. CheckpointLoader の VAE 出力 → VAEDecode の vae 入力

次に、プロンプトとサンプリングの接続を行います。

  1. 正プロンプト CLIPTextEncode の CONDITIONING 出力 → KSampler の positive 入力
  2. 負プロンプト CLIPTextEncode の CONDITIONING 出力 → KSampler の negative 入力
  3. EmptyLatentImage の LATENT 出力 → KSampler の latent_image 入力

最後に、デコードと保存の接続を行います。

  1. KSampler の LATENT 出力 → VAEDecode の samples 入力
  2. VAEDecode の IMAGE 出力 → SaveImage の images 入力

すべての接続が完了したら、UI 右上の「Queue Prompt」ボタンをクリックして、画像生成を実行できます。

パラメータの調整とテスト

ワークフローが正しく構築できたら、各パラメータを調整して、望む画像を生成していきましょう。

KSampler のパラメータ調整

steps の値は、画像の精緻さに影響します。値が大きいほど詳細になりますが、生成時間も長くなります。

text推奨値の範囲
- 高速プレビュー: 10-15 steps
- 通常品質: 20-30 steps
- 高品質: 40-50 steps

cfg(Classifier Free Guidance)は、プロンプトへの従順度を制御します。

textcfg 値による違い
- 3.0-5.0: プロンプトの影響が弱く、自由度が高い
- 7.0-9.0: バランスの取れた標準的な設定
- 11.0-15.0: プロンプトに忠実だが、過度になることも

sampler_name では、様々なサンプリングアルゴリズムを選択できます。

#サンプラー名特徴推奨用途
1eulerシンプルで高速テスト、プレビュー
2euler_aeuler の改良版一般的な用途
3dpm_2高品質だが遅い最終出力
4dpmpp_2mバランスが良い推奨設定
5lms古いが安定互換性重視

プロンプトの最適化

効果的なプロンプトの書き方には、いくつかのポイントがあります。

具体的な要素を列挙することで、生成される画像の精度が上がります。

text良い例:
"a serene mountain landscape, snow-capped peaks,
crystal clear lake, pine forest, golden hour lighting,
photorealistic, high detail"

悪い例:
"nice nature picture"

品質関連のキーワードを追加することも効果的です。

text品質向上のためのキーワード例
- photorealistic, hyperrealistic
- high detail, ultra detailed
- 8k, 4k resolution
- professional photography
- masterpiece, best quality

負プロンプトで不要な要素を明示的に除外しましょう。

text一般的な負プロンプト例
"blurry, low quality, low resolution, watermark,
signature, text, jpeg artifacts, duplicate,
cropped, worst quality"

高度な機能とテクニック

ControlNet の活用

ControlNet は、生成画像の構図やポーズを精密に制御できる強力な機能です。エッジ検出、深度マップ、ポーズ推定などの条件付けが可能になります。

ComfyUI で ControlNet を使用するには、まずカスタムノードをインストールする必要があります。

bashcd ComfyUI/custom_nodes
git clone https://github.com/Fannovel16/comfyui_controlnet_aux.git
cd comfyui_controlnet_aux
pip install -r requirements.txt

ControlNet モデルファイルをダウンロードして配置します。

bash# ComfyUI のルートディレクトリに移動
cd /path/to/ComfyUI

# ControlNet モデル用のディレクトリを作成
mkdir -p models/controlnet

Hugging Face から ControlNet モデルをダウンロードします(例:Canny エッジ検出用)。

textダウンロード先
https://huggingface.co/lllyasviel/ControlNet-v1-1/tree/main

必要なファイル
- control_v11p_sd15_canny.pth
- control_v11p_sd15_openpose.pth
- control_v11f1p_sd15_depth.pth

ダウンロードしたファイルを models​/​controlnet​/​ ディレクトリに配置してください。

ControlNet ワークフローの構築

基本ワークフローに ControlNet を追加していきます。まず、入力画像をロードするノードを追加しましょう。

「Add Node」→「image」→「LoadImage」を選択し、制御に使用する画像をアップロードします。

textLoadImage ノードの使い方
1. ノードをクリックして画像をアップロード
2. 出力として IMAGE が得られる
3. この画像を前処理ノードに渡す

次に、Canny エッジ検出のプリプロセッサを追加します。

「Add Node」→「ControlNet Preprocessors」→「CannyEdgePreprocessor」を選択します。

textCannyEdgePreprocessor のパラメータ
- low_threshold: エッジ検出の下限閾値(100 推奨)
- high_threshold: エッジ検出の上限閾値(200 推奨)
入力: LoadImage からの IMAGE
出力: 処理された IMAGE(エッジ画像)

ControlNet モデルをロードするノードを追加します。

「Add Node」→「loaders」→「ControlNetLoader」を選択します。

textControlNetLoader の設定
- control_net_name: 使用する ControlNet モデルを選択
  例: control_v11p_sd15_canny.pth
出力: CONTROL_NET オブジェクト

ControlNet を適用するノードを追加しましょう。

「Add Node」→「conditioning」→「ControlNetApply」を選択します。

textControlNetApply の接続
入力:
- conditioning: CLIPTextEncode からの正プロンプト
- control_net: ControlNetLoader からの出力
- image: CannyEdgePreprocessor からのエッジ画像
出力:
- CONDITIONING: ControlNet が適用された条件付け

この出力を KSampler の positive 入力に接続することで、エッジ情報に基づいた画像生成が可能になります。

以下は ControlNet を組み込んだワークフローの全体像です。

mermaidflowchart TB
    load_img["LoadImage<br/>元画像読み込み"]
    preprocess["CannyEdge<br/>Preprocessor"]
    cn_loader["ControlNetLoader<br/>モデル読み込み"]
    cn_apply["ControlNetApply<br/>適用"]

    ckpt["CheckpointLoader"]
    prompt["CLIPTextEncode<br/>プロンプト"]

    load_img --> preprocess
    preprocess -->|エッジ画像| cn_apply
    cn_loader -->|CONTROL_NET| cn_apply
    prompt -->|CONDITIONING| cn_apply

    cn_apply -->|制御付き<br/>CONDITIONING| sampler["KSampler"]
    ckpt -->|MODEL| sampler

LoRA(Low-Rank Adaptation)の利用

LoRA は、比較的小さなファイルサイズで、特定のスタイルやキャラクター、概念をモデルに追加できる技術です。フルサイズのモデルと組み合わせて使用することで、多様な表現が可能になりますね。

LoRA モデルの準備

LoRA ファイルを配置するディレクトリを確認します。

bash# ComfyUI のルートディレクトリから
ls -la models/loras/

ディレクトリが存在しない場合は作成します。

bashmkdir -p models/loras

Civitai や Hugging Face から LoRA モデルをダウンロードし、models​/​loras​/​ ディレクトリに配置してください。

text人気の LoRA カテゴリ
- スタイル系: アニメ、リアル、水彩画など
- キャラクター系: 特定のキャラクターの特徴を学習
- コンセプト系: 特定の概念やテーマ
- 改善系: 手の描画、顔の品質向上など

LoRA ノードの追加

基本ワークフローに LoRA を組み込んでいきます。

「Add Node」→「loaders」→「LoraLoader」を選択します。

textLoraLoader の入力と出力
入力:
- model: CheckpointLoader からの MODEL
- clip: CheckpointLoader からの CLIP
- lora_name: 使用する LoRA ファイルを選択
- strength_model: モデルへの適用強度(0.0-1.0)
- strength_clip: CLIP への適用強度(0.0-1.0)

出力:
- MODEL: LoRA が適用されたモデル
- CLIP: LoRA が適用された CLIP

接続の順序が重要です。CheckpointLoader の出力をまず LoraLoader に接続し、その出力を KSampler と CLIPTextEncode に接続します。

text正しい接続順序
1. CheckpointLoader → LoraLoader
2. LoraLoader の MODEL → KSampler
3. LoraLoader の CLIP → CLIPTextEncode

複数の LoRA を重ねる

複数の LoRA を同時に適用することで、より複雑な表現が可能になります。

1 つ目の LoraLoader を追加して、スタイル系 LoRA を設定します。

textLoraLoader #1 の設定例
- lora_name: "anime_style_v1.safetensors"
- strength_model: 0.8
- strength_clip: 0.8

2 つ目の LoraLoader を追加して、品質改善系 LoRA を設定します。

textLoraLoader #2 の設定例
- lora_name: "detail_tweaker.safetensors"
- strength_model: 0.5
- strength_clip: 0.5
入力: LoraLoader #1 の出力を接続

LoRA を重ねる場合の接続は以下のようになります。

mermaidflowchart LR
    ckpt["Checkpoint<br/>Loader"] --> lora1["LoraLoader #1<br/>スタイル系"]
    lora1 --> lora2["LoraLoader #2<br/>品質改善系"]
    lora2 --> sampler["KSampler"]
    lora2 --> clip["CLIPTextEncode"]

適用強度の調整がポイントになります。

#strength 値効果推奨用途
10.1-0.3微妙な影響細かい調整
20.4-0.6適度な影響バランス重視
30.7-0.9強い影響スタイル重視
41.0 以上非常に強い実験的

img2img ワークフロー

img2img は、既存の画像を元に新しい画像を生成する機能です。写真をアニメ風にしたり、ラフスケッチを詳細なイラストに変換したりできますよ。

img2img の基本構成

text2img との主な違いは、EmptyLatentImage の代わりに、実際の画像をエンコードした Latent を使用する点です。

まず、入力画像をロードします。

「Add Node」→「image」→「LoadImage」を選択し、ベースとなる画像をアップロードします。

textLoadImage ノードから得られるもの
- IMAGE: RGB 形式の画像データ
- MASK: オプションのマスク(アルファチャンネル)

画像を VAE でエンコードして Latent 表現に変換します。

「Add Node」→「latent」→「VAEEncode」を選択します。

textVAEEncode の接続
入力:
- pixels: LoadImage からの IMAGE
- vae: CheckpointLoader からの VAE
出力:
- LATENT: エンコードされた潜在表現

この LATENT を KSampler の latent_image 入力に接続します。

denoise パラメータの重要性

img2img では、KSampler の denoise パラメータが重要な役割を果たします。

textdenoise 値の意味
- 0.0: 元画像をそのまま維持(変化なし)
- 0.3-0.5: 元画像の構図を維持しつつ微調整
- 0.6-0.8: 大きく変換しつつ元画像の特徴を残す
- 0.9-1.0: ほぼ新規生成(元画像の影響が微小)

denoise の値によって生成結果が大きく変わるため、用途に応じて調整してくださいね。

#denoise 値用途例生成時間
10.2-0.4色調整、軽微な修正短い
20.5-0.6スタイル変換中程度
30.7-0.8大幅な再構成長い
40.9-1.0ほぼ新規生成最長

アップスケール統合ワークフロー

img2img とアップスケールを組み合わせることで、高解像度の画像を効率的に生成できます。

まず、低解像度で画像を生成します(512×512 など)。生成された画像をアップスケールします。

「Add Node」→「image」→「ImageScale」を選択します。

textImageScale の設定
- upscale_method: ビリニア、バイキュービック、lanczos など
- width: アップスケール後の幅
- height: アップスケール後の高さ

アップスケールされた画像を VAEEncode でエンコードします。

textアップスケール後の処理フロー
ImageScale → VAEEncode → KSampler (denoise: 0.4-0.5)

低い denoise 値(0.3-0.5)で KSampler を実行することで、ディテールを追加しながら品質を向上させます。

この手法は「ハイレゾフィックス」とも呼ばれ、VRAM を節約しながら高品質な画像を生成できますね。

バッチ処理とアニメーション

複数の画像を効率的に生成したり、アニメーションを作成したりする機能も ComfyUI の強みです。

バッチ生成の設定

EmptyLatentImage ノードの batch_size パラメータを変更します。

textbatch_size の設定例
- batch_size: 4
この設定で、1 回の実行で 4 枚の画像が同時生成されます

seed を固定せず、ランダムにすることで、バリエーションが生まれます。

textKSampler のバッチ設定
- seed: control_after_generate を "randomize" に設定
- batch_size に対応した枚数が自動的に生成される

シードの段階的変化によるアニメーション

seed 値を段階的に変化させることで、スムーズに変化するアニメーションを作成できます。

カスタムノードを使用して、連番の seed を生成します。

bashcd ComfyUI/custom_nodes
git clone https://github.com/pythongosssss/ComfyUI-Custom-Scripts.git

ComfyUI を再起動すると、新しいノードが使えるようになります。

「Add Node」→「utils」→「SeedGenerator」などのノードを使用して、連続した seed 値を生成します。

textアニメーション生成の基本フロー
1. 開始 seed を設定
2. ループで seed を 1 ずつ増やす
3. 各 seed で画像を生成
4. 生成された画像を連結してビデオに

生成された画像シーケンスを動画に変換するには、外部ツールを使用します。

bash# FFmpeg を使用した動画変換例
ffmpeg -framerate 10 -pattern_type glob -i 'ComfyUI_*.png' \
  -c:v libx264 -pix_fmt yuv420p output.mp4

これで、seed の変化に応じて徐々に変化していくアニメーションが作成できます。

プロンプトトラベル

プロンプトを段階的に変化させる「プロンプトトラベル」も、興味深い表現方法です。

カスタムノードを追加します。

bashcd ComfyUI/custom_nodes
git clone https://github.com/FizzleDorf/ComfyUI_FizzNodes.git
cd ComfyUI_FizzNodes
pip install -r requirements.txt

PromptSchedule ノードを使用して、フレームごとにプロンプトを変化させます。

textプロンプトスケジュールの例
"0": "a cat sitting on a chair"
"10": "a cat standing on a chair"
"20": "a cat jumping from a chair"
"30": "a cat landing on the floor"

このように、時間軸に沿ってプロンプトを変化させることで、ストーリー性のあるアニメーションが作成できますね。

カスタムノードとワークフローの拡張

人気のカスタムノード紹介

ComfyUI のエコシステムには、多数の有用なカスタムノードが存在します。ここでは、特に人気の高いものを紹介しましょう。

ComfyUI-Manager

カスタムノードの管理を簡単にする必須ツールです。

bashcd ComfyUI/custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Manager.git

ComfyUI を再起動すると、UI に「Manager」ボタンが表示され、カスタムノードのインストール・更新・削除が GUI から簡単に行えるようになります。

textComfyUI-Manager の主な機能
- カスタムノードの検索とインストール
- インストール済みノードの更新
- 依存関係の自動解決
- 不要なノードのアンインストール

Efficiency Nodes

ワークフローを効率化する複数の便利ノードを提供します。

bashcd ComfyUI/custom_nodes
git clone https://github.com/jags111/efficiency-nodes-comfyui.git
cd efficiency-nodes-comfyui
pip install -r requirements.txt

このパッケージには、複数の機能を統合したノードが含まれています。

text主要ノードの例
- Efficient Loader: モデル、LoRA、VAE を一度にロード
- KSampler (Efficient): 高度なサンプリング設定を統合
- Image Size Selector: よく使う解像度をプリセット選択

Impact Pack

画像の部分的な修正や inpainting に特化したノード群です。

bashcd ComfyUI/custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Impact-Pack.git
cd ComfyUI-Impact-Pack
pip install -r requirements.txt

顔検出やセグメンテーションを使った高度な編集が可能になります。

textImpact Pack の代表的機能
- FaceDetailer: 顔の詳細を自動的に向上
- Detector: 物体検出とセグメンテーション
- Iterative Upscale: 段階的な高品質アップスケール

AnimateDiff

静止画からアニメーションを生成する革新的なノードセットです。

bashcd ComfyUI/custom_nodes
git clone https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved.git
cd ComfyUI-AnimateDiff-Evolved
pip install -r requirements.txt

専用のモーションモジュールをダウンロードして配置する必要があります。

bash# models/animatediff ディレクトリを作成
mkdir -p models/animatediff

# モーションモジュールをダウンロード
# Hugging Face から mm_sd_v15_v2.ckpt などをダウンロード

これにより、1 枚の画像からスムーズに動くアニメーションが生成できますよ。

ワークフローの保存と共有

作成したワークフローは、JSON 形式で保存・共有できます。

ワークフローの保存

UI 右上のメニューから「Save」→「Save (API Format)」を選択します。

json{
  "1": {
    "inputs": {
      "ckpt_name": "v1-5-pruned-emaonly.safetensors"
    },
    "class_type": "CheckpointLoaderSimple"
  },
  "2": {
    "inputs": {
      "text": "a beautiful landscape",
      "clip": ["1", 1]
    },
    "class_type": "CLIPTextEncode"
  }
}

この形式は、各ノードの設定と接続情報を完全に保存します。

ワークフローの読み込み

保存した JSON ファイルを ComfyUI にドラッグ&ドロップするだけで、ワークフローが復元されます。

textワークフロー読み込みの方法
1. JSON ファイルをブラウザ画面にドロップ
2. または「Load」ボタンからファイルを選択
3. すべてのノードと接続が自動的に再現される

画像に埋め込まれたワークフロー

ComfyUI で生成した画像には、デフォルトでワークフロー情報が埋め込まれています。

生成された PNG 画像を ComfyUI にドラッグ&ドロップすると、その画像を生成したワークフローが自動的に読み込まれます。

textメタデータに含まれる情報
- 全ノードの構成
- パラメータの設定値
- プロンプトの内容
- 使用したモデル名
- seed 値

これにより、気に入った画像の設定を正確に再現できますね。

ワークフローのテンプレート化

頻繁に使用するワークフローは、テンプレートとして保存しておくと便利です。

ComfyUI のルートディレクトリに user​/​default​/​workflows​/​ ディレクトリを作成します。

bashmkdir -p user/default/workflows

保存した JSON ファイルを、わかりやすい名前で配置します。

text推奨ファイル名の例
- basic_txt2img.json
- controlnet_canny.json
- lora_character_gen.json
- img2img_upscale.json

これらのファイルは、Load メニューから素早くアクセスできるようになります。

独自ノードの開発基礎

Python の知識があれば、独自のノードを開発することも可能です。基本的な構造を見ていきましょう。

ノード開発の基本構造

カスタムノード用のディレクトリを作成します。

bashcd ComfyUI/custom_nodes
mkdir my_custom_nodes
cd my_custom_nodes

基本的なノードクラスを定義する Python ファイルを作成します。

python# __init__.py
class MyCustomNode:
    """カスタムノードのサンプル実装"""

    @classmethod
    def INPUT_TYPES(cls):
        """ノードの入力定義"""
        return {
            "required": {
                "text": ("STRING", {"default": ""}),
                "number": ("INT", {"default": 0, "min": 0, "max": 100})
            }
        }

出力型と実行関数を定義します。

python    RETURN_TYPES = ("STRING",)
    FUNCTION = "process"
    CATEGORY = "My Nodes"

    def process(self, text, number):
        """実際の処理を実行"""
        result = f"{text} - {number}"
        return (result,)

ノードを ComfyUI に登録します。

python# ノードマッピングの定義
NODE_CLASS_MAPPINGS = {
    "MyCustomNode": MyCustomNode
}

# 表示名の定義
NODE_DISPLAY_NAME_MAPPINGS = {
    "MyCustomNode": "My Custom Node"
}

画像処理ノードの例

実用的な画像処理ノードを作成してみましょう。

pythonimport torch
import numpy as np

class SimpleBlurNode:
    """シンプルなブラーエフェクトノード"""

    @classmethod
    def INPUT_TYPES(cls):
        return {
            "required": {
                "image": ("IMAGE",),
                "blur_strength": ("INT", {
                    "default": 5,
                    "min": 1,
                    "max": 50,
                    "step": 2
                })
            }
        }

画像処理のメイン関数を実装します。

python    RETURN_TYPES = ("IMAGE",)
    FUNCTION = "apply_blur"
    CATEGORY = "image/effects"

    def apply_blur(self, image, blur_strength):
        """ブラーエフェクトを適用"""
        # tensor を numpy 配列に変換
        img_np = image.cpu().numpy()

        # ブラー処理の実装
        # (実際には cv2 や PIL を使用)
        # ここでは簡略化のため省略

        # numpy 配列を tensor に戻す
        result = torch.from_numpy(img_np)

        return (result,)

ComfyUI を再起動すると、新しいノードが「My Nodes」カテゴリに表示されます。

依存関係の管理

カスタムノードで外部ライブラリを使用する場合、requirements.txt を作成します。

textopencv-python>=4.8.0
pillow>=10.0.0
numpy>=1.24.0

ノードのインストール時に自動的に依存関係がインストールされるよう、install.py を作成することも推奨されます。

python# install.py
import subprocess
import sys

def install_requirements():
    """必要なパッケージをインストール"""
    subprocess.check_call([
        sys.executable,
        "-m",
        "pip",
        "install",
        "-r",
        "requirements.txt"
    ])

if __name__ == "__main__":
    install_requirements()

トラブルシューティングとパフォーマンス最適化

よくあるエラーと対処法

ComfyUI を使用していると、いくつかの典型的なエラーに遭遇することがあります。ここでは、それらの対処法を紹介しますね。

Error: CUDA out of memory

最も一般的なエラーの 1 つが、VRAM 不足です。

textエラーメッセージの例
RuntimeError: CUDA out of memory. Tried to allocate 512.00 MiB
(GPU 0; 8.00 GiB total capacity; 6.50 GiB already allocated)

このエラーが発生する主な原因は、以下の通りです。

#原因解決方法
1生成画像サイズが大きすぎる解像度を下げる(1024→512 など)
2batch_size が大きいbatch_size を 1 に減らす
3複数モデルの同時ロード不要なモデルをアンロード
4VAE のメモリ消費tiled VAE を使用

対処方法として、起動オプションで低 VRAM モードを有効にできます。

bashpython main.py --lowvram

さらに VRAM が少ない環境では、より積極的な最適化が可能です。

bashpython main.py --novram

このオプションを使用すると、処理速度は遅くなりますが、VRAM 使用量を大幅に削減できますよ。

Error: Model file not found

モデルファイルが見つからない場合のエラーです。

textエラーメッセージの例
FileNotFoundError: [Errno 2] No such file or directory:
'models/checkpoints/sd_v1-5.safetensors'

解決手順は以下の通りです。

  1. モデルファイルが正しいディレクトリに配置されているか確認します。
bashls -la ComfyUI/models/checkpoints/
  1. ファイル名が正確に一致しているか確認します(大文字小文字、拡張子に注意)。

  2. ファイルのパーミッションを確認します。

bashchmod 644 ComfyUI/models/checkpoints/*.safetensors

モデルファイルの推奨配置場所は以下の通りです。

textmodels/
├── checkpoints/     # Stable Diffusion モデル
├── loras/          # LoRA ファイル
├── vae/            # VAE ファイル
├── controlnet/     # ControlNet モデル
├── clip/           # CLIP モデル
└── upscale_models/ # アップスケールモデル

Error: Connection refused

サーバーに接続できない場合のエラーです。

textエラーメッセージの例
ConnectionRefusedError: [Errno 111] Connection refused

サーバーが正常に起動しているか確認します。

bash# プロセスが実行中か確認
ps aux | grep "python.*main.py"

ポートが他のプロセスで使用されていないか確認します。

bash# ポート 8188 の使用状況を確認
lsof -i :8188
netstat -an | grep 8188

ファイアウォールの設定を確認し、必要に応じてポートを開放します。

bash# Windows Firewall の場合
netsh advfirewall firewall add rule name="ComfyUI" dir=in action=allow protocol=TCP localport=8188

別のポートで起動することも可能です。

bashpython main.py --port 8189

Error: Workflow execution failed

ワークフローの実行中にエラーが発生する場合です。

textエラーメッセージの例
TypeError: 'NoneType' object is not subscriptable
at node KSampler (#5)

エラーメッセージから、問題が発生したノードを特定します。上記の例では、ノード #5 の KSampler でエラーが発生しています。

該当ノードの接続を確認し、すべての必須入力が接続されているかチェックします。

textKSampler の必須入力チェックリスト
✓ model が接続されているか
✓ positive conditioning が接続されているか
✓ negative conditioning が接続されているか
✓ latent_image が接続されているか
✓ パラメータが有効な範囲か(steps > 0 など)

ノードの出力型と入力型が一致しているか確認することも重要です。

パフォーマンスチューニング

ComfyUI の動作速度を最適化するためのテクニックを紹介します。

起動オプションの最適化

環境に応じて、適切な起動オプションを選択することで、パフォーマンスが大きく向上します。

NVIDIA GPU の場合、以下のオプションが推奨されます。

bash# xformers を使用(高速化)
python main.py --use-pytorch-cross-attention

# fp16 精度で動作(VRAM 節約と高速化)
python main.py --fp16-vae

複数のオプションを組み合わせることも可能です。

bashpython main.py \
  --use-pytorch-cross-attention \
  --fp16-vae \
  --preview-method auto

AMD GPU の場合は、ROCm 用のオプションを使用します。

bashpython main.py --use-rocm

モデルの最適化

モデルファイルの形式によっても、読み込み速度が変わります。

#形式ファイルサイズ読み込み速度互換性
1.ckpt大きい遅い高い
2.safetensors中程度速い高い
3.fp16.safetensors小さい最速中程度

.safetensors 形式は、セキュリティと速度の両面で優れているため、可能な限りこの形式を使用することを推奨します。

キャッシュの活用

モデルの読み込みをキャッシュすることで、ワークフローの実行速度が向上します。

同じモデルを複数回使用する場合、CheckpointLoader を共有します。

textパフォーマンス向上のヒント
✗ 悪い例: 各ワークフローで別々の CheckpointLoader を使用
✓ 良い例: 1 つの CheckpointLoader を複数箇所から参照

以下は効率的なモデル共有の例です。

mermaidflowchart LR
    ckpt["CheckpointLoader<br/>(1つのみ)"]
    ckpt -->|共有| wf1["ワークフロー #1"]
    ckpt -->|共有| wf2["ワークフロー #2"]
    ckpt -->|共有| wf3["ワークフロー #3"]

非同期処理の活用

ComfyUI は非同期でタスクをキューイングできます。

複数のプロンプトを Queue に追加することで、連続して処理が実行されます。

textバッチキューイングの方法
1. 最初のワークフローを設定
2. 「Queue Prompt」をクリック
3. パラメータを変更
4. 再度「Queue Prompt」をクリック
5. キューに追加され、順次実行される

Auto Queue モードを有効にすると、パラメータ変更時に自動的にキューに追加されます。

システム別の最適化設定

Windows 環境での最適化

Windows で ComfyUI を最適に動作させるための設定です。

仮想メモリ(ページファイル)を適切に設定します。

text推奨ページファイルサイズ
システムRAM 16GB の場合: 16384-32768 MB
システムRAM 32GB の場合: 32768-65536 MB

Windows のグラフィックス設定で、python.exe を「高パフォーマンス」に設定します。

text設定手順
1. 設定 → システム → ディスプレイ → グラフィックス設定
2. python.exe を追加
3. 「高パフォーマンス」を選択

macOS 環境での最適化

Apple Silicon Mac での最適化設定です。

Metal Performance Shaders を有効にするため、適切な PyTorch バージョンを使用します。

bash# Apple Silicon 用の PyTorch
pip install --upgrade torch torchvision torchaudio

Rosetta 2 を使用せず、ネイティブ ARM64 環境で実行することを確認します。

bash# アーキテクチャの確認
python -c "import platform; print(platform.machine())"
# 'arm64' と表示されることを確認

Linux 環境での最適化

Linux では、より細かいチューニングが可能です。

CUDA の最適化設定を環境変数で制御します。

bash# ~/.bashrc または ~/.zshrc に追加
export CUDA_CACHE_PATH=/tmp/cuda_cache
export CUDA_LAUNCH_BLOCKING=0
export PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:512

システムの swappiness を調整して、VRAM 不足時の動作を改善します。

bash# 一時的な変更
sudo sysctl vm.swappiness=10

# 恒久的な変更
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf

GPU のパフォーマンスモードを設定します(NVIDIA の場合)。

bash# 最大パフォーマンスモードに設定
nvidia-smi -pm 1
nvidia-smi -pl 300  # 電力制限を 300W に設定(GPU による)

実践的なユースケース

フォトリアルな風景画の生成

高品質なフォトリアルな風景画を生成するワークフローを構築しましょう。

推奨モデルと LoRA

フォトリアリスティックな出力に適したモデルを選択します。

text推奨チェックポイント
- Realistic Vision v5.1
- DreamShaper 8
- AbsoluteReality v1.8

風景に特化した LoRA を追加します。

text推奨 LoRA
- Detail Tweaker LoRA (strength: 0.5)
- Landscape Photography LoRA (strength: 0.7)

効果的なプロンプト構成

フォトリアルな風景には、詳細な記述が重要です。

text正プロンプトの例
"majestic mountain landscape at golden hour,
snow-capped peaks reflecting in crystal clear alpine lake,
dense pine forest in foreground, dramatic clouds,
volumetric lighting, cinematic composition,
professional landscape photography, 8k uhd,
shot on Canon EOS R5, highly detailed"

カメラとレンズの情報を含めることで、より本格的な写真調になります。

text技術的な記述の追加例
- "shot on Canon EOS R5 with 24-70mm f/2.8 lens"
- "Nikon D850, wide angle lens"
- "professional DSLR camera, RAW format"

負プロンプトで不要な要素を除外します。

text負プロンプトの例
"cartoon, anime, illustration, painting, drawing,
low quality, blurry, overexposed, underexposed,
saturated, people, buildings, text, watermark,
jpeg artifacts, noise, grain"

パラメータの推奨設定

フォトリアルな出力には、以下のパラメータが効果的です。

#パラメータ推奨値理由
1steps30-40高品質な細部表現
2cfg7.0-8.0自然なバランス
3samplerDPM++ 2M Karras品質と速度の両立
4schedulerKarrasスムーズな収束
5解像度1024×768 または 768×1024風景に適した比率

キャラクターデザインワークフロー

一貫性のあるキャラクターを生成し、様々なポーズや表情を作成するワークフローです。

ベースキャラクターの確立

まず、キャラクターの基本設定を固定します。

詳細なキャラクター記述を作成します。

textキャラクター詳細プロンプト例
"1girl, young woman, age 25, long flowing silver hair,
bright blue eyes, fair skin, elegant features,
wearing white blouse and black skirt,
gentle smile, anime style, high quality illustration"

seed を固定して、同じベースキャラクターを維持します。

textKSampler の設定
- seed: 固定値(例: 123456789)
- control_after_generate: "fixed"

ポーズと表情のバリエーション

ControlNet OpenPose を使用して、ポーズを制御します。

textOpenPose ワークフローの構築
1. LoadImage: ポーズ参照画像をロード
2. OpenposePreprocessor: ポーズを抽出
3. ControlNetLoader: OpenPose モデルをロード
4. ControlNetApply: ベースプロンプトに適用

表情を変えるためのプロンプト追加部分を作成します。

text表情バリエーションの例
- "happy, bright smile, eyes closed"
- "serious expression, focused gaze"
- "surprised, wide eyes, mouth open slightly"
- "sad, tears in eyes, downcast expression"

一貫性の維持テクニック

キャラクターの一貫性を保つための手法です。

専用の LoRA を作成するか、既存のキャラクター LoRA を使用します。

textキャラクター LoRA の適用
LoraLoader の設定
- lora_name: character_specific.safetensors
- strength_model: 0.8-1.0
- strength_clip: 0.8-1.0

img2img で生成済みキャラクターを参照として使用します。

textimg2img による一貫性維持
1. 気に入ったキャラクター画像を LoadImage
2. VAEEncode でエンコード
3. KSampler の denoise を 0.4-0.6 に設定
4. ポーズや表情のみ変更

商品画像の生成と編集

EC サイトやマーケティング用の商品画像を生成するワークフローです。

背景透過画像の生成

商品を背景透過で生成することで、後処理が容易になります。

背景除去用のカスタムノードをインストールします。

bashcd ComfyUI/custom_nodes
git clone https://github.com/Acly/comfyui-tooling-nodes.git
pip install rembg

商品生成ワークフローに背景除去を統合します。

textワークフローの構成
1. 通常通り商品画像を生成
2. RemoveBackground ノードで背景を透過
3. SaveImage で PNG 形式(アルファチャンネル付き)で保存

複数アングルの生成

同じ商品の様々なアングルを生成します。

ControlNet で 3D モデルや参照画像から角度情報を抽出します。

textマルチアングル生成の手順
1. 参照となる商品の 3D モデルまたは写真を準備
2. ControlNet Depth/Normal を使用
3. カメラアングルを変えた複数の参照画像を用意
4. それぞれに対して同じプロンプトで生成

プロンプトにアングル指定を含めます。

textアングル指定プロンプト例
- "product shot, front view, centered"
- "product shot, 45 degree angle, right side"
- "product shot, top view, bird's eye"
- "product shot, close-up detail, macro photography"

背景の差し替え

商品を様々な背景に配置するワークフローです。

inpainting を使用して、商品以外の領域を再生成します。

text背景差し替えワークフロー
1. LoadImage: 元の商品画像
2. MaskEditor: 商品部分をマスク
3. InpaintModelConditioning: inpaint 用の条件設定
4. KSampler: マスク外の領域のみ再生成
5. 新しい背景の記述をプロンプトに追加

背景のプロンプト例です。

text背景バリエーション
- "white studio background, professional product photography"
- "wooden table surface, natural lighting, minimalist"
- "outdoor garden setting, morning sunlight, nature background"
- "modern living room, interior design, lifestyle shot"

まとめ

ComfyUI は、ノードベースの柔軟なインターフェースにより、AI 画像生成の可能性を大きく広げるツールです。本記事では、基本的なインストールから高度なワークフロー構築、カスタムノードの活用まで、幅広く解説してきました。

最初は複雑に感じるかもしれませんが、ノードの概念を理解すれば、従来のツールでは実現できなかった細かい制御が可能になります。各処理ステップを視覚的に把握できることで、トライアンドエラーも効率的に行えますね。

2025 年現在、ComfyUI のエコシステムは急速に成長しており、毎日のように新しいカスタムノードや手法が登場しています。基本をしっかり押さえた上で、コミュニティの情報を追いかけることで、さらに高度な表現が可能になるでしょう。

ControlNet、LoRA、AnimateDiff などの技術を組み合わせることで、プロフェッショナルな制作現場でも通用する品質の画像やアニメーションを生成できます。商用利用を考える場合は、使用するモデルのライセンスを必ず確認してくださいね。

パフォーマンスの最適化も重要なポイントです。VRAM の制約がある環境でも、適切な設定により快適に動作させられます。本記事で紹介したチューニング手法を参考に、自分の環境に最適な設定を見つけてください。

ComfyUI の学習曲線は決して緩やかではありませんが、一度習得すれば、創造性を最大限に発揮できる強力なツールとなります。小さなワークフローから始めて、徐々に複雑な構成に挑戦していくことをお勧めします。

関連リンク