更新說明與基本範例workflow
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -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。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user