前言¶
做 ComfyUI 相關的 DSH 插件或智能體時,經常要回答一個問題:這張圖是怎麼生成的。PNG 的 tEXt 塊裏確實存了 workflow,但字段名是 ComfyUI 的 [node_id, slot] 引用,prompt 常常是走 link 傳過來的空串,LoRA 鏈繞在幾十個節點上,導出的 workflow 裏還有一堆 mode: 4 的 bypass 節點其實沒參與出圖。手工在畫布上點,錯一處就復現不出結果。
下面介紹 zzcyydshhh/comfy-png-inspector。它本質上是個 PNG 元數據解析器,前端是一個零依賴、不聯網的單頁工具,同一套解析邏輯打包成 DSH bundle,對模型暴露一個 comfy_png_inspect 工具。
這是什麼¶
作者是 zzcyydshhh,倉庫在 GitHub 上有 16 stars,MIT 許可,package.json 裏版本號是 0.1.0。它解決的是同一個痛點的兩處場景:人在瀏覽器裏翻幾百張舊圖的參數,模型在 Harness 裏直接對某個 output 目錄出一份摘要。Web UI 與插件共用 comfy-png-core.js,沒有第二套實現。
核心功能¶
工具輸入一個 PNG 或一個目錄,輸出以下內容:
- LoRA 鏈:按真實執行順序列出每個 LoRA 及其權重,支持正負值。
- 採樣參數:seed、steps、CFG、sampler / scheduler、denoise、latent size。
- 模型鏈:base model、CLIP(含類型)、VAE、保存前綴、pre-sampler 補丁(
ModelSamplingAuraFlow、CFGNorm等)。 - 兩段 prompt:經 link 解析,標註來源節點與槽位;運行時生成的槽位單獨標記爲 generated at runtime。
- 旁路節點:從
workflow.nodes[].mode判斷,4爲 bypass、2爲 mute,列出「畫布上存在但未參與出圖」的節點。
解析上有幾處容易踩的,工具明確處理了:
CLIPTextEncode.text直接讀是空串,因爲文本來自 link。工具會回溯到源節點並寫成CLIPTextEncode#4.text[slot 0] ← ZhPromptEnhance#79.text[slot 0]這樣的形式。- LoRA 鏈不是按節點排列順序,而是從
KSampler.model沿inputs.model反向遍歷,到UNETLoader/CheckpointLoaderSimple爲止再反轉,得到執行順序。 tEXt/zTXt/iTXt都讀,zTXt和壓縮iTXt用DecompressionStream('deflate')解壓。
Web UI 還提供:縮略圖列表、Ctrl+K 聚焦的搜索(文件名 / LoRA 名 / prompt 正文)、CSV(UTF-8 BOM,Excel 可直開)與 JSON 導出、批量打包 zip,以及一個模板重建功能。
安裝與啓用¶
在 Harness 裏用官方命令安裝(按 README 原文,不帶版本或 commit 後綴):
dsh plugin add https://github.com/zzcyydshhh/comfy-png-inspector
package.json 聲明瞭 peer 依賴:
"peerDependencies": {
"@deepseek-ai/cordis": "~4.0.5",
"@deepseek-ai/dsh-tools": ">=0.0.1-rc.1 <0.1.0 || >=0.1.0-rc.1 <0.2.0-0 || >=0.2.0-rc.1 <0.3.0-0"
},
"dsh": {
"bundle": {
"patch": "./cordis.patch.yml"
}
}
也就是說它通過 cordis.patch.yml 打補丁的方式註冊到 Harness。安裝前建議先讀一遍倉庫源碼和 cordis.patch.yml,確認補丁內容與你的 Harness 版本兼容——插件以當前 dsh 進程的權限運行,不額外受限。
典型用法¶
裝好後模型側多一個工具:
comfy_png_inspect(path, limit?, include_prompt?)
path 指向單個 PNG 或整個 output 目錄;limit 控制返回條目數,include_prompt 決定是否帶完整 prompt。對一個目錄調用時,每個圖都出一份 LoRA 鏈、採樣設置、模型鏈、latent size、prompt 和旁路節點清單,模型可以直接據此生成復現說明。
Web UI 部分不依賴安裝命令,直接本地起:
git clone https://github.com/zzcyydshhh/comfy-png-inspector.git
cd comfy-png-inspector
打開 comfy-png-inspector.html(Chrome / Edge 103+,需要 DecompressionStream),把 ComfyUI 的 output 文件夾拖進窗口即可。倉庫根目錄的 index.html 只是 GitHub Pages 用的一行跳轉,離線打開也會落到同一個應用。界面中英雙語,頂部切換,瀏覽器語言決定默認值,也可以用 ?lang=en 強制指定。
也可以不打開瀏覽器,直接用命令行:
python cli/comfy_png_parse.py ./output --no-text
python cli/comfy_png_parse.py ./output --csv index.csv --json index.json
python cli/comfy_png_parse.py a.png --full # 完整 prompt
只用標準庫,輸出與 Web UI 一致。
復現工作流的兩種模式¶
選中一張圖後有兩個按鈕,取決於 PNG 裏帶了多少信息:
| 原樣導出 | 從模板重建 | |
|---|---|---|
| 按鈕 | Export this image’s workflow JSON | Rebuild from template |
| 條件 | PNG 內有 workflow 塊 |
載入一個畫布 workflow 當模板 |
| 結果 | 生成那一刻的原始畫布 | 模板佈局 + 灌入解析出的參數 |
| 適用 | 直接復現,最可靠 | API-only 出圖、映射回現有模板 |
重建會替換 base model / CLIP / VAE / latent size / 保存前綴 / prompt / KSampler 字段,再按解析順序重建整條 LoRA 鏈,並把鏈尾接回模板原本的消費者(比如 ModelSamplingAuraFlow 的 model 輸入)。操作先給一份逐項變更清單,然後自檢:link 端點存在、無自環、KSampler 接線完整。模板本身深拷貝,不會被寫回。
限制與注意¶
- 只支持 PNG。ComfyUI 元數據放在 PNG 塊裏,jpg / webp 沒有。
- 被截圖工具、IM 轉發或 Photoshop 重新保存後
tEXt會丟失,界面會提示沒有 ComfyUI 元數據。 file://下瀏覽器不允許 JavaScript 掃描目錄,每次會話需要手動選一次或拖一次。- 重建受模板裏已有的節點類別限制:PNG 有而模板沒有的類別不會被憑空造出來(LoRA 節點是例外,按解析數量重建)。導出前先看變更清單。
- zip 打包只存不壓,爲保持零依賴,幾百個 workflow 會在十幾 MB 量級。
結尾¶
它的價值在於把「翻一張圖的參數」這件事變成一次可編程的調用,模型側一個工具,人側一個本地頁面,底層是同一份解析代碼。目錄頁在 https://www.skillhub.cn/plugins/zzcyydshhh/comfy-png-inspector ,倉庫在 https://github.com/zzcyydshhh/comfy-png-inspector 。