83 lines
6.4 KiB
Markdown
83 lines
6.4 KiB
Markdown
# 💙 Ephemeral Preview (泡沫プレビュー v0.3.1)
|
||
|
||
`Ephemeral Preview` は、現在バックグラウンドで爆走している生成ラインの中間画像を受け取り、リアルタイムで画面に表示するための「シャドウガーデンの網膜(目)」じゃ。
|
||
|
||
最大の特徴は、一般的なComfyUIのプレビューノードとは異なり、**ストレージ(SSD/HDD)の `temp` ディレクトリへ一切のプレビュー用キャッシュファイルを書き出さない(ゼロ・ディスクドライブ)** という、徹底的なSSD保護&高速化設計にあるのじゃ!
|
||
|
||
<img width="746" height="755" alt="image" src="https://github.com/user-attachments/assets/4241b729-316f-430d-8d5f-f9e1dea8c4e2" />
|
||
|
||
---
|
||
|
||
## 🔌 入出力仕様(Specifications)
|
||
|
||
### 📥 入力(Inputs)
|
||
|
||
* **`image` (必須 / IMAGE):**
|
||
ワークフローの中間(`VAE Decode` の直後など)から出力される画像バッチ。
|
||
* **`hps_tab_id` (非表示 / STRING):**
|
||
ブラウザのタブを識別し、プレビュー画像を「今それを実行している正しいタブ」だけに正確に届ける(時空隔離)ための固有ID。
|
||
|
||
### 📤 出力(Outputs)
|
||
|
||
* 出力ソケットはない。
|
||
* 下流でも同じ画像を使う場合は、上流の`IMAGE`出力を分岐して接続する。
|
||
|
||
---
|
||
|
||
## 🧠 技術的深淵:【ゼロ・ディスクドライブ(Zero-Disk I/O Cache)】
|
||
|
||
### なぜ、何千枚もの画像を表示させ続けても、あなたのSSDは1ミリも摩耗しないのか?
|
||
|
||
ComfyUIの標準的な `PreviewImage` ノードや、多くの一般的なプレビュー系カスタムノードは、画像を表示する際に以下のような処理を行っておる。
|
||
|
||
1. バックエンド(Python)が画像データ(Tensor)を受け取る。
|
||
2. それを一度、ストレージ上の一時フォルダ(`ComfyUI/temp/` など)へ **PNGやJPEGファイルとして物理的に書き出す(保存する)。**
|
||
3. フロントエンド(ブラウザ)に対して「一時フォルダのこのファイルを読み込め」とURLを通知する。
|
||
|
||
この設計はシンプルじゃが、夜間バッチなどで何百件、何千件ものジョブを狂ったように回し、大量のバッチ(Batch Size 4や8など)のプレビューを常時行わせた場合、**数ギガ、数テラバイトにおよぶ凄まじい量の「ゴミキャッシュファイル」がSSDへ超高速で書き込まれ続ける**ことになる。
|
||
これはSSDの書き込み寿命(TBW)をガリガリと無駄に削り取る、ストレージにとっての「不毛な拷問」に他ならんのじゃ!
|
||
|
||
これをエレガントに粉砕するために、`Ephemeral Preview` に搭載されたのが **「ゼロ・ディスクドライブ(オンメモリ転送)」** アーキテクチャじゃ!
|
||
|
||
```
|
||
【従来のプレビューノード(SSD消耗・遅延あり)】
|
||
[画像データ] ──> 💾 SSDのtempフォルダへファイル書き出し(I/O負荷大) ──> 🌐 ブラウザが読込
|
||
(何千回も繰り返すとSSDの寿命がモリモリ削れる!)
|
||
|
||
【HandpickerSuiteの泡沫ハック(オンメモリ・SSD負担ゼロ)】
|
||
[画像データ] ──> 🧠 メモリ上で高速にWebPやJPEGのバイナリ化 ──> ⚡ WebSocketで直接フロントエンドに射出!
|
||
(ファイル書き出しは 0回! SSDへのダメージは完全にゼロ!)
|
||
|
||
```
|
||
|
||
`Ephemeral Preview` は、画像データを受け取っても、**ハードディスクやSSDなどの物理ストレージには一切ファイルを書き込まない。**
|
||
データを受け取ったその場で、すべてメインメモリ(RAM)およびVRAM上だけで処理を行い、高圧縮かつ軽量なバイナリデータへとインメモリで瞬間変換するのじゃ!
|
||
|
||
そして、その生のバイナリデータを、ComfyUIの常時接続通信路である **WebSocket(ウェブソケット)のパルスに乗せて、ブラウザ側のノードの網膜(DOM)へとダイレクトに直接射出(ブロードキャスト)する** のじゃよ!
|
||
|
||
この完璧なオンメモリ通信により、
|
||
|
||
* **ストレージへの書き込み負荷(I/O)が完全にゼロになり、大切なSSDの寿命を極限まで守り抜く**
|
||
* ファイルの保存・読み込みというボトルネックが消滅するため、プレビューの表示速度が圧倒的にハイスピードになる
|
||
* `temp` ディレクトリに大量のゴミファイルが溜まって、後から手動でクリーニングするような不毛な手間も一切不要
|
||
|
||
という、まさに24時間365日の連続自動巡回(夜間バッチ)を回し続けるハッカーのために用意された、究極のクリーンプレビュー・システムが実現されておるのじゃ!
|
||
|
||
---
|
||
|
||
## 🏷️ フロントエンド限定:泡沫のモデル名ラベリング
|
||
|
||
ジョブの実行中、この `Ephemeral Preview` はもう一つのスマートな隠しアビリティを発動する。
|
||
|
||
隣の `Checkpoint Name Cycler` がジョブを執行した際、フロントエンドの「そのタブ限定の実行状態(Tab-Local State)」へと、最後に処理したCheckpointの名前がこっそり書き込まれる。
|
||
`Ephemeral Preview` はブラウザ側でその状態をキャッチし、プレビューの最上部に **`Preview : 👑 god! model.safetensors`** (v0.2.0から絶対神ステータスにも対応!)といった形で、今まさに画像を吐き出しているモデルの名前と格付けアイコンを美しくラベリング表示してみせるのじゃ!
|
||
|
||
> **⚠️ 注意:**
|
||
> このラベリングは、あくまでフロントエンド(画面上)の表示を分かりやすくするための「ディスプレイ限定のオチ(表示用の残像)」じゃ。
|
||
> Tagger(右手)のように、バックエンド(Python側)で厳密にモデルを特定して削除予約ファイルを生成するようなロジックには、この共有状態は一切使われておらん。
|
||
> 「目で見て楽しむための親切設計」としての陰の工夫じゃから、安心してその美しいリアルタイムプレビューを堪能するが良いぞ!
|
||
|
||
## 宣伝画像
|
||
|
||
<img width="1055" height="1491" alt="DeepSeekちゃんのプレビュー機能紹介" src="https://github.com/user-attachments/assets/4805d600-467b-40d9-a9da-2699b7b301e1" />
|