Describe the tag dictionary formats, the matching rules, and the restriction that the value must be typed into the widget because the Get tags button runs before the workflow executes. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
19 KiB
19 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
LIST- 改行で分解して配列で出力する
x/y_list- 普通の改行区切りテキスト
D2 XY Plot、D2 XY Plot Easy、D2 XY Plot Easy Miniで使用する
D2 List To String
- 配列(LIST)を1つの文字列に結合するノード
separatorで区切り文字を選択する
Input
separatorComma + Space:,で結合Comma:,で結合Line break: 改行で結合Semicolon:;で結合Space: 半角スペースで結合None: 区切り文字なしで結合
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との併用向け)
処理は「重複タグ削除 → 改行変換 → アンダースコア変換 → 余分なカンマ除去 → カンマ整形 → 末尾カンマ削除」の順で行われる。
remove_duplicate_tagsで残る,,はremove_extra_commaが掃除するので、両方 ON にしておくときれいに整う。
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ボタンはワークフロー実行前に動くため、他のノードから接続した値は読み取れない。辞書は必ずこの欄にパスを直接書いて指定する