2024-02-26

【KJNodes #3】カテゴリに含まれないその他のノード【ComfyUI】

KJNodes内で分類されないその他のノードを解説。get/setを始め便利なノードも多い。

Article Image

その他のノード

このシリーズではKJNodesのマスク関連のノードを紹介してきたが、その他のノードもかなり有用である。

ノード一覧

Get/Set

その名の通りノードプログラミングで変数を定義するケースでよく見かけるGet/Set

KJNodes内では定数扱いのようだ。

次の例ではVAEをmyVaeという値にSetで保存しておいて、どこからでもGetノードで取り出せる。

Vaeをget/set

配線がごちゃごちゃになりがちなComfyUIをスマートにしてくれる出ノード。

使い方提案

個人的に定数として「ピンのデフォルト値」を作りたい場合は次のUse Everywhereノードを使うほうが楽。

【カスタムノード】Use Everywhere(UE Node)の使い方【ComfyUI】 | 謎の技術研究部

しかし同じノードをいくつも重ねて使うケースAnything Everywhereは使いにくい。特にControlNet。

例えば次のように複数の初期設定を一箇所に移動しておきたいような場合はget/setを使う

get/set例

VRAMを開放する

VRAM Debug

ノード例

こちらは公式の解説がないのでフォーラムからの情報

恐らくVRAMを開放するノードだが、Debugとあるように後ろのピンからVRAM開放前、解放後の残量が取得できる。

入力のclip_visionロードしっぱなしになるモデルの一つであるためここに繋いで明示的に開放するとのこと

clip_visionIPAdapter等で使うモデル。

またこのノードを使わなくてもsampler系ノードの実行時に通常は自動で開放されるとのことなので、無理に覚えておく必要はなさそう?

数値を文字に変換+α

SomethingToString

数値を文字に変換しつつ、前後に文字を付け足すマニアックなノード

SomethingToStringノード例

prefix, suffix空欄にしておけばそのまま数値を文字列へ変換として機能するのでそれだけでも覚えておくと良い。

この例では1.72という数値を文字に変換しaaaとbbbで挟む処理をしている。

単に複数のstringを結合するならWAS Node SuiteText Concatenateのほうが一般的かも

Text Concatenate

Somethingと書いてあるので数値以外なんでもよさそうだが、IntかFloatじゃないとエラーが出ることを確認。

動画と動画をクロスフェードする

Cross FadeImages

動画と動画をクロスフェードするノード

ただし、注意点はこれは単一の画像と画像を時間指定してクロスフェードすることは出来ない。

必ず動画と動画であること(つまり複数の画像の集まり)

複数のAnimateDiff動画を繋ぐ時に有用かもしれない。

サイズをプリセットから選ぶEmptyLatentImage

EmptyLatentImagePresets

EmptyLatentImagePresets外観

標準のEmpty Latent Imageでは縦横の数値を直接入力するがプリセットから選ぶタイプのもの。

Empty Latent Imageではそもそも中途半端な数値をいれてもどうせKSamplerを通すと64の倍数に補正されてしまうのでプリセットは直感的にわかりやすい。

invertスイッチは縦横の数値を逆にするだけだが、これが地味に便利かもしれない。

何枚ものバッチ画像から範囲で抜き出す

GetImageRangeFromBatch

GetImageRangeFromBatch外観

例にあるように上では4枚の画像バッチからindex1~2の画像を抜き出している。

※Indexは0から始まるので注意

なにげにこういう処理は時々欲しくなるので覚えておくと必ず役に立つと思う。

バッチ画像の中から指定したIndex画像を取る(複数可)

GetImagesFromBatchIndexed

GetImagesFromBatchIndexed例

こちらはGetImageRangeFromBatchに似ているが、範囲ではなく特定の番号1個ずつ指定して取り出せる。番号は飛び飛びでOK。

これのLatent版

GetLatentsFromBatchIndexed

GetLatentsFromBatchIndexed外観

ImageではなくLatentで同じ処理をしたい場合はこちら。

バッチ画像の並び順を逆にする

ReverseImageBatch

ReverseImageBatch例

こちらは見出し通りの効果で、画像の並びを逆にするだけ。

動画として生成し逆再生するときなどに気軽に使えるかも。

複数の画像を2x2に並べて結合する

ImageGridComposite2x2

ImageGridComposite2x2例

上の例では出力結果がバッチになっているように見えるが完全に1枚の画像に結合されている

つまり複数の画像を繋げて1枚にするもの。

2x2の他に3x3もある。

具体的にどういうときに有用か分からないが、簡易的な出力結果の比較保存のような目的だろうか?

もちろん複数を結合してからAIで変換するというパターンも考えられる。

2枚の画像を横に並べる

ImageConcatenate

ImageConcatenate例

上のノードと名前が少し変わるが基本動作は同じノード。

2枚の画像を並べるだけ。

こちらの良いところはdirection設定で縦に並べるか横になレベルかが選べるところ。

画像バッチの中の1枚を別画像で差し替える

ReplaceImagesInBatch

ReplaceImagesInBatchノード例

original_imagesの画像バッチに対してstart_indexを指定してreplacement_imagesに置き換えるノード。

上の例ではindex=2の画像をcanny画像に置き換えている。

replacement_imagesに複数の画像を入れた場合

replacement_imagesに複数の画像が入ってきた場合は、指定されているindexから入ってきた枚数分上書きされる。

例えば上の例のまま2枚のcanny画像をを入れた場合次のようになる。

バッチメモ

画像にテキストラベルを書き込む

AddLabel

AddLabel例

上の画像にあるように画像の上下どちらかに簡易のテキストを書き込むノード。

画像比較時にわかりやすくするといった目的が考えられる。

付属のフォントでは日本語は表示されないが、こちらを変更すれば日本語でもかける。

windowsの場合はC:\Windows\Fontsの中にあるファイルのプロパティを表示し、最上部にあるファイル名をコピーしてfontの設定項目に貼り付ければフォントを替えられる

バッチ画像を連続して複製する

ImageBatchRepeatInterleaving

ImageBatchRepeatInterleaving例

ちょっとわかりにくいがrepeat=2にした場合は、同じ画像が2連続になる(単純に画像数は2倍になる)

これの特徴はバッチの後ろにもう一回同じバッチを繰り返すのではなく、各画像ごと2連続になっているという点。

当然3にすれば各画像が3連続で続くことになる。

24fpsで2コマ打ちにするときなどに使えるだろうか?(12fpsのmp4が扱えない動画ソフトがあるので)

いっぺんに画像をアップスケール

ImageUpscaleWithModelBatched

ImageUpscaleWithModelBatched外観

このノードはコードレベルで調査。おそらく「まとめてアップスケール処理する」ノードだと思われる。

つまり上のようにper_batch = 16となっている場合は画像バッチから16枚分一気に読み込んでアップスケールを繰り返すものだと思う。

ハイスペックPCを使っている場合に速度アップ目的に用いるノードかもしれない。上級者向け。

画像の0.5よりも低い数値を潰す??

※こちらあまり自信なし

ImageNormalize_Neg1_To_1

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/ このあたりの技術が関係していそう。



この記事をシェア


謎の技術研究部 (謎技研)