Add a D2 Load CSV section and document the D2 Save Caption changes (word_separator, remove_escape, and bracket-escape-insensitive exclude matching). Refresh the Save Caption screenshot. Version bump is intentionally deferred. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
18 KiB
18 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に渡す
- 行頭に
//または#を付けるとコメント行になる 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: レポートに出現回数を表示しない
output_typeremove_comment: コメント行を削除して残りを出力(消したいタグをコメントでマークする運用)output_comment: コメント行のみを出力(消したいタグだけコメント化する運用)
separatornewline: 改行区切りで出力(regex/パターン/などカンマを含むエントリが壊れないため推奨)comma: カンマ+空白の1行で出力
Output
text- 編集後のタグリスト(
D2 Save Captionのexclude_tagsに渡す)
- 編集後のタグリスト(