作者:陳俊佑 / 臺灣大學計算機及資訊網路中心程式設計組行政專員
前言
大家好,我是富田町47番地的社畜工程師柚子哥,很高興可以跟大家分享自己玩AI的心得,自從買了Mac mini後每個週末都宅在家裡玩AI的應用。突然間看到新聞上報導大家都在用AI產某某風格的圖,內心發想那我是不是也可以用mac跑跑看產圖AI。於是從Stable Diffusion開始研究,一路研究到Comfy UI,不玩Comfy UI還好,一玩就上癮,週末都熬夜到凌晨4點才上床睡覺,結果血糖跟血壓都失調。但產出很多很美的圖片實在讓人欲罷不能,微調參數又會出現截然不同的結果,相互關連的節點也有很多細節要知道,AI產圖是如此的博大精深,讓我體內的血源詛咒不斷push我想了解更多的參數細節,雖然我的Mac mini只有16G ram,產圖效率低下,也不能跑太複雜的產圖工作流程以及產生動態影片,但也滿足了我產圖的快感。
因為我的Mac mini效能有限,無法玩的太深,因此這邊不作太深入的教學,純粹分享最簡易的使用方法,以及介面的介紹。
一、圖像生成模型相關知識學習
大家玩Comfy UI之前我認為要學習一點圖像生成模型的知識,才會知道Comfy UI裡面的一些節點是對應到哪些步驟,例如:為什麼要先產生一張產生雜訊的圖?KSamplers節點的sampler跟scheduler該怎麼選?有什麼優劣?看完了才會比較有一點點概念。
這邊我推薦看臺大電機系李宏毅老師的線上YouTube影片,李宏毅老師講解的AI知識很容易理解又有趣,絕對不能錯過,以下次幾個比較相關的影片連結。
【生成式AI】Stable Diffusion、DALL-E、Imagen 背後共同的套路
https://www.youtube.com/watch?v=JbfcAaBT66U
【生成式AI】淺談圖像生成模型 Diffusion Model 原理
https://www.youtube.com/watch?v=azBugJzmz-o
【生成式AI】Diffusion Model 原理剖析 (1/4) (optional)
https://www.youtube.com/watch?v=ifCDXFdeaaM
二、Comfy UI
談到文字生成圖像模型都會想到Stable Diffusion(簡稱SD),但SD對於一般普羅大眾來說還是有點難上手,不像Adobe的套裝軟體一樣簡單安裝即可使用,而Comfy UI則是解決了這個痛點,把文字生圖的細節流程視覺化、節點化、介面化,降低一般使用者進入的門檻,而且還是開源方式開放給大家使用,我覺得這是最偉大的地方,當然除了文轉圖之外,ComfyUI還支援Image to Image、LoRA、Image to Video、Stable Audio等一系列強大功能,而且只要下載網路上大家分享的workflows以及對應的模型、輸入一樣的參數、顯卡效能足夠,就可以產出一樣的物件,可以說是非常簡單上手。
三、ComfyUI安裝
首先我們到ComfyUI的官網首頁https://www.comfy.org,就會有明確的下載圖示,點擊後下載並安裝。

圖1. ComfyUI官網

圖2. 下載頁面
四、ComfyUI介面
開啟ComfyUI的介面如下,左邊的工具列說明分別如下表。
|
排程清單
|
跑圖要花很多時間,如果對某個參數或提示詞很滿意,想用不同種子重複跑,就會列再排程清單這邊慢慢跑
|
|
節點清單
|
顯示有哪些節點可以使用,官方已經預設很多節點,節點也可以自己擴充。
|
|
模型清單
|
顯示有哪些模型可以用,通常checkpoints(主要模型)跟loras(微調模型)都會在網路上到處下載一堆有趣的模型來試玩,但很吃空間,checkpoints模型少說都4~7 GB、loras模型會比較小,約500MB~2GB。
|
|
已儲存的工作流程
|
儲存自己做好的流程。
|
|
工作留的節點清單
|
如果流程很大,裡面有超過數十個節點,就會很難管理節點,這裡就是觀看目前流程有哪些節點,可以快速跳到該節點功能並修改。
|
|
官方模板
|
官方製作一系列的工作流程模板,我們從這邊入手。
|
表1.介面簡介

