up:: AI_image
same:: sdwebui

GitHub - comfyanonymous/ComfyUI: The most powerful and modular stable diffusion GUI, api and backend with a graph/nodes interface.

高速で動くsdwebui対抗。起動も早い。
ノードベース。
webuiよりバックエンドとして優秀。普通に使っても軽い。

起動引数。
Reddit - Dive into anything

pluginまとめ
GitHub - WASasquatch/comfyui-plugins: Extensions, Custom Nodes, and other plugins for ComfyUI

sd サンプラー

comfyui Custom Nodes

—cpuでcpu起動できる。

a1111からの移行ガイド

ComfyUI migration guide FAQ for a1111 webui users | Andrés Zsögön

ノード共有

jsonを使用して共有できる。画像に埋め込むことも可能。
生成した画像には一緒に埋め込まれるのでA1111より共有は楽。

画像でほしい場合、custom-scriptsにある。

モデル更新

Refreshボタンを押す。
rキーがショートカット。

Reddit - Dive into anything

ノードの所属パッケージ

ComfyUI ManagerでBadgeを設定する。

ComfyUIのノードの所属パッケージ名を知る|sho

ControlNet

ほとんどは以下のauxをインストールすれば使える。
GitHub - Fannovel16/comfyui_controlnet_aux: ComfyUI’s ControlNet Auxiliary Preprocessors

auxの使い方例。
【ComfyUI基礎シリーズ6】ControlNetノードの組み方 | 謎の技術研究部

IP-Adapter

[ComfyUI で IPAdapter + ControlNet を試す|npaka](https://note.com/npaka/n/n804128301d1d
ComfyUI IPAdapter Plusの詳細チュートリアル

OpenPose

ComfyUIでSDXLのControlNetの使い方:Canny&OpenPose | 鷹の目週末プログラマー
【ComfyUI】AnimagineXLでOpenPoseを使う【SDXL】|ウチダマサトシ
【ComfyUI】OpenPose Editor for ComfyUI の使い方|ウチダマサトシ
GitHub - space-nuko/ComfyUI-3D-OpenPose-Editor
GitHub - space-nuko/ComfyUI-OpenPose-Editor

bbox_detectorは物体検出。
smlはサイズ
GitHub - Megvii-BaseDetection/YOLOX: YOLOX is a high-performance anchor-free YOLO, exceeding yolov3~v5 with MegEngine, ONNX, TensorRT, ncnn, and OpenVINO supported. Documentation: https://yolox.readthedocs.io/

基本的にyolox_l.onnxとdw-ll_ucococ_384.onnxを使えばOK。

書きだすと一番上に[]があるせいでエディタで反応しない。
手動で消す。

Openpose Editor

resize and fill

paddingを使い、inpaintとしてnavierで埋める。
その後blurをかける方法もあるらしい。

Reddit - Dive into anything

もしくはoutpaintを使用、増やした分のマスクにset latent noise maskを使用してoutpaintの画像と合体させる。
Reddit - Dive into anything

how-to-one-step-txt2image-resize-and-fill-using-controlnet-v0-dxt6n3z51xkb1.jpg

ngrok

標準でついてないので自前で。
とはいえカスタムノードを使用した直接起動がある。これを配置してinit.py開いて書き換え。

GitHub - pkpkTech/ComfyUI-ngrok

zrokを使う方法も。

sd Tunnel

SDXL OpenPose代わり

OpenPoseが使えるSD1.5で絵の大まかな方向を決定。
その絵から線画を抽出し、SDXLに入れる。
Hed Softedgeとcontrollliteのsoftedge
sargeztのsoftedgeは見た目はいいが2gbのせいで落ちる
細部がちょっと雑になるので、SD1.5でrefineして仕上げる。ip-adapterもここ。

SDXLでControlNetのScribble/Sketchモデルを使用する - Stable Diffusion Tips | iPentec
SDXL RefinerをComfyUIで使おう|なかむらしっぽ/中邑七宝

lineartじゃないのは修正がめんどそうだから。

SDXLでControlNetのLineartモデルを使用する - Stable Diffusion Tips | iPentec
ControlNet(v1.1)のLineartを極める!他機能との違いも!【Stable Diffusion】 | 謎の技術研究部

同じ用途のX-Adapterというのがある。
仕組みは同じ。

背景
簡単!StableDiffusionWebuiで画像合成 背景・人物どっちも雰囲気大切編|ぐふとくく@gufutokuku

PatchModelAddDownscale

Kohya Deep Shrinkとも。
大きい画像を生成したときに人間などが二重になる現象を回避できるアップスケーラー。
modelに挟む。

ちなみに仕組みは原因部分の時だけLatentを縮小するものらしい。

Deep Shrink Hires.fix - work4ai
【ComfyUI+SDXL】描き込み強化を重視したHires.fixを組み込んだワークフロー|mogami

そもそも大きな画像出力用の定めとして当然出力時間は伸びるので、構図を先に決めたい場合はi2i用画像の生成フローを一緒に組み込むといいよという話。

同じ用途のHiDiffusionというのがある。

raise RuntimeError(f’{self is bound to a different event loop’)

comfyui-profilerのバグ。
代わりにdev-utilを使う。

random crashes since last update · Issue 2999 · comfyanonymous/ComfyUI · GitHub
Error after KSampler execution. · Issue 2 · tzwm/comfyui-profiler · GitHub
GitHub - ty0x2333/ComfyUI-Dev-Utils: Execution Time Analysis, Reroute Enhancement, Remote Python Logs, For ComfyUI developers.

バッチの最後のイメージを取り出す

selectorをインストール。

GitHub - SLAPaper/ComfyUI-Image-Selector: Select one or some of images from a batch

BREAK

conditioning concat。

Reddit - Dive into anything

Inpaint Sketch

Inpaintはその部分だけをマスクしてi2iを掛ける機能。
Sketchは書き足して全体にi2iを掛ける機能。
なのでComfyuiでやるなら、たぶん書き足した画像とそこにかかるマスク画像を用意し、inpaintよろしくMask Encodingすれば出来るはず。

Reddit - Dive into anything

soft inpaint

InpaintModelConditioning。
Reddit - Dive into anything

Manga

Mask from colorを使用することにより、自動で一つずつ処理させる。

Reddit - Dive into anything

Xe Graphics

Intel内蔵GPUも一応サポートしている。
Pytorchを専用の物に差し替える必要がある。

Intel Arc Graphics Thread · comfyanonymous/ComfyUI · Discussion 476 · GitHub

Inpaint

画像右クリックでmask editorが使える。
しかしsdwebuiの標準機能以下なので、Segment Anythingなどを使い自動で認識させるほうが良い。

Empty Image

色をRGBの16進数で選べる。
が、本当に16進数を入力するとエラーになるので10進数として使用する。
例えば赤はff0000にすればいいので16711680。

i2i

Ksamplerのdenoiseはステップ数の後ろから何割を適用するかという設定。
KsamplerAdvancedでいうStep25Start0End12みたいな、初めから何割みたいなのはKsamplerだと作れない。

KSamplerAdvanced で denoise 量を指定する方法 - ComfyUI 解説 (wiki ではない)
適当な色パターンをぶち込んでもいい感じの絵が出る。

【ComfyUI】ランダムなカラーパターンからイラストを作る方法

背景削除

BRIA AIとMarigoldの二値化が使える。
~~BRIAはなんか中身iopaintのrembgっぽい?~~別物っぽい。

ComfyUIで背景を削除できるノード【BRIA AIとMarigold】

他、CartoonSegやAnimesegも使える。
今ならbirefnetが最強化。

Tips

ヒストリ消さないと重くなるらしい。
Latentを途中保存することで軽くなる。

Latent Composite

ノイズを残したlatentを合成し、全体に薄くSamplerを掛ける。
キャラごとの特徴を残しにくいが手は繋げる。

Noisy Latent Composition Examples | ComfyUI_examples

ConditioningSetArea & ConditioningSetMask

Areaはサンプラーの範囲で縛る。MaskはConditioningの範囲を縛る。
Maskもサンプラー範囲を使用することは可能。

ConditioningSetArea ノード - ComfyUI 解説 (wiki ではない)
ConditioningSetArea の動作詳細 - ComfyUI 解説 (wiki ではない)
ConditioningSetMask ノード - ComfyUI 解説 (wiki ではない)

日付

%date:yyyyMMddhhmmss%という形式で日付を入力できる。
Save File Formatting - ComfyUI Community Manual

ノード名保存

%node_name.widget_name%という形式でノード内の情報を得られる。
ここで言うノード名はPropertiesで変更できるNode name for S&R。先にこちらを読み、無ければTitleを使う。

widget_nameの方はconvert widget to inputできるやつ。

SaveImage ノード - ComfyUI 解説 (wiki ではない)

画像差を浮き上がらせる

image blendというノードがあるので、これでf1.0、differenceを掛ける。

Regional prompt

SolidMaskで作り、Conditioning (Set Mask)でconditioningを作り、Combineで結合するだけ。
CombineはImpactに複数の奴がある。

CFG++

低くても崩壊しないCFG。
GitHub - CFGpp-diffusion/CFGpp: Official repository for “CFG++: manifold-constrained classifier free guidance for diffusion models”

というか滑らかに変換できるCFGっぽい。
CFG++ - work4ai

ディテール減らし

KSamplerAdvancedでディテールを減らす - work4ai

add_noiseをdisableにして除去を掛けるとディテールが減る
正しくノイズ除去

MaskEditor

Load Imageを右クリックでマスク指定できる。
Ctrlで拡大縮小移動。
右クリックかAltで消去。

ComfyUIは透過(アルファ)画像を処理できず、透過はマスクとして処理される
なので透過画像を読み込むと、透過部分は最初からマスクがついている物として読み込まれる。
要らない場合はMaskEditorに入りClearをクリックすれば消せる。

ComfyUI 画像の合成についての検証|YGPuzzleGTANT

comfyui-lama-removerを使用する際、これを知らないとうまくマスクできないので注意。

なお、保存はマスクを等価として扱うためうまくいく。

いらすとやの場合、編集途中で消してpngで隠したと思われる部分が見える画像がある。
二枚読み込み、周辺切り取りマスクと編集マスクに分け、image with alphaで作ればOK。

save nodeのfile_prefixの記法を他でも使いたい

primitiveを使用し、run widget replace on valuesを右クリックのpropertiesからONにすると、同じく変換してくれるようになる。
Custom node breaks Save File Formatting · Issue 191 · pythongosssss/ComfyUI-Custom-Scripts · GitHub

ただしjsonから読み込んだ時に名前を変換してしまう。

日付だけならwasのtext parse tokenが使える。
%Y%m%d%H%M%SでZettelkastenIDが振れる。
GitHub - WASasquatch/was-node-suite-comfyui: An extensive node suite for ComfyUI with over 210 new nodes

thedyzeのsave imageはこの問題を解決してるらしいが、こいつはwebp形式へ変換してくれない。
Default ComfyUI syntax naming support · Issue 18 · thedyze/save-image-extended-comfyui · GitHub

KJNodesにWidget To Stringというウィジェットから直接文字列を出してくれる奴がある。
これでいく。

画像をセーブしたいだけならsave-image-extended-comfyuiでいい。

カスタムノードを作る

A Basic Guide to Creating ComfyUI Custom Nodes | Civitai

画像に透明度を足したい

Join Image With Alpha。
Blendとかと混同して忘れがち。

マスク

白が切り、黒が残り。他のほとんどのマスクと反対。
Depth Proなど外部マップは白手前、黒奥になっている。

AI感

アウトラインを付けるとAI感は薄れる。

画質UP

DiTのみ。
CFG-Zero* - work4ai
SkipLayerGuidance - work4ai

速度UP

DiTのみ。
TeaCache - work4ai

Compatibility with CMake < 3.5 has been removed from CMake.

cmakeのバージョンが3.5以下じゃないとsentencepieceで止められる。
先にpip install cmake==3.27.0

Client Challenge

ちなみにuvだと普通に通る。なんで?

Create Custom Node

NODE_CLASS_MAPPINGSというclassと名前をまとめたdictを、__init__.py__all__に渡す。

classではINPUT_TYPE関数の戻り値jsonでノードの入力、RETURN_TYPESタプルで出力ピン、RETURN_NAMESタプルで出力ピンの名前、CATEGORY stringsでカテゴリの設定などが出来る。

一番大事なノードの中身は、FUNCTION stringで関数名を指定。class内の同名の関数を実行する。

remove alpha

essentialノードの中にある。