AI-LECTURER 速報課|2026-10-17|約 25 分鐘

2 秒生成一張圖:用 Diffusers 跑 FLUX.3 Klein 開源繪圖模型

取材:Welcome FLUX.3 Image Klein in Diffusers(Hugging Face Blog)
📍 真實場景
阿凱,接案的電商美編,一個人負責一家小型戶外用品店的所有商品情境圖

老闆下午要上新品頁面,阿凱需要同一隻狐狸玩偶在「雪地黃昏」和「月光夜晚」兩種情境的照片,但現場根本沒拍

😖 卡住的地方:雲端繪圖服務每張都要排隊、按量計費,而且第二張圖裡的狐狸長得和第一張完全不一樣,沒辦法當成同一個商品
💡 這課帶你在自己的電腦上,用幾行 Python 生成一張圖,再用「參考圖+一句修改描述」讓同一隻狐狸換到夜晚,並且看懂哪個版本的模型該在什麼時候用

🧭 這到底是什麼(白話版)

FLUX.3 Klein 是 Black Forest Labs 新發表的開源圖像生成模型,Hugging Face 的 DiffusersHugging Face 出的 Python 套件,把各種繪圖模型包成統一的呼叫方式,不用自己拼底層零件 已經支援它。你只要安裝套件、下載模型,就能在自己的顯示卡上畫圖。「開源」的意思是模型的權重(checkpoint模型訓練完存下來的檔案,載入後就能直接使用,像遊戲的存檔點)公開,任何人都能下載。

同一個模型一次涵蓋三件事:文字生圖(寫一段描述,產出一張圖)、多張參考圖生圖(丟一張或多張圖給它,再描述想要的變化),以及用邊界框(bounding-box在畫面上框出一個長方形,告訴模型「這個東西要放在這個範圍」)控制版面。以前這些常常要分別用不同模型,現在合併成一個。

官方一次放出兩個 checkpoint。第一個是蒸餾版(flux-3-image-klein),官方說明是 time step distilled時間步蒸餾:讓模型學會用更少的畫圖步驟,達到接近原版的成果,像把十道工序濃縮成三道,預設只跑 16 步、不需要 CFG,在 H100 上畫一張 1024 × 1024 的圖約 2 秒。第二個是基礎版(flux-3-image-klein-base),預設跑 50 步並使用 CFGClassifier-Free Guidance,一個讓畫面更貼近你文字描述的調節機制,但每一步要多算一次,所以比較慢,適合想拿來微調或追求原始行為的人。

文字理解的部分,這個模型使用 Qwen3-VL 當作 text encoder文字編碼器:把你寫的句子轉成模型看得懂的一串數字,是文字和圖像之間的翻譯官,所以安裝時除了 diffusers,還要更新 transformers 套件。

🎯 為什麼值得你花時間

同一模型管文字生圖、參考圖編輯、版面控制阿凱不用為「生成」和「修圖」分別找工具、分別學參數。同一個 pipeline 的 prompt 與 image 兩個參數就能切換用法,工作流更短。
速度與硬體門檻同時下降蒸餾版約 2 秒一張(H100),且有 NVFP4 與 FP8 量化權重可用 from_single_file 載入,專門給比較小的 GPU。這讓在自己電腦上迭代試圖變得可行,而不是每張都排雲端佇列。
可微調、可拆裝,不被綁死官方提供文字生圖與圖像編輯兩種 LoRA 訓練腳本,並以 Modular Diffusers 形式發佈,可以把流程中的區塊抽掉或換成自己的。想做出專屬風格或專屬商品的人,有現成路可走。

⚙️ 它是怎麼運作的

