Add ComfyUI configuration for image generation with ROCm support

- Docker Compose setup with ROCm for RX 7800 XT (gfx1101)
- Auto-download script for SDXL models
- Basic SDXL workflow for testing
- Full documentation in README.md
- Update .gitignore to exclude model files (too large)
This commit is contained in:
Folzo
2026-04-05 23:17:45 +02:00
parent 4473f56240
commit ad2f7bb221
5 changed files with 432 additions and 0 deletions
+16
View File
@@ -70,3 +70,19 @@ desktop.ini
# Fichiers de configuration spécifiques à l'utilisateur # Fichiers de configuration spécifiques à l'utilisateur
*.local *.local
# ComfyUI - Modèles et outputs (trop volumineux)
comfyui/models/checkpoints/*.safetensors
comfyui/models/checkpoints/*.ckpt
comfyui/models/vae/*.safetensors
comfyui/models/vae/*.ckpt
comfyui/models/loras/*.safetensors
comfyui/models/loras/*.ckpt
comfyui/output/*.png
comfyui/output/*.jpg
comfyui/output/*.jpeg
comfyui/output/*.webp
comfyui/input/*.png
comfyui/input/*.jpg
comfyui/input/*.jpeg
comfyui/input/*.webp
+181
View File
@@ -0,0 +1,181 @@
# 🎨 Effi - ComfyUI (Génération d'Images)
Configuration Docker de ComfyUI avec support ROCm pour RX 7800 XT.
## 📋 Prérequis
- Docker et Docker Compose installés
- ROCm 6.x installé sur l'hôte
- RX 7800 XT (16GB VRAM)
- ~20GB d'espace disque libre
## 🚀 Installation
### 1. Copier cette configuration sur folzo-Corp
```bash
cd ~/
git clone https://gitea.folzocorp.fr/Folzo/effi.git
cd effi/comfyui
```
### 2. Télécharger le modèle SDXL Base
```bash
# Créer le dossier models/checkpoints
mkdir -p models/checkpoints
# Télécharger SDXL Base (6.9GB)
wget -O models/checkpoints/sd_xl_base_1.0.safetensors \
"https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors"
# Alternative avec huggingface-cli (si installé)
# huggingface-cli download stabilityai/stable-diffusion-xl-base-1.0 \
# sd_xl_base_1.0.safetensors --local-dir models/checkpoints
```
### 3. Lancer ComfyUI
```bash
docker compose up -d
```
### 4. Vérifier le fonctionnement
```bash
# Logs
docker logs -f comfyui
# Accès web
http://192.168.1.11:8188
```
## 🔧 Configuration ROCm
Cette configuration utilise les variables d'environnement ROCm pour la RX 7800 XT:
- `HIP_VISIBLE_DEVICES=0` - Utilise le premier GPU
- `HSA_OVERRIDE_GFX_VERSION=11.0.1` - Force l'architecture gfx1101 (Navi 32)
- `PYTORCH_HIP_ALLOC_CONF=expandable_segments:True` - Optimisation mémoire PyTorch
## 📁 Structure des dossiers
```
comfyui/
├── docker-compose.yml # Configuration Docker
├── models/
│ ├── checkpoints/ # Modèles principaux (SDXL, etc.)
│ ├── vae/ # Encodeurs/décodeurs VAE
│ └── loras/ # Modères LoRA pour fine-tuning
├── output/ # Images générées
├── input/ # Images d'entrée (img2img)
├── custom_nodes/ # Extensions ComfyUI
└── workflows/ # Workflows sauvegardés
```
## 🖼️ Modèles recommandés
### Pour RX 7800 XT 16GB
| Modèle | Taille | VRAM | Usage |
|--------|--------|------|-------|
| SDXL Base 1.0 | 6.9GB | 8-10GB | Usage général |
| SDXL Lightning | 6.9GB | 8-10GB | Génération rapide |
| RealVisXL | 6.9GB | 8-10GB | Photoréalisme |
### Commandes de téléchargement
```bash
# SDXL Base
wget -O models/checkpoints/sd_xl_base_1.0.safetensors \
"https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors"
# SDXL VAE (optionnel mais recommandé)
wget -O models/vae/sdxl_vae.safetensors \
"https://huggingface.co/stabilityai/sdxl-vae/resolve/main/diffusion_pytorch_model.safetensors"
```
## 🔌 Intégration OpenWebUI
Dans OpenWebUI (http://192.168.1.27:3000):
1. Aller dans **Admin Panel** → **Settings** → **Images**
2. **Image Generation Engine**: ComfyUI
3. **ComfyUI URL**: `http://192.168.1.11:8188`
4. **ComfyUI Workflow**: Default
5. Sauvegarder
## 🧪 Tests
### Test via interface web
1. Ouvrir http://192.168.1.11:8188
2. Charger un workflow (bouton **Load**)
3. Sélectionner le modèle SDXL dans le nœud "Load Checkpoint"
4. Modifier le prompt
5. Cliquer **Queue Prompt**
### Test via OpenWebUI
Dans une conversation avec Effi:
```
Dessine-moi un chat astronaute sur la lune
```
## 🐛 Dépannage
### ComfyUI ne démarre pas
```bash
# Vérifier les logs
docker logs comfyui
# Vérifier que ROCm est accessible
docker exec -it comfyui rocm-smi
```
### Erreur mémoire GPU
Réduire la résolution dans le workflow (max 1024x1024 pour SDXL).
### Modèle non trouvé
Vérifier que le fichier `.safetensors` est bien dans `models/checkpoints/`.
### Accès refusé (SELinux)
Les volumes utilisent le flag `:Z` pour SELinux. Si problème persiste:
```bash
sudo chown -R $USER:$USER models/ output/ input/
```
## 📊 Monitoring
```bash
# Surveiller l'utilisation GPU
watch -n 1 docker exec comfyui rocm-smi
# Espace disque utilisé
du -sh models/*
```
## 🔒 Sécurité
- ComfyUI écoute sur `0.0.0.0` (toutes les interfaces)
- Pas d'authentification par défaut
- Accessible uniquement depuis le réseau local
- Port non exposé sur Internet
## 📝 Notes
- Premier démarrage peut être long (téléchargement des dépendances)
- La génération d'image utilise ~8-10GB VRAM
- Laisser de la marge pour Ollama (~6GB)
- Les workflows peuvent être sauvegardés/chargés via l'interface
## 🆘 Support
En cas de problème:
1. Vérifier `docker logs comfyui`
2. Vérifier `rocm-smi` sur l'hôte
3. Consulter https://github.com/comfyanonymous/ComfyUI
+48
View File
@@ -0,0 +1,48 @@
# ComfyUI avec ROCm pour RX 7800 XT
# Architecture: gfx1101 (Navi 32)
services:
comfyui:
image: yanwk/comfyui-boot:rocm
container_name: comfyui
restart: unless-stopped
ports:
- "8188:8188"
volumes:
- ./models/checkpoints:/home/user/ComfyUI/models/checkpoints:Z
- ./models/vae:/home/user/ComfyUI/models/vae:Z
- ./models/loras:/home/user/ComfyUI/models/loras:Z
- ./output:/home/user/ComfyUI/output:Z
- ./input:/home/user/ComfyUI/input:Z
- ./custom_nodes:/home/user/ComfyUI/custom_nodes:Z
- ./workflows:/home/user/ComfyUI/workflows:Z
devices:
- /dev/kfd:/dev/kfd
- /dev/dri:/dev/dri
group_add:
- video
- render
environment:
- HIP_VISIBLE_DEVICES=0
- HSA_OVERRIDE_GFX_VERSION=11.0.1
- PYTORCH_HIP_ALLOC_CONF=expandable_segments:True
- COMFYUI_PORT=8188
- COMFYUI_EXTRA_ARGS=--listen 0.0.0.0 --port 8188
security_opt:
- seccomp:unconfined
cap_add:
- SYS_PTRACE
shm_size: '8gb'
stdin_open: true
tty: true
deploy:
resources:
reservations:
devices:
- driver: amd
count: 1
capabilities: [gpu]
networks:
default:
name: effi-network
+93
View File
@@ -0,0 +1,93 @@
#!/bin/bash
# Script de téléchargement des modèles Stable Diffusion
# Pour ComfyUI avec RX 7800 XT
set -e
MODELS_DIR="$(dirname "$0")/models/checkpoints"
VAE_DIR="$(dirname "$0")/models/vae"
mkdir -p "$MODELS_DIR" "$VAE_DIR"
echo "🎨 Téléchargement des modèles pour ComfyUI"
echo "=========================================="
echo ""
# Fonction de téléchargement avec barre de progression
download_model() {
local url=$1
local output=$2
local name=$3
if [ -f "$output" ]; then
echo "✓ $name déjà présent"
return 0
fi
echo "📥 Téléchargement de $name..."
echo " URL: $url"
echo " Destination: $output"
echo ""
wget --progress=bar:force -O "$output" "$url" 2>&1 | tail -f -n +6
if [ $? -eq 0 ]; then
echo "✓ $name téléchargé avec succès"
else
echo "✗ Erreur lors du téléchargement de $name"
rm -f "$output"
return 1
fi
echo ""
}
# Menu de sélection
echo "Quel modèle souhaitez-vous télécharger ?"
echo ""
echo "1) SDXL Base 1.0 (6.9GB) - Recommandé, usage général"
echo "2) SDXL Base + VAE (7.2GB total) - Avec meilleur VAE"
echo "3) Annuler"
echo ""
read -p "Votre choix (1-3): " choice
case $choice in
1)
echo ""
download_model \
"https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors" \
"$MODELS_DIR/sd_xl_base_1.0.safetensors" \
"SDXL Base 1.0"
;;
2)
echo ""
download_model \
"https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors" \
"$MODELS_DIR/sd_xl_base_1.0.safetensors" \
"SDXL Base 1.0"
download_model \
"https://huggingface.co/stabilityai/sdxl-vae/resolve/main/diffusion_pytorch_model.safetensors" \
"$VAE_DIR/sdxl_vae.safetensors" \
"SDXL VAE"
;;
3)
echo "Annulation..."
exit 0
;;
*)
echo "Choix invalide"
exit 1
;;
esac
echo ""
echo "=========================================="
echo "✅ Téléchargement terminé !"
echo ""
echo "Prochaines étapes :"
echo " 1. Lancer ComfyUI : docker compose up -d"
echo " 2. Vérifier les logs : docker logs -f comfyui"
echo " 3. Accéder à l'interface : http://192.168.1.11:8188"
echo ""
echo "Espace disque utilisé :"
du -sh "$MODELS_DIR" "$VAE_DIR" 2>/dev/null | head -2
+94
View File
@@ -0,0 +1,94 @@
{
"last_node_id": 9,
"last_link_id": 9,
"nodes": [
{
"id": 6,
"type": "CLIPTextEncode",
"pos": [415, 186],
"size": [400, 200],
"inputs": [{"name": "clip", "type": "CLIP", "link": 3}],
"outputs": [{"name": "CONDITIONING", "type": "CONDITIONING", "links": [4], "slot_index": 0}],
"widgets_values": ["beautiful scenery nature glass bottle landscape, purple galaxy bottle, fantasy, intricate detail, 8k"],
"title": "Prompt (Positive)"
},
{
"id": 7,
"type": "CLIPTextEncode",
"pos": [415, 426],
"size": [400, 200],
"inputs": [{"name": "clip", "type": "CLIP", "link": 5}],
"outputs": [{"name": "CONDITIONING", "type": "CONDITIONING", "links": [6], "slot_index": 0}],
"widgets_values": ["text, watermark, blurry, low quality, distorted"],
"title": "Prompt (Negative)"
},
{
"id": 4,
"type": "CheckpointLoaderSimple",
"pos": [26, 474],
"size": [320, 98],
"outputs": [
{"name": "MODEL", "type": "MODEL", "links": [1], "slot_index": 0},
{"name": "CLIP", "type": "CLIP", "links": [3, 5], "slot_index": 1},
{"name": "VAE", "type": "VAE", "links": [8], "slot_index": 2}
],
"widgets_values": ["sd_xl_base_1.0.safetensors"]
},
{
"id": 5,
"type": "EmptyLatentImage",
"pos": [26, 627],
"size": [320, 106],
"outputs": [{"name": "LATENT", "type": "LATENT", "links": [2], "slot_index": 0}],
"widgets_values": [1024, 1024, 1]
},
{
"id": 3,
"type": "KSampler",
"pos": [863, 186],
"size": [320, 474],
"inputs": [
{"name": "model", "type": "MODEL", "link": 1},
{"name": "positive", "type": "CONDITIONING", "link": 4},
{"name": "negative", "type": "CONDITIONING", "link": 6},
{"name": "latent_image", "type": "LATENT", "link": 2}
],
"outputs": [{"name": "LATENT", "type": "LATENT", "links": [7], "slot_index": 0}],
"widgets_values": [0, "randomize", 20, 8, "euler", "normal", 1]
},
{
"id": 8,
"type": "VAEDecode",
"pos": [1209, 188],
"size": [210, 46],
"inputs": [
{"name": "samples", "type": "LATENT", "link": 7},
{"name": "vae", "type": "VAE", "link": 8}
],
"outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [9], "slot_index": 0}]
},
{
"id": 9,
"type": "SaveImage",
"pos": [1474, 189],
"size": [320, 270],
"inputs": [{"name": "images", "type": "IMAGE", "link": 9}],
"widgets_values": ["ComfyUI"]
}
],
"links": [
[1, 4, 0, 3, 0, "MODEL"],
[2, 5, 0, 3, 3, "LATENT"],
[3, 4, 1, 6, 0, "CLIP"],
[4, 6, 0, 3, 1, "CONDITIONING"],
[5, 4, 1, 7, 0, "CLIP"],
[6, 7, 0, 3, 2, "CONDITIONING"],
[7, 3, 0, 8, 0, "LATENT"],
[8, 4, 2, 8, 1, "VAE"],
[9, 8, 0, 9, 0, "IMAGE"]
],
"groups": [],
"config": {},
"extra": {},
"version": 0.4
}