# Mac 上安裝 Automatic1111 Stable Diffusion WebUI
這裡參考了[這篇文章](https://ivonblog.com/posts/macos-stable-diffusion-webui), 還有 [Automatic1111 的官方說明](https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Installation-on-Apple-Silicon)。不過安裝上當然裝自己的 Anaconda, 可以由官安裝的 (如 `rust`) 就官方安裝。
首先, 打開可愛的終端機, 讓我們開始吧。
## 1. 安裝 `XCode` 工具
這應該是要裝的, 因為我們整天在裝有的沒有的都早裝了。所以如果出來混遲早會碰到, 就裝下去就是了。
xcode-select --install
## 2. 安裝 Anaconda
Anaconda 是 Python 的大補帖, 相信很多寫 Python 的都裝了 (那自然可跳過本節)。如果早晚要來寫 Python, 就早早在可愛的 Mac 上裝吧。現在對 GPU 支援也很 okay, 所以可以一路到深度學習 (比如說我們需要的 PyTorch)。
請到 [Anaconda Distrbution](https://www.anaconda.com/products/distribution) 下載安裝 Mac 的版本。
唯一要注意的是, 要確定下載 M1/M2 用的, 請在蘋果上點一下。

記得選 M1 那個版本, 你開心用圖形介面的或 command line 安裝的都可以。

## 3. 安裝 `Homebrew`
`Homebrew` 是 Mac 上有名的安裝管理工具, 安裝 Unix 系的程式。安裝很簡單, 就是到 [Homebrew](https://brew.sh/index_zh-tw) (看, 還有中文, 是不是很親切?), copy 那一行指令, 再貼到終端機執行就好。

通常那行指令就是:
```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
裝好了不要太開心, 它有告訴你還要執行兩行指令, 不然你可愛的 Mac 是找不到 `Homebrew` 安裝的程式的!

這兩行通常是 (一次執行一行):
```bash
(echo; echo 'eval "$(/opt/homebrew/bin/brew shellenv)"') >> /Users/yenlung/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
```
這樣你的 `Homebrew` 就安裝設定好了。
## 4. 安裝 `rust` 語言
這也是都要裝了, 我們就官方安裝吧。一樣是到 [Rust 官網](https://www.rust-lang.org/tools/install), 一行文安裝。

就一樣是 copy 那一行指令到你的終端機, 再執行。
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
裝好後關掉重開一個終端機。
## 5. 用 `Homebrew` 安裝需要的程式
這裡要說明一下, 因為在 Automatic1111 官網建議用 `brew` (`Homebrew` 安裝指令), 安裝:
brew install cmake protobuf rust python@3.10 git wget
但這對一般在用 Python 的, 怎麼會想讓 `brew` 再裝一個染指我們的 Python 呢? 還有 `git` 是 Mac 內建、Mac 內建、Mac 內建, `wget` 在 Anaconda 裡有裝。所以不要一堆都來大雜燴, 加上剛剛 `rust` 我們裝了, 所以就只要下:
```bash
brew install cmake protobuf
```
如此一來, 我們該有的準備都好了, 現在可以正式打造 Automatic1111 版的 Stable Diffusion WebUI 環境。
## 6. 用 `conda` 打造一個虛擬環境
相信用 Python 的很熟悉了, 就是我們要打造一個虛擬環境, 這獨立於其他 Python, 萬一出了什麼亂子, 我們砍掉這個環境就好, 不需要一切重來。在這虛擬世界 (其實是真的存在), 我們裝什麼 Python 的套件都勇敢裝下去, 不會影響到其他的 Python 環境。
首先, 我們自己為這個虛擬環境取個名字, 例如叫 `sdwebui` 好了。那就是在終端機中打入:
```bash
conda create -n sdwebui python=3.10.6
```
後面是指定 Python 的版本。通常其實不指定也可以, 但一般我們都會用先賢先烈已經確認可以的版本。這個 3.10.6 是 Automatic1111 原本推薦版本。
## 7. `clone` Automatic1111 WebUI GitHub
`git` 是一個版本控制系統, GitHub 可以說是雲端的 `git`。但我們先不用管這麼多, 總之先把 Automatic1111 的 Stable Diffusion WebUI 專案 `clone` 過來。這不是單純複製, 但管他啦。這時位置就是重要的, 請選擇你覺得吉祥的位置下這個指令。如果你想放在家目錄下, 就先做:
```bash
cd
```
這樣就確認回到你的家目錄。然後再來就 `clone` 一份 Automatic1111 的 Stable Diffusion WebUI 過來:
```bash
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
```
做完了就可以進到這個目錄下。
```bash
cd stable-diffusion-webui
```
一般直接開始就好, 但寫這篇的時候, 正是這套 WebUI 災情出現的時候。但因為 `git` 本來就是版本控制系統, 我們可以很方便快速的回到前面某個穩定的版本。
```bash
git checkout a9eab236
```
## 8. 安裝和未來每次執行的方式
從現在起, 要執行或是安裝都是做這樣的動作。首先, 先進到我們為 Stable Diffusion 設的虛擬環境:
```bash
conda activate sdwebui
```
接著我們就執行 `webui.sh`:
```bash
./webui.sh
```
順利的話就會出現, 通常是在
http://localhost:7860
如網路上傳言, Automatic1111 雖然應該有用到 Mac M1/M2 晶片加速 (稱為 MPS 技術), 但是並沒有特別為 Mac 優化。不過還是可以明顯感受到初階 M1/M2 和高階 M1/M2 的差異, 也就是你花大錢還是有差異。
