COMFYUI 基礎 · 第 03 課
固定 seed 做對照:一次只改一個條件
沿用第二課的小豆機器人與 SD1.5 工作流,用 14 張畫面與教學圖,逐步比較種子、提示詞、CFG 與步數,留下五組圖片、JSON 和可重做的觀察紀錄。
開始前,準備這些
- 完成第二課,已能用指定 SD1.5 模型生成一張 512×512 PNG
- 能找到 Load Checkpoint、positive、KSampler 和 Save Image
- 保留自己的第二課 JSON,知道目前環境的輸出資料夾
這一課,你會學會
- 分清固定 seed 與換 seed,避免無意間同時改兩項設定
- 完成一份基準與四份單一變因對照,分別保存 PNG 和 JSON
- 用相同觀察標準比較結果,說出結論適用的範圍
- 重新載入自己的實驗檔,確認參數與檔案能對得起來
本課目錄
這一課要留下五組能說清楚差別的作品
第二課把環境與模型準備好了。這一課直接用同一個 SD1.5、512×512、七節點工作流,繼續畫綠色小豆機器人、黃色背包與黑色圓眼。
這次不追求一次就畫得最漂亮。我們要回答一個具體問題:這一張和 A0 基準圖不同,是哪一個設定造成的? 先保存一份基準 A0,再分別只改種子、桌燈顏色、CFG、步數,最後得到五組 PNG+JSON。想多練的人,再加做一次取樣器比較。
驗證範圍先說清楚: 這份教材核對了官方文件、原始碼、圖片來源與 JSON 結構,尚未用本課提示詞做獨立 GPU 實跑。下方真實 UI 圖來自官方文件;課程繪製的圖解都標示為設定或操作示意。教材不提供假造的機器人前後圖,也不保證你一定看到某個視覺變化。你實際生成的圖片,就是本次練習要記錄的資料。
還沒有完成第二課出圖的人,可以先閱讀和填實驗計畫,但實作狀態請保留「未執行」。如果第二課還在缺模型或記憶體不足,先回到那一課排錯;這一課不用重新安裝、加 custom nodes、換模型或註冊付費服務。
第 0 步 先把練習檔準備好
- 在自己的 文件 → Greenbean-Learning 裡新建 lesson-03 資料夾
- 下載第三課練習包 ZIP,在檔案總管按右鍵 → 全部解壓縮,解到 lesson-03 裡
- 用記事本開啟 lesson-03-observation-sheet.txt。先填目前的 ComfyUI 版本、GPU 和模型檔名;可參考第二課的環境紀錄
- 回到已能出圖的 ComfyUI,先保存畫布上自己的未儲存作品
- 用 Workflow/Workflows → Open 開啟 greenbean-03-A0-baseline.json,或把這個 JSON 拖到中央畫布
- 只要重新載入 JSON,就核對 Load Checkpoint → ckpt_name。模型檔名是 v1-5-pruned-emaonly-fp16.safetensors;如果你把模型放在 checkpoints 的子資料夾,選取自己已能成功執行的那一項
練習包含一份 A0 基準檔、四份對照檔、一份選做檔、觀察單與來源說明。它們不含模型權重、不會安裝套件,也沒有付費 API 節點。下載檔的用途是幫你核對設定,不代表已在你的電腦測試過。
應該看到: 第一、二課的七個節點都在,提示詞仍然是機器人;只換成第三課的輸出檔名前綴。如果出現 Missing Nodes,先確認自己開的是本課檔案,不要急著安裝擴充。
第 1 步 先把 A0 基準設定鎖好
找到 seed 和 fixed
seed(種子)是用來產生初始雜訊的數字。把它想成這次實驗的起點編號比較好理解:相同起點配上不同文字或設定,結果仍會改變。seed 不是角色身分證;不能靠一個數字保證每張圖都有同一張臉或同一個背包。
- 找到 KSampler 的種子控制,先選 fixed。舊版列為 control_after_generate,有些說明把相同意思寫成 Keep
- 選好 fixed 之後,再把 seed 填成 20261006
- 如果介面把種子控制收進 seed 旁的圖示或選單,找固定/fixed 的選項。外觀不同時先用英文欄位辨認;找不到就重新開啟 A0 檔,不要隨便切換整套介面或外掛
- 點畫布空白處,確認數字已套用;部分舊介面要按兩下數字才能直接輸入
fixed 是「不要自動換 seed」;它沒有鎖住其他設定。 Randomize 會換種子,increment/decrement 會遞增/遞減。做提示詞與參數比較時,如果種子也跟著變,就分不清是哪一項改動造成差異。官方 KSampler · 官方前端種子控制原始碼
A0 只用這一組基準
| 位置 | A0 設定 | 本課用途 |
|---|---|---|
| Load Checkpoint → ckpt_name | v1-5-pruned-emaonly-fp16.safetensors | 全程同一個 SD1.5 檔案 |
| KSampler → seed | 20261006 | 多數比較的固定起點 |
| control_after_generate | fixed | 保留同一個 seed,不自動更換 |
| steps | 20 | 基準取樣步數 |
| cfg | 8 | 基準文字引導強度 |
| sampler_name | euler | 基準取樣演算法 |
| scheduler | normal | 全程不更換雜訊排程 |
| denoise | 1.0 | 本課是空白 latent 的文字生圖 |
| Empty Latent Image | 512 × 512,batch_size 1 | 每輪生成一張 |
| Save Image → filename_prefix | greenbean-03-A0-baseline | 在資料夾辨認基準圖 |
這是延續第二課的教學基準,不是所有模型的最佳設定。不要把這組 CFG、步數與 denoise 原封不動套到其他模型或圖生圖流程。
核對 positive 與 negative
在接到 KSampler positive 的 CLIP Text Encode 裡,保留以下整段:
small rounded green bean robot, yellow backpack, round black eyes, full body, standing beside a wooden table, one small white desk lamp on the table, soft morning light, light gray background, simple 3d illustration
在接到 negative 的另一個 CLIP Text Encode 裡,保留:
text, watermark, blurry, low quality
看連線的終點辨認 positive/negative,不要只靠方塊擺在上面或下面。負向描述也只是引導,不是能百分之百排除水印、模糊或錯誤的保證。官方文字條件節點說明
第 2 步 生成並保存 A0 基準
- 再核對一遍 A0 表格,Run 旁的執行次數保持 1
- 點右上 Run 一次,或按 Ctrl + Enter 一次。等它完成,不要連按加入多份工作
- 到 Save Image 看預覽,再到第二課記下的輸出資料夾找 greenbean-03-A0-baseline 開頭的 PNG
- 把新 PNG 複製進 lesson-03 資料夾。流水號由 ComfyUI 加入,保留原檔名,在觀察單填完整檔名
- 用 Workflow/Workflows → Export 匯出一般工作流 JSON,命名 my-greenbean-03-A0.json,存進同一個資料夾;不要選 API 格式
- 確認 seed 仍為 20261006,並填 A0 的實際觀察
A0 不漂亮也能當基準
對照圖片,逐項填「有/沒有/看不清楚」:
- 能看出綠色、圓潤的小機器人嗎?
- 黃色背包是否清楚出現?
- 眼睛是否是黑色圓眼?
- 桌燈有沒有出現?看起來是什麼顏色?
- 有沒有多出手腳、物件黏在一起,或明顯的模糊?
這些是本次作品的觀察項目,不是模型性能排行榜。背包被身體擋住時寫「看不清楚」,不要猜它一定正確。完整 PNG 生成成功但主角不符合想像,仍然可以當成這次對照的 A0;若流程報錯,先排錯,不能拿錯誤畫面充當結果。
再按一次 Run 卻瞬間完成?
ComfyUI 會重用沒有改變的節點結果。固定 seed,而且所有上游輸入都不變時,部分或全部流程可能走快取,所以你不一定得到第二個新 PNG,也不能把這一次耗時當成 GPU 重新生成的速度。本課只需保存一份 A0;若要比較耗時,還需另外控制快取、模型是否已載入等條件,本課不做效能測試。官方伺服器執行流程
第 3 步 B1 只換 seed 看起點的差別
這一輪故意更換 seed,學會分辨「換一個起點」和「調整同一組條件」。
- 用 Open 重新載入自己剛保存的 my-greenbean-03-A0.json
- 在 KSampler 只把 seed 從 20261006 改成 20261007,control_after_generate 仍是 fixed
- 不改 positive、negative、steps、cfg、sampler、scheduler、尺寸或 denoise
- 在 Save Image 把 filename_prefix 改成 greenbean-03-B1-seed。檔名前綴是整理標籤,不是生成條件
- Run 一次,保存 PNG 與 my-greenbean-03-B1.json
- 在觀察單填 B1,然後把 A0 與 B1 並排看
應該完成: 兩份設定中的生成差異只有 seed,並各有自己的 PNG。結果的構圖、比例或細節可能改變;如果看起來很接近,就如實寫「差異不明顯」。不同 seed 的數值遠近,不等於圖像相似程度。
先停一下: 接下來 C1、D1、E1 都要回到 seed 20261006。不能用 B1 的 20261007 直接接著改提示詞,否則相對 A0 就變成同時改了兩件事。
第 4 步 C1 固定 seed 只把白桌燈改紅
這次問題更具體:在同一個起點,把桌燈的 white 改成 red,圖裡的桌燈有沒有跟著改色?
- 重新開啟 my-greenbean-03-A0.json,核對 seed 20261006、fixed、20 steps、CFG 8
- 在接到 positive 的 CLIP Text Encode 找到 one small white desk lamp on the table
- 只將 white 換成 red,其他文字、逗號與 negative 不動
- Save Image 的 filename_prefix 改成 greenbean-03-C1-red-lamp
- Run 一次,保存 PNG 與 my-greenbean-03-C1.json
- 把 A0 與 C1 並排,先看桌燈,再看機器人的三項特徵
怕漏字時,可用下面完整 C1 正向提示詞核對:
small rounded green bean robot, yellow backpack, round black eyes, full body, standing beside a wooden table, one small red desk lamp on the table, soft morning light, light gray background, simple 3d illustration
比較時分開記兩件事
- 想改的部分: 桌燈是否由白變紅?如果根本沒有桌燈,填「無法判斷」,不要直接寫成功
- 不想改的部分: 機器人外形、黃色背包、眼睛、構圖,有沒有也跟著變?
固定 seed 讓比較更有條理,不會把桌燈以外的像素鎖住。文字生圖仍會重算整張圖;改一個字也可能牽動背景或角色。精準保留其他區域,需要後面再學參考圖、局部修改等方法。
如果紅色跑到背包上,先記下「顏色影響到別的物件」。不要在同一輪又提高 CFG、換 seed、改一長串負向詞,再把結果歸功於 white → red。這課先練習分辨現象,下一輪才決定要測什麼。官方文字生圖與提示詞說明
第 5 步 D1 回基準 只把 CFG 8 改成 6
CFG(classifier-free guidance)可以先理解成條件引導的強度。數字會影響取樣如何使用文字條件,不是畫質分數,也不是數字越大越準。過高可能損害畫面品質,適合的值要看模型、提示詞與其他設定。官方 KSampler 原始碼說明
- 重新開啟 my-greenbean-03-A0.json。先讀 positive,確認桌燈已回到 white
- 核對 seed 20261006、fixed、steps 20、euler/normal
- 在 KSampler 只把 cfg 從 8 改成 6
- filename_prefix 改成 greenbean-03-D1-cfg-6
- Run 一次,保存 PNG 與 my-greenbean-03-D1.json
- 比較 A0 與 D1:三項角色特徵、桌燈是否出現、顏色是否自然、輪廓或瑕疵有沒有變化
應該完成: 得到一份 CFG 6 的實際紀錄。可以寫「D1 的背包較清楚,但桌燈仍缺少」,也可以寫「兩張無明顯差異」,前提是這確實發生在你的圖上。不要照抄教材的例句當成結果。
這一對圖片只能支持「這個模型、這段提示詞、這個 seed 下,我比較喜歡哪一張,以及觀察到了什麼」。它不足以證明 CFG 6 永遠優於 8,或幫你找到所有圖的最佳值。
第 6 步 E1 回基準 只把 steps 20 改成 30
steps是取樣的步數。改步數會改變取樣過程;30 步不等於先完成原本的 20 步,再替同一張成品多補 10 步。更多步數通常需要更多運算,但不保證更好看,也不是提高解析度的方法。
- 重新開啟 my-greenbean-03-A0.json,確認白桌燈、seed 20261006、CFG 8
- 在 KSampler 只把 steps 從 20 改成 30
- euler、normal、denoise 1.0、512×512、batch_size 1 都不變
- filename_prefix 改成 greenbean-03-E1-steps-30
- Run 一次,保存 PNG 與 my-greenbean-03-E1.json
- 比較 A0 與 E1:背包、眼睛、燈與輪廓有沒有改變?變清楚、變差,或沒有明顯差異?
應該完成: 一張依 30 步設定生成的 PNG 與相符 JSON。如果 30 步沒有明顯改善,這也是有用的紀錄;不用為了「證明更多一定更好」繼續加到很大的數字。
本課不提供秒數基準,也不把第一張載入模型的時間與後面已載入模型的時間拿來比較。若你自行記秒數,注明是否首次載入、是否可能走快取,不在這裡換算速度排名。官方取樣程式碼
第 7 步 選做 F1 只換取樣器 不換排程
先完成前五組再做這一步。sampler_name決定取樣演算法;scheduler決定雜訊水準如何安排。它們是兩個不同欄位,下載到別人的「推薦組合」時,也不等於可以同時換兩個再宣稱只比較 sampler。
- 重新開啟 my-greenbean-03-A0.json,再確認 seed 20261006、20 steps、CFG 8、白桌燈
- 打開 sampler_name 下拉清單,將 euler 改成 heun;如果可搜尋,輸入 heun 再選完全相同的名稱
- scheduler 保持 normal,其他生成條件不動
- filename_prefix 改成 greenbean-03-F1-heun-optional
- Run 一次,保存 PNG 與 my-greenbean-03-F1.json,只拿 A0 與 F1 比
heun 是本課選來練習的另一個取樣器,不代表它一定比 euler 更好。相同 steps 也不保證不同演算法需要相同運算量或時間;這次只看結果,不做速度比賽。下拉清單沒有 heun 時,先記下版本與清單,跳過選做,不要為了本課安裝來源不明的節點。官方取樣器原始碼
第 8 步 讓圖片和 JSON 一一對得起來
先在檔案總管對每組圖確認完整檔名,再回到觀察單填寫。不要只存「我最喜歡的那張」,否則之後無法知道它比基準改了什麼。
最後做一次重新開啟檢查
- 用 Open 載入自己的 my-greenbean-03-C1.json,檢查 red、seed 20261006、CFG 8、20 steps、euler/normal
- 再載入 my-greenbean-03-D1.json,檢查 white、seed 20261006、CFG 6、20 steps
- 再開 my-greenbean-03-A0.json,確認恢復白桌燈、seed 20261006、CFG 8、20 steps
- 這個檢查只要開檔看設定,不用再按 Run
- 在觀察單各組填上 PNG、JSON 的完整檔名,讓下一次的你看得懂
如果你曾使用教材的救援檔,最後仍應匯出自己的 JSON,因為本機可能用了含子資料夾的 checkpoint 名稱。不要拿原始下載檔冒充已記錄實際環境的檔案。
PNG 可能含有提示詞與工作流中繼資料;分享前也要檢查私人文字、檔案路徑等資訊。聊天軟體或修圖工具可能移除這些資料,因此另外保留 JSON。目前不必把模型權重複製進作業資料夾。官方保存與分享工作流
卡住時 先找出是哪一類問題
做了 C1 卻不知道算不算單一變因
同時比較 A0 和 C1 的 JSON:seed、negative、尺寸、steps、CFG、sampler、scheduler、denoise、模型都要相同。positive 只應有 white → red 的差異;檔名前綴不同是整理需要。如果不確定,重新開 A0 再做 C1,比憑記憶改回去可靠。
seed 每跑一次就變 或圖片變得太多
先檢查 control_after_generate 是否是 fixed,再看這次工作實際送出的 seed。自動換種子的模式可能讓畫面顯示下一次要用的數字,因此不要只靠跑完後的一個欄位猜前一次用了什麼。保留該次的 PNG 中繼資料/執行紀錄,以及匯出的 JSON;不確定的那輪在觀察單標示「seed 未確認」,回 A0 固定後重做比較。
明明固定 seed 圖片還是不一樣
固定 seed 只是其中一個條件。依序核對模型檔是否相同、文字是否有差一個字、所有參數、尺寸、批次,以及 ComfyUI/PyTorch/裝置環境是否改變。不同電腦、版本與執行後端,不保證逐像素一致;不能用 seed 一項就排除其他因素。PyTorch 官方重現性說明
改提示詞了 卻還是看到舊圖
先看是否真的改到接 positive 的節點、是否按了一次 Run、目前那次工作是否完成;再核對新 PNG 的檔名前綴與修改時間。也可能新圖看起來很像,先對照檔案。若輸入完全沒變,重用快取是正常現象;不要盲目清快取或重裝。
紅桌燈沒有出現 或把背包染紅了
先確認 C1 的 red 放在桌燈短句、negative 沒有被一起改,然後如實記錄。SD1.5 可能無法穩定把屬性綁定到指定物件。這不一定是電腦故障;本課不承諾改一個字就能精準局部編輯。
改 CFG 或 steps 以後反而不好看
保留結果,寫具體問題,再回 A0。一次實驗不用挑出冠軍,也不用把數字一直加大。若想再測 CFG 7,應另外建立新代號、仍以 A0 為比較對象;不要覆蓋原本 D1 的紀錄。
選到不一樣的取樣器 或看不到 heun
euler、euler_ancestral 等不同名稱不能當成同一個選項。主線保持 euler;F1 選做才改 heun。清單與教材不符時先核對版本,不安裝外掛硬湊。
出現 Missing Models 或 out of memory
回第二課的排錯區核對模型與記憶體。這課維持 512×512、batch_size 1,不用換大模型;降低 steps 不保證解決顯示記憶體不足。先留下完整錯誤,再處理問題,不把失敗的那輪填成已完成。
小測驗 先作答 再看解答
- 把 seed 設成 20261006,種子控制卻留 randomize,適合拿來比較 CFG 嗎?
- C1 改紅桌燈後直接把 CFG 調到 6,拿它和 A0 比,總共有幾項生成條件不同?
- seed 固定後,把白桌燈改成紅桌燈,能保證機器人的其他像素完全不變嗎?
- 30 steps 的結果沒有比較好看,代表你一定操作錯誤嗎?
- A0 再 Run 一次瞬間完成,可以記成你的電腦「重新生一張圖只需零點幾秒」嗎?
- A0 用 euler/normal,另一組用 heun/karras,能說只比較 sampler 嗎?
- D1 看不出背包,可以把「黃色背包正確」勾成有嗎?
- 只存 PNG、不存 JSON,長期回頭重做時有什麼風險?
參考答案
- 不適合。自動換種子會讓後續工作起點改變;先改 fixed,再核對實際設定
- 兩項:桌燈提示詞和 CFG。D1 應重新開 A0,讓桌燈回 white,再只改 CFG
- 不能。固定種子不會鎖住其他像素,也不是角色一致性的保證
- 不代表。較多步數不保證較好;先核對設定,再留下真實觀察
- 不能。可能用了快取,這不等於重新執行完整取樣的耗時
- 不能。sampler 和 scheduler 都變了;本課 F1 要保留 normal
- 不能。應寫「看不清楚」或「無法判斷」,與「確定沒有」分開
- PNG 的中繼資料可能在傳送或編輯時消失;另外保存 JSON 才能更可靠地保留節點與參數
動手驗收
- 找得到 A0、B1、C1、D1、E1 五組自己的 PNG 與 JSON;F1 是選做
- 每組 PNG 確實是這一輪輸出,檔名與觀察單一致
- 不看課文,也能指出 C1 相對 A0 改了哪一個字,D1 改哪個數字
- 能重新載入三份自己的 JSON,正確指出 seed、CFG、steps 與提示詞
- 寫出一個有限度的結論,例如「在這個 seed 與模型下,D1 的__比 A0 __」;空格填你實際看到的事
- 如果還沒執行、流程失敗或資料對不上,明確填未完成,不勾選為通過
做完以後 先保留這份比較方法
這一課累積的不只是五張圖,還有一種可以帶到後續課程的方法:有基準、只改一項、保存原始檔、記錄看見的差異。
接下來的圖像階段會沿用小豆機器人的三項特徵,先核對 Qwen 圖像模型的工作流、執行條件與使用限制,再做角色圖與修改練習。不同模型要重新建立基準;今天的 seed 和 CFG 數值不會自動變成跨模型的通用配方。圖像整理好之後,才接到影片課。後續仍在準備,這裡不建立空白課文連結。
來源 圖片與下載檔說明
文件查核日期:2026 年 10 月 6 日。本課沿用第二課使用的官方 SD1.5 七節點範例,沒有更改連線。需要重現同一輪實驗時,請以你實際保存的模型、工作流和環境紀錄為準。
- Comfy 官方 SD1.5 文字生圖教學:節點分工與提示詞練習
- KSampler 節點與原始碼:seed、CFG、steps、sampler、scheduler 的角色;其中簡化的「同 seed 同圖」「更多步數更準」敘述已加上適用條件,不當成跨環境保證
- ComfyUI 核心取樣程式:取樣器與排程分開處理
- ComfyUI 前端專案:種子控制的 fixed/increment/decrement/randomize 行為
- ComfyUI 伺服器執行流程:快取與未變更節點的處理
- 官方保存工作流說明:PNG 中繼資料、JSON 與重新載入
- PyTorch 重現性說明:不同版本與運算平台不保證完全相同結果
本課有 7 張未修改的官方原圖與 7 張課程原創設定/整理示意圖。官方圖保留其原有標記,不合成本課參數進 UI;因版本不同,欄位外觀可能與你的畫面不同。每張圖均附原尺寸連結與用途。課程示意圖沒有使用 AI 生成的假介面,也沒有把未實跑的結果畫成比較證據。
圖片來源與 SHA256 清單、官方來源庫 GPL-3.0 授權原文與工作流來源和修改說明隨課保留。練習包只提供工作流、觀察單與說明,不重新散布模型權重。結構核對不能代替 ComfyUI 匯入與 GPU 實跑;目前尚未進行後兩者的獨立驗證。