Files
tomasz-syn-grzegorza 73e4fc005e Add stack Update, ComfyUI model manager, and slim ComfyUI stack.
Server UI gains Update on stack cards, ComfyUI Models tab with workflow
scan and downloads, and centralized comfyui_config. Model catalog and
download scripts move from stacks/comfyui to server-ui so ComfyUI stays a
minimal Docker wrapper for easier image updates.
2026-07-05 18:45:17 +00:00

309 lines
7.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 07 — ComfyUI stack
> **Cel rozdziału:** uruchomić [ComfyUI](https://github.com/comfyanonymous/ComfyUI) w Dockerze z GPU, web UI na porcie **8188** i pustym katalogiem modeli. Modele dodasz później (checkpoint, LoRA, ComfyUI-Manager).
**Szacowany czas:**
- Pobranie obrazu Docker: 1030 minut (pierwszy raz)
- Pierwszy start (kopia ComfyUI do `/data`): 310 minut
**Wymagania:** ukończone rozdziały [01](01-system-update-and-docker.md)[05](05-localai-stack.md), mount `/data` z [04](04-vllm-stack.md)
**Kontekst:** Zamiast [Stability Matrix](https://github.com/LykosAI/StabilityMatrix) (GUI desktop) używamy ComfyUI w kontenerze — zgodnie z [03b](03b-system-tools.md) i researchiem w [`coding-agent/STABILITYMATRIX-RESEARCH.md`](../coding-agent/STABILITYMATRIX-RESEARCH.md).
---
## Spis treści
1. [ComfyUI vs Stability Matrix](#1-comfyui-vs-stability-matrix)
2. [Porty i architektura](#2-porty-i-architektura)
3. [Polityka GPU (LocalAI ↔ ComfyUI)](#3-polityka-gpu-localai--comfyui)
4. [Struktura plików stacku](#4-struktura-plików-stacku)
5. [Przygotowanie `.env`](#5-przygotowanie-env)
6. [Instalacja obrazu](#6-instalacja-obrazu)
7. [Start stacku](#7-start-stacku)
8. [Weryfikacja UI](#8-weryfikacja-ui)
9. [Zarządzanie stackiem](#9-zarządzanie-stackiem)
10. [Modele (później)](#10-modele-później)
11. [Troubleshooting](#11-troubleshooting)
12. [Następny krok](#12-następny-krok)
---
## 1. ComfyUI vs Stability Matrix
| | Stability Matrix | ComfyUI (`stacks/comfyui/`) |
|--|------------------|----------------------------|
| Typ | GUI desktop (AppImage) | **Docker, headless** |
| Wymaga pulpitu | Tak (X11/Wayland) | Nie — tylko przeglądarka |
| ComfyUI | Jeden z pakietów SM | **Bezpośrednio** w kontenerze |
| Zgodność z repo | Słaba na SSH-only | **Tak** |
SwarmUI (poprzedni UI obrazów) zostało usunięte — patrz [`SWARMUI-REMOVAL.md`](../coding-agent/SWARMUI-REMOVAL.md).
---
## 2. Porty i architektura
```mermaid
flowchart LR
browser["Przeglądarka :8188"]
comfyui["Kontener comfyui"]
gpu["RTX 3090 Ti"]
disk["/data/apps/comfyui/models"]
browser --> comfyui
comfyui --> gpu
comfyui --> disk
```
| Element | Wartość |
|---------|---------|
| Obraz | `yanwk/comfyui-boot:cu126-slim` |
| Web UI | `http://127.0.0.1:8188` lub `http://192.168.100.90:8188` (LAN) |
| Modele | `/data/apps/comfyui/models` |
| Docker data | `/data/docker` |
---
## 3. Polityka GPU (LocalAI ↔ ComfyUI)
RTX 3090 Ti 24 GB — **nie uruchamiaj** dużego modelu LLM (LocalAI) i dużego checkpointu SD/Flux **równocześnie**.
Przed startem ComfyUI z generowaniem obrazów:
```bash
cd /home/tomasz-syn-grzegorza/cursor/ubuntu-bare-metal/stacks/localai
docker compose --profile localai stop localai
```
W Server UI (port 8091): Stop/Start stack `localai`, Start stack `comfyui`.
Skrypt `start.sh` ostrzega, gdy `localai` jest uruchomiony.
---
## 4. Struktura plików stacku
```
stacks/comfyui/
├── README.md
├── docker-compose.yml
├── .env.example
├── .gitignore
└── scripts/
├── ensure-dirs.sh
├── pull.sh
└── start.sh
```
Katalogi na dysku 1 TB:
```
/data/apps/comfyui/
├── storage/ # kopia ComfyUI (pierwszy start)
├── models/
├── cache/hf-hub/
├── cache/torch-hub/
├── input/
├── output/
├── custom_nodes/
└── workflows/
```
---
## 5. Przygotowanie `.env`
```bash
cd /home/tomasz-syn-grzegorza/cursor/ubuntu-bare-metal/stacks/comfyui
cp .env.example .env
cat .env
```
Domyślne wartości:
| Zmienna | Wartość |
|---------|---------|
| `DATA_ROOT` | `/data` |
| `COMFYUI_PORT` | `8188` |
| `COMFYUI_IMAGE` | `yanwk/comfyui-boot:cu126-slim` |
| `CUDA_VISIBLE_DEVICES` | `0` |
---
## 6. Instalacja obrazu
```bash
./scripts/pull.sh
```
Oczekiwany wynik: pobranie warstw `yanwk/comfyui-boot:cu126-slim` (kilka GB).
---
## 7. Start stacku
```bash
./scripts/start.sh
```
Skrypt:
1. Sprawdza mount `/data`
2. Tworzy katalogi (`ensure-dirs.sh`)
3. Ostrzega, jeśli `localai` działa
4. `docker compose --profile comfyui up -d`
Pierwszy start kopiuje ComfyUI do `/data/apps/comfyui/storage/` — obserwuj logi:
```bash
docker compose --profile comfyui logs -f comfyui
```
---
## 8. Weryfikacja UI
```bash
docker compose --profile comfyui ps
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8188/
```
Oczekiwane: kontener `healthy` lub `running`, HTTP **200** (może zająć ~3 min przy pierwszym starcie).
W przeglądarce (z sieci lokalnej):
```
http://192.168.100.90:8188
```
Tunel SSH z laptopa:
```bash
ssh -L 8188:127.0.0.1:8188 tomasz-syn-grzegorza@gmktec-k11
# potem http://localhost:8188
```
GPU:
```bash
nvidia-smi
```
---
## 9. Zarządzanie stackiem
```bash
docker compose --profile comfyui ps
docker compose --profile comfyui logs -f comfyui
docker compose --profile comfyui restart comfyui
docker compose --profile comfyui down
```
Powrót do LocalAI:
```bash
cd ../comfyui && docker compose --profile comfyui stop comfyui
cd ../localai && docker compose --profile localai start localai
```
---
## 10. Modele
Compose **nie pobiera** modeli automatycznie.
### Server UI (zalecane)
1. Panel **Server UI** (`http://<IP>:8091`) → zakładka **ComfyUI Modele**
2. Wpisz API Key (rozdział 08) → wybierz model → **Pobierz**
3. Pliki lądują w `/data/apps/comfyui/models/` (bind mount — przetrwają restart kontenera)
**Sekcja „Wymagane przez workflow”** skanuje `/data/apps/comfyui/workflows/*.json` i pokazuje brakujące pliki (checkpoint, LoRA, VAE itd.). URL pobierania jest brany z ComfyUI-Manager, gdy model nie ma wpisu w `stacks/server-ui/comfyui-models.catalog.yaml`. Zapis workflow w ComfyUI (`:8188`) automatycznie aktualizuje listę po odświeżeniu Server UI.
Przykład testowy: `cp manual-tutorial/examples/comfyui/example-sdxl-refiner.api.json /data/apps/comfyui/workflows/`
### Skrypty CLI
```bash
cd stacks/server-ui/scripts/comfyui
./list-models.sh
./download-model.sh <catalog-id>
```
Katalog: `stacks/server-ui/comfyui-models.catalog.yaml`
### Inne opcje
1. **ComfyUI-Manager** w UI ComfyUI (`:8188`) — modele spoza katalogu repo
2. Ręcznie — pliki `.safetensors` / `.ckpt` do `/data/apps/comfyui/models/checkpoints/`
Opcjonalnie w `.env`: `HF_TOKEN`, `CIVITAI_TOKEN` (dla wybranych wpisów katalogu).
Szacunki VRAM (przy zatrzymanym LocalAI):
| Model | VRAM (orientacyjnie) |
|-------|----------------------|
| SD 1.5 | ~46 GB |
| SDXL | ~812 GB |
| Flux | ~1220 GB |
---
## 11. Troubleshooting
### HTTP nie odpowiada / 000
Pierwszy start trwa dłużej — sprawdź logi:
```bash
docker compose --profile comfyui logs --tail 80 comfyui
```
### `CUDA out of memory`
Zatrzymaj LocalAI i inne workloady GPU:
```bash
docker ps --format '{{.Names}}'
nvidia-smi
```
### Brak `/data`
```bash
mountpoint /data
# jeśli nie — rozdział 04, część A
```
### Kontener restartuje się w pętli
Sprawdź, czy NVIDIA Container Toolkit działa (rozdział 03):
```bash
docker run --rm --gpus all nvidia/cuda:12.6.0-base-ubuntu22.04 nvidia-smi
```
---
## 12. Następny krok
Po przejściu weryfikacji:
1. Zgłoś w rozmowie z Cursorem, że krok 07 jest gotowy.
2. Pobierz pierwszy checkpoint (SD 1.5 lub SDXL) — osobny krok.
3. Później: rozdział **08 — firewall i hardening**.
---
## Checklist
- [ ] `.env` utworzony z `.env.example`
- [ ] `docker compose --profile comfyui pull` — obraz pobrany
- [ ] LocalAI zatrzymany przed pierwszym testem generowania (opcjonalnie przy samym starcie UI)
- [ ] `./scripts/start.sh` — kontener `comfyui` running
- [ ] `curl http://127.0.0.1:8188/` — HTTP 200
- [ ] UI otwiera się w przeglądarce na `:8188`
- [ ] Katalogi istnieją pod `/data/apps/comfyui/`