1
安裝套件更新 diffusers 與 transformers。後者是為了載入 Qwen3-VL 文字編碼器。
▼
2
載入 ModularPipeline用 ModularPipeline.from_pretrained 指定 checkpoint 名稱,再用 load_components 載入各個零件並指定 bfloat16 精度,最後搬到 cuda(也就是 GPU)。
▼
3
寫完整的場景描述官方建議描述要包含主體、場景、光線、構圖、風格,寫得越像一份完整的畫面說明,效果越好。
▼
4
呼叫 pipeline 取得圖片傳入 prompt,並用 generator 固定亂數種子(seed),output 指定為 images,回傳的第一個元素就是圖片,可直接 save。
▼
5
(選用)傳入參考圖做修改用 image 參數傳入前一張圖,prompt 要寫成「你想要的那張新圖的說明」,並把想改的地方(例如變成夜晚)寫進去,而不是寫成命令句。
兩個官方 checkpoint 的預設行為
項目flux-3-image-klein(蒸餾版)flux-3-image-klein-base(基礎版)
定位快速推論基礎模型
預設步數16 步50 步
CFG不使用使用
適合情境快速出圖、反覆試 prompt需要原始模型行為、做微調的起點

🔍 程式碼漫遊(點有 ● 的行看白話講解)

這段程式載入蒸餾版 FLUX.3 Klein,用一句描述畫出一隻紅狐狸並存檔。

●import torch
💬 PyTorch 是底層的運算框架,這裡用來指定精度和固定亂數種子。
●from diffusers import ModularPipeline
💬 ModularPipeline 是 Modular Diffusers 的入口,FLUX.3 就是以這種可拆裝的形式發佈。
●pipe = ModularPipeline.from_pretrained("black-forest-labs/flux-3-image-klein")
💬 指定要用蒸餾版 checkpoint。想換基礎版,把名字換成 flux-3-image-klein-base。
●pipe.load_components(dtype=torch.bfloat16)
💬 真正把各個零件載入,並指定用 bfloat16 這種省記憶體的數字格式。
●pipe.to("cuda")
💬 把整條流程搬到顯示卡上,沒有 GPU 的話速度會差非常多。
●pipe(prompt="a red fox", output="images")[0].save("fox.png")
💬 最短的出圖寫法。回傳的是圖片清單,[0] 取第一張,再存成檔案。

🛠️ 動手做:同一隻紅狐狸:白天雪地 → 月光夜晚

這是一個真實小專案:下載(或複製)檔案,照步驟在你電腦上跑起來。

📄 run_fox.py ⬇ 下載
import torch
from diffusers import ModularPipeline

# 為什麼先用蒸餾版:16 步、不用 CFG,反覆試 prompt 的等待時間最短
pipe = ModularPipeline.from_pretrained("black-forest-labs/flux-3-image-klein")
pipe.load_components(dtype=torch.bfloat16)
pipe.to("cuda")

# 完整場景描述:主體、場景、光線、構圖、風格都寫進去
prompt = (
    "A wide-angle wildlife photograph of a red fox standing alert in a snow-covered forest clearing at golden hour. "
    "The fox is centered in the frame, its thick orange winter coat contrasting with the fresh white snow, breath "
    "visible in the cold air. Snow-laden pine trees fill the softly blurred background, and low warm sunlight rakes "
    "across the scene from the left, casting long blue shadows."
)

# 固定 seed,同一段描述才能重現同一張圖,方便比較改動的效果
fox = pipe(
    prompt=prompt,
    generator=torch.Generator().manual_seed(0),
    output="images",
)[0]
fox.save("fox.png")

# 參考圖編輯:prompt 要寫成「想要的那張新圖」的說明,並把改動寫進去
prompt_night = (
    "The same red fox in the same snow-covered forest clearing, now at night under a full moon: cool blue "
    "moonlight, deep shadows, stars visible through the pine branches, the fox's eyes catching the light."
)
night = pipe(
    prompt=prompt_night,
    image=fox,
    generator=torch.Generator().manual_seed(0),
    output="images",
)[0]
night.save("night.png")

