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.
This commit is contained in:
@@ -12,3 +12,9 @@ CUDA_VISIBLE_DEVICES=0
|
||||
|
||||
# Extra CLI args passed to ComfyUI (e.g. --fast)
|
||||
CLI_ARGS=
|
||||
|
||||
# Hugging Face token for gated models (optional)
|
||||
# HF_TOKEN=
|
||||
|
||||
# Civitai API token for civitai catalog entries (optional)
|
||||
# CIVITAI_TOKEN=
|
||||
|
||||
+40
-90
@@ -1,134 +1,84 @@
|
||||
# ComfyUI stack
|
||||
|
||||
[ComfyUI](https://github.com/comfyanonymous/ComfyUI) — grafowy interfejs do generowania obrazów (Stable Diffusion, Flux, …). Stack oparty na obrazie [`yanwk/comfyui-boot`](https://github.com/YanWenKun/ComfyUI-Docker).
|
||||
|
||||
Zamiast [Stability Matrix](https://github.com/LykosAI/StabilityMatrix) (GUI desktop) używamy ComfyUI w Dockerze — zgodnie z filozofią headless serwera i tutoriala [03b](../../manual-tutorial/03b-system-tools.md).
|
||||
[ComfyUI](https://github.com/comfyanonymous/ComfyUI) w Dockerze — obraz upstream [`yanwk/comfyui-boot:cu126-slim`](https://github.com/YanWenKun/ComfyUI-Docker). Stack **nie modyfikuje** ComfyUI; to tylko compose + lifecycle. Katalog modeli, pobieranie i skan workflow są w [**Server UI**](../server-ui/README.md) (`:8091` → zakładka **ComfyUI Modele**).
|
||||
|
||||
## Porty
|
||||
|
||||
| Serwis | Port | URL |
|
||||
|--------|------|-----|
|
||||
| ComfyUI web UI | **8188** | `http://HOST:8188` |
|
||||
| LocalAI (osobny stack) | 8070 | LLM / chat — **nie równolegle z dużym modelem SD** |
|
||||
| Server UI (modele, stacki) | **8091** | `http://HOST:8091` |
|
||||
|
||||
## Jak to działa
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
browser["Przeglądarka :8188"]
|
||||
comfyui["Kontener comfyui"]
|
||||
gpu["RTX 3090 Ti"]
|
||||
models["/data/apps/comfyui/models"]
|
||||
|
||||
browser --> comfyui
|
||||
comfyui --> gpu
|
||||
comfyui --> models
|
||||
```
|
||||
|
||||
| Element | Opis |
|
||||
|---------|------|
|
||||
| Obraz | `yanwk/comfyui-boot:cu126-slim` |
|
||||
| Konfiguracja | `.env` + `docker-compose.yml` |
|
||||
| Modele | `/data/apps/comfyui/models` (puste na start — pobierz ręcznie lub przez ComfyUI-Manager) |
|
||||
| Pierwszy start | Kopiuje ComfyUI do `/data/apps/comfyui/storage/` (~kilka minut) |
|
||||
|
||||
## Struktura
|
||||
## Struktura (repo)
|
||||
|
||||
```
|
||||
stacks/comfyui/
|
||||
├── README.md
|
||||
├── docker-compose.yml
|
||||
├── .env.example
|
||||
├── .gitignore
|
||||
└── scripts/
|
||||
├── ensure-dirs.sh
|
||||
├── pull.sh
|
||||
└── start.sh
|
||||
```
|
||||
|
||||
Na dysku `/data`:
|
||||
## Dane na hoście (`/data/apps/comfyui/`)
|
||||
|
||||
```
|
||||
/data/apps/comfyui/
|
||||
├── storage/ # kopia ComfyUI z obrazu (pierwszy start)
|
||||
├── models/ # checkpoints, LoRA, VAE, …
|
||||
├── cache/
|
||||
│ ├── hf-hub/
|
||||
│ └── torch-hub/
|
||||
├── input/
|
||||
├── output/
|
||||
├── custom_nodes/
|
||||
└── workflows/
|
||||
```
|
||||
| Katalog | Zawartość |
|
||||
|---------|-----------|
|
||||
| `storage/` | Kopia ComfyUI z obrazu (pierwszy start) |
|
||||
| `models/` | Checkpointy, LoRA, VAE, … |
|
||||
| `custom_nodes/` | ComfyUI-Manager i wtyczki |
|
||||
| `workflows/` | JSON workflow (bind → `user/default/workflows`) |
|
||||
| `input/`, `output/`, `cache/` | Wejścia, wyniki, cache HF/torch |
|
||||
|
||||
## Workflow (bez modelu)
|
||||
Update kontenera (`docker compose pull` + recreate) **nie usuwa** tych danych — wszystko to bind-mounty.
|
||||
|
||||
## Szybki start
|
||||
|
||||
```bash
|
||||
cd stacks/comfyui
|
||||
cp .env.example .env
|
||||
|
||||
./scripts/pull.sh
|
||||
./scripts/start.sh
|
||||
```
|
||||
|
||||
Weryfikacja:
|
||||
Weryfikacja: `curl -f http://127.0.0.1:8188/`
|
||||
|
||||
## Polityka GPU
|
||||
|
||||
RTX 3090 Ti — jeden duży workload GPU naraz (LocalAI **lub** ComfyUI z dużym modelem). `start.sh` ostrzega, gdy `localai` działa. W Server UI: Stop/Start stacków.
|
||||
|
||||
## Update ComfyUI
|
||||
|
||||
Zalecane: Server UI → karta **ComfyUI** → **Update** (pull + recreate gdy działa).
|
||||
|
||||
CLI:
|
||||
|
||||
```bash
|
||||
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8188/
|
||||
# UI: http://<IP-serwera>:8188
|
||||
./scripts/pull.sh # tylko obraz
|
||||
./scripts/start.sh # start z nowym obrazem
|
||||
```
|
||||
|
||||
## Zmienne `.env`
|
||||
### Checklist po update obrazu
|
||||
|
||||
| Zmienna | Opis | Domyślnie |
|
||||
|---------|------|-----------|
|
||||
| `DATA_ROOT` | Mount dysku danych | `/data` |
|
||||
| `COMFYUI_PORT` | Port na hoście | `8188` |
|
||||
| `COMFYUI_IMAGE` | Obraz Docker | `yanwk/comfyui-boot:cu126-slim` |
|
||||
| `CUDA_VISIBLE_DEVICES` | GPU | `0` |
|
||||
| `CLI_ARGS` | Dodatkowe flagi ComfyUI | puste |
|
||||
1. `curl -f http://127.0.0.1:8188/` — UI ComfyUI działa
|
||||
2. Server UI → **ComfyUI Modele** → odśwież — skan workflow OK
|
||||
3. Test pobrania modelu (katalog lub Custom URL) — job `completed`
|
||||
4. Healthcheck fail → sprawdź, czy obraz ma `curl` na porcie 8188
|
||||
5. Pusty skan workflow → zweryfikuj mount `workflows` → `user/default/workflows` w [docs yanwk](https://github.com/YanWenKun/ComfyUI-Docker)
|
||||
|
||||
## Polityka GPU (LocalAI ↔ ComfyUI)
|
||||
## Modele i workflow
|
||||
|
||||
RTX 3090 Ti 24 GB — **jeden** duży workload GPU naraz.
|
||||
- **Server UI** (zalecane): katalog, workflow scan, pobieranie — [`../server-ui/README.md`](../server-ui/README.md)
|
||||
- **ComfyUI-Manager** w UI `:8188`
|
||||
- **CLI** (Server UI scripts): `../server-ui/scripts/comfyui/list-models.sh`, `download-model.sh`
|
||||
|
||||
Przed startem ComfyUI z dużym modelem (SDXL, Flux):
|
||||
Przykładowy workflow: [`../../manual-tutorial/examples/comfyui/example-sdxl-refiner.api.json`](../../manual-tutorial/examples/comfyui/example-sdxl-refiner.api.json)
|
||||
|
||||
```bash
|
||||
cd ../localai
|
||||
docker compose --profile localai stop localai
|
||||
```
|
||||
|
||||
Skrypt `start.sh` ostrzega, gdy `localai` jest uruchomiony.
|
||||
|
||||
W Server UI (port 8091) → Stop/Start stack `localai` lub `comfyui` według potrzeb.
|
||||
|
||||
## Modele (później)
|
||||
|
||||
- **ComfyUI-Manager** w UI (custom node w obrazie yanwk) — pobieranie modeli i węzłów
|
||||
- Ręcznie: pliki do `/data/apps/comfyui/models/checkpoints/` (lub odpowiednie podkatalogi)
|
||||
|
||||
Szacunki VRAM (przy zatrzymanym LocalAI):
|
||||
|
||||
| Model | VRAM (orientacyjnie) |
|
||||
|-------|----------------------|
|
||||
| SD 1.5 | ~4–6 GB |
|
||||
| SDXL | ~8–12 GB |
|
||||
| Flux | ~12–20 GB |
|
||||
|
||||
## Zarządzanie
|
||||
|
||||
```bash
|
||||
docker compose --profile comfyui ps
|
||||
docker compose --profile comfyui logs -f comfyui
|
||||
docker compose --profile comfyui restart comfyui
|
||||
docker compose --profile comfyui down
|
||||
cp manual-tutorial/examples/comfyui/example-sdxl-refiner.api.json /data/apps/comfyui/workflows/
|
||||
```
|
||||
|
||||
## Dokumentacja
|
||||
|
||||
- Tutorial: [manual-tutorial/07-comfyui-stack.md](../../manual-tutorial/07-comfyui-stack.md)
|
||||
- Research Stability Matrix: [`coding-agent/STABILITYMATRIX-RESEARCH.md`](../../coding-agent/STABILITYMATRIX-RESEARCH.md)
|
||||
- Wdrożenie: [`coding-agent/COMFYUI-DEPLOYMENT.md`](../../coding-agent/COMFYUI-DEPLOYMENT.md)
|
||||
|
||||
Upstream: [github.com/comfyanonymous/ComfyUI](https://github.com/comfyanonymous/ComfyUI)
|
||||
- Wdrożenie: [coding-agent/COMFYUI-DEPLOYMENT.md](../../coding-agent/COMFYUI-DEPLOYMENT.md)
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
docker-compose.yml
|
||||
@@ -5,13 +5,25 @@ ensure_comfyui_dirs() {
|
||||
local data_root="${1:-/data}"
|
||||
mkdir -p \
|
||||
"${data_root}/apps/comfyui/storage" \
|
||||
"${data_root}/apps/comfyui/models" \
|
||||
"${data_root}/apps/comfyui/models/checkpoints" \
|
||||
"${data_root}/apps/comfyui/models/loras" \
|
||||
"${data_root}/apps/comfyui/models/vae" \
|
||||
"${data_root}/apps/comfyui/models/controlnet" \
|
||||
"${data_root}/apps/comfyui/models/upscale_models" \
|
||||
"${data_root}/apps/comfyui/models/clip" \
|
||||
"${data_root}/apps/comfyui/models/unet" \
|
||||
"${data_root}/apps/comfyui/cache/hf-hub" \
|
||||
"${data_root}/apps/comfyui/cache/torch-hub" \
|
||||
"${data_root}/apps/comfyui/input" \
|
||||
"${data_root}/apps/comfyui/output" \
|
||||
"${data_root}/apps/comfyui/custom_nodes" \
|
||||
"${data_root}/apps/comfyui/workflows"
|
||||
|
||||
# Host downloads (Server UI / CLI) need write access; container (root) can still write.
|
||||
local owner="${COMFYUI_DATA_OWNER:-${SUDO_USER:-}}"
|
||||
if [[ "${EUID}" -eq 0 && -n "${owner}" ]]; then
|
||||
chown -R "${owner}:${owner}" "${data_root}/apps/comfyui/models"
|
||||
fi
|
||||
}
|
||||
|
||||
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
||||
|
||||
Reference in New Issue
Block a user