見出し画像

Google Colab で ComfyUI を試す

「Google Colab」で「ComfyUI」を試したので、まとめました。

【注意】無料版Colabでは画像生成AIの使用が規制されているため、Google Colab Pro / Pro+で動作確認しています。


1. ComfyUI

「ComfyUI」は、モジュール式の「StableDiffusion」のGUIです。グラフ/ノード/フローチャートベースのインターフェイスを使用して、コーディングなしに高度な「StableDiffusionパイプライン」を設計および実行することができます。

特徴は、次のとおりです。

・SD1.x、SD2.x、SDXLStable Video Diffusionを完全サポート
・非同期キューシステム
・多くの最適化 (実行間で変更したワークフローのみを再実行)
・3GB VRAM未満のGPUでも動作 (--lowvram)
・GPUがない場合でも動作 (--cpu)
・ckpt、safetensors、diffusersのモデル/チェックポイントを読み込み可
・Embeddings / Textual inversion
LoRA (標準 / locon / loha)
Hypernetwork
・生成したPNGからのワークフローの読み込み
・ワークフローをJSONで保存・読み込み
Area Composition
Inpainting (通常モデルとInpaintingモデルの両方)
ControlNet / T2I-Adapter
アップスケール (ESRGAN / ESRGAN variants / SwinIR / Swin2SR など)
unCLIPモデル
GLIGEN
モデルのマージ
LCMモデルとLCM LoRA
TAESD
コンフィグファイル

2. ComfyUIの使用例

「ComfyUI」の使用例は、以下のページで参照できます。

3. Colabでの実行

Colabでの実行手順は、次のとおりです。
公式のJupyter Notebookをベースにしています。

(1) セットアップ。

#@title セットアップ

from pathlib import Path

OPTIONS = {}

USE_GOOGLE_DRIVE = True  #@param {type:"boolean"}
UPDATE_COMFY_UI = True  #@param {type:"boolean"}
WORKSPACE = 'ComfyUI'
OPTIONS['USE_GOOGLE_DRIVE'] = USE_GOOGLE_DRIVE
OPTIONS['UPDATE_COMFY_UI'] = UPDATE_COMFY_UI

if OPTIONS['USE_GOOGLE_DRIVE']:
    !echo "Mounting Google Drive..."
    %cd /
    
    from google.colab import drive
    drive.mount('/content/drive')

    WORKSPACE = "/content/drive/MyDrive/ComfyUI"
    %cd /content/drive/MyDrive

![ ! -d WORKSPACE ] && echo -= Initial setup ComfyUI =- && git clone https://github.com/comfyanonymous/ComfyUI 
%cd $WORKSPACE

if OPTIONS['UPDATE_COMFY_UI']:
  !echo -= Updating ComfyUI =-
  !git pull

!echo -= Install dependencies =-
!pip install xformers!=0.0.18 -r requirements.txt --extra-index-url https://download.pytorch.org/whl/cu121 --extra-index-url https://download.pytorch.org/whl/cu118 --extra-index-url https://download.pytorch.org/whl/cu117

設定項目は、次の2つです。

・USE_GOOGLE_DRIVE : Googleドライブを使うかどうか。セットアップ時間を短縮と生成した画像の保存が可能になる
・UPDATE_COMFY_UI : ComfyUIを更新するかどうか

(2) チェックポイントのダウンロード。
今回は標準的な3モデルをダウンロードしています。SDのチェックポイントは、./models/checkpoints/、VAEのチェックポイントは ./models/vae/ に配置します。

#@title チェックポイントのダウンロード

# SD1.5
!wget -c https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.ckpt -P ./models/checkpoints/

# Some SD1.5 anime style
!wget -c https://huggingface.co/WarriorMama777/OrangeMixs/resolve/main/Models/AbyssOrangeMix2/AbyssOrangeMix2_hard.safetensors -P ./models/checkpoints/

# VAE
!wget -c https://huggingface.co/stabilityai/sd-vae-ft-mse-original/resolve/main/vae-ft-mse-840000-ema-pruned.safetensors -P ./models/vae/

(3) ComfyUIの起動。
コードを実行し、ログにURLが表示されたらクリックすることで起動します。

#@title ComfyUIの起動

!wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
!dpkg -i cloudflared-linux-amd64.deb

import subprocess
import threading
import time
import socket
import urllib.request

def iframe_thread(port):
  while True:
      time.sleep(0.5)
      sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      result = sock.connect_ex(('127.0.0.1', port))
      if result == 0:
        break
      sock.close()
  print("\nComfyUI finished loading, trying to launch cloudflared (if it gets stuck here cloudflared is having issues)\n")

  p = subprocess.Popen(["cloudflared", "tunnel", "--url", "http://127.0.0.1:{}".format(port)], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  for line in p.stderr:
    l = line.decode()
    if "trycloudflare.com " in l:
      print("This is the URL to access ComfyUI:", l[l.find("http"):], end='')
    #print(l, end='')


threading.Thread(target=iframe_thread, daemon=True, args=(8188,)).start()

!python main.py --dont-print-server

(4) グラフの確認。
DefaultとなるText-to-Image のグラフが表示されます。

(5) 上の「CLIP Text Encoder」にプロンプト ("cute cat ear maid")、Load Checkpointにモデル (AbyssOrangeMix2_hard.safetensors) を指定し、「Queue Prompt」を押す。
グラフが実行されます。処理中のノードは緑枠になります。最後に画像が生成されます。

outputフォルダに出力されています。

【おまけ】 ショートカット

「ComfyUI」で利用可能なショートカットは、次のとおりです。

・Ctrl + Enter : 現在のグラフを生成するためにキューに入れる
・Ctrl + Shift + Enter : 現在のグラフを生成の最初としてキューに入れる
・Ctrl + S : ワークフローの保存
・Ctrl + O : ワークフローの読み込み
・Ctrl + A : すべてのノードを選択
・Alt + C : 選択したノードを折りたたむ/折りたたまない
・Ctrl + M : 選択したノードをミュート/ミュート解除
・Ctrl + B : 選択したノードをバイパス (ノードがグラフから削除され、ワイヤが再接続されたように動作)
・Delete/Backspace : 選択したノードを削除
・Ctrl + Delete/Backspace : 現在のグラフを削除
・Space : カーソルを押しながら移動するとキャンバスが移動
・Ctrl/Shift + Click : クリックしたノードを選択範囲に追加
・Ctrl + C/Ctrl + V : 選択したノードをコピーして貼り付け (選択されていないノードの出力への接続は維持されない)
・Ctrl + C/Ctrl + Shift + V : 選択したノードをコピーして貼り付け (選択されていないノードの出力から貼り付けたノードの入力への接続を維持)
・Shift + Drag : 選択した複数のノードを同時に移動
・Ctrl + D : Load default graph
・Q : キューの表示を切り替え
・H : 履歴の表示を切り替え
・R :グラフを更新
・Double-Click LMB : ノードのクイック検索パレットを開く

macOSユーザーの場合は、CtrlをCmdに置き換えることもできます。

関連

次回



この記事が気に入ったらサポートをしてみませんか?