更新說明與基本範例workflow

This commit is contained in:
aidec
2025-10-14 17:25:16 +08:00
parent c881e79dd4
commit 69630377d5
2 changed files with 663 additions and 178 deletions
File diff suppressed because one or more lines are too long
+662 -178
View File
@@ -1,71 +1,392 @@
# 新增節點說明
本次更新新增了 幾個實用節點,擴展了 ComfyUI TextBatch 的功能。
最近看到Qwen Image Edit 搭配Next Sence Lora可以預測下一場景。於是想到若能搭配節點讀取生成後的圖片,作為新來源,讓它自行反覆循環,於是添加以下這些節點。
本次更新新增了 7 個實用節點,擴展了 ComfyUI TextBatch 的功能。最近看到 Qwen Image Edit 搭配 Next Scene Lora 可以預測下一場景。於是想到若能搭配節點讀取生成後的圖片,作為新來源,讓它自行反覆循環,於是添加以下這些節點。
---
## 目錄
1. [ImageQueueProcessorPlus](#1-imagequeueprocessorplus---圖片佇列處理增強版) - 圖片佇列處理增強版
2. [DataTmpSet](#2-datatmpset---資料暫存器設置) - 資料暫存器設置
3. [DataTmpGet](#3-datatmpget---資料暫存器讀取) - 資料暫存器讀取
4. [DataTempManager](#4-datatempmanager---資料暫存器管理) - 資料暫存器管理
5. [TextSplitGet](#5-textsplitget---文本分割與獲取) - 文本分割與獲取
6. [TextArrayIndex](#6-textarrayindex---文本陣列索引) - 文本陣列索引
7. [IFMatchCond](#7-ifmatchcond---數學條件判斷) - 數學條件判斷
---
## 1. ImageQueueProcessorPlus - 圖片佇列處理增強版
### 功能說明
這是 `ImageQueueProcessor` 的增強版本,新增了以下功能:
- **雙圖片輸入**:除了主要的 `images` 輸入,還有一個可選的 `additional_image` 輸入(用處不大,本來是想用它來實現循環)
- **變數來源**:可以搭配Data Temp Set 一起使用,將指定變數內的圖片作為來源圖。(可以把Data Temp Set 放在Vae Decode 之後)
- **動態佇列管理**:可以在處理過程中將新生成的圖片添加到佇列中
- **自動循環控制**:支持設定最大執行索引和循環開關
這是 `ImageQueueProcessor` 的增強版本,專為迭代式圖片處理設計。核心功能:
- **雙圖片輸入**:主要 `images` 輸入 + 可選的 `additional_image` 輸入(用處不大,本來是用它做為新來源圖)
- **變數來源**:可從 `DataTmpSet` 讀取圖片作為來源(推薦)
- **動態佇列管理**:自動檢測並載入新圖片
- **自動循環控制**:支持 max_index 和循環開關
- **智能重置**:images 變化時自動重置,data_tmp_var 變化時自動重新載入
### 輸入參數
- `images` (IMAGE) - 初始圖片批次
- `additional_image` (IMAGE, 可選) - 額外的圖片輸入,會被添加到佇列末尾
- `start_index` (INT) - 開始處理的索引位置 (預設: 0)
- `max_index` (INT) - 最大執行索引,達到此索引時自動停止 (預設: 10)
- `trigger_next` (BOOLEAN) - 是否觸發下一個處理 (預設: True)
- `enable_loop` (BOOLEAN) - 循環開關,關閉時停止自動觸發 (預設: True)
- `data_tmp_var` (String) - 變數名稱。(對應Data Temp Set 變數名稱)
- `use_data_tmp` (BOOL) - 是否使用變數做為圖片來源。
#### 必需參數
- `images` (IMAGE) - 初始圖片批次(建議使用固定圖片)
- `start_index` (INT) - 開始處理的索引位置(預設: 0)
- `max_index` (INT) - 最大執行索引,達到此索引時自動停止(預設: 10)
- `trigger_next` (BOOLEAN) - 是否觸發下一個處理(預設: True)
- `enable_loop` (BOOLEAN) - 循環開關,關閉時停止自動觸發(預設: True)
#### 可選參數
- `additional_image` (IMAGE) - 額外的圖片輸入,會被添加到佇列末尾
- `data_tmp_var` (STRING) - 變數名稱(對應 DataTmpSet 變數名稱)
- `use_data_tmp` (BOOLEAN) - 是否使用變數作為圖片來源(預設: False)
### 輸出
- `image` (IMAGE) - 當前處理的圖片
- `current_index` (INT) - 當前索引
- `total` (INT) - 佇列中的總圖片數
- `completed` (BOOLEAN) - 是否完成處理
- `status` (STRING) - 狀態信息
- `status` (STRING) - 狀態信息(顯示索引、總數、變化等)
### 工作原理
**執行流程:**
1. 檢查 `images` 是否變化 → 變化則重置佇列
2. 檢查 `data_tmp_var` 是否有新內容 → 有則重新載入
3. 處理當前索引的圖片
4. 檢查停止條件(max_index、enable_loop、是否還有圖片)
5. 決定是否繼續到下一輪
**停止條件:**
- `next_index >= max_index`(達到最大索引)
- `enable_loop = False`(循環開關關閉)
- `next_index >= total` 且沒有使用 `data_tmp_var`(沒有新圖片了)
### 使用場景
1. **迭代圖片處理**:首次加載一張圖,處理完畢後生成新圖,搭配Data Temp Set,繼續下一輪處理
2. **限制處理次數**:設定 `max_index` 來控制最多處理幾輪(避免無限循環)
3. **條件停止**:透過 `enable_loop` 開關來手動控制是否繼續處理
### 範例工作流程
#### 場景 1:迭代式圖片生成
```
LoadImage → ImageQueueProcessorPlus → 圖片處理節點 → Data Temp Set → 輸出
↑ |
└─────Data Temp Set Name─────┘
LoadImage (1 張固定圖)
↓
ImageQueueProcessorPlus
├─ images: [初始圖]
├─ data_tmp_var: "queue"
├─ use_data_tmp: True
├─ max_index: 10
└─ enable_loop: True
↓
圖片處理節點(AI 生成、增強等)
↓
DataTmpSet
├─ var_name: "queue"
├─ operation: array_push
└─ image_data: [處理後的圖]
↓
循環繼續,直到達到 max_index
```
#### 場景 2:批次圖片處理
```
LoadImage (多張圖)
↓
ImageQueueProcessorPlus
└─ 不使用 data_tmp_var
↓
逐張處理每張圖片
```
### 重要提示
⚠️ **images 輸入要保持固定**
- 如果 images 變化,整個佇列會重置
- 建議使用固定的圖片檔案
⚠️ **data_tmp_var 變化會重置索引**
- 當 data_tmp_var 內容變化時,佇列會重建
- 索引會重置到 0,從頭開始處理
⚠️ **max_index 的語義**
- `max_index = 7` 表示處理索引 0-6(共 7 次)
- 當 `next_index = 7` 時停止
---
## 2. DataTmpSet - 資料暫存器設置
### 功能說明
將資料存儲到記憶體中的全局暫存器,支援文本、圖片和任意類型的資料。提供完整的陣列操作功能。
### 輸入參數
#### 必需參數
- `var_name` (STRING) - 變數名稱(預設: "my_var")
- `operation` (選項) - 操作類型
- `set_variable` - 設定為單一變數(覆蓋)
- `array_push` - 添加到陣列末尾
- `array_set_index` - 設定陣列特定索引
- `clear_all` - 清除此變數的所有資料
- `clear_index` - 清除陣列特定索引的資料
- `data_type` (選項) - 資料類型
- `text` - 文本
- `image` - 圖片
- `any` - 任意類型
#### 可選參數
- `text_data` (STRING) - 文本資料
- `image_data` (IMAGE) - 圖片資料
- `any_data` (ANY) - 任意類型資料
- `array_index` (INT) - 陣列索引(用於 array_set_index 和 clear_index)
### 輸出
- `status` (STRING) - 操作狀態信息
- `preview` (IMAGE) - 預覽輸入的圖片(用於識別)
- `array_size` (INT) - 當前陣列大小
- `info` (STRING) - 資料信息摘要
### 使用範例
**範例 1:建立單一變數**
```
var_name: "my_prompt"
operation: set_variable
data_type: text
text_data: "1girl, beautiful"
結果:設定變數 "my_prompt" = "1girl, beautiful"
```
**範例 2:建立圖片陣列**
```
# 第一次
var_name: "image_queue"
operation: array_push
data_type: image
image_data: [圖片1]
# 第二次
var_name: "image_queue"
operation: array_push
data_type: image
image_data: [圖片2]
結果:陣列 "image_queue" = [圖片1, 圖片2]
array_size: 2
```
**範例 3:設定特定索引**
```
var_name: "image_queue"
operation: array_set_index
data_type: image
image_data: [新圖片]
array_index: 1
結果:image_queue[1] = 新圖片
```
**範例 4:清除資料**
```
# 清除整個變數
operation: clear_all
var_name: "image_queue"
# 或只清除特定索引
operation: clear_index
var_name: "image_queue"
array_index: 1
```
### 配合 ImageQueueProcessorPlus 使用
```
VAE Decode
↓
DataTmpSet
├─ var_name: "queue"
├─ operation: array_push ← 自動添加到末尾
├─ data_type: image
└─ image_data: [解碼後的圖]
↓
ImageQueueProcessorPlus 會自動檢測並載入
```
---
## 2. TextSplitGet - 文本分割與獲取
## 3. DataTmpGet - 資料暫存器讀取
### 功能說明
將文本自動分割成群組,並可指定索引來獲取特定的文本項目。
從全局暫存器中讀取之前存儲的資料。支援多種讀取模式,可以讀取單一元素、第一個、最後一個或全部元素。
### 輸入參數
#### 必需參數
- `var_name` (STRING) - 要讀取的變數名稱(預設: "my_var")
- `data_type` (選項) - 資料類型
- `text` - 文本
- `image` - 圖片
- `any` - 任意類型
- `read_mode` (選項) - 讀取模式
- `index` - 讀取特定索引(預設)
- `first` - 讀取第一個元素
- `last` - 讀取最後一個元素
- `all` - 讀取全部元素
#### 可選參數
- `array_index` (INT) - 陣列索引(用於 read_mode=index)
- `default_text` (STRING) - 找不到資料時的預設文本
### 輸出
- `text` (STRING) - 文本資料
- `image` (IMAGE) - 圖片資料
- `any` (ANY) - 任意類型資料
- `array_size` (INT) - 陣列大小
- `all_elements` (ANY) - 全部元素(read_mode=all 時使用)
- `status` (STRING) - 操作狀態信息
### 使用範例
**範例 1:讀取特定索引**
```
var_name: "image_queue"
data_type: image
read_mode: index
array_index: 2
結果:返回 image_queue[2]
```
**範例 2:讀取第一個/最後一個**
```
# 讀取第一個
read_mode: first
→ 返回陣列的第一個元素
# 讀取最後一個
read_mode: last
→ 返回陣列的最後一個元素
```
**範例 3:讀取全部**
```
var_name: "image_queue"
data_type: image
read_mode: all
結果:
- 如果是圖片,all_elements 會合併為一個 batch
- 如果是其他類型,all_elements 返回整個列表
```
**範例 4:提供預設值**
```
var_name: "nonexistent"
data_type: text
default_text: "預設提示詞"
結果:變數不存在時返回預設文本
```
---
## 4. DataTempManager - 資料暫存器管理
### 功能說明
管理全局暫存器中的所有變數。可以查看、刪除變數,或清除所有資料。提供完整的變數管理功能。
### 輸入參數
#### 必需參數
- `action` (選項) - 操作類型
- `list_all` - 列出所有變數及狀態(預設)
- `delete_var` - 刪除特定變數
- `delete_index` - 刪除陣列特定索引
- `clear_all` - 清除所有變數
#### 可選參數
- `var_name` (STRING) - 變數名稱(用於 delete_var 和 delete_index)
- `array_index` (INT) - 陣列索引(用於 delete_index)
### 輸出
- `variables_list` (STRING) - 變數列表(詳細信息)
- `status` (STRING) - 操作狀態
- `total_vars` (INT) - 變數總數
### 使用範例
**範例 1:查看所有變數**
```
action: list_all
結果:
variables_list:
my_prompt: String - '1girl, beautiful...'
image_queue: Array[5] - Types: Tensor
config: String - '{"setting": "value"}'
total_vars: 3
```
**範例 2:刪除變數**
```
action: delete_var
var_name: "old_data"
結果:變數 "old_data" 已刪除
```
**範例 3:刪除陣列元素**
```
action: delete_index
var_name: "image_queue"
array_index: 2
結果:刪除 image_queue[2],陣列大小從 5 變為 4
```
**範例 4:清除所有**
```
action: clear_all
結果:清除所有 3 個變數
```
### 變數資訊顯示格式
```
變數名: 類型 - 詳細信息
範例:
- my_text: String - 'Hello World'
- my_images: Array[10] - Types: Tensor
- my_number: Tensor(1, 64, 64, 3)
- my_data: dict
```
---
## 5. TextSplitGet - 文本分割與獲取
### 功能說明
將文本自動分割成群組,並可指定索引來獲取特定的文本項目。支援多種分隔符和註解過濾。
### 輸入參數
#### 必需參數
- `text` (STRING) - 要分割的文本
- `index` (INT) - 要獲取的項目索引 (預設: 0)
- `index` (INT) - 要獲取的項目索引(預設: 0)
- `separator_type` (選項) - 分隔符類型
- `newline` - 換行符 (預設)
- `newline` - 換行符(預設)
- `comma` - 逗號
- `semicolon` - 分號
- `custom` - 自訂分隔符
- `custom_separator` (STRING) - 自訂分隔符 (預設: "|")
- `ignore_comment` (BOOLEAN) - 是否忽略註解行 (預設: True)
- `comment_prefix` (STRING) - 註解前綴符號 (預設: "#")
- `trim_whitespace` (BOOLEAN) - 是否去除前後空白 (預設: True)
- `custom_separator` (STRING) - 自訂分隔符(預設: "|")
- `ignore_comment` (BOOLEAN) - 是否忽略註解行(預設: True)
- `comment_prefix` (STRING) - 註解前綴符號(預設: "#")
- `trim_whitespace` (BOOLEAN) - 是否去除前後空白(預設: True)
### 輸出
- `text` (STRING) - 指定索引的文本
- `current_index` (INT) - 當前索引
- `total` (INT) - 分割後的總項目數
- `array` (ANY) - 完整的分割結果陣列
- `status` (STRING) - 狀態信息
### 使用範例
@@ -82,30 +403,123 @@ index: 1
separator_type: newline
ignore_comment: True
結果:1boy, blue eyes
結果:
- text: "1boy, blue eyes"
- total: 3
- array: ["1girl, red hair", "1boy, blue eyes", "1cat, fluffy"]
```
**範例 2:逗號分割**
```
輸入文本:
apple,banana,cherry,# comment,durian
apple,banana,# comment,cherry,durian
index: 2
separator_type: comma
ignore_comment: True
結果:cherry
結果:
- text: "cherry"
- total: 4
- array: ["apple", "banana", "cherry", "durian"]
```
**範例 3:自訂分隔符**
```
輸入文本:
prompt1 | prompt2 | prompt3
separator_type: custom
custom_separator: "|"
trim_whitespace: True
結果:
- array: ["prompt1", "prompt2", "prompt3"]
```
### 配合 TextArrayIndex 使用
```
TextSplitGet
├─ 分割文本為陣列
└─ array 輸出
↓
TextArrayIndex
├─ 可以合併多個陣列
└─ 按索引獲取文本
```
---
## 3. IFMatchCond - 數學條件判斷
## 6. TextArrayIndex - 文本陣列索引
### 功能說明
接收多個文本陣列,合併後按索引獲取特定文本。可以處理來自 `TextSplitGet` 的陣列輸出,或任何其他文本陣列。
### 輸入參數
#### 必需參數
- `index` (INT) - 要獲取的索引(預設: 0)
#### 可選參數
- `array_1` (ANY) - 第一個陣列
- `array_2` (ANY) - 第二個陣列
- `array_3` (ANY) - 第三個陣列
- `array_4` (ANY) - 第四個陣列
- `array_5` (ANY) - 第五個陣列
### 輸出
- `text` (STRING) - 指定索引的文本
- `total` (INT) - 合併後的總數
- `status` (STRING) - 狀態信息
### 使用範例
**範例 1:合併多個陣列**
```
array_1: ["A", "B", "C"] # 從 TextSplitGet
array_2: ["D", "E"] # 從另一個 TextSplitGet
array_3: "F" # 單一文本
index: 4
結果:
- 合併陣列: ["A", "B", "C", "D", "E", "F"]
- text: "E"
- total: 6
```
**範例 2:索引超出範圍**
```
array_1: ["A", "B"]
index: 5
結果:
- text: "B"(返回最後一個)
- status: "Index 5 out of range (total: 2), returning last item"
```
**範例 3:動態提示詞選擇**
```
TextSplitGet (正面提示詞列表)
↓ array
TextArrayIndex
├─ array_1: [正面提示詞陣列]
├─ array_2: [風格提示詞陣列]
├─ index: 2
└─ 輸出合併後的第 2 個提示詞
```
---
## 7. IFMatchCond - 數學條件判斷
### 功能說明
根據數學條件比較兩個數值,返回 True 或 False。支援整數和浮點數比較。
### 輸入參數
- `value_a` (FLOAT) - 第一個浮點數值 (預設: 0.0)
#### 必需參數
- `value_a` (FLOAT) - 第一個浮點數值(預設: 0.0)
- `operator` (選項) - 比較運算符
- `==` - 等於
- `!=` - 不等於
@@ -113,16 +527,20 @@ ignore_comment: True
- `>=` - 大於等於
- `<` - 小於
- `<=` - 小於等於
- `value_b` (FLOAT) - 第二個浮點數值 (預設: 0.0)
- `int_a` (INT, 可選) - 第一個整數值 (預設: 0)
- `int_b` (INT, 可選) - 第二個整數值 (預設: 0)
- `use_int` (BOOLEAN, 可選) - 是否使用整數比較 (預設: False)
- `value_b` (FLOAT) - 第二個浮點數值(預設: 0.0)
#### 可選參數
- `int_a` (INT) - 第一個整數值(預設: 0)
- `int_b` (INT) - 第二個整數值(預設: 0)
- `use_int` (BOOLEAN) - 是否使用整數比較(預設: False)
### 輸出
- `result` (BOOLEAN) - 比較結果
- `status` (STRING) - 比較的詳細信息
### 使用範例
**範例 1:浮點數比較**
```
value_a: 5.5
operator: >
@@ -134,173 +552,239 @@ use_int: False
- status: "5.5 > 3.2 = True"
```
### 應用場景
- 配合 `ImageQueueProcessorPlus` 的 `current_index` 來判斷是否達到特定輪數
- 與其他條件節點配合使用,實現複雜的工作流程控制
---
## 4. DataTmpSet - 資料暫存器設置
### 功能說明
將資料存儲到記憶體中的全局暫存器,支援文本、圖片和任意類型的資料。可以存儲為單一變數或陣列。
### 輸入參數
- `var_name` (STRING) - 變數名稱 (預設: "my_var")
- `storage_mode` (選項) - 存儲模式
- `variable` - 單一變數 (預設)
- `array` - 陣列模式
- `data_type` (選項) - 資料類型
- `text` - 文本 (預設)
- `image` - 圖片
- `any` - 任意類型
- `text_data` (STRING, 可選) - 文本資料
- `image_data` (IMAGE, 可選) - 圖片資料
- `any_data` (ANY, 可選) - 任意類型資料
- `array_index` (INT, 可選) - 陣列索引,-1 表示添加到末尾 (預設: -1)
### 輸出
- `status` (STRING) - 操作狀態信息
### 使用範例
**範例 1:存儲文本變數**
**範例 2:整數比較**
```
var_name: "my_prompt"
storage_mode: variable
data_type: text
text_data: "1girl, beautiful"
int_a: 10
operator: <=
int_b: 10
use_int: True
結果:將文本存儲到變數 "my_prompt"
結果:
- result: True
- status: "10 <= 10 = True"
```
**範例 2:建立圖片陣列**
**範例 3:配合 ImageQueueProcessorPlus**
```
第一次執行:
var_name: "image_history"
storage_mode: array
data_type: image
image_data: [圖片1]
array_index: -1
第二次執行:
var_name: "image_history"
storage_mode: array
data_type: image
image_data: [圖片2]
array_index: -1
結果:陣列 "image_history" 包含兩張圖片
```
---
## 5. DataTmpGet - 資料暫存器讀取
### 功能說明
從全局暫存器中讀取之前存儲的資料。
### 輸入參數
- `var_name` (STRING) - 要讀取的變數名稱 (預設: "my_var")
- `data_type` (選項) - 資料類型
- `text` - 文本 (預設)
- `image` - 圖片
- `any` - 任意類型
- `array_index` (INT, 可選) - 陣列索引,-1 表示讀取整個變數 (預設: -1)
- `default_text` (STRING, 可選) - 找不到資料時的預設文本
### 輸出
- `text` (STRING) - 文本資料
- `image` (IMAGE) - 圖片資料
- `any` (ANY) - 任意類型資料
- `status` (STRING) - 操作狀態信息
### 使用範例
**範例 1:讀取文本變數**
```
var_name: "my_prompt"
data_type: text
結果:返回之前存儲的文本
```
**範例 2:讀取陣列中的特定圖片**
```
var_name: "image_history"
data_type: image
array_index: 1
結果:返回陣列中索引為 1 的圖片
ImageQueueProcessorPlus
└─ current_index 輸出
↓
IFMatchCond
├─ int_a: [current_index]
├─ operator: >=
├─ int_b: 5
└─ use_int: True
↓
判斷是否處理了至少 5 輪
```
---
## 綜合應用範例
### 場景:迭代圖片增強工作流程
### 範例 1:AI 圖片迭代生成工作流程
1. **初始設定**
- 使用 `LoadImage` 加載初始圖片
- 設定迭代次數為 5 次
```
1. 初始化
LoadImage (1 張起始圖)
↓
DataTmpSet
├─ var_name: "queue"
└─ operation: clear_all ← 清空舊資料
2. **圖片處理循環**
```
LoadImage → ImageQueueProcessorPlus (max_index=5, enable_loop=True)
↓
[當前圖片]
↓
圖片增強節點 (例如:放大、去噪)
↓
DataTmpSet (儲存處理結果)
↓
連接回 additional_image
```
2. 循環處理
LoadImage (固定的 1 張圖)
↓
ImageQueueProcessorPlus
├─ images: [固定圖]
├─ data_tmp_var: "queue"
├─ use_data_tmp: True
├─ max_index: 10
└─ enable_loop: True
↓
AI 圖片生成節點(Qwen Image Edit + Next Scene Lora)
↓
VAE Decode
↓
DataTmpSet
├─ var_name: "queue"
├─ operation: array_push ← 新圖片自動加入
└─ image_data: [生成的圖]
↓
循環繼續...
3. **條件控制**
- 使用 `IFMatchCond` 檢查 `current_index` 是否達到目標
- 根據條件決定是否繼續處理
3. 監控與控制
ImageQueueProcessorPlus → status → Show Any
DataTmpSet → array_size → Show Any
4. 結果保存
DataTmpGet
├─ var_name: "queue"
├─ read_mode: all
└─ 輸出所有生成的圖片
↓
SaveImage
```
4. **結果保存**
- 使用 `DataTmpGet` 讀取所有處理過的圖片
- 使用 `SaveImage` 保存最終結果
### 範例 2:批次提示詞處理
```
1. 準備提示詞
文本輸入:
1girl, red dress
1boy, blue shirt
# 註解
1cat, white fur
↓
TextSplitGet
├─ separator_type: newline
└─ ignore_comment: True
↓ array 輸出
2. 選擇提示詞
TextArrayIndex
├─ array_1: [分割的提示詞]
├─ index: [動態索引]
└─ 輸出選定的提示詞
↓
文本處理或 AI 生成節點
```
### 範例 3:條件控制工作流程
```
ImageQueueProcessorPlus
├─ current_index 輸出
↓
IFMatchCond
├─ int_a: [current_index]
├─ operator: >=
├─ int_b: 5
↓
根據結果決定是否:
- 改變處理參數
- 保存中間結果
- 觸發其他節點
```
---
## 節點協作圖
```
資料流程:
[輸入] → ImageQueueProcessorPlus → [處理] → DataTmpSet
↑ |
└──────── data_tmp_var ────────────────┘
管理與查詢:
DataTempManager → 查看/刪除變數
DataTmpGet → 讀取資料(單一/全部)
文本處理:
文本 → TextSplitGet → array → TextArrayIndex → 選定文本
條件判斷:
任何數值 → IFMatchCond → True/False → 控制流程
```
---
## 注意事項
1. **ImageQueueProcessorPlus**
- `additional_image` 會被添加到佇列末尾,不會替換現有圖片
- 當達到 `max_index` 或 `enable_loop` 為 False 時,循環會停止
- 狀態文件保存在 `image_queue_processor_plus_state.json`
### 1. ImageQueueProcessorPlus
- ✅ `images` 輸入建議使用固定圖片,變化會觸發重置
- ✅ `data_tmp_var` 變化會重新載入佇列並重置索引
- ✅ `max_index=7` 表示處理索引 0-6(共 7 次)
- ✅ 狀態保存在 `image_queue_processor_plus_state.json`
- ⚠️ 使用 `data_tmp_var` 時,確保 `use_data_tmp=True`
2. **TextSplitGet**
- 註解過濾在分割後執行,以 `comment_prefix` 開頭的行會被忽略
- 空行會被自動過濾掉
### 2. DataTmpSet / DataTmpGet / DataTempManager
- ✅ 資料存儲在記憶體中,ComfyUI 重啟後會清空
- ✅ 全局共享,不同工作流程可以存取相同的變數
- ✅ 使用 `DataTempManager` 定期清理不需要的變數
- ✅ `array_push` 會自動添加到末尾,無需指定索引
- ⚠️ 陣列索引超出範圍時,`array_set_index` 會自動擴展陣列
3. **資料暫存器 (DataTmpSet/DataTmpGet)**
- 資料存儲在記憶體中,ComfyUI 重啟後會清空
- 全局共享,不同工作流程可以存取相同的變數
- 陣列索引超出範圍時會自動擴展陣列(填充 None)
### 3. TextSplitGet
- ✅ 註解過濾在分割後執行
- ✅ 空行會被自動過濾掉
- ✅ `array` 輸出可以連接到 `TextArrayIndex`
- ✅ `trim_whitespace` 建議保持開啟,避免多餘空白
4. **IFMatchCond**
- 浮點數比較時要注意精度問題
- 使用 `use_int=True` 可以進行整數比較,避免浮點數精度誤差
### 4. TextArrayIndex
- ✅ 可以接收任何類型的輸入,會自動轉換為字串
- ✅ 索引超出範圍時返回最後一個元素
- ✅ 最多可以合併 5 個陣列
### 5. IFMatchCond
- ✅ 浮點數比較時要注意精度問題
- ✅ 使用 `use_int=True` 進行整數比較,避免浮點數精度誤差
- ✅ 可以配合 `current_index` 實現條件控制
---
## 效能建議
### 記憶體管理
```python
# 定期清理不需要的變數
DataTempManager
└─ action: clear_all
# 或清理特定變數
DataTempManager
├─ action: delete_var
└─ var_name: "old_queue"
```
### 循環控制
```python
# 設定合理的 max_index 避免無限循環
ImageQueueProcessorPlus
├─ max_index: 20 # 根據需求調整
└─ enable_loop: True
# 監控佇列大小
DataTmpSet
└─ array_size 輸出 → Show Any
```
### 錯誤處理
```python
# 提供預設值避免錯誤
DataTmpGet
├─ var_name: "may_not_exist"
└─ default_text: "預設值"
# 檢查陣列大小
DataTmpGet
└─ array_size 輸出
↓
IFMatchCond
└─ 確認有資料再處理
```
---
## 安裝說明
這些節點已經整合到現有的 `modules/textbatch/nodes.py` 檔案中。
這些節點已經整合到 `modules/textbatch/nodes.py` 檔案中。
重新啟動 ComfyUI 後,在節點選單的 **TextBatch** 分類中可以找到以下新節點:
- Image Queue Processor Plus
- Text Split Get
- IF Match Condition
- Data Temp Set
- Data Temp Get
**重新啟動 ComfyUI 後**,在節點選單的 **TextBatch** 分類中可以找到:
## 技術支援
- ✅ Image Queue Processor Plus
- ✅ Data Temp Set
- ✅ Data Temp Get
- ✅ Data Temp Manager
- ✅ Text Split Get
- ✅ Text Array Index
- ✅ IF Match Condition
---
如有問題或建議,請在專案的 GitHub 頁面提出 Issue。