Add a 2026.11.04 notice to README explaining that many node inputs and outputs were renamed or reordered and need reconnecting, and update the ja/en/zh node docs and changelog for LIST/ARRAY, x / y_items, the new D2 List Converter and the deprecated list nodes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
25 KiB
- Top
- Node / Image Node / Text Node / XYPlot Node / Float Palet
- Workflow
Node
🍅 Text Node
D2 Regex Replace
- 正規表現を使って置換ができる
- 複数の条件を指定できる
- 正規表現によるマッチ文字列の再利用ができる(\1、\2 など)
- 対象文字列を「タグ単位」と「全体」で指定できる
Input
text- 検索対象文字列
modeTag:textを改行と「,」で分解し、個別に置換するAdvanced:textをまとめて置換する
regex_and_output- 検索文字列と出力文字列の一覧
- 下記のフォーマットで記入する
- 出力文字列に何も記載されてない時はマッチした部分を削除する
- 個数に上限は無い
検索文字 1
--
出力文字列 1
--
検索文字 2
--
出力文字列 2
Output
text- 置換処理をしたテキスト
Sample
Pony系列のクオリティタグを削除するサンプル。
Mode: Tag
Input text
score_9, score_8_up, (score_7_up, score_6_up:0.8) , rating_explicit, source_anime, BREAK
1girl, swimsuit
Regex Replace
.*(score_|rating_|source_).*
--
--
BREAK
--
Output text
1girl, swimsuit
D2 Regex Switcher
- 入力テキストを正規表現で検索し、該当したテキストを出力
- 主な目的は Checkpoint 毎のクオリティタグの切り替え
- 入力した
textの中に合致する文字列を発見すると、対象文字列と、何番目に合致したか(0 から開始)を出力する - 上の画像では
ioliPonyMixV4.safetensorsを受け取り、検索条件ponyに合致したのでscore_9が出力されている - 最初の検索条件に合致したので
indexは0が出力される - 全ての条件に合致しないと
-1が出力される - 文字列の前方結合、後方結合もできる。
Input
text- 検索対象文字列
prefix- 前方に結合する文字列
suffix- 後方に結合する文字列
regex_and_output- 検索文字列と出力文字列の一覧
- 下記のフォーマットで記入する
pre_delimprefixとregex_and_outputを接続する時に挟む文字Comma:,/Line break: 改行 /None: 何も挟まない
suf_delimsuffixとregex_and_outputを接続する時に挟む文字
検索文字 1(正規表現も使用可能)
--
出力文字列 1
--
検索文字 2(正規表現も使用可能)
--
出力文字列 2
--
--
合致するものが無い時に出力する文字
Output
combined_textprefix+ 出力文字列 +suffixを結合した文字列
prefix/suffix- Input のパススルー
使用例
この例では合致した番号(index)を Easy Use の Text Index Switch に渡して切り替えている。
合致しないと -1 になってしまうので、全ての文字列に合致する正規表現 .+ を使ってデフォルト出力の代わりにしている。
D2 Multi Output
- seed や cfg など汎用的なパラメータをリスト出力するノード
Input
typeFLOAT: 浮動小数点数。CFG などINT: 整数。steps などSTRING: 文字列。sampler などSEED: 乱数生成ボタンで seed 値を入力できる
Add Random- 入力欄に乱数を追加する
typeがSEEDの時だけ表示される
Output
x / y_items- 普通の改行区切りテキスト
D2 XY Plot、D2 XY Plot Easy、D2 XY Plot Easy Miniで使用する
LIST- 改行で分解して1つずつ出力する。繋いだ先のノードは要素の数だけ実行される
ARRAY- 改行で分解して配列で出力する
D2 List Converter
LIST(要素を1つずつ出力する ComfyUI の list)とARRAY(配列を1つの値として出力する ComfyUI 標準の Array 型)を相互に変換し、文字列にもするノードD2 List To StringとD2 XY List To Plotの機能をまとめたもの
Input
LIST/ARRAY- 変換する値。どちらか一方を繋ぐ
- 両方繋いだ時は
LIST→ARRAYの順に連結する
separatorSTRING出力の区切り文字Comma + Space:,で結合Comma:,で結合Line break: 改行で結合Semicolon:;で結合Space: 半角スペースで結合None: 区切り文字なしで結合
Output
x / y_items- 改行区切りテキスト。
D2 XY Plotに使う - 要素の中の改行は消して出力する
- 改行区切りテキスト。
LIST- 要素を1つずつ出力する
ARRAY- 配列として出力する
STRINGseparatorで結合したテキスト- 要素の中の改行はそのまま残す
D2 List To String
非推奨になりました。今後は D2 List Converter をご利用ください。
D2 Text Concat
- 入力数を調整できるテキスト結合ノード
text_countで入力欄を増減し、text_1〜text_Nに接続したテキストを結合するseparatorはD2 List To Stringと共通
Input
text_count- 入力欄の数を増減する(1〜50)
separatorComma + Space:,で結合Comma:,で結合Line break: 改行で結合Semicolon:;で結合Space: 半角スペースで結合None: 区切り文字なしで結合
skip_emptytrueのとき、未接続や空(空白・改行のみ)の入力をスキップして結合する- 余計な区切り文字(
, ,)が入るのを防ぐ
D2 Filename Template / D2 Filename Template2
- 日付や他のノードのパラメーターを取り込んで文字列テンプレートを作るためのノード
D2 Filename Template2は複数行対応版です- 配列、辞書、オブジェクトから値を取得することも可能
- Stable Diffusion webui A1111風のメタデータ書式など、よく使う書式をプリセット登録が可能
custom_nodes/d2-nodes-comfyui/config/template_config.yamlを編集することで追加可能
Input
arg_{数字}- 他のノードから値を取り込む
format%date:{yyyy/MM/dd/hh/mm/ss}%yyyy: 年MM: 月dd: 日hh: 時mm: 分ss: 秒
%{ノード名}.{key}%- ノード名と、項目名を指定して値を取得する
- 例:
%Empty Latent Image.width%: Empty Latent Image のノードから width を取得
%node:{id}.{key}%- ノードIDと、項目名を指定して値を取得する
- 例:
%node:8.width%: ID 8 のノードから width を取得
%arg_{数字}%- 入力した値を埋め込む
%arg_{数字}:ckpt_name%- チェックポイント名から
.safetensorsを除外したものを埋め込む
- チェックポイント名から
%arg_{数字}:preset.{プリセット名}%- プリセットは
custom_nodes/d2-nodes-comfyui/config/template_config.yamlを編集することで追加可能
- プリセットは
%exec_{数字}[{index}]%arg_{数字}に入力された配列から{index}の値を取得
%exec_{数字}['{key}']%arg_{数字}に入力された辞書から{key}の値を取得
%exec_{数字}.{key}%arg_{数字}に入力されたオブジェクトから{key}の値を取得
arg_count- 入力項目の増減
normalization- ファイル名に使えない
:を_に変換する
- ファイル名に使えない
`arg_N`に接続したノード情報や、ノード名などを使って取得している
生成パラメーターをまとめたオブジェクト `d2_pipe` から `steps`,`sampler_name` を取得している
`arg_1` に入力された値をプリセット `a1111` を使って出力している。チェックポイント名を追加するために `D2 Pipe` を使用
D2 Prompt
CHOOSEボタンからLoRAを選択し、A1111方式のLoRAプロンプトを挿入できる- テキスト内のコメントを削除する
- 行頭「#」、行頭「//」、「/*」〜「*/」の間が対象
- トークン数を下部に表示(
token_countがtrueの時に動作する) - トークン数の計測のCLIPは"ViT-L/14"を使用。他のCLIPを使いたい時は
D2 Token Counterをご利用ください
コメントアウトのショートカットキーについて
- 全てのテキストボックスでコメントアウトのショートカットキー(ctrl + /)が使用可能
- ショートカットキーは
Settings > D2 > shortcutKeyで変更可能 - 無効にしたい場合は上記の内容を削除する
D2 Prompt Sanitizer
- プロンプト文字列を整形するノード
_(アンダースコア)を半角スペースに変換する(long_hair→long hair),(カンマ)の後に必ず半角スペースを1つ入れ、前後の余分な空白を整理する(a , b→a, b)- 連続した余分なカンマをまとめ、行頭のカンマを削除する(
a,, ,b→a, b) - 改行の変換、重複タグの削除、コメントの削除もできる
- 各処理は個別に ON / OFF できる
Input
underscore_to_space:_を半角スペースに変換するspace_after_comma:カンマ前後の空白を整理し,に統一する(改行は保持)remove_extra_comma:連続した余分なカンマ(,,/, ,)を1つにまとめ、行頭のカンマを削除する(改行は保持)protect_lora:<...>で囲まれた LoRA 表記などを変換対象から保護する(<lora:my_lora:1>のアンダースコアを残す)protect_score:Pony 系の品質タグscore_9/score_8_upなどを変換対象から保護するnewline_mode:改行の変換方式keep:何もしない(改行を保持)add_comma:各行末に,を追加する(改行は保持。空行・既に,で終わる行には追加しない)to_comma:改行を,に変換して1行にまとめるto_space:改行を半角スペースに変換するremove:改行を削除する(1girl\nsmile→1girlsmile。日本語テキストの結合向け)
remove_duplicate_tags:重複したタグを削除する(先に出てきたものを残す。_と半角スペースの違い・大文字小文字は無視して比較する)strip_trailing_comma:文字列全体の末尾にあるカンマを削除する(add_commaとの併用向け)comment_type:削除するコメントの書き方。D2 Promptと同じ# + // + /**/:行頭が#の行、行頭が//の行、/*〜*/の間(複数行可)を削除する# only/// only//* */ only:それぞれの書き方だけを削除するNone:何もしない(初期値)
処理は「コメント削除 → 重複タグ削除 → 改行変換 → アンダースコア変換 → 余分なカンマ除去 → カンマ整形 → 末尾カンマ削除」の順で行われる。
remove_duplicate_tagsで残る,,はremove_extra_commaが掃除するので、両方 ON にしておくときれいに整う。
D2 Convert NAI Prompt
- StableDiffusion と NovelAI のプロンプトの weight を相互変換するノード
Prompt convert dialogと同じ変換をワークフロー内で行える- weight の範囲は改行で区切られる(改行をまたいで変換しない)
- 重複したカンマや空白の整形は行わない。必要なら
D2 Prompt Sanitizerを後ろにつなぐ
Input
prompt:変換するプロンプト(入力専用)convert:変換の向きsd_to_nai:StableDiffusion 方式 → NovelAI 方式nai_to_sd:NovelAI 方式 → StableDiffusion 方式
mode:NovelAI 側の weight の書き方number:数値方式(1.2::aaa ::)brace:ブレース方式({{aaa}}/[[aaa]])。weight が 0 以下のタグはブレースで表せないため、そのタグだけ数値方式で出力する
remove_negative:nai_to_sdかつnumberのときだけ有効。マイナス weight のタグを削除する- 削除したタグの前後のカンマは残る(
-2::aaa::, 1.2::bbb::→, (bbb:1.2)) - weight が 0 のタグは削除しない(0 でも生成結果に影響があるため)
- 削除したタグの前後のカンマは残る(
数値方式の変換ルール
sd_to_naiでは閉じ::の前に必ず半角スペースを入れる((aaa5:1.2)→1.2::aaa5 ::)。aaa5::の5::が weight の開始と誤解釈されるのを防ぐためnai_to_sdでは::の閉じ忘れにも対応する。閉じ忘れた weight は、次の weight の開始か行末までを範囲とする1.2::blonde hair, 1.3::from side::→(blonde hair:1.2), (from side:1.3)1.2::aaa, bbb::→(aaa, bbb:1.2)(複数タグをまとめた指定はそのまま)
- マイナス weight は
(aaa:-2)のように数値の前にマイナスを付ける
D2 Moss Item / D2 Moss Prompt
- 画像生成モデル MOSS-Image のレイアウトプロンプト(JSON 形式)を作るノード
- マスクの範囲を、要素を置く位置(bbox)として使う
- bbox の座標(キャンバス中心が原点のピクセル座標)を自動で計算するので、手で計算する必要がない。解像度を変えても配置が追従する
D2 Create Masks→D2 Moss Item→D2 Moss Promptの順につないで使う- MOSS-Image のレイアウトプロンプトは実験的機能なので、USERGUIDE に書かれている項目だけに対応している
D2 Moss Item
- レイアウトの要素1つ分を作る
- マスクの中で値のある範囲を囲む長方形を bbox にする。マスクが空のときはキャンバス全体を bbox にする
Input
mask:要素を置く範囲のマスクlabel:要素の種類object:物や人物などを描かせるtext:文字を描かせる
caption:要素の見た目の説明(大きさ・スタイル・位置など)D2 Promptと同じ書き方でコメントアウトできる(行頭の#///、/*〜*/)
text:描かせる文字。labelがtextのときだけ使う- 改行したいときは
\nと入力するか、または他のノード(D2 Promptなど)を接続する
- 改行したいときは
Output
moss_item:要素1つ分のデータ。D2 Moss Promptに接続する
D2 Moss Prompt
- 画像全体の説明と、複数の
moss_itemをまとめて JSON 文字列のプロンプトにする
Input
meta:画像の種類を表すタグ。カンマ区切りで複数入力できる- 例:
poster/photograph/illustration, anime
- 例:
canvas_type:通常はsingleのままでよいsummary_caption:画像全体のシーンや画風の説明captionと同じくコメントアウトできる
item_count:moss_itemの入力数moss_item_{数字}:D2 Moss Itemを接続する
Output
prompt:レイアウトプロンプトの JSON 文字列。テキストエンコーダーに接続する
meta/canvas_type/summary_captionは、空欄にすると JSON から省略される。
D2 Token Counter
- プロンプトのトークンを数える
D2 Load Text
- テキストファイルを読み込む汎用ノード
- 学習用キャプションの一括編集では、
D2 Folder Image Queueで*.txtのパスを取得して読み込む用途で使う
Input
file_path- 読み込むテキストファイルのフルパス
encode_to_utf8true: 文字コードを自動判別して utf-8 に変換して読み込むfalse: 変換しない(utf-8 として読み込む)
Output
text- ファイルの中身(整形せずそのまま。ファイルが存在しない場合は空文字)
file_path- 入力した
file_pathをそのまま出力(D2 Save Captionのbase_filenameに渡す用)
- 入力した
D2 Load CSV
- CSV / TSV ファイルを読み込み、行・列の範囲を指定して取り出すノード
- プロンプトのようにカンマを含むデータは、ダブルクォートされている前提(標準的な CSV エスケープ)
- 巨大なファイルでもメモリを抑えるため、出力は1つにし
output_modeで形式を切り替える
Input
file_path- 読み込むファイルのフルパス
file_typecsv: カンマ区切り /tsv: タブ区切り。入力ファイルの区切り文字
encode_to_utf8true: 文字コードを自動判別して utf-8 に変換して読み込む
output_modelist: 2次元配列で出力csv: 改行+カンマ区切りのテキストで出力
row_index/column_index- 出力する行・列の範囲(1スタート)。無指定(空)で全て
3: 3行(列)目のみ2-: 2行(列)目から最後まで-4: 1〜4行(列)目2-4: 2〜4行(列)目- 壊れた書式(
0・2--4・非数値など)はエラーで実行を停止する(誤ったデータを流さないため)
use_doublequoteoutput_mode:csvのとき、全セルをダブルクォートするfalseにすると素のカンマ結合になり、カンマを含むセルは区切りが失われる("AAA,BBB","XXX,YYY"→AAA,BBB,XXX,YYY)
Output
output- 選択範囲のデータ。
output_modeにより2次元配列またはテキスト
- 選択範囲のデータ。
lines_count- 選択範囲の行数
file_path- 入力した
file_pathをそのまま出力
- 入力した
D2 Save Caption
- タグを整形してキャプションファイルを保存するノード
base_filenameの拡張子をextensionに置き換えたパスに保存する(例d:/images/aaa.jpg→d:/images/aaa.txt)- 整形は「分割 → 前後空白除去 → 区切り統一 → エスケープ除去 → 除外 → 重複除去 → 先頭追加 → 末尾カンマ」の順で行う
Input
base_filename- 保存先の元パス。
D2 Folder Image Queueのimage_pathやD2 Load Textのfile_pathを受け取る - 空の場合はエラーで停止する(意図しない場所への保存を防ぐため)
- 保存先の元パス。
text- キャプション本文(
WD14 TaggerやD2 Load Textから)
- キャプション本文(
extension- 保存するファイルの拡張子(例
txt)
- 保存するファイルの拡張子(例
exclude_tags- 除外するタグ。カンマ・改行の両方で区切る
regex/パターン/と書くと正規表現にマッチしたタグを除外する(除外専用)- 括弧のエスケープは無視して比較する(プロンプトの
rem_\(re:zero\)を除外タグrem_(re:zero)で除外できる)
prepend_tags- 先頭に追加するタグ。カンマ区切り。既に存在するタグは追加しない
word_separator- 単語区切りを統一する(
blue eyesとblue_hairの混在を揃える) underscore(デフォルト): スペースを_に統一(blue eyes→blue_eyes)space:_をスペースに統一(blue_hair→blue hair)none: 変換しない
- 単語区切りを統一する(
remove_escapetrue: 出力タグから括弧のエスケープ(\(\)\[\])を外す(rem_\(re:zero\)→rem_(re:zero))。学習用キャプション向け
trailing_commatrue: 末尾にカンマを追加
ignore_casetrue: 除外の判定で大文字小文字を無視する
backuptrue: 同名ファイルがあれば旧ファイルを.bakにリネームしてから保存
dry_runtrue: 変換結果のプレビュー用。ファイルに保存せず、整形結果をtext出力で確認する
Output
text- 整形後のキャプション
file_path- 保存先のフルパス(
dry_run時は保存予定のパス)
- 保存先のフルパス(
D2 Tag Report
D2 Save Captionのexclude_tags(除外タグ) に繋ぐ除外タグリストを作成するためのノード- 指定フォルダー内のキャプションからタグの出現頻度を集計し、除外タグリストを作る
Get tagsボタンで集計結果をtextに表示する- ユーザーは残す・消すを編集し、
D2 Save Captionのexclude_tagsに渡す
- 行頭に
//または#を付けるとコメント行になる exclude_tagsにタグ辞書を指定すると、辞書に載っていないタグだけを集計する- カンマ忘れ(
blue eyes twintails)や空白ミス(blondehair)など、誤って入力したプロンプトを炙り出せる
- カンマ忘れ(
D2 Tag ReportD2 Save Captionの使い方はこちらの記事をご覧ください
Input
folder- キャプションファイルのあるフォルダー(フルパス)
include_subfolderstrue: サブフォルダーも対象にする
extension- 対象とする拡張子(例
txt)
- 対象とする拡張子(例
order_bycount_9-0: 出現回数の多い順count_0-9: 出現回数の少ない順tag_a-z: タグ名順(A→Z)tag_z-a: タグ名順(Z→A)
without_counttrue: レポートに出現回数を表示しない
exclude_tags- 集計から除外するタグ辞書のファイルパス(フルパス)
- 辞書の中身ではなく、辞書ファイルのパスを指定することに注意
output_typeremove_comment: コメント行を削除して残りを出力(消したいタグをコメントでマークする運用)output_comment: コメント行のみを出力(消したいタグだけコメント化する運用)
separatornewline: 改行区切りで出力(regex/パターン/などカンマを含むエントリが壊れないため推奨)comma: カンマ+空白の1行で出力
Output
text- 編集後のタグリスト(
D2 Save Captionのexclude_tagsに渡す)
- 編集後のタグリスト(
exclude_tags について
-
辞書に掲載されていないタグ=誤入力の疑いがあるタグをあぶり出すための機能
-
辞書に載っているタグは集計されないので、辞書に無いタグだけがレポートに残る
-
対応する辞書の書式は3種類。いずれも1カラム目をタグとして読む
-
タグだけのリスト
1girl solo -
見出し行の無い形式(ComfyUI Custom Scripts など)
1girl,4114588 solo,3426446 -
見出し行のある形式(ComfyUI Auto Complete Plus など)
tag,category,count,alias 1girl,0,4974288,"女の子,女性,少女"
-
-
大文字小文字、スペースとアンダースコアの違い(
long hairとlong_hair)、括弧のエスケープ(\(と()は区別せずに照合する -
注意:
Get tagsボタンはワークフロー実行前に動くため、他のノードから接続した値は読み取れない。辞書は必ずこの欄にパスを直接書いて指定する