print("完成:fox.png(白天)與 night.png(夜晚)")
  1. 確認電腦有 NVIDIA 顯示卡與對應驅動,開啟 PowerShell,輸入 nvidia-smi 看到顯卡資訊才繼續(沒有顯卡的話,請改用文章中提到的 Hugging Face space 線上體驗)。
  2. 建立專案資料夾:mkdir fox-demo ; cd fox-demo
  3. 建立虛擬環境:python -m venv .venv
  4. 啟用虛擬環境:.\.venv\Scripts\Activate.ps1
  5. 依照 pytorch.org 官網的安裝指令,安裝符合你 CUDA 版本的 PyTorch。
  6. 安裝官方指定的套件:pip install -U diffusers transformers
  7. 把本課的 run_fox.py 放進 fox-demo 資料夾。
  8. 執行:python run_fox.py(第一次會下載模型檔,需要等待一段時間與足夠的硬碟空間)。
  9. 執行完成後,用檔案總管開啟 fox.png 與 night.png,比較狐狸的外型是否維持一致。
  10. 挑戰:把 manual_seed(0) 改成 manual_seed(1) 再跑一次,觀察構圖變了多少;再嘗試在呼叫時加上 num_inference_steps 參數,感受步數對速度的影響。

🧠 工程思維透鏡(資深工程師看到的是什麼)

🔭 為什麼官方要同時放出蒸餾版和基礎版,而不是只放最快的那個?
蒸餾是用「少量步數」換速度,代價是模型被固定成某種行為,可調空間較小。基礎版保留原始的 50 步加 CFG 行為,是研究、微調的乾淨起點。資深工程師看到的是:產品用途(快速出圖)與研究用途(可擴充的底座)的需求互相衝突,所以乾脆拆成兩個產物,各自把一件事做好。
🔭 NVFP4 與 FP8 量化權重為什麼值得單獨提供?
量化是用較少的位元數存放權重,換取更小的記憶體與更快的載入,代價是精度可能略降。官方明確說明它們用 from_single_file 載入、給較小的 GPU 使用,等於是把「能不能跑起來」的門檻交給使用者選擇:有大卡就用原精度,沒有就退一步。這是典型的以資源換品質的取捨,而且做成可選項,不強迫所有人付同樣成本。
🔭 Modular Diffusers 把流程拆成區塊,對使用者和維護者各有什麼好處與風險?
好處:使用者可以把某個區塊拿掉或換成自己的,不必複製整套程式碼;維護者也能獨立更新單一區塊。風險:區塊之間的介面一旦改動,會影響所有自訂的人,所以介面穩定性比單一功能更重要。這和一般軟體拆模組的道理相同,彈性越高,對介面約定的紀律要求越高。

📝 隨堂考(點選答案,立即回饋)

Q1. 根據文章,蒸餾版 flux-3-image-klein 的預設推論設定是什麼?
✅ 蒸餾版預設 16 步、不用 CFG,目的是快速推論;50 步加 CFG 是基礎版的預設。
Q2. 使用參考圖修改畫面時,prompt 應該怎麼寫?
✅ 官方建議把 prompt 寫成「你想要的那張圖的說明」,並把改動包含在內,例如同一隻狐狸、同一片林地、但現在是月光夜晚。
Q3. 想在比較小的 GPU 上跑這個模型,文章提到的方向是什麼?
✅ 文章說明 NVFP4 與 FP8 權重可用 from_single_file 載入,專門給較小的 GPU。
Q4. 安裝時為什麼要一併更新 transformers?
✅ 文章指出要更新 transformers 是為了 Qwen3-VL 這個文字編碼器。

🃏 翻牌記憶卡(先想答案,再點開對答)

蒸餾版與基礎版的預設差異點我翻面
蒸餾版 16 步、不用 CFG,適合快速推論;基礎版 50 步並使用 CFG。
FLUX.3 Klein 一個模型涵蓋哪三件事?點我翻面
文字生圖、多張參考圖的圖生圖、以及用邊界框控制版面。
為了載入文字編碼器,安裝時要特別更新什麼套件?點我翻面
transformers,因為文字編碼器是 Qwen3-VL。
參考圖編輯的 prompt 寫法點我翻面
寫成想要的新圖的描述(含改動),再用 image 參數傳入參考圖。
小 GPU 的解法點我翻面
使用 NVFP4 或 FP8 量化權重,以 from_single_file 載入。

✅ 離開前自測(全勾=這課真的學會了)

0%