StreamDiffusion:Windows 平台 AI 影像生成系統建置指南

Ted Liou 2025.06.07 StreamDiffusion 影像生成
StreamDiffusion 是一個能大幅加快影像生成速度的工具,經由影像品質的犧牲來換取生成速度,主要搭配 SD Turbo 或 Lighting 系列的模型。這個工具可用於需要高速運算的文生圖 (Txt2Img)、圖生圖 (Img2Img) 情境,使用 Python 程式語言開發,開發者可自行串接 NDI 與 OSC 等相關傳輸協定,以便整合至自己的系統中。

StreamDiffusion 是一項以開放原始碼發布於 GitHub 的專案,開發者需要下載完整的專案並自行建置系統環境,包括 Python、PyTorch、CUDA 等套件的安裝,才能使用到最初步的功能。如果我們想要將 StreamDiffusion 串接到 TouchDesigner 之類的軟體上,還必須自行開發 NDI、OSC 等連線功能,我們將會在其它文章中來教學。

本文的主題是建構一個有效的 StreamDiffusion 系統建置指南,提供開發者一個能直接依循的方法,來快速建置 StreamDiffusion 於 Windows 平台。

左邊是輸入給StreamDiffusion的3D動漫風格的女生影像,右邊是StreamDiffusion的2D動漫風格的即時輸出結果 StreamDiffusion 能達到幾乎是即時反應的影像生成效果 (圖片來源:GitHub)

系統需求

本文的目標是將 StreamDiffusion 安裝在 Windows 平台上,並且使用 NVIDIA 顯示卡與 CUDA 技術來進行運算。以 SD Turbo 模型舉例,顯示卡最低的專屬記憶體建議至少要有 8GB,系統記憶體 (RAM) 至少要有 16GB,否則生成速度將大幅下降。

安裝 CUDA 技術核心

CUDA 是一個能讓 AI 模型用來在 NVIDIA 顯示卡上運算的技術,並且正在持續地推出更新。一般來說,新的 CUDA 版本是能夠向下相容使用舊版本的 AI 模型,因此只要安裝的版本沒有過舊,通常不用擔心版本差異問題。

根據 StreamDiffusion 的 Readme 文件說明,最舊支援 CUDA 11.8 版本,請開啟命令提示字元並輸入以下指令來檢查目前已安裝的版本:

1nvcc --version

如果指令執行失敗的話,通常就是指目前電腦中並沒有安裝 CUDA,請前往 NVIDIA 官網的 CUDA Toolkit 專區,並點擊 Download Now 來下載安裝。

命令提示字元的畫面,中間有個紅框標示著CUDA版本為12.4

特別提醒,CUDA 的安裝選項建議選擇「自訂」,並取消勾選 CUDA 以外的選項,防止安裝失敗。

CUDA的安裝選項畫面,目前已選擇自訂 CUDA的自訂安裝選項畫面,目前僅選擇CUDA

至此,我們已在 Windows 平台上安裝好 CUDA,StreamDiffusion 將能藉由 CUDA 來驅動 NVIDIA 顯示卡來快速生成影像。

建立 Python 開發環境

近年已有許多方便開發者安裝與管理 Python 的程式,本文將使用其中一款名為「uv」的工具,uv 能解決過去我們用 pip 取得套件時的下載緩慢問題,並且內建了許多自動化工具,能大幅提升 StreamDiffusion 系統的可維護性。

安裝 uv

首先,我們需要在電腦上安裝 uv 工具,請開啟命令提示字元並輸入以下指令:

1powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/0.7.2/install.ps1 | iex"

uv 會被安裝在你的使用者資料夾下的 .local/bin 裡面,我們需要將這個路徑設定到環境變數裡面,請繼續使用剛才開啟的命令提示字元並輸入以下指令:

1SET PATH=%PATH%;%UserProfile%\.local\bin

如果未來不想用 uv 了,開啟檔案總管並前往 %UserProfile%/.local/bin 位置,直接刪除資料夾內的 uv.exe 與 uvx.exe 兩個檔案即可解除安裝。

%UserProfile%/.local/bin路徑的資料夾裡面有uv.exe和uvx.exe兩個檔案

安裝 Python

StreamDiffusion 使用 Python 3.10 版本,而 3.10 系列的最新版本為 3.10.17,本文使用 uv 來安裝這個版本,請繼續使用剛才開啟的命令提示字元並輸入以下指令:

1uv python install 3.10.17

至此,我們已經在 Windows 平台上安裝好 uv 與 Python,接下來將會圍繞於這兩個工具來建置 StreamDiffusion 系統。

建立 StreamDiffusion 開發環境

本文使用 VS Code 來開發 StreamDiffusion 與 Python 程式,並搭配 uv 工具快速安裝所有的依賴套件。

初始化 Python 專案

StreamDiffusion 使用 Python 來開發,我們需要先初始化好 Python 的專案。

首先,在電腦的任何位置上建立一個新資料夾,並使用 VS Code 開啟。

用VS Code開啟的空資料夾介面,資料夾內甚麼都沒有

輸入鍵盤組合鍵「Ctrl + `」來開啟終端機,並輸入以下指令來使用 uv 初始化 Python 專案,並指定專案使用 Python 3.10.17 版本:

1uv init
2uv venv --python 3.10.17

Python 專案初始化後,資料夾內會出現 main.py、pyproject.toml 等檔案,後續我們將著重於 main.py 的開發與 pyproject.toml 的修改。

用uv建立Python專案後,資料夾內多出了許多檔案

取得 StreamDiffusion 專案

接下來,我們要將 StreamDiffusion 專案下載下來,並從中提取出我們需要的檔案。

首先,沿用剛才在 VS Code 開啟的終端機,輸入以下指令來下載 StreamDiffusion:

1git clone https://github.com/cumulo-autumn/StreamDiffusion.git

完成下載後,專案內會多出一個 StreamDiffusion 資料夾,裡面是 StreamDiffusion 的主程式、範例程式和說明文件。

使用git下載StreamDiffusion後,資料夾內多出了一個StreamDiffusion的資料夾

本文的重點在於要將 StreamDiffusion 應用到我們自己的系統,只需要它的主程式。因此,請繼續使用 VS Code 的終端機,依序輸入以下指令來將主程式提取出來,並刪除多餘的資料:

1powershell Rename-Item -Path "StreamDiffusion" "StreamDiffusion_Bak"
2powershell Move-Item -Path "StreamDiffusion_Bak\src\streamdiffusion" "streamdiffusion"
3powershell Move-Item -Path "StreamDiffusion_Bak\utils" "utils"
4powershell Remove-Item -Recurse -Force "StreamDiffusion_Bak"

最後,我們的 Python 專案內的「StreamDiffusion」資料夾已刪除 (有大寫英文),取而代之的是全小寫英文的「streamdiffusion」和「utils」資料夾,這兩個資料夾內的程式是 StreamDiffusion 的核心程式。

輸入一連串powershell的指令後,提取出必要的streamdiffusion主程式和utils資料夾

安裝 StreamDiffusion 依賴套件

StreamDiffusion 需要許多套件的配合才能生成影像,我們需要手動來安裝它們。

首先,經過我們的測試,StreamDiffusion 相容於 PyTorch 的 CUDA 12.8 版本,本文將使用該版本來建置環境。

PyTorch官網的套件版本和CUDA版本的截圖

因為我們是用 uv 來管理 Python 專案,因此本文不使用過去所用的 pip install 指令,而是以 uv 提供的指令來取代。PyTorch 的 CUDA 12.8 版本需要從 PyTorch 官方提供的來源來取得該套件,請編輯 pyproject.toml 檔案,將以下內容複製貼上到檔案現有資料的後面,來確保 uv 之後會從指定的來源來下載 PyTorch。

 1[[tool.uv.index]]
 2name = "pytorch-cu128"
 3url = "https://download.pytorch.org/whl/cu128"
 4explicit = true
 5
 6[tool.uv.sources]
 7torch = [
 8  { index = "pytorch-cu128", marker = "sys_platform == 'win32'" },
 9]
10torchvision = [
11  { index = "pytorch-cu128", marker = "sys_platform == 'win32'" },
12]

請參考下圖,複製的內容請貼上到現有資料的後面。

將PyTorch套件來源的資料加入倒pyproject.toml裡

接下來我們要取得所有 StreamDiffusion 依賴的 Python 套件,請繼續編輯 pyproject.toml 檔案,並複製以下內容並取代檔案內 dependencies 的資料:

 1dependencies = [
 2    "diffusers==0.29.0",
 3    "pywin32>=310",
 4    "six>=1.17.0",
 5    "torch",
 6    "torchvision",
 7    "transformers>=4.51.3",
 8    "xformers>=0.0.30",
 9    "accelerate",
10    "fire",
11    "omegaconf",
12    "cuda-python",
13    "onnx",
14    "onnxruntime",
15    "protobuf",
16    "colored"
17]

貼上的位置請參考下圖反白處,當我們在 pyproject.toml 的 dependencies 中加入這些套件設定,接下來就能讓 uv 自動的幫我們安裝好。

將StreamDiffusion依賴的套件新增到pyproject.toml中

最後請使用 VS Code 的終端機,輸入以下指令來讓 uv 幫我們安裝所有 StreamDiffusion 依賴的套件,下載套件需要一點時間。

1uv sync

操作到這裡,我們已經將 StreamDiffusion 的開發環境建置完畢。在本文的最後,我們將會以一張參考圖片和一組提示詞來測試 StreamDiffusion 的圖生圖 (Img2Img),也以單獨使用提示詞來測試文生圖 (Txt2Img) 功能。

圖生圖功能測試

StreamDiffusion 的圖片生圖片功能需要我們提供一張參考圖和一組提示詞,請自行準備一張圖片複製到 Python 專案裡面,並取名為 image.png。

準備一張貓咪的圖片要拿給StreamDiffusion以圖生圖

接下來我們要寫一段程式碼,讓 StreamDiffusion 讀取我們準備的 image.png,再以「cat, detailed, fantasy, 8k」提示詞和 SD Turbo 模型來生成影像,最後儲存為 result.png。

請編輯 main.py,刪除裡面的所有資料,並複製貼上以下程式碼:

 1from utils.wrapper import StreamDiffusionWrapper
 2
 3def main():
 4    # 初始化模型
 5    stream = StreamDiffusionWrapper(
 6        model_id_or_path="stabilityai/sd-turbo",
 7        t_index_list=[24, 32],
 8        width=512,
 9        height=512,
10        acceleration="xformers",
11        mode="img2img"
12    )
13    stream.prepare(prompt="cat, detailed, fantasy, 8k")
14
15    # 影像前處理
16    input = stream.preprocess_image("image.png")
17    
18    # 模型熱機
19    for _ in range(stream.batch_size - 1):
20        stream(image=input)
21
22    # 生成影像
23    output = stream(image=input)
24    output.save("result.png")
25
26if __name__ == "__main__":
27    main()

最後請使用 VS Code 的終端機,輸入以下指令來執行 main.py:

1uv run main.py

第一次執行 main.py 時,StreamDiffusion 會自動下載 SD Turbo 模型,會需要一點時間。當生成影像後,Python 專案內會多出一個 result.png,打開該檔案後即可看到圖片生圖片的影像生成結果。

透過StreamDiffusion圖生圖生成一張貓咪

文生圖功能測試

文字生圖片僅需準備一組提示詞就能生成影像,請編輯 main.py,並複製貼上以下程式碼:

 1from utils.wrapper import StreamDiffusionWrapper
 2
 3def main():
 4    # 初始化模型
 5    stream = StreamDiffusionWrapper(
 6        model_id_or_path="stabilityai/sd-turbo",
 7        t_index_list=[0, 24, 32],
 8        width=512,
 9        height=512,
10        cfg_type="none",
11        acceleration="xformers",
12        mode="txt2img"
13    )
14    stream.prepare(prompt="cat, detailed, fantasy, 8k")
15    
16    # 模型熱機
17    for _ in range(stream.batch_size - 1):
18        stream()
19
20    # 生成影像
21    output = stream()
22    output.save("result.png")
23
24if __name__ == "__main__":
25    main()

一樣請使用 VS Code 的終端機,輸入以下指令來執行 main.py:

1uv run main.py

生成結束後開啟 Python 專案內的 result.png,即可看到文字生圖片的影像生成結果。

透過StreamDiffusion文生圖生成一張貓咪

結語

完成本文的進度後,我們已經順利讓 StreamDiffusion 的核心功能在 Windows 平台上執行。現在只能透過修改專案內的圖片或提示詞來影響生成結果,接下來我們將開始為這一套系統開發從外部控制提示詞和輸入影像,並做到即時傳輸的效果。

參考資料

相關文章

Ted Liou

請追蹤我,這裡會分享實用的技術研發資訊!