メインコンテンツへスキップ
見出し画像

旧・ComfyUI入門

    古くなってしまったので新しい入門記事を作りました

    趣旨

    こんにちはakkyossです。
    SDXL0.9のおかげでComfyUIが脚光を浴びているのでおすすめカスタムノードを紹介します。
    ComfyUIは導入や環境設定に関して割と初心者というか、自分で解決出来ない人はお断り、という空気はあるはありますが独自のワークフローを構築出来る、非常に面白いツールなので強くおすすめします。

    画像
    こんな感じで色んな機能を同じ画面内に置いておくことが出来るのもいいところ。
    SD1.5のワークフローとSDXLのワークフローも同じ画面内に置ける。

    導入

    ※StableDiffusionWebUI導入済前提です(cudaとかその辺は対応済の意)
    簡単に導入したい場合は以下れれみーみさんのNote見てください。

    手動でインストールする場合は以下の手順になります。
    Windows環境、Nvidiaグラボ環境のみです。それ以外は知りません。

    管理者権限でターミナル起動。
    cd 自分のComfyUIフォルダパス
    python -m venv venv
    python.exe -m pip install --upgrade pip
    venv\Scripts\activate.ps1
    pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu118 xformers
    pip install -r requirements.txt

    環境構築しなおす場合はComfyUI直下に作成されたvenvフォルダを削除してから上記の手順を再度実行します。
    拡張機能用のインストールは別途行う必要がありますが、上の手順知ってれば簡単です。

    初期設定

    extra_model_paths.yaml.exampleというデータの.exampleを消します。
    開くとパスが書かれているのでAUTOMATIC1111のパスに合わせると各種モデルを共有出来ます。やりましょう。
    以下のコードの「../stable-diffusion-webui」のところを自分の環境のAUTOMATIC1111があるパスにしてください。
    私はComfyUIと同じ階層に置いてるので相対パスでこういう記述ですが、絶対パスでも動くと思うのでやってみましょう。

    #Rename this to extra_model_paths.yaml and ComfyUI will load it
    
    #config for a1111 ui
    #all you have to do is change the base_path to where yours is installed
    a111:
        base_path: ../stable-diffusion-webui/
    
        checkpoints: models/Stable-diffusion
        configs: models/Stable-diffusion
        vae: models/VAE
        loras: models/Lora
        upscale_models: |
                      models/ESRGAN
                      models/RealESRGAN
                      models/SwinIR
        embeddings: embeddings
        controlnet: models/ControlNet
    
    #other_ui:
    #    base_path: path/to/ui
    #    checkpoints: models/checkpoints
    #    custom_nodes: path/custom_nodes

    起動用のbat作成

    たぶん起動用のbatを作った方が楽なので作りましょう。
    AUTOMATIC1111みたいに引数とかも指定できます。
    自分の場合は以下のような.batデータを作っています。

    cd 自分のComfyUIフォルダパス
    .\venv\Scripts\python.exe main.py 

    起動

    起動してみましょう。
    ComfyUIは生成したPNGをドラッグ&ドロップするとそのまま各種ノードの設定を読み込めるという神共有機能があります。
    同じノードが使える環境を揃えていれば、相手のワークフローを引き継いで作成が出来るので非常に便利です。
    本家のGitHubのexampleで使われているpng画像をDLして画面に引っ張り込むことで、そのままワークフローを確認出来ます。
    ※ただしモデルなどは環境毎に選び直す必要があります。エラーが出て教えてくれるので大丈夫。

    落とし穴

    AUTOMATIC1111から来ると引っかかる落とし穴。
    embeddingは「embedding:~」と書かないと機能しません。
    例:embedding:EasyNegative

    おすすめカスタムノード

    AUTOMATICで言うところの「拡張機能」です。
    これが無いと凝ったことは出来ませんので、おすすめを説明していきます。
    すぐ下のComfyUI-Managerを使うとインストールが簡単なのですが、場合によっては自分でvenvなどしてインストールしないといけない場合があるのでご注意下さい。

    ComfyUI-Manager

    拡張機能をリストアップしてインストール管理出来るノードです。
    まずこれをComfyUI\custom_nodesにクローンします。
    ComfyUIを再起動してメニュー下部にManagerボタンがついてたらインストール完了です。
    拡張機能を探してInstallボタンを押せばOK…のはずですが、罠があります。

    Managerの機能でインストールするとエラーが出てインストールが完了しない場合がありますので、何かしらimport出来ないとかいうエラーが出た場合は手動インストールしましょう。

    ComfyUIを実行しているコンソールウィンドウを閉じます。
    管理者権限でターミナルを開き、ComfyUIのフォルダに移動しvenvを起動。
    venv\Scripts\activate.ps1
    
    拡張機能のフォルダに移動して以下を実行します。
    pip install -r requirements.txt
    
    もしくは、起動時にimportエラーになっているモジュールを個別でインストールしてもいいです。
    ERROE:import~~~とか出ているので、venvを起動して以下のコマンドでインストールします。
    pip install mmcv(例)
    複数インストールする場合は以下のようにスペース開けて連続で書けばいけますよ。
    pip install lark numba insightface sd_meh tensordict onnxruntime onnxruntime-gpu dynamicprompts

    余談ですがrequirements.txtにはモジュール名が記載されており、これらをまとめてインストールするための機能になります。
    標準機能以外のインストールが必要な拡張機能のフォルダには大体requirements.txtが用意されています。 されていない場合は、起動時のエラーを見て自分でインストールすることになります。

    前置きが長くなりましたが、以下に代表的なカスタムノードを上げます。
    主に自分が使っている、知っているノードなので、もっと便利なものは人によって異なる点はご了承ください。

    ComfyUI-Custom-Scripts

    ComfyUIの開発根幹メンバーの一人っぽい人のカスタムノード。
    細かい機能群ですがとても便利な機能がまとまっていて必須のノードです。
    例えば、右クリックしてWorkflowImage>Exportでワークフローの画面をスクショ出来るとか、Ksamplerを右クリックするとHires.fix構成のノードが引き出せるとかとか。
    色々あるので、詳細はGithubページを確認しましょう。

    WAS Node Suite

    おそらくComfyUI入れてる人は全員入れてるレベルのスーパーカスタムノードです。色々な機能があるし、アップデートも頻繁なので私もよくわからない機能が多いです。
    WASさんはお仕事がそっち系らしく画像をコンポジット的に後加工するノードが豊富です。ffmpegのパス通すと動画もやれるみたいですが自分はまだ試してません。
    詳しくは上のページを見てください。
    issueとかで質問すれば答えてくれるかもしれません。

    Advanced CLIP Text Encode

    上のWASさんのカスタムノードを使う際に必要になるカスタムノードです(確か)。
    プロンプトの重みづけがAUTOMATIC1111とComfyUIはかなり異なるのですが、それをAUTOMATIC1111風の計算(あくまで近づけた、というだけで全く同じではない)や独自の重みづけ計算のものにすることが出来ます。

    ComfyUI-Impact-Pack

    SEG回りの機能が豊富でFaceDetailerとか出来ます。あとめちゃくちゃアプスケするとか。
    高度過ぎてとっつきにくい機能が多いものの、有用な機能が多いはず。
    ComfyUIはペイント機能が無いのですが、マスクについてはこのカスタムノードでMaskPainterというものがあります。
    issueとかで質問すれば答えてくれるかもしれません。

    Davemane42's Custom Node for ComfyUI

    MultiAreaConditioningがあります。領域ごとにプロンプトを分けて…というあれです。

    画像

    ComfyUI's ControlNet Auxiliary Preprocessors

    ControlNetのPreprocessorです。
    AUTOMATIC1111の方と違って有志の個人がComfyUI用に追加しているので、AUTOMATIC1111で出来ることがこっちで出来ない、という事は有ります。


    Tiled sampling for ComfyUI

    Tiledです。MultiDiffusion的なことをする場合に使います。
    大きくアプスケしたいとか、アウトペイントででかい画像作りたい場合に使うと思います。(私はあまり使っていないですが)

    Efficiency Nodes for ComfyUI

    XY-Plotが使えます。

    civitaiにも色々ある

    自分で組もうと思うと絶望するワークフローが上がってたりするので見てみると良いかと思います。

    良く使う小技

    ノードにある値をinputに変換し外に出せます!
    例えばKSamplerを右クリすると下の方にconvert~という項目が並んでます。
    これらを選択すると、選んだ項目がinputに変わって接続できるようになります。
    ここにPrimitiveというノードをつなぐと、項目を外だし出来て、別のノードに同じ値を共有出来るようになります。

    画像
    あくまで一例ですが例えばseed値を外だしするとこんな感じになる。

    画像のコピペ

    生成されたイメージを右クリックしてCopy(Clipspace)してLoadImageノードの画像を右クリックしてPaste(Clipspace)出来ます。
    アプスケする時とかに便利です。
    クリップボードからもLoadImageノードに貼り付けが出来るので、Photopeaのようなツールで描いて進める、というのが簡単に出来るようになっています。

    保存

    以下のように指定すること画像の保存名が決められます。
    「%ノードを右クリックPropatiesにある名前.ウィジェット名%」
    例:%KSampler.seed%
    同じ画面にKSamplerが複数ある場合はPropatiesにある名前を変更して固有化すると狙い通りの保存名になります。
    また、生成時間なども以下のような文字列を入れると追加できます。
    %date:yyyyMMddhhmmss%
    例:20230708230133
    サブディレクトリを作りたい場合は/を使えばいけるはず。
    ハイフンとか入れれば視認性よくできたりします。

    モデルマージ

    自分は試していないですがモデルマージ回りのカスタムノードもあります。
    使ってみた方は感想ください。

    超詳しいwiki(wikiではないらしい)

    より詳しい内容を知りたい場合に非常におすすめな凄いwiki(wikiではない)。

    まとめ

    カスタムノードのGitHubの説明欄に、そのカスタムノードを動かすために必要な別の人のカスタムノードが書かれていたりするので、そういうのもチェックするといいです。
    また、仕様を理解すると自分でノードを作ることも比較的容易にできると思います。

    おまけ

    SDXLのモデルを用意したら以下のjsonをComfyUIの画面に引っ張り込んだらサンプルのノードが使えます。


    あなたへのおすすめ