Stable Diffusion na macOS: porównanie lokalnych narzędzi do obrazów
Tłumaczenie automatyczne
Ten artykuł został automatycznie przetłumaczony z angielskiego oryginału.
Lokalne uruchamianie modeli obrazów na macOS zaczyna się od wyboru narzędzia. Ten przewodnik jest dla użytkowników Maca, którzy chcą generować obrazy lokalnie: dowiesz się, do czego nadaje się każde z sześciu narzędzi, jak je zainstalować, czego model potrzebuje poza własnym plikiem i jak przetestować narzędzie na swoim komputerze, zanim się na nie zdecydujesz.
Draw Things, DiffusionBee, ComfyUI, InvokeAI, AUTOMATIC1111 i Fooocus częściowo się pokrywają, ale różnią się instalacją, obsługą modeli, kontrolą nad workflow, rozszerzeniami, automatyzacją i stanem utrzymania. Aplikacja typu przeciągnij i upuść pozwala szybko zacząć; graf węzłów wymaga więcej nauki, ale odsłania więcej z pipeline’u. Na Apple Silicon o tym, czy generowanie zmieści się w pamięci, decydują aplikacja, rodzina modelu, precyzja, rozmiar obrazu i workflow.
Co uruchamia lokalna aplikacja do obrazów
Każde narzędzie z tego przewodnika uruchamia ten sam rodzaj pipeline’u. W jego centrum stoi denoiser: U-Net w SD 1.5 i SDXL, transformer w Flux.1. Startuje od losowego szumu i w każdym kroku usuwa jego niewielką część, zgodnie z tekstem prompt. Pozostałe części przygotowują jego dane wejściowe albo zamieniają wynik w obraz:
| Element | Co robi |
|---|---|
| Checkpoint | Główny plik modelu. Zawiera denoiser, a w SD 1.5 i SDXL zwykle także enkoder tekstu i VAE. Flux.1 często dostarcza te części jako osobne pliki. |
| Enkoder tekstu | Zamienia prompt na liczby, których może użyć denoiser. Wcześniej tokenizer dzieli prompt na elementy typu token. |
| VAE | Konwertuje między pikselami a mniejszym obrazem „latentnym”, na którym pracuje denoiser. Jego dekoder zamienia końcowy obraz latentny w obraz, który widzisz. |
| Sampler i liczba kroków | Seed ustala początkowy szum. Sampler wraz ze schedulerem decyduje, ile szumu usuwa każdy krok. Więcej kroków trwa dłużej. |
| LoRA | Mały plik dodatkowy, który zmienia styl lub temat rodziny modeli, dla której go wytrenowano. Embedding textual inversion to mniejszy dodatek, który uczy enkoder tekstu nowego słowa. |
| ControlNet | Dodatkowy model, który kieruje kompozycją na podstawie obrazu kontrolnego, na przykład pozy, mapy głębi lub mapy krawędzi. |
Na rysunku śledź latent od szumu początkowego do kroku N: prompt trafia do denoisera w każdym kroku, słupki pokazują, ile szumu jeszcze zostało, LoRA i ControlNet to opcjonalne wejścia, a dekoder VAE zamienia mały latent w obraz. Znaczniki CHECKPOINT oznaczają części, które zwykle mieści jeden plik checkpoint.
Skąd brać modele
Większość narzędzi sama pobierze model startowy. Do reszty wystarczają dwie strony:
- Hugging Face udostępnia oficjalne modele bazowe od Stability AI, Black Forest Labs i innych. Przeczytaj licencję na karcie modelu: licencje różnią się nawet w obrębie jednej rodziny, jak FLUX.1 [schnell] (Apache 2.0) i FLUX.1 [dev] (licencja niekomercyjna). Niektóre repozytoria wymagają zaakceptowania licencji, zanim ruszy pobieranie.
- Civitai udostępnia tworzone przez społeczność pliki checkpoint, LoRA i embeddings. Strona każdego pliku podaje model bazowy, dla którego go wytrenowano.
Wybieraj pliki .safetensors. Plik .ckpt to pickle Pythona, a wczytanie pickle’a może uruchomić dowolny kod. Plik .safetensors przechowuje wyłącznie tensory. Plik .ckpt wczytuj tylko ze źródła, któremu ufasz.
Zanim pobierzesz kilka gigabajtów, sprawdź rodzinę modelu (SD 1.5, SDXL, Flux.1 itd.) pod kątem tego, co obsługuje twoje narzędzie. LoRA wytrenowana dla SDXL nie działa z plikiem checkpoint SD 1.5.
Plik modelu nie jest przenośnym workflow
Kilka aplikacji potrafi wczytać pliki .safetensors, ale zgodne rozszerzenie pliku nie oznacza, że model zadziała. Kompletny pipeline może wymagać też konkretnej architektury, enkodera tekstu, VAE, schedulera, ControlNet, LoRA lub konfiguracji właściwej dla aplikacji.
Zapisuj wszystko, co wytworzyło obraz:
- aplikację i jej wersję
- repozytorium modelu, rewizję i licencję
- każdy komponent modelu i każdy adapter
- prompt, negatywny prompt, seed, sampler, liczbę kroków, guidance i wymiary
- plik grafu lub workflow, jeśli aplikacja go udostępnia
Ten sam seed może dać inny obraz po zmianie backendu, modelu, samplera lub precyzji.
Pamięć, miejsce na dysku i oprogramowanie pod każdym narzędziem
Na Apple Silicon CPU i GPU dzielą jedną pulę pamięci. GPU może użyć większości z niej, więc Mac z 32 GB wczyta modele, które nie mieszczą się na typowej karcie graficznej z 8 do 12 GB. Ta sama pula mieści też macOS i każdą otwartą aplikację; Monitor aktywności pokazuje użycie pamięci przez aplikacje, pamięć wired, skompresowaną i swap.
Szczytowe zużycie pamięci podczas generowania składa się z czterech części: komponentów modelu, pamięci roboczej na aktywacje i mechanizm attention, załadowanych adapterów i modeli kontrolnych oraz pamięci, którą już zajmują macOS i twoje aplikacje. Górna część rysunku przedstawia je jako części tej samej pamięci wraz z pamięcią, która pozostaje wolna; to nie jest wzór do doboru rozmiaru. Dolna część porównuje przykładowe rozmiary plików do pobrania bez kwantyzacji. Słupki mierzą zajętość dysku, a nie pamięć podczas działania.
Rozdzielczość, rozmiar batcha, architektura modelu, upscaling i ControlNet zmieniają zużycie pamięci podczas działania. Rozmiar pobieranych plików pozwala oszacować zajętość dysku; pamięć podczas działania zależy od precyzji i kwantyzacji wczytywanej przez aplikację, od komponentów, które pozostają załadowane, oraz od tymczasowych tensorów tworzonych podczas generowania. Kwantyzacja zapisuje wagi w mniejszej liczbie bitów, a Draw Things może wczytywać wagi FLUX.1 na żądanie, zamiast przechowywać je wszystkie w pamięci. Przetestuj docelowy workflow i obserwuj Memory Pressure oraz Swap Used; ciągły swapping to powód, by zmniejszyć obciążenie albo wybrać więcej pamięci.
Miejsce na dysku planuj osobno. Te pliki do pobrania bez kwantyzacji z Hugging Face obejmują checkpoint SD 1.5 o rozmiarze około 4 GB oraz bazowy checkpoint SDXL o rozmiarze około 7 GB. Sam transformer FLUX.1 [schnell] ma około 24 GB, a 16-bitowy enkoder tekstu T5 dodaje około 10 GB. FLUX potrzebuje też innych komponentów, więc te dwa pliki nie stanowią całego zestawu do pobrania. Jeśli na Macu brakuje miejsca, trzymaj foldery z modelami na zewnętrznym SSD.
Narzędzia różnią się też oprogramowaniem między nimi a GPU. ComfyUI, AUTOMATIC1111, Fooocus i InvokeAI to aplikacje w Pythonie działające na backendzie Metal biblioteki PyTorch, zwanym MPS (Metal Performance Shaders), więc ich funkcje i szybkość zależą od zainstalowanej wersji PyTorch. Draw Things używa własnego silnika z kernelami Metal FlashAttention. Wszystkie kończą na Metal i tej samej puli zunifikowanej pamięci.
Porównanie sześciu narzędzi
| Narzędzie | Instalacja | Co możesz kontrolować | Kompromis operacyjny |
|---|---|---|---|
| Draw Things | Mac App Store | Natywny interfejs Apple z lokalnymi modelami, adapterami, ControlNet i skryptami | Gęsty interfejs specyficzny dla produktu; sprawdź obsługę dokładnie tej rodziny modeli |
| DiffusionBee | Pobranie DMG | Spakowana aplikacja macOS ze zintegrowanym procesem generowania | Brak wydań od 2.5.3 z sierpnia 2024; brak obsługi rodzin modeli wydanych później |
| ComfyUI | Comfy Desktop DMG lub brew install --cask comfy | Jawny graf węzłów, workflow w JSON, API i niestandardowe węzły | Więcej komponentów; grafy i węzły stron trzecich stają się zależnościami |
| InvokeAI | Invoke Launcher DMG | Płótno z inpaintingiem i outpaintingiem oraz edytor workflow z węzłami | Wymaga macOS 14 lub nowszego; dokumentacja zaleca 16 GB pamięci lub więcej |
| AUTOMATIC1111 | Pakiety Homebrew, git clone i ./webui.sh | Web UI oparty na formularzach, skrypty, API i duży zestaw rozszerzeń | Ostatnie wydanie w lutym 2025; udokumentowane ograniczenia na Apple Silicon; rozszerzenia uruchamiają kod stron trzecich w tym samym środowisku |
| Fooocus | git clone i środowisko conda (nieoficjalnie na Macu) | Workflow SDXL wykorzystujący przede wszystkim prompt, z narzuconymi ustawieniami | Tylko poprawki błędów; wskazówki dla Maca są nieoficjalne i słabo przetestowane |
Tabela pokazuje, gdzie zapisują się twoje ustawienia: w aplikacji, w formularzu webowym albo w pliku grafu, który można przejrzeć. Rysunek zaczyna od natywnej aplikacji i pokazuje, kiedy przejść na inne narzędzie, wraz ze szkicem tego, gdzie każde z nich trzyma twoje ustawienia. Przed wyborem któregokolwiek z nich uruchom test akceptacyjny z końca tego artykułu.
Draw Things: natywna obsługa i skrypty
Draw Things to aplikacja na platformy Apple do lokalnego generowania obrazów. Zainstaluj ją z Mac App Store; nie wymaga Pythona ani terminala. Jej aktualna dokumentacja obejmuje modele, LoRA, ControlNet, textual inversion, Core ML i wersjonowane skrypty w JavaScripcie.
Wybierz ją, gdy praca ma zostać w natywnej aplikacji, ale potrzebuje większej kontroli niż samo pole na prompt. Zanim ustandaryzujesz na niej pracę, zaimportuj dokładne komponenty modelu i odtwórz jedną reprezentatywną edycję, adapter lub workflow z kontrolą. „Natywna” opisuje interfejs i implementację; nie gwarantuje obsługi ani szybkości dla każdej nowej architektury.
DiffusionBee: spakowany workflow macOS
DiffusionBee pakuje pobieranie modeli i typowe zadania generowania w aplikację desktopową. Pobierz DMG i przenieś aplikację do Programów. Dokumentacja projektu wymienia image-to-image, inpainting, outpainting, ControlNet, LoRA i SDXL, a aplikacja ma też upscaling. Informacje o wydaniu DiffusionBee 2.5.3 podają obsługę Flux.1 tylko na Macach arm64 z macOS 13 lub nowszym.
Ostatnie wydanie DiffusionBee, 2.5.3, ukazało się w sierpniu 2024, a strona pobierania na diffusionbee.com nadal wskazuje 2.5.1; wersję 2.5.3 weź ze strony wydań na GitHubie. Nie oczekuj obsługi rodzin modeli wydanych później. Wybierz ją, gdy instalacja i zintegrowany interfejs są ważniejsze niż eksport grafu pipeline’u, a potrzebny model jest już na jej liście. Etykieta funkcji, jak „obsługa Flux”, nie oznacza, że wczyta się każda pochodna, kwantyzacja czy komponent pomocniczy.
ComfyUI: workflow zapisany jako plik
ComfyUI przedstawia generowanie jako graf węzłów. Każdy krok to węzeł, a graf może się rozgałęziać: jeden graf może wygenerować obraz, powiększyć go i przekazać do węzła przywracania twarzy z pakietu węzłów niestandardowych. Workflow można zapisać jako JSON niezależnie od jego wyniku, co sprawia, że pipeline da się przeglądać i wersjonować. Jego executor potrafi też unikać ponownego liczenia fragmentów grafu, których dane wejściowe się nie zmieniły.
Comfy Desktop to menedżer wielu instalacji lokalnych instancji ComfyUI. Aktualna dokumentacja dla macOS obsługuje Apple Silicon z macOS 13 lub nowszym. Instalacja używa pobranego pliku .dmg. Jeśli wolisz Homebrew, aktualny cask nazywa się comfy (nie comfyui):
brew install --cask comfy
Wybierz ComfyUI, gdy pipeline ma gałęzie, komponenty wielokrotnego użytku, wiele modeli lub automatyzację. Trzymaj razem JSON, wersję aplikacji, wersje węzłów podstawowych, rewizje węzłów niestandardowych i manifest modeli.
Jak uruchomić ten sam graf ze skryptu z nowym seedem? Wyeksportuj graf poleceniem File → Export Workflow (API). Format API kluczuje każdy węzeł jego numerycznym ID i zachowuje tylko dane wejściowe potrzebne do uruchomienia. Potem wyślij go do endpointu /prompt lokalnego serwera:
import json
import random
import urllib.request
COMFY_URL = "http://127.0.0.1:8188" # check the port first, see below
SAMPLER_NODE = "3" # the KSampler node ID in your exported file
with open("workflow_api.json") as f:
workflow = json.load(f)
workflow[SAMPLER_NODE]["inputs"]["seed"] = random.randint(0, 2**32 - 1)
request = urllib.request.Request(
f"{COMFY_URL}/prompt",
data=json.dumps({"prompt": workflow}).encode("utf-8"),
headers={"Content-Type": "application/json"},
)
with urllib.request.urlopen(request) as response:
print(json.load(response)) # includes the prompt_id of the queued run
Sprawdź w wyeksportowanym pliku dwie rzeczy: ID węzła samplera ("3" we własnym przykładzie API ComfyUI) i jego pole inputs, które zawiera seed, liczbę kroków i nazwę samplera. Sprawdź port, zanim uruchomisz skrypt: instalacja ręczna domyślnie nasłuchuje na 8188, a Comfy Desktop może używać innego portu, widocznego w ustawieniach serwera.
Węzły niestandardowe to wykonywalne zależności. Przejrzyj ich kod źródłowy i skrypty instalacyjne, przypnij rewizje i odizoluj środowisko. Graf od nieznanego autora może odwoływać się do kodu i modeli, których nie sprawdzono.
InvokeAI: płótno do inpaintingu i outpaintingu
InvokeAI opiera się na płótnie: wybierasz maską obszar do zmiany i dalej generujesz w tym samym widoku. Inpainting generuje ponownie zamaskowany obszar wewnątrz obrazu; outpainting rozszerza obraz poza jego dotychczasowe krawędzie. Ma też edytor workflow oparty na węzłach, do pipeline’ów, które chcesz zapisywać i udostępniać. Projekt nadal wydaje regularne wersje; v6.14.2 ukazała się we wrześniu 2026.
Zainstaluj go przez Invoke Launcher: otwórz DMG, przeciągnij launcher do Programów i uruchom go. Launcher sam instaluje Pythona i Invoke. Wymagania systemowe podają macOS 14 lub nowszy i mówią, że działają wszystkie Maci z Apple Silicon, a zalecane jest 16 GB pamięci lub więcej.
Wybierz go, gdy większość pracy to edycja fragmentów obrazu, a nie generowanie całych obrazów na podstawie tekstu prompt.
AUTOMATIC1111: zgodność z utrwalonym Web UI
AUTOMATIC1111 Stable Diffusion WebUI udostępnia ustawienia generowania w interfejsie przeglądarkowym i obsługuje skrypty, rozszerzenia i API. Wybierz go, gdy konkretny tutorial, automatyzacja lub rozszerzenie jest już częścią wymagań. Ostatnie wydanie, v1.10.1, ukazało się w lutym 2025, więc przed wyborem sprawdź obsługę rodzin modeli wydanych później.
Na Macu działa na backendzie MPS biblioteki PyTorch. Oficjalny przewodnik dla Apple Silicon instaluje go z terminala; ./webui.sh przy pierwszym uruchomieniu tworzy środowisko Pythona i instaluje pozostałe zależności:
brew install cmake protobuf rust python@3.10 git wget
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
cd stable-diffusion-webui
./webui.sh
Ten sam przewodnik dokumentuje wyjątki i ograniczenia wydajności, w tym słabą wydajność treningu. Zanim przyjmiesz konfigurację z wieloma rozszerzeniami, potwierdź, że wymagana funkcja działa na docelowych wersjach macOS i PyTorch.
Rozszerzenia uruchamiają kod w środowisku aplikacji. Przypinaj je, przeglądaj aktualizacje i trzymaj usługę na loopbacku, chyba że zdalny dostęp jest zamierzony i zabezpieczony.
Fooocus: tylko SDXL, tylko poprawki błędów
Fooocus celowo ukrywa wiele decyzji technicznych w workflow wykorzystującym przede wszystkim prompt, z narzuconymi ustawieniami. To może być przydatne, gdy jego domyślne ustawienia pasują do zadania.
Aktualny README projektu mówi, że Fooocus jest zbudowany wokół SDXL i objęty ograniczonym długoterminowym wsparciem, z samymi poprawkami błędów. Mówi też, że Mac nie jest intensywnie testowany, i opisuje instalację na Macu jako nieoficjalną: środowisko conda, git clone i python entry_with_update.py, który przy pierwszym uruchomieniu pobiera modele SDXL. Przez to Fooocus jest wyborem dla istniejącego workflow Fooocus, a nie domyślną drogą dla nowych architektur ani dla konfiguracji macOS, którą planujesz utrzymywać.
Jeden reprezentatywny test akceptacyjny
Zanim zdecydujesz się na narzędzie, użyj jednego małego zestawu testów akceptacyjnych:
- Odtwórz bazowy wynik text-to-image z zapisanego seeda i ustawień.
- Wykonaj najtrudniejszą wymaganą operację: inpainting, ControlNet, LoRA, upscaling lub graf wieloetapowy.
- Uruchom aplikację ponownie i odtwórz workflow z zapisanych plików.
- Zmierz zimny start, czas generowania, szczytowe obciążenie pamięci i wymiary wyniku.
- Przenieś workflow na czyste konto użytkownika lub inną maszynę i wypisz każdą brakującą zależność.
- Sprawdź powiązanie z siecią lokalną, pobieranie, ustawienia analityki, licencje i pochodzenie modeli.
Nie porównuj narzędzi używających różnych plików checkpoint, rozdzielczości, liczby kroków czy precyzji, a potem nie nazywaj wyniku benchmarkiem środowiska uruchomieniowego.
Praktyczne ustawienie domyślne
Do pracy eksploracyjnej zacznij od natywnej aplikacji i modelu, który dokumentuje. Przejdź na ComfyUI, gdy wartościowy staje się sam workflow: gdy trzeba go przeglądać, powtarzać, automatyzować lub przekazać komuś innemu. Przejdź na InvokeAI, gdy praca polega głównie na edycji fragmentów na płótnie. AUTOMATIC1111 lub Fooocus zostaw wtedy, gdy istniejąca zależność sprawia, że akurat ich interfejs jest przydatny.
Źródła
- Dokumentacja Draw Things i Metal FlashAttention w Draw Things
- Projekt DiffusionBee
- Dokumentacja ComfyUI Desktop dla macOS, cask Homebrew Comfy Desktop, format API workflow i metadane workflow w plikach wynikowych
- Instalacja InvokeAI i wymagania systemowe
- Notatki o instalacji AUTOMATIC1111 na Apple Silicon
- Status projektu Fooocus i notatki o macOS
- Notatki Hugging Face o bezpieczeństwie pickle
- Dokumentacja Apple Metal o pamięci zunifikowanej,
recommendedMaxWorkingSetSizei dokumentacja Monitora aktywności o obciążeniu pamięci