見出し画像

Hookシステムのマスクを使用したフローとノードのまとめ@ComfyUI

先日、Hookシステムがアップデートされました。

アップデートの詳細は上のGithubのissueにあります。
全体的に機能が改善した感じのようです。

既存のものも含めてHook関連のそれぞれのノードについて、後半でフォーカスを当てていきます。

さて、前回記事では触れていなかったマスク画像を使用したフローついて記載しておきます。
これは、マスク画像を使用することを前提にしたものになります。
そのため、img2imgに近い画像生成を想定したものと考えた方が良いかと思います。

<使い方>

これは、以前の記事で取り上げた公式が出しているマスク画像を使用したフローを一部修正したフローになります。

例えば、人物と背景を別なモデルにしたいという場合
まずはマスク画像を作成します。

tipoから適当に作った画像
上から作ったマスク画像

最終的に生成された画像

生成画像

以下がフローの全体になります。Hookは上側の一か所のみ使用しています。

上の部分でリアル系モデルをHookして、その後のプロンプトに背景の内容を記載しています。
下のメインの所はアニメ系モデルで、人物のプロンプトを記載しています。

以下のノードで、strenghを0.8にしていますが、これはデフォルトで1になっています。
その場合、マスクの部分で分離してかき分けがされるのですが、このフローのままだとマスクの部分に綺麗に人物が描かれるわけではないため、この数値を下げるとなじむ感じになりました。

元の人物の姿勢などを残したい場合はコントロールネットを人物の部分に合わせて使用してみるのが良さそうです。
以下はdepth anything v2を適用したものです。数値の設定は超適当です。マスク下あたりに人物が書いてあればOKレベル。

ちなみにマスクをかける部分を逆にすると以下のようになります。
※コントロールネットを入れていると人がプロンプトに無くても描かれます。

これはこれで良き

<試してみた感想>
色々と使い方があるのだと思いますが、なかなか手ごわそうです。

重要な点として、このHook機能を使用すると生成時間が結構かかることです。

<Hook関係のノードについて>

まずはHook機能を使う際にノードを探すのに苦労する所がありました。

以下に現時点でのHook関連ノードをただ貼ってるjsonを置いておきます。

これをコピペして使うと楽かもしれません。

現時点でのHook関係のノード一覧に対応して貼っています。
(ComfyUIのスクリプト内に記載があるもの)

# Create
CreateHookLora, CreateHookLoraModelOnly, CreateHookModelAsLora, CreateHookModelAsLoraModelOnly,
# Scheduling
SetHookKeyframes, CreateHookKeyframe, CreateHookKeyframesInterpolated CreateHookKeyframesFromFloats,
# Combine
CombineHooks, CombineHooksFour, CombineHooksEight,
# Attach
ConditioningSetProperties, ConditioningSetPropertiesAndCombine, PairConditioningSetProperties, PairConditioningSetPropertiesAndCombine, ConditioningSetDefaultAndCombine, PairConditioningSetDefaultAndCombine, PairConditioningCombine, SetClipHooks,
# Other
ConditioningTimestepsRange,

それぞれの代表的なノードのパラメーターの簡単な解説

<Create部のノード>
これらは名前通りかと。(MO)はCLIPの重みを加えないもの

<Scheduling部のノード>

「hook_kf」という扱う部分です。
最終的に以下のノードにつなげる感じ

①CreateHookKeyframe

strength_mult:このキーが持つ影響力を設定します。値が大きいほど影響が強くなります。範囲: -20.0 ~ 20.0

start_percent:このキーが影響を開始するタイミングを、サンプリング全体の割合(%)で指定します。例えば、0.5は全体の50%のタイミングを意味します。範囲: 0.0 ~ 1.0

②CreateHookKeyframesFromFloats

floats_strength:各キーの強度値を表す数値リスト。リストの長さが生成されるキーの数を決定します。
入力形式: 単一の浮動小数点数または数値のリスト:例: [0.5, 1.0, 1.5]

start_percen:最初のキーが影響を開始するタイミングを、全体の割合(%)で指定します。範囲: 0.0 ~ 1.0

end_percent:最後のキーが影響を終了するタイミングを、全体の割合(%)で指定します。範囲: 0.0 ~ 1.0

③CreateHookKeyframesInterpolated

strength_start:最初のキーの強度(strength)を設定します。範囲: 0.0 ~ 10.0

strength_end:最後のキーの強度(strength)を設定します。範囲: 0.0 ~ 10.0

interpolation (選択肢):補間方法を選択します。強度の変化がどのように滑らかに進むかを制御します。
 linear: 線形補間(均等な変化)。
 ease_in: 徐々に変化が加速する補間。
 ease_out: 徐々に変化が減速する補間。
 ease_in_out: 最初と最後が緩やかで中間が速い補間。

start_percent:最初のキーが適用されるタイミングを、全体の割合(%)で指定します。範囲: 0.0 ~ 1.0

end_percent:最後のキーが適用されるタイミングを、全体の割合(%)で指定します。範囲: 0.0 ~ 1.0

keyframes_count:生成するキーの数を設定します。範囲: 2 ~ 100

print_keyframes:生成されたキーの詳細情報をログに表示するかどうかを指定します。デフォルト値: False

<Attach部のノード>
ConditioningSetProperties

指定された条件(cond_NEW)に対して、以下の要素を適用する機能を提供します:強度(strength)、条件エリアの設定(set_cond_area)、マスク(mask)、フック(hooks)、タイムステップ範囲(timesteps)

strength:条件の影響度を設定します。値が大きいほど強く影響します。範囲: 0.0 ~ 10.0

set_cond_area:条件が適用されるエリアを指定します。
 default: デフォルトエリアに適用。
 mask bounds: マスクの範囲内に適用。

timesteps :条件が適用されるタイムステップの範囲を指定します。デフォルト値: 指定なし。

②ConditioningSetProperties

既存の条件(cond)に新しい条件(cond_NEW)を結合し、以下の要素を調整しながら新しい条件セットを生成します。

cond:元の条件データ。この条件に新しい条件を結合します。

cond_NEW:結合する新しい条件データ。

strength:結合する条件の影響力を指定します。値が大きいほど強く影響します。範囲: 0.0 ~ 10.0

③ConditioningSetDefaultAndCombine

既存の条件(cond)とデフォルトの条件(cond_DEFAULT)を組み合わせる機能を提供します。これにより、複数の条件を統合し、デフォルト設定を活かした柔軟な制御が可能になります。
特に、モデルが条件を処理する際に「デフォルト」として認識される条件を簡単に組み込むことができます。

cond:既存の条件データ。この条件にデフォルトの条件を結合します。

cond_DEFAULT:デフォルトの条件データ。このデータは結合時に「デフォルト」としてマークされます。

使い方はよくわからないノード・・・・

④SetClipHooks

CLIPモデルに対してフック(Hooks)を適用するためのノードです。

apply_to_conds:条件(Conditioning)に対してフックを適用するかどうかを指定します。
 True: フックが条件にも適用されます。
 False: フックはCLIPモデルにのみ適用されます。

schedule_clip (:CLIPモデルのスケジュールフックを有効にするかどうかを指定します。
 True: スケジュールに基づいてフックが適用されます。
 False: スケジュールなしでフックが適用されます。

<その他>
ConditioningTimestepsRange

条件(CONDITIONING)が適用されるタイムステップの範囲を定義します。これにより、条件がサンプリング全体のどの部分で効果を発揮するかを柔軟にコントロールできます。

start_percent:タイムステップの開始位置を全体の割合(%)で指定します。範囲: 0.0 ~ 1.0

end_percent:タイムステップの終了位置を全体の割合(%)で指定します。範囲: 0.0 ~ 1.0

TIMESTEPS_RANGE:指定された範囲全体を表します。
(例: (start_percent=0.2, end_percent=0.8))

BEFORE_RANGE:範囲の開始地点(start_percent)より前の部分。
(例: (start_percent=0.0, end_percent=0.2))

AFTER_RANGE:範囲の終了地点(end_percent)より後の部分。
(例: (start_percent=0.8, end_percent=1.0))


いいなと思ったら応援しよう!