跳到主要內容區塊

計資中心電子報C&INC E-paper

專題報導

AI家家酒【Mac】×【Comfy UI】玩小型產圖AI
  • 卷期:v0075
  • 出版日期:2025-12-20

作者:陳俊佑 / 臺灣大學計算機及資訊網路中心程式設計組行政專員


前言

大家好,我是富田町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,就會有明確的下載圖示,點擊後下載並安裝。

 

20251220_007505_01

圖1. ComfyUI官網

 

20251220_007505_02

圖2. 下載頁面

 

四、ComfyUI介面

開啟ComfyUI的介面如下,左邊的工具列說明分別如下表。

排程清單

跑圖要花很多時間,如果對某個參數或提示詞很滿意,想用不同種子重複跑,就會列再排程清單這邊慢慢跑

節點清單

顯示有哪些節點可以使用,官方已經預設很多節點,節點也可以自己擴充。

模型清單

顯示有哪些模型可以用,通常checkpoints(主要模型)跟loras(微調模型)都會在網路上到處下載一堆有趣的模型來試玩,但很吃空間,checkpoints模型少說都4~7 GB、loras模型會比較小,約500MB~2GB。

已儲存的工作流程

儲存自己做好的流程。

工作留的節點清單

如果流程很大,裡面有超過數十個節點,就會很難管理節點,這裡就是觀看目前流程有哪些節點,可以快速跳到該節點功能並修改。

官方模板

官方製作一系列的工作流程模板,我們從這邊入手。

表1.介面簡介

 

20251220_007505_03

圖3. 介面

 

五、起手式-官方模板

打開官方模板時會跳出很多的流程範例,接著試著點Image Generation。

20251220_007505_04

圖4. 官方模板

 

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

 

20251220_007505_05

圖5. 下載模型

 

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

 

20251220_007505_06

圖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輸出

 

20251220_007505_07

圖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減少圖片產生多餘的肢體、多餘的手指、多餘的手臂,但過多的負面提示詞有時會限制模型的創意反而產不出好的效果。

 

20251220_007505_08

圖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 輸入端。

20251220_007505_09

圖9 .Empty Latent Image

 

K-SamplerK-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一次種子變化的方式:

  1. Fixed(固定)-圖像生成完成後,Seed會保持在它當前的值,不會改變。
  2. Increment(遞增)-圖像生成完成後,Seed會自動加1。
  3. Decrement(遞減)-圖像生成完成後,Seed會自動減1。
  4. 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. 參數玩法參考

 

20251220_007505_10

圖10 . K-Sampler

 

VAE DecodeVAE Decode節點可以想像是一個繪畫翻譯機,接收兩個輸入samples跟vae。

samples節點連接K Sampler (採樣器)節點輸出的Latent Representation(類似草稿的東西),vae節點連接到Load Checkpoint輸出(類似解碼規則、把草稿畫成油畫的規則),經過VAE Decode的轉換最終產出圖像。連接著Save Image的節點自動儲存。

20251220_007505_11

圖11 . VAE Decode

 

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

20251220_007505_12

圖12 . run的按鈕

 

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

 

20251220_007505_13

圖13. 正式跑圖

 

跑圖完成就會出現圖像。

 

20251220_007505_14

圖14. 跑圖完成

 

六、結語

進入ComfyUI的世界,就像劉姥姥進了大觀園一樣,一開始,眾多的節點我感到手足無措,不知道從哪邊開始起手,但是從官方的範例開始玩起,讓我快速上手,重新學習「K-Sampler」和「VAE Decode」這些專業術語的作用,才知道將一系列數字運算的步驟組合成一個流程是如此美妙。

慢慢的我熟悉玩法後就會開始瘋狂蒐集提示詞,產出各種好看的圖像,之後便開始了蒐集模型的癖好,就像steam買了遊戲卻不玩,蒐集了一堆別人訓練好的模型卻沒時間遊玩,我的硬碟變成了一座數位模型的墳場。裡面堆滿了數十個風格各異的Checkpoint(主模型)、上百個LoRA(微調模型)、以及無數的Embedding(文字反轉)。每一個檔案都代表著一種未被探索的藝術可能性:一個專門繪製賽博龐克城市夜景的Checkpoint、一個能把所有角色眼睛變成閃亮星星的LoRA、或者一個只要輸入幾個英文字母就能召喚出完美光影效果的Embedding。

每天晚上,瀏覽模型下載網站,手指一滑,一個又一個新的模型又被加入了下載隊列。我告訴自己:「這個模型的光影細節太棒了!」、「這個LoRA專門處理頭髮的細節,這必須擁有!」。

誠摯希望大家不要像我一樣,吸了數位毒品停不下來,與大家共免之。

 

致謝

感謝臺大計中程式組洪嘉駿,每次問嘉駿一些LLM的問題他都很有耐心回答也解決我的諸多疑惑,讓我增長更多知識。

 

參考資料

  1. ComfyUI:https://www.comfy.org
  2. ComfyUI github:https://github.com/comfyanonymous/ComfyUI
  3. 李宏毅老師youtube頻道:https://www.youtube.com/@HungyiLeeNTU
  4. Denoising Diffusion Probabilistic Models [Submitted on 19 Jun 2020 (v1), last revised 16 Dec 2020 (this version, v2)]:https://arxiv.org/abs/2006.11239
  5. 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---------------------------------------
  6. 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