圖3. 介面
五、起手式-官方模板
打開官方模板時會跳出很多的流程範例,接著試著點Image Generation。

圖4. 官方模板
開啟流程時會檢查是否有模型,沒有該工作流程就會跳詢問是否下載,第一次下載好之後就不用下載。

圖5. 下載模型
模型下載好之後workflow視窗就會出現一堆節點。

圖6. workflow視窗
我大致上簡單講一下範例節點用處。
Load Checkpoint:是用來載入一個Stable Diffusion模型的,可以指定不同的模型。Load Checkpoint節點的MODEL, CLIP, 和VAE輸出連接到後續流程中對應的輸入端。
|
MODEL
|
K-Sampler的輸入端
|
|
CLIP
|
CLIP Text Encode 的 clip 輸入(用來處理提示詞/咒語)
|
|
VAE
|
VAE Decode的輸入(用於將潛在空間的數據轉換回最終圖像)
|
表2. Load Checkpoint輸出

圖7. Load Checkpoint
CLIP Text Encode(Prompt):用來輸入的提示詞或咒語的核心節點,其中它有跟Load Checkpoint做連結,主要就是將輸入的每一個詞語(例如:貓、太陽、4K、高畫質)或句子(例如::女孩走在沙漠裡,身穿紅色泳裝),轉換成一串複雜的數值陣列(稱為Embedding(嵌入向量)或Latent Representation(潛在表示))。後續的輸出Conditioning,會連接到K-Sampler(K採樣器)節點,樣板裡面有2個CLIP Text Encode,分別連接到K-Sampler(K採樣器)節點的positive(正面提示詞)跟negative(負面提示詞),正面提示詞大家都知道意思,負面提示詞屬於非必要的,功能主要就是希望讓AI產出的圖片減少出現該提示詞的物件或效果,通常會寫watermark, text, logo, signature避免圖片出現文字、浮水印,或是extra limbs, extra fingers, extra arms減少圖片產生多餘的肢體、多餘的手指、多餘的手臂,但過多的負面提示詞有時會限制模型的創意反而產不出好的效果。

圖8 .CLIP Text Encode
Empty Latent Image:這個節點的功用是創建一個空的、Noise(雜訊)的數學矩陣,Stable Diffusion的圖像生成過程,本質上是從純粹的隨機雜訊開始,然後逐步去除雜訊(Demoisinig),直到圖像出現。width(寬度)決定圖像的橫向大小,height(高度)決定圖像的縱向大小。
batch_size是批次處理,設定為4的話,ComfyUI會一次生成四張圖片(四個潛在空間畫布),模型和VAE只會被載入VRAM一次,四張圖會被當作一個大型的張量(Tensor)在顯卡上同時處理,省去了多次啟動、設定K-Sampler參數、模型載入和卸載等重複的CPU/IO步驟,因此會比直接按【run】四次快。而四張圖的種子會是第一張圖的種子連續增加,假如我們在VAE設定(或是隨機產生)種子是1234,第一張圖片的種子就會是1234,第二張圖片的種子就會是1235,以此類推。
LATENT則是輸出,會連接到K-Sampler(採樣器)的latent 輸入端。

圖9 .Empty Latent Image
K-Sampler:K-Sampler(Kernel Sampler)是整個Stable Diffusion圖像生成流程中的核心,前面步驟的準備(模型、提示詞、雜訊畫布)最終都匯聚到這裡,由它來執行從雜訊到圖像的Latent Representation(潛在表示)之用。
Latent Representation還不是一般人眼可以看的圖像,但可以想像為濃縮的草稿,草稿可能有Semantic Conten(語義內容:圖像中是什麼)、Structure and Composition(結構與構圖:物體在畫面中的位置、形狀和相互關係)、Basic Style and Color(基礎風格與色彩)。
主要輸入(Inputs):K-Sampler節點通常需要五個主要的輸入參數,它們是生成圖像所需的全部「材料」和「指令」。
|
輸入
|
連接處
|
|
|
model
|
Load Checkpoint
|
Stable Diffusion的核心。它包含了訓練數據,知道如何將潛在空間中的雜訊與提示詞對應起來。K-Sampler必須要有這個模型才能進行去雜訊計算。
|
|
positive
|
CLIP Text Encode (Prompt)
|
告訴模型要畫什麼(你希望圖像中出現的元素和風格)。
|
|
negative
|
CLIP Text Encode (Prompt)
|
告訴模型不要畫什麼(你不希望圖像中出現的錯誤或缺陷)。
|
|
Latent_image
|
Empty Latent Image
|
雜訊畫布,如果圖生圖可能會是連接VAE Encode。
|
表3. K-Sampler輸入
底下的參數功能分別如下:
|
參數
|
功能
|
|
seed
|
種子決定了初雜訊(Initial Noise)的隨機排列方式,通常是隨機一串數字。
|
|
Control after generate
|
決定每run一次種子變化的方式:
- Fixed(固定)-圖像生成完成後,Seed會保持在它當前的值,不會改變。
- Increment(遞增)-圖像生成完成後,Seed會自動加1。
- Decrement(遞減)-圖像生成完成後,Seed會自動減1。
- Randomize(隨機)-圖像生成完成後,Seed會隨機亂跳。
|
|
steps
|
決定K-Sampler 將雜訊轉換為圖像的去噪計算次數,數值越高圖像細節通常更豐富、更精確,但生成時間也更長,15-35是滿常見的超參數(Hyperparameter),過高的數值圖像不會變得更好,純粹是浪費時間跟算力。
|
|
cfg
|
cfg(Classifier Free Guidance Scale)控制AI模型對提示詞 (Prompt)的遵循程度或引導強度。數值越低(例如 1-6):模型更自由、更有創意,但可能較不符合提示詞,數值越高(例如 7-12):模型更嚴格地遵循提示詞,不過產出的圖像成品可能會看起來過度飽和或過度依賴細節。依照喜歡的風格去調整。
|
|
denoise
|
denoise Strength決定了K-Sampler中,從原始輸入圖像中移除多少雜訊,以及有多少新的雜訊會被重新加入,以產生變化。但它只會在「圖生圖」(Image-to-Image)或Inpainting/Outpainting的工作流程中生效,純粹的文生圖(Text-to-Image)流程中,這個參數通常是被固定為1.0,因為沒有初始圖可供參考。
|
|
sampler_name
|
Sampler Name(採樣器名稱)決定了K-Sampler在每一步去雜訊的計算中,如何從當前的潛在圖像狀態,推測出下一個更清晰的狀態。可以說是去除雜訊的核心引擎。大致上常見的採樣器如下
Euler:適合快速出圖和測試,Steps數不足(例如少於 20) 或複雜場景中,容易產生可見的圖像偽影(Artifacts),細節不如DPM++(dpmpp)系列豐富。
DPM++ 2M(dpmpp_2m):在相對低 Steps(約 20-30)就能生成高品質且細節豐富的圖像。
DPM++ SDE(dpmpp_sde):能夠生成更多樣、更有創意的結果,需要更多的Steps才能收斂到好的結果(通常推薦40-60 Steps)。
|
|
scheduler
|
Scheduler(調度器)決定了Sampler在去雜訊過程中的如何衰減或去雜訊速度如何變化的策略。你可以將Scheduler視為去雜訊的變速器。大致上常見的調度器如下。
Karras:它採用了對數間隔的去雜訊步數規劃,讓模型在前期的步驟中快速移除主要的雜訊,而在後期的步驟中專注於細節。只需較少的Steps就能達到優秀效果
Simple:雜訊衰減是線性且平均的。
Exponential:雜訊衰減速度呈指數級。
|
表4. 參數
K-Sampler流程中,sampler_name和scheduler是兩個密不可分的搭檔,不同的Sampler對於不同的模型和提示詞會有不同的表現。最好的做法是使用固定的種子、CFG和Steps,然後輪流測試幾種主流的Sampler + Scheduler組合,找出最喜歡的出圖模型的那個組合,這也是最燒時間的地方。如果從零開始的話,建議採樣器的玩法可以參照下表,但還是要自己去試出最好的效果。
|
需求
|
Sampler Name
採樣器
|
Scheduler
調度器
|
Steps
步數
|
|
高品質、細節豐富、正式出圖。
|
dpmpp_2m
|
Karras
|
20-30
|
|
想快速看看Prompt的大致效果
|
Euler
|
Karras
|
15-20
|
|
追求隨機性、高創意度、多樣化結果
|
dpmpp_sde
|
Karras
|
40-60
|
表5. 參數玩法參考

圖10 . K-Sampler
VAE Decode:VAE Decode節點可以想像是一個繪畫翻譯機,接收兩個輸入samples跟vae。
samples節點連接K Sampler (採樣器)節點輸出的Latent Representation(類似草稿的東西),vae節點連接到Load Checkpoint輸出(類似解碼規則、把草稿畫成油畫的規則),經過VAE Decode的轉換最終產出圖像。連接著Save Image的節點自動儲存。

圖11 . VAE Decode
Run:workflow區塊裡面有個run的按鈕,只要按下Run,就會開始跑圖,Run旁邊有數字代表要執行的次數,這個次數就是重新執行的次數,會重新啟動、設定K-Sampler參數、模型載入和卸載等重複的CPU/IO步驟。

圖12 . run的按鈕
按下執行後排程清單就會出現一隔正在跑的工作,並且workflow會知道現在正在跑到哪個節點。

圖13. 正式跑圖
跑圖完成就會出現圖像。

圖14. 跑圖完成
六、結語
進入ComfyUI的世界,就像劉姥姥進了大觀園一樣,一開始,眾多的節點我感到手足無措,不知道從哪邊開始起手,但是從官方的範例開始玩起,讓我快速上手,重新學習「K-Sampler」和「VAE Decode」這些專業術語的作用,才知道將一系列數字運算的步驟組合成一個流程是如此美妙。
慢慢的我熟悉玩法後就會開始瘋狂蒐集提示詞,產出各種好看的圖像,之後便開始了蒐集模型的癖好,就像steam買了遊戲卻不玩,蒐集了一堆別人訓練好的模型卻沒時間遊玩,我的硬碟變成了一座數位模型的墳場。裡面堆滿了數十個風格各異的Checkpoint(主模型)、上百個LoRA(微調模型)、以及無數的Embedding(文字反轉)。每一個檔案都代表著一種未被探索的藝術可能性:一個專門繪製賽博龐克城市夜景的Checkpoint、一個能把所有角色眼睛變成閃亮星星的LoRA、或者一個只要輸入幾個英文字母就能召喚出完美光影效果的Embedding。
每天晚上,瀏覽模型下載網站,手指一滑,一個又一個新的模型又被加入了下載隊列。我告訴自己:「這個模型的光影細節太棒了!」、「這個LoRA專門處理頭髮的細節,這必須擁有!」。
誠摯希望大家不要像我一樣,吸了數位毒品停不下來,與大家共免之。
致謝
感謝臺大計中程式組洪嘉駿,每次問嘉駿一些LLM的問題他都很有耐心回答也解決我的諸多疑惑,讓我增長更多知識。
參考資料
- ComfyUI:https://www.comfy.org
- ComfyUI github:https://github.com/comfyanonymous/ComfyUI
- 李宏毅老師youtube頻道:https://www.youtube.com/@HungyiLeeNTU
- Denoising Diffusion Probabilistic Models [Submitted on 19 Jun 2020 (v1), last revised 16 Dec 2020 (this version, v2)]:https://arxiv.org/abs/2006.11239
- High-Resolution Image Synthesis with Latent Diffusion Models[Submitted on 20 Dec 2021 (v1), last revised 13 Apr 2022 (this version, v2)]:https://arxiv.org/abs/2112.10752?source=post_page-----ec34d7726a6c---------------------------------------
- High-Resolution Image Synthesis with Latent Diffusion Models[Submitted on 20 Dec 2021 (v1), last revised 13 Apr 2022 (this version, v2)]:https://arxiv.org/abs/2112.10752