diff --git a/.gitignore b/.gitignore index 74d4a83..59f2126 100644 --- a/.gitignore +++ b/.gitignore @@ -70,3 +70,19 @@ desktop.ini # Fichiers de configuration spécifiques à l'utilisateur *.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 diff --git a/comfyui/README.md b/comfyui/README.md new file mode 100644 index 0000000..6337f71 --- /dev/null +++ b/comfyui/README.md @@ -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 diff --git a/comfyui/docker-compose.yml b/comfyui/docker-compose.yml new file mode 100644 index 0000000..083096c --- /dev/null +++ b/comfyui/docker-compose.yml @@ -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 diff --git a/comfyui/download-models.sh b/comfyui/download-models.sh new file mode 100755 index 0000000..5366ab8 --- /dev/null +++ b/comfyui/download-models.sh @@ -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 diff --git a/comfyui/workflows/sdxl_basic.json b/comfyui/workflows/sdxl_basic.json new file mode 100644 index 0000000..8777b9c --- /dev/null +++ b/comfyui/workflows/sdxl_basic.json @@ -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 +}