COMFYUI 基礎 · 第 12 課
從 PNG 找回工作流:看懂中繼資料與分享邊界
用三張像素相同的非 AI 測試 PNG,練習恢復畫布、排查遺失的資料與輸入圖,最後整理可重做、可檢查的工作流分享包。
開始前,準備這些
- 已有可開啟的 ComfyUI,會用 Open 載入 JSON 並保存目前畫布
- 知道 Load Image 和 Save Image;可先複習第七課
- 準備一個練習資料夾,不使用私人或他人的未授權照片
這一課,你會學會
- 分清 PNG 像素、workflow 畫布資料與 prompt 執行資料
- 比較完整、純像素與選做 prompt-only 三種 PNG 的載入差異
- 恢復畫布後重新提供輸入圖,不把 JSON 當成包含素材的備份
- 檢查備註、檔名和依賴,保留原稿並整理分享副本
本課目錄
圖片還在,為什麼工作流找不回來?
第十一課把影片影格存成 PNG,也提醒分享前檢查中繼資料。這一課把這件事做完整:圖片看起來相同,不代表檔案裡保存了相同的工作流。
我們用三張 640×480、RGB 像素完全相同的測試圖,練習從圖片找回畫布、分辨缺少資料與缺少輸入素材,最後整理一份能說清楚用途的分享包。這一課不需要生成新角色。
素材與驗證範圍: 本課圖片由本站以 CPU 程式原創繪製,並刻意加入或省略工作流資料,屬於格式測試素材。不是 AI 生成圖,也不是 ComfyUI 工作流執行結果。 我們核對了官方程式與檔案結構;尚未在 ComfyUI GUI 匯入或執行。下方「應該看到」是依原始碼預期的行為,請用自己的觀察填表,不要把教材檢查當成自己已實跑。
第 0 步:下載練習包,先保護目前的畫布
- 下載第十二課練習包 ZIP,完整解壓縮到新的 lesson-12 資料夾
- 先把目前 ComfyUI 的作品匯出成一般工作流 JSON,確認存好,再開新的空白工作流。不同版本可能顯示 Workflow/Workflows/File → New
- 開啟練習包的 observations.csv;可以用試算表或文字編輯器。三列初始狀態都是 not_run(未執行);執行成功填 success,執行失敗填 failed。B 只做載入觀察,run_status 保留 not_run 就好
- 本課沒有模型權重、自訂節點、登入或付費 API。若你現在沒有可用的 ComfyUI,可以先閱讀和下載,實作狀態保留未執行,不必為這課購買服務
練習包中最重要的檔案:
| 檔案 | 用途 |
|---|---|
| lesson-12-with-workflow.png | A:帶完整畫布 workflow 與執行資料 prompt 的測試圖 |
| lesson-12-pixels-only.png | B:只保留圖片像素,不含 workflow、prompt、parameters |
| lesson-12-prompt-only.png | C:選做,只帶執行資料 prompt |
| lesson-12-source-card.png | 真正要在 Load Image 上傳的輸入圖,本身沒有工作流 |
| lesson-12-recovery-workflow.json | 一般畫布格式的獨立備份,不是 API 格式 |
| observations.csv、README.txt | 觀察紀錄、操作摘要與素材授權 |
先分清兩種操作: 把 A 拖到畫布是「嘗試恢復工作流」;在 Load Image 節點的上傳按鈕選 source-card 才是「提供輸入圖」。不要互相替代。
第 1 步:用 A 圖恢復兩節點畫布
- 在新的空白工作流,將 lesson-12-with-workflow.png 拖到中央畫布。若拖曳沒有載入,試 File/Workflow → Open 選取原始 PNG
- 檢查是否出現 Load Image → Save Image,兩者以 IMAGE 連接
- 找到下方 Note。第一行應是「教學示範備註,不含私人資料」
- 先不要執行。在 observations.csv 的 A 列填 observed_canvas、note_visible,記錄你實際看見什麼
應該看到: 兩個執行節點、一條連線,以及一個沒有接線的 Note。Load Image 記著 lesson-12-source-card.png;Save Image 的 filename_prefix 是 lesson12/recovered。
若只出現一張圖片或新的 Load Image,先核對你開的是 A 原始 PNG,不是 B、source-card、網頁截圖或被其他軟體轉存的副本。可以改開一般工作流 JSON比較;這只能幫你確認畫布,不能證明 PNG 中繼資料載入成功。
workflow 和 prompt 各保存什麼?
- workflow:畫布資料。包含節點、連線、位置、設定,還可能包括沒有參與執行的 Note
- prompt:執行資料。描述要執行的節點類型與輸入;這裡的 prompt 不只是平常填的「正向提示詞」
- 圖片像素:看得見的結果。光看像素,無法知道原本用了哪些節點或設定
A 同時包含前兩項。本課核對的前端會優先載入 workflow;不能把「沒有 workflow」直接等同「一定不能恢復任何節點」,因為有效的 prompt 仍可能觸發 API 格式載入。後面的選做 C 會示範這個差別。官方前端載入順序
第 2 步:畫布找回來了,還要提供輸入圖
JSON 記錄檔名,不會把輸入圖的圖片本體一起包進去。別人的檔案名稱出現在下拉選單,不表示你的執行環境已經有那張圖。
- 在 Load Image 使用 choose file to upload/上傳圖片,選解壓縮後的 lesson-12-source-card.png
- 確認節點預覽是本課綠色圓臉與黃色文字牌。若伺服器因同名檔案加了尾碼,請重新選取這次實際上傳的檔案,不要只照抄教材檔名
- 核對 Save Image 的前綴 lesson12/recovered,再按 Run/Queue 一次
- 執行成功後,保存自己產生的 PNG,再匯出一般工作流 JSON,命名 my-lesson-12-recovered.json
- 在 A 列填 input_reselected、output_filename(實際完整輸出檔名)、comfyui_version、frontend_version 與 run_status;只有成功執行才填 success
應該得到: 一張 640×480 的圖,內容仍是同一張來源卡。這條流程沒有模型、沒有取樣器,也沒有重新生成畫面。輸出通常在 ComfyUI/output/lesson12/,後面另加流水號;修改過輸出目錄或雲端託管環境時,以自己的下載介面為準。
存得出 PNG,不表示一定有工作流 metadata。 Save Image 是否收到完整 workflow、伺服器是否停用 metadata,都會影響它寫入什麼。先保存自己的原始 PNG 和 JSON,再於新的工作流試著重開 PNG,在 png_reopen_result 記下是否恢復完整畫布。不要承諾自己的 PNG 檔案雜湊與教材相同。固定版本 SaveImage 實作
第 3 步:用 B 圖找出「外觀相同」的陷阱
- 再保存並離開剛才的工作,開另一張空白工作流
- 將 lesson-12-pixels-only.png 拖到空白畫布
- 比較 A:有沒有完整兩節點連線?Note 還在嗎?把實際結果填進 B 列
B 的檔案已確認不含 workflow、prompt、parameters。本課核對的前端會把這類 PNG 當普通媒體,建立 Load Image 輸入,而不是恢復本課兩節點畫布;舊版可能顯示不同提示。它不是損壞的圖片,只是沒有這些恢復資料。 不需要為了這個現象安裝擴充。
A、B 的解碼像素完全相同,檔案內容卻不同。截圖、社群平台壓縮、格式轉換或圖片編輯器重新存檔,可能移除或改寫 metadata;不是每個程式、每次轉存都一定會移除。改副檔名也不能補回已遺失的資料。
如果是自己的作品遺失資料
先找自己保存的一般工作流 JSON、原始輸出檔或仍可用的歷史紀錄。若只剩純像素圖,不能從圖中精確還原 seed、提示詞、節點設定與原來的連線。不要把猜測的設定寫成已恢復的結果。
第 4 步:選做 C,只剩 prompt 會怎樣?
想完成主線的人可以直接跳到分享檢查。若繼續,先開新的空白工作流,再載入 lesson-12-prompt-only.png。
本課核對的前端會在缺少 workflow 時,嘗試以有效的 API prompt 建立執行節點。可能看到 Load Image 與 Save Image,但不應把它當成完整畫布備份:本課 C 根本沒有保存 Note、原本節點標題或畫布位置,不能要求它重現 A 的排版。
舊版若未支援同樣的 fallback,結果可能不同。在 C 列填 comfyui_version、frontend_version,並把看見的節點與提示寫入 observed_canvas 或 notes 即可,不要只為完成選做更換整套環境。C 若要執行,仍須在 Load Image 重新選取自己的 source-card 輸入檔。
第 5 步:分享前檢查內容,也檢查能否重做
A 圖裡的 Note 是普通教學文字。這件事提醒我們:沒有參與執行的備註,也可能跟著完整 workflow 寫進 PNG。 提示詞、檔名、節點標題、路徑或其他節點設定,也可能帶出你不想公開的資訊。
不要用「圖片上看不到」判斷是否安全。不要把私人檔案上傳到陌生的中繼資料檢查網站。本課所有假設測試只用公開教材素材。
先分成自己保留版與分享副本
- 保留原始 PNG、JSON 和輸入素材,不覆蓋唯一備份
- 另存要分享的工作流副本,逐一查看 Note、提示詞、檔名、節點標題、群組與設定;只保留確定能公開的內容
- 即使只想分享圖片,也要檢查可見畫面及檔案裡的其他 metadata。刪除 Note 或拿掉 workflow/prompt,不等於已清除所有私人資料
- 私人檔案的 metadata 清理操作不在本課範圍內。 這裡只練習辨認風險與整理公開教材。若你另行用熟悉的圖片工具製作副本,仍需用可信的本機工具驗證;不能確認時,就不要把私人原檔當成已清理版本送出。本課提供的 B 是已檢查教材,不能替你證明其他檔案安全
不要把再經 Save Image 存一次當成清除方法。 這個節點可能把當次工作流重新寫入輸出。官方也提供啟動時停用 metadata 的設定,但它影響後續輸出,不能回頭清掉舊檔;本課不用修改啟動設定。官方 metadata 說明與限制
做出你的最小分享包
本課練習可以在自己的 lesson-12 資料夾新建 share-copy,放入:
- my-lesson-12-share.json:檢查後另存的一般工作流 JSON
- 實際使用的 source-card 輸入圖:記錄名稱與上傳後可能產生的差異
- README.txt:用途、操作步驟、ComfyUI/前端版本、是否實跑,以及原創素材的來源與授權
- 選填:示範輸出 PNG:只加入已檢查、確定可以分享的副本
先不發給別人。在另一個空白工作流打開 JSON、重新選取輸入圖,確認連線與設定,實際成功執行後才記錄「可重做」。這只證明你這個環境的結果,不保證別人的版本也成功。
未來分享生成模型工作流時,還要記錄模型名稱、版本、下載來源、自訂節點來源及必要設定;不要把模型權重、他人照片或其他無權分發的素材直接打包。工作流 metadata 不是數位簽章,也不能證明作者或內容沒有被改過。
常見問題
原圖有 workflow,但匯入後出現缺失節點?
恢復畫布不會自動安裝節點。先核對檔案來源及版本;本課只有 LoadImage、SaveImage 與 Note,不應需要陌生擴充。遇到其他工作流時,不要只因出現 Missing Nodes 就自動安裝套件,先確認信任來源及需求。
把 JSON 的檔名改對了,為什麼仍找不到圖片?
文字相同不會傳送檔案。必須透過 Load Image 上傳到當前執行環境,並選取那裡實際存在的素材。恢復資料不是搬移硬碟、雲端資料夾或模型環境。
圖片內容一樣,SHA-256 為什麼不同?
檔案雜湊會把 metadata、壓縮方式等位元組都算進去;相同像素仍可能得到不同雜湊。教材的素材紀錄用來核對下載檔是否改動,不用來要求自己的輸出逐位元相同。
PNG 中的 prompt 就是我的正向提示詞嗎?
在這裡不是。它是整份執行圖的 JSON,可以含多個節點與輸入。本課沒有文字生圖節點,仍然有名為 prompt 的資料。不要只搜尋一段正向文字,就以為已檢查完整 metadata。
完成檢查
- 我已保存原本畫布,使用獨立工作流比較 A、B
- 我能指出 A 的兩個執行節點與 Note,知道它們來自 workflow
- 我已在 Load Image 上傳並選取真正的輸入圖;沒有把記錄的檔名當成素材本體
- 我知道 B 沒有恢復資料,但仍是有效圖片;C 是選做,不能代表完整畫布
- 我有自己的 PNG、一般 JSON 與觀察紀錄,未實跑的項目仍寫 not_run
- 我知道分享前要檢查看得見的內容、metadata、依賴及使用權限
下載、來源與授權
- 完整練習包 ZIP/一般工作流 JSON/觀察單 CSV
- 原始檔:A:workflow+prompt、B:純像素、C:只含 prompt、source-card 輸入圖
- 素材與雜湊紀錄/README 與授權
- 官方 SaveImage/LoadImage 固定版本
- 官方前端 workflow → prompt → parameters 載入順序/PNG metadata 讀取實作
- 官方 Workflow Metadata 文件,查核日 2026-10-11。行為細節以前面列出的固定版本原始碼為準
本課原創圖片、測試素材與教材工作流採 CC BY 4.0,使用時標示「綠豆 AI,第 12 課」並註明是否修改。官方程式碼不包含在公開練習包內,仍依各原專案授權。