English | 日本語 | 繁体中文 - Top - Node / Image Node / Text Node / XYPlot Node / Float Palet - Workflow # Node ## :tomato: Text Node ### D2 Regex Replace
- 可使用正規表達式進行替換 - 可指定多個條件 - 可重複使用正規表達式的匹配字串(如\1、\2等) - 可按「標籤單位」和「整體」指定目標字串 #### Input - `text` - 搜索目標字串 - `mode` - `Tag`: 將 `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_delim` - 連接 `prefix` 和 `regex_and_output` 時插入的字元 - `Comma`: `,` / `Line break`: 換行 / `None`: 不插入 - `suf_delim` - 連接 `regex_and_output` 和 `suffix` 時插入的字元 ``` 搜索字串 1(可使用正規表達式) -- 輸出字串 1 -- 搜索字串 2(可使用正規表達式) -- 輸出字串 2 -- -- 無匹配時輸出的字串 ``` #### Output - `combined_text` - 連接 `prefix` + 輸出字串 + `suffix` 的字串 - `prefix` / `suffix` - Input 的直通 #### 使用範例 此例中將匹配的編號(`index`)傳遞給 [Easy Use](https://github.com/yolain/ComfyUI-Easy-Use) 的 Text Index Switch 進行切換。 因為不匹配時會變成 `-1`,所以使用匹配所有字串的正規表達式 `.+` 代替默認輸出。 --- ### D2 Multi Output
- 以列表形式輸出 seed、cfg 等通用參數的節點 #### Input - `type` - `FLOAT`: 浮點數。用於 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` - 以換行分解並逐一輸出。連接的節點會依元素數量執行 - `ARRAY` - 以換行分解並以陣列形式輸出 --- ### D2 List Converter
- 將 `LIST`(逐一輸出元素的 ComfyUI list)與 `ARRAY`(將陣列作為單一值輸出的 ComfyUI 內建 Array 型別)互相轉換,也能轉換為字串的節點 - 整合了 `D2 List To String` 與 `D2 XY List To Plot` 的功能 #### Input - `LIST` / `ARRAY` - 要轉換的值。連接其中一個即可 - 兩者都連接時,依 `LIST` → `ARRAY` 的順序串接 - `separator` - `STRING` 輸出的分隔字元 - `Comma + Space`: 以 `, ` 結合 - `Comma`: 以 `,` 結合 - `Line break`: 以換行結合 - `Semicolon`: 以 `;` 結合 - `Space`: 以半形空格結合 - `None`: 不使用分隔字元結合 #### Output - `x / y_items` - 換行分隔的文字。用於 `D2 XY Plot` - 會去除元素中的換行後輸出 - `LIST` - 逐一輸出元素 - `ARRAY` - 以陣列輸出 - `STRING` - 以 `separator` 結合的文字 - 保留元素中的換行 --- ### 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) - `separator` - `Comma + Space`: 以 `, ` 結合 - `Comma`: 以 `,` 結合 - `Line break`: 以換行結合 - `Semicolon`: 以 `;` 結合 - `Space`: 以半形空格結合 - `None`: 不使用分隔字元結合 - `skip_empty` - 為 `true` 時,跳過未連接或空白(僅空格・換行)的輸入再結合 - 可避免混入多餘的分隔字元(`, , `) --- ### 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` 時生效) - 令牌計數使用"ViT-L/14" CLIP。如果想使用其他CLIP模型,請使用`D2 Token Counter` #### 關於註解快捷鍵 - 所有文字框都可使用註解快捷鍵(ctrl + /) - 快捷鍵可在`Settings > D2 > shortcutKey`中更改 - 如需停用此功能,請刪除上述內容 --- ### D2 Prompt Sanitizer
- 整理提示詞字串的節點 - 將 `_`(底線)轉換為半形空格(`long_hair` → `long hair`) - 在每個 `,`(逗號)之後確保有一個半形空格,並整理前後多餘的空白(`a , b` → `a, b`) - 合併多餘的連續逗號,並刪除行首的逗號(`a,, ,b` → `a, b`) - 也可以轉換換行、刪除重複的標籤、刪除註解 - 各項處理皆可獨立切換開關 #### Input - `underscore_to_space`:將 `_` 轉換為半形空格 - `space_after_comma`:整理逗號前後的空白並統一為 `, `(保留換行) - `remove_extra_comma`:將多餘的連續逗號(`,,` / `, ,`)合併為一個,並刪除行首的逗號(保留換行) - `protect_lora`:保護以 `<...>` 包圍的 LoRA 表記不被轉換(保留 `` 中的底線) - `protect_score`:保護 Pony 系的品質標籤 `score_9` / `score_8_up` 等不被轉換 - `newline_mode`:換行的轉換方式 - `keep`:不做任何處理(保留換行) - `add_comma`:在每行結尾加上 `,`(保留換行;空行與已以 `,` 結尾的行不會添加) - `to_comma`:將換行轉換為 `,` 並合併為一行 - `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` 清理,因此兩者都開啟即可整理得乾淨。 --- ### D2 Convert NAI Prompt
- 在 StableDiffusion 與 NovelAI 之間互相轉換提示詞權重的節點 - 可在工作流程中進行與 `Prompt convert dialog` 相同的轉換 - 權重的範圍以換行為界(不會跨行轉換) - 不會整理重複的逗號或空白。需要時請在後方連接 `D2 Prompt Sanitizer` #### Input - `prompt`:要轉換的提示詞(僅限連接輸入) - `convert`:轉換方向 - `sd_to_nai`:StableDiffusion 格式 → NovelAI 格式 - `nai_to_sd`:NovelAI 格式 → StableDiffusion 格式 - `mode`:NovelAI 側的權重寫法 - `number`:數值格式(`1.2::aaa ::`) - `brace`:括號格式(`{{aaa}}` / `[[aaa]]`)。權重為 0 以下的標籤無法以括號表示,因此只有這些標籤以數值格式輸出 - `remove_negative`:僅在 `nai_to_sd` 且 `number` 時有效。刪除負權重的標籤 - 被刪除標籤前後的逗號會保留(`-2::aaa::, 1.2::bbb::` → `, (bbb:1.2)`) - 權重為 0 的標籤不會刪除(權重 0 仍會影響生成結果) #### 數值格式的轉換規則 - `sd_to_nai` 一定會在結尾 `::` 前加入半形空格(`(aaa5:1.2)` → `1.2::aaa5 ::`),以避免 `aaa5::` 的 `5::` 被誤判為權重的開始 - `nai_to_sd` 也能處理忘記加上結尾 `::` 的情況。未結束的權重範圍持續到下一個權重的開始或行尾 - `1.2::blonde hair, 1.3::from side::` → `(blonde hair:1.2), (from side:1.3)` - `1.2::aaa, bbb::` → `(aaa, bbb:1.2)`(對多個標籤一起指定的權重維持原樣) - 負權重會像 `(aaa:-2)` 這樣把負號加在數值前面 --- ### D2 Moss Item / D2 Moss Prompt
- 為圖像生成模型 [MOSS-Image](https://github.com/OpenMOSS/MOSS-Image) 建立版面提示詞(JSON 格式)的節點 - 將遮罩的範圍作為放置元素的位置(bbox) - 自動計算 bbox 的座標(以畫布中心為原點的像素座標),不需要手動計算。變更解析度時版面配置也會跟著調整 - 依 `D2 Create Masks` → `D2 Moss Item` → `D2 Moss Prompt` 的順序連接使用 - MOSS-Image 的版面提示詞是實驗性功能,因此僅支援 [USERGUIDE](https://github.com/OpenMOSS/MOSS-Image/blob/main/USERGUIDE.md) 中記載的項目 #### D2 Moss Item - 建立版面中的一個元素 - 以包圍遮罩中有值範圍的長方形作為 bbox。遮罩為空時,以整個畫布作為 bbox ##### Input - `mask`:放置元素範圍的遮罩 - `label`:元素的種類 - `object`:繪製物品或人物等 - `text`:繪製文字 - `caption`:元素外觀的說明(大小、風格、位置等) - 可用與 `D2 Prompt` 相同的寫法註解掉文字(行首的 `#` / `//`、`/*` 〜 `*/`) - `text`:要繪製的文字。僅在 `label` 為 `text` 時使用 - 想換行時請輸入 `\n`,或連接其他節點(如 `D2 Prompt`) ##### Output - `moss_item`:一個元素的資料。連接到 `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_utf8` - `true`: 自動判別字元編碼並轉換為 utf-8 後讀取 - `false`: 不轉換(以 utf-8 讀取) #### Output - `text` - 檔案內容(原樣返回,不整形;檔案不存在時為空字串) - `file_path` - 將輸入的 `file_path` 原樣輸出(用於傳給 `D2 Save Caption` 的 `base_filename`) --- ### D2 Load CSV
- 讀取 CSV / TSV 檔案,並指定行・列的範圍取出的節點 - 像提示詞這種含有逗號的資料,前提是已用雙引號括起(標準的 CSV 跳脫) - 為了即使是大型檔案也能抑制記憶體用量,輸出只有一個,並以 `output_mode` 切換格式 #### Input - `file_path` - 要讀取的檔案完整路徑 - `file_type` - `csv`: 逗號分隔 / `tsv`: 定位字元(Tab)分隔。輸入檔案的分隔字元 - `encode_to_utf8` - `true`: 自動判別字元編碼並轉換為 utf-8 後讀取 - `output_mode` - `list`: 以 2 維陣列輸出 - `csv`: 以換行+逗號分隔的文字輸出 - `row_index` / `column_index` - 要輸出的行・列範圍(從 1 開始)。留空表示全部 - `3`: 只有第 3 行(列) - `2-`: 從第 2 行(列)到最後 - `-4`: 第 1〜4 行(列) - `2-4`: 第 2〜4 行(列) - 格式錯誤(`0`・`2--4`・非數值等)會以錯誤停止執行(避免流出錯誤的資料) - `use_doublequote` - 當 `output_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/pattern/` 時排除符合正規表示式的標籤(僅排除) - 比較時忽略括號的跳脫(提示詞的 `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_escape` - `true`: 從輸出標籤移除括號的跳脫(`\(` `\)` `\[` `\]`)(`rem_\(re:zero\)` -> `rem_(re:zero)`)。適合訓練用標註 - `trailing_comma` - `true`: 在結尾追加逗號 - `ignore_case` - `true`: 排除判定時忽略大小寫 - `backup` - `true`: 若有同名檔案,先將舊檔案重新命名為 `.bak` 再儲存 - `dry_run` - `true`: 不儲存到檔案,僅以 `text` 輸出確認整形結果(轉換結果的預覽) #### Output - `text` - 整形後的標註 - `file_path` - 儲存目標的完整路徑(`dry_run` 時為預定儲存的路徑) --- ### D2 Tag Report
- 從指定資料夾內的標註集計標籤出現頻率,並建立排除標籤清單的節點 - `Get tags` 按鈕會將集計結果顯示於 `text`。使用者編輯要保留・刪除的標籤,再傳給 `D2 Save Caption` 的 `exclude_tags` - 在行首加上 `//` 或 `#` 即為註解行 - 於 `exclude_tags` 指定標籤字典後,只會集計**未收錄於字典中的標籤** - 可藉此找出漏打逗號(`blue eyes twintails`)或漏打空格(`blondehair`)等誤輸入的提示詞 - `D2 Tag Report` `D2 Save Caption` 的使用方式請參閱這篇文章(日文) - https://note.com/da2el_ai/n/ne1fc9b3bea89?app_launch=false #### Input - `folder` - 存放標註檔案的資料夾(完整路徑) - `include_subfolders` - `true`: 同時處理子資料夾 - `extension` - 目標副檔名(例 `txt`) - `order_by` - `count_9-0`: 依出現次數由多到少 - `count_0-9`: 依出現次數由少到多 - `tag_a-z`: 依標籤名稱(A->Z) - `tag_z-a`: 依標籤名稱(Z->A) - `without_count` - `true`: 報告中不顯示出現次數 - `exclude_tags` - 要從集計中排除的標籤字典檔案路徑(完整路徑) - 請注意這裡指定的是字典檔案的路徑,而非字典的內容 - `output_type` - `remove_comment`: 刪除註解行並輸出其餘(運用:以註解標記要刪除的標籤) - `output_comment`: 僅輸出註解行(運用:僅將要刪除的標籤註解化) - `separator` - `newline`: 以換行分隔輸出(建議,使 `regex/pattern/` 等含逗號的項目不會被破壞) - `comma`: 以逗號+空格的單行輸出 #### Output - `text` - 編輯後的標籤清單(傳給 `D2 Save Caption` 的 `exclude_tags`) #### 關於 exclude_tags - 用於找出未收錄於字典中的標籤,也就是**疑似誤輸入的標籤** - 字典中已收錄的標籤不會被集計,因此報告中只會留下字典裡沒有的標籤 - 支援三種字典格式。三者皆讀取第1欄作為標籤 - 僅有標籤的清單 ```csv 1girl solo ``` - 沒有標題行的格式(如 ComfyUI Custom Scripts) ```csv 1girl,4114588 solo,3426446 ``` - 有標題行的格式(如 ComfyUI Auto Complete Plus) ```csv tag,category,count,alias 1girl,0,4974288,"女孩,女性,少女" ``` - 比對時不區分大小寫、空格與底線的差異(`long hair` 與 `long_hair`)、以及括號的跳脫字元(`\(` 與 `(`) - **注意**: `Get tags` 按鈕會在工作流程執行前運作,因此無法讀取從其他節點連接的值。字典請務必在此欄位直接輸入路徑