このシリーズではKJNodesのマスク関連のノードを紹介してきたが、その他のノードもかなり有用である。
その名の通りノードプログラミングで変数を定義するケースでよく見かけるGet/Set
KJNodes内では定数扱いのようだ。
次の例ではVAEをmyVaeという値にSet
で保存しておいて、どこからでもGet
ノードで取り出せる。
配線がごちゃごちゃになりがちなComfyUIをスマートにしてくれる出ノード。
個人的に定数として「ピンのデフォルト値」を作りたい場合は次のUse Everywhere
ノードを使うほうが楽。
【カスタムノード】Use Everywhere(UE Node)の使い方【ComfyUI】 | 謎の技術研究部
しかし同じノードをいくつも重ねて使うケースはAnything Everywhere
は使いにくい。特にControlNet。
例えば次のように複数の初期設定を一箇所に移動しておきたいような場合はget/set
を使う
VRAM Debug
こちらは公式の解説がないのでフォーラムからの情報
恐らくVRAMを開放するノードだが、Debugとあるように後ろのピンからVRAM開放前、解放後の残量が取得できる。
入力のclip_vision
はロードしっぱなしになるモデルの一つであるためここに繋いで明示的に開放するとのこと
clip_vision
はIPAdapter
等で使うモデル。
またこのノードを使わなくてもsampler系ノードの実行時に通常は自動で開放されるとのことなので、無理に覚えておく必要はなさそう?
SomethingToString
数値を文字に変換しつつ、前後に文字を付け足すマニアックなノード
prefix
, suffix
を空欄にしておけばそのまま数値を文字列へ変換として機能するのでそれだけでも覚えておくと良い。
この例では1.72という数値を文字に変換しaaaとbbbで挟む処理をしている。
Somethingと書いてあるので数値以外なんでもよさそうだが、IntかFloatじゃないとエラーが出ることを確認。
Cross FadeImages
動画と動画をクロスフェードするノード
ただし、注意点はこれは単一の画像と画像を時間指定してクロスフェードすることは出来ない。
必ず動画と動画であること(つまり複数の画像の集まり)
複数のAnimateDiff動画を繋ぐ時に有用かもしれない。
EmptyLatentImagePresets
標準のEmpty Latent Image
では縦横の数値を直接入力するがプリセットから選ぶタイプのもの。
Empty Latent Image
ではそもそも中途半端な数値をいれてもどうせKSamplerを通すと64の倍数に補正されてしまうのでプリセットは直感的にわかりやすい。
invert
スイッチは縦横の数値を逆にするだけだが、これが地味に便利かもしれない。
GetImageRangeFromBatch
例にあるように上では4枚の画像バッチからindex1~2の画像を抜き出している。
※Indexは0から始まるので注意
なにげにこういう処理は時々欲しくなるので覚えておくと必ず役に立つと思う。
GetImagesFromBatchIndexed
こちらはGetImageRangeFromBatch
に似ているが、範囲ではなく特定の番号1個ずつ指定して取り出せる。番号は飛び飛びでOK。
GetLatentsFromBatchIndexed
ImageではなくLatentで同じ処理をしたい場合はこちら。
ReverseImageBatch
こちらは見出し通りの効果で、画像の並びを逆にするだけ。
動画として生成し逆再生するときなどに気軽に使えるかも。
ImageGridComposite2x2
上の例では出力結果がバッチになっているように見えるが完全に1枚の画像に結合されている
つまり複数の画像を繋げて1枚にするもの。
2x2の他に3x3もある。
具体的にどういうときに有用か分からないが、簡易的な出力結果の比較保存のような目的だろうか?
もちろん複数を結合してからAIで変換するというパターンも考えられる。
ImageConcatenate
上のノードと名前が少し変わるが基本動作は同じノード。
2枚の画像を並べるだけ。
こちらの良いところはdirection
設定で縦に並べるか横になレベルかが選べるところ。
ReplaceImagesInBatch
original_images
の画像バッチに対してstart_index
を指定してreplacement_images
に置き換えるノード。
上の例ではindex=2の画像をcanny画像に置き換えている。
replacement_images
に複数の画像が入ってきた場合は、指定されているindex
から入ってきた枚数分上書きされる。
例えば上の例のまま2枚のcanny画像をを入れた場合次のようになる。
AddLabel
上の画像にあるように画像の上下どちらかに簡易のテキストを書き込むノード。
画像比較時にわかりやすくするといった目的が考えられる。
付属のフォントでは日本語は表示されないが、こちらを変更すれば日本語でもかける。
windowsの場合はC:\Windows\Fonts
の中にあるファイルのプロパティを表示し、最上部にあるファイル名をコピーしてfont
の設定項目に貼り付ければフォントを替えられる
ImageBatchRepeatInterleaving
ちょっとわかりにくいがrepeat=2
にした場合は、同じ画像が2連続になる(単純に画像数は2倍になる)
これの特徴はバッチの後ろにもう一回同じバッチを繰り返すのではなく、各画像ごと2連続になっているという点。
当然3にすれば各画像が3連続で続くことになる。
24fpsで2コマ打ちにするときなどに使えるだろうか?(12fpsのmp4が扱えない動画ソフトがあるので)
ImageUpscaleWithModelBatched
このノードはコードレベルで調査。おそらく「まとめてアップスケール処理する」ノードだと思われる。
つまり上のようにper_batch = 16
となっている場合は画像バッチから16枚分一気に読み込んでアップスケールを繰り返すものだと思う。
ハイスペックPCを使っている場合に速度アップ目的に用いるノードかもしれない。上級者向け。
※こちらあまり自信なし
ImageNormalize_Neg1_To_1
こちらもコードで読む感じ、画像の数値を2倍して-1しているので0.5以下の部分は0になるような動きだと思われる。
単純に画像を暗くするときに使える?ちょっと良くわからない。
通常ノーマライズというのは例えば「-0.52 ~ 5256.654」 のような適当な範囲のものを0~1のスケールに収める事を言う。
全然関係ないがUEにはConstantBiasScaleというノードがあり「定数を加算してから乗算」することにより-1 ~ 1を0 ~ 1へ変換するようなノードがあり、便利。
が、このImageNormalize_Neg1_To_1
はこれとは違い「2で乗算してから-1する」という順序。これは何を目的としてるんだろうか?
ImageBatchTestPattern
:どのように設定してもtext is not defined
のエラー
InsertImageBatchByIndexes
:コードレベルまで軽く読んだがinsert_indexes
というインプットに入れられるINDEXES
という型を出力できるノードがFilterZeroMasksAndCorrespondingImages
という激マニアックノードのアウトプットからしか繋げないため、おそらく世界的にもこれを使えるのは片手で数える人数だろうと予想し調査を中断。
WidgetToString
:そもそもWidgetが何を示すのか分からず何をやってもエラーになるので断念
DummyLatentOut
:こちらもコードレベルで読んだが、入ってきたLatent
をスルーするだけなので何のために使うのか不明。
StableZero123_BatchSchedule
:全く使い方がわからなかったので保留。StableZero123自体を使ったことがないのでいずれ...
ImageTransformByNormalizedAmplitude
:こちらもnormalized_amp
の入力があり恐らくComfyUI-AudioScheduler
と組み合わせて使うもの。使ったことがないのでスキップ。
ScaleBatchPromptSchedule
:プロンプトトラベル用?プロンプトトラベルを使ったことがないため中止。アニメーションフレームの拡縮のようなものと同じ原理でプロンプトトラベルを操作するのではないか。
EffnetEncode
:詳細不明。EfficientNet:https://zero2one.jp/ai-word/efficientnet/ このあたりの技術が関係していそう。