快轉到主要內容

Draw Things教學,iOS離線跑Stable Diffusion AI生圖

· 民國113年甲辰年
·
切換繁體/簡體
分類 開源AI應用 AI繪圖教學
標籤 IOS MacOS Stable Diffusion ControlNet
目錄

想要在iOS跑AI生圖?不要雲端運算,而是直接用本機GPU生圖?

Draw Things APP實現你的願望!

Draw Things為Liu Liu於2022年推出的免費APP,部份開放原始碼,僅支援Mac、iPhone、iPad系統。其他系統建議用Automatic1111 Stable Diffusion WebUI

Draw Things提供文生圖、圖生圖、局部重繪、訓練模型等功能,界面針對行動裝置重新設計過。它利用Apple Core ML加速技術,讓你可以在iOS裝置直接跑Stable Diffusion、FLUX這類AI生圖模型,不用依賴第三方生圖服務。生圖過程全都是在本機運算的。

這樣做的好處是你可以自由下載生圖模型,不會有任何色色關鍵字審查,也沒有額度限制,能夠自由生成想要的圖片。

現在Draw Things仍持續更新中,不斷加入許多AI生圖的新技術,例如LoRA、ControlNet、Fooocus,新的模型也會陸續支援。

1. Draw Things硬體需求
#

Draw Things支援Mac、iPhone、iPad系統,界面大同小異。

雖然開發者沒有明講Draw Things硬體需求,但AI生圖非常吃系統資源,會大量佔用GPU和RAM,敬請注意散熱。

建議使用搭載M1晶片、RAM 8GB以上的裝置,否則生成1024x1024大圖APP可能資源不足閃退。

iOS在生圖時建議將背景執行的APP全部關閉,將資源留給Draw Things。

另外,AI生圖模型會佔用許多空間,因此要準備20GB以上儲存空間。

2. 下載Draw Things模型
#

  1. 請至App Store下載Draw Things APP。開源程式碼部份請到Github查看。

  2. 開啟後Draw Things 會提示你下載模型,我們就選SDXL吧,大約需要5GB左右空間。

  3. Draw Things相容大部分Stable Diffusion模型,所以你也可以到Civitai網站手動下載模型(建議用Safari背景下載),再點選Import手動匯入至Draw Things。

  4. 點選左下角系統設定,開啟CoreML全部功能,加快生圖速度。

3. 文生圖模式
#

Text to image,根據輸入的文字生成圖片。

裡面的參數請參考Stable Diffusion WebUI的說明。

界面概覽:

  1. 預設Draw Things會開一個新專案,左邊是生圖選項,中間是畫布圖層,上方為提示詞區域。

  2. 首先,點選左邊的Basic選單,選取使用Stable Diffusion XL模型,Sampler選擇Euler A或UniPC,然後設定生圖長寬為1024x1024

  3. 填入正向提示詞和負向提示詞,後者可以用embedding達成,點一下迴紋針按鈕,下載Negative XL模型。

  4. 按Generate開始生成!等待畫布上的藍色格子填滿…

  5. 圖片就會出來了。長按側邊欄位儲存圖片。

  6. Draw Things的操作邏輯是這樣:每次「文生圖」生完圖都是一個圖層,如果你繼續點生圖,會變成「局部重繪」模式,新圖會參考方框內的圖生成,空白的地方會自動填滿。

  7. 若要生成獨立的新圖,請在生成圖片之後移動畫布的選取框到空白處,或者點一下右下角按鈕Start a blank canvas,這樣新圖才不會參考現有圖片。

4. 圖生圖模式
#

Image to image,參考畫布上的圖片進行AI生成。

  1. 按畫布下方的相機按鈕,或是旁邊的歷史紀錄,匯入要參考的圖片,並讓白色方框對準圖片

  2. 填入提示詞。

  3. 左邊選取Image to Image,調整拉桿,設定參考原圖的程度(Strength),數值越小越像原圖。

如果你覺得圖生圖不夠精準,你還可以搭配ControlNet依照輪廓或線稿,做更精準的生成,不過這要額外下載許多模型。

5. 局部重繪模式
#

Inpainting,劃出局部區域,重新生成衣服或者換臉。

  1. 點選橡皮擦圖示,擦掉要修改的地方,再點選生成,它就會按照你的提示詞填滿空白處。

  2. 如果使用油漆刷工具的話,就是讓AI生成與筆刷顏色相近的圖片。

6. 啟用HTTP API伺服器遠端生圖
#

你可以啟動Draw Things的HTTP伺服器,遠端請求Draw Things生圖。

  1. 點一下左側的Davanced → HTTP API Server,啟動服務,監聽IP設定0.0.0.0

  2. Apple裝置的區域IP可在系統設定 → Wifi查看

  3. 這樣另一部裝置就能向http://裝置IP:7860傳送生圖請求了,目前支援Draw Things生圖的客戶端似乎就只有SillyTavern而已哪。

  4. 若要自行實現Python生圖的話,請求格式長這樣,下面是我參考Github的.mjs範例所改寫的Python指令稿:

import requests
import base64
import time
import os

DRAW_THINGS_URL = 'http://裝置IP:7860/sdapi/v1/txt2img'
MAX_FILE_NAME_LEN = 30

params = {
    "prompt": "girls with bunch of carrots",
    "negative_prompt": "worst quality, low quality, normal quality",
    "model": "模型名稱.ckpt",
    "sampler": "UniPC",
    "seed": -1,
    "steps": 20,
    "guidance_scale": 7,
    "batch_count": 1,
    "width": 768,
    "height": 768
}

headers = {
    'Content-Type': 'application/json'
}

now = int(time.time())

def get_file_name(idx):
    file_name = f"{prompt.replace(' ', '_')[:MAX_FILE_NAME_LEN].lower()}_{now}_{idx}.png"
    return file_name

def save_img(data, idx):
    file_name = get_file_name(idx)
    with open(file_name, 'wb') as f:
        f.write(base64.b64decode(data))
    print(f"Saved: {file_name}")

response = requests.post(DRAW_THINGS_URL, json=params, headers=headers)
data = response.json()

images = data.get('images', [])
for idx, img_data in enumerate(images):
    save_img(img_data, idx)
  1. 存檔為drawthings.py,在電腦終端機執行這個Python指令稿就能呼叫Draw Things生圖。
python3 drawthings.py
  1. 上述的指令稿會在Draw Things界面生圖,同時把圖片下載到電腦。

相關文章


此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。

(留言板載入中)這是Giscus留言板,需要Github帳號才能留言。支援Markdown語法,若要上傳圖片請善用外部圖床。您的留言會在Github Discussions向所有人公開。

Click here to edit your comments.

(留言板載入中)這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用外部圖床網站。