ComfyUI - Guide complet d'installation et d'utilisation¶
ComfyUI est une interface node-based puissante pour Stable Diffusion, permettant de créer des workflows complexes de génération d'images avec un contrôle total sur chaque étape du processus.
Présentation¶
| Caractéristique | Valeur |
|---|---|
| Type | Interface workflow pour Stable Diffusion |
| Port | 8188 |
| Accès | http://192.168.1.82:8188 |
| GPU | 2× RTX 5090 (64 GB VRAM chacune) |
| Installation | /opt/comfyui |
| Données | /data/comfyui (models, output, input) |
| Service | comfyui.service (systemd) |
Architecture¶
┌─────────────────────────────────────────────┐
│ ComfyUI Web Interface (port 8188) │
│ - Workflow editor (node-based) │
│ - Image generator │
│ - Model manager │
└──────────────────┬──────────────────────────┘
│
┌─────────▼─────────┐
│ Python Backend │
│ - PyTorch │
│ - CUDA 12.1 │
└─────────┬─────────┘
│
┌──────────────┼──────────────┐
│ │ │
┌───▼───┐ ┌───▼───┐ ┌────▼────┐
│GPU 0 │ │GPU 1 │ │ Models │
│64 GB │ │64 GB │ │ /data/ │
└───────┘ └───────┘ └─────────┘
Installation¶
Automatique (via Ansible)¶
L'installation est gérée par Ansible et le pipeline GitLab CI/CD :
# 1. Installation de ComfyUI (automatique sur push main)
# Job GitLab : ansible:install-comfyui
# 2. Téléchargement des modèles (manuel)
cd /opt/probatiovault-ia-server/ansible
ansible-playbook -i inventory/hosts playbooks/download-comfyui-models.yml
Note : Le téléchargement des modèles est un job GitLab manuel car il télécharge ~22.5 GB de données. Pour le lancer depuis GitLab : 1. Aller sur https://gitlab.com/probatiovault/probatiovault-ia-server/-/pipelines 2. Cliquer sur le dernier pipeline 3. Trouver le job ansible:download-comfyui-models 4. Cliquer sur le bouton ▶️ (play) pour lancer le téléchargement
Modèles téléchargés automatiquement¶
Le playbook download-comfyui-models.yml télécharge depuis HuggingFace :
| Type | Modèle | Taille | Description |
|---|---|---|---|
| Checkpoint | SDXL 1.0 Base | 6.94 GB | Modèle principal haute qualité (1024×1024) |
| Checkpoint | SDXL 1.0 Refiner | 6.08 GB | Améliore les détails après génération |
| Checkpoint | Stable Diffusion 1.5 | 4.27 GB | Modèle plus léger et rapide (512×512) |
| VAE | SDXL VAE | 334 MB | Améliore couleurs et détails (SDXL) |
| VAE | SD 1.5 VAE MSE | 334 MB | Améliore couleurs et détails (SD 1.5) |
| ControlNet | SDXL Canny | 2.50 GB | Contrôle par contours/edges |
| ControlNet | SDXL Depth | 2.50 GB | Contrôle par carte de profondeur |
| Upscaler | RealESRGAN x4plus | 64 MB | Upscaling 4× haute qualité |
Total : ~22.5 GB
Premier démarrage¶
1. Vérifier que ComfyUI est démarré¶
# Vérifier le service
systemctl status comfyui
# Vérifier les logs
journalctl -u comfyui -f
# Vérifier que le port 8188 est ouvert
curl http://localhost:8188
2. Accéder à l'interface web¶
- Ouvrir http://192.168.1.82:8188 dans un navigateur
- L'interface node-based s'affiche avec un workflow par défaut
- Si aucun modèle n'est disponible, lancer le téléchargement (voir ci-dessus)
3. Charger un workflow par défaut¶
ComfyUI charge automatiquement un workflow de base (text-to-image). Sinon :
- Cliquer sur Load en haut à droite
- Sélectionner default workflow ou example workflows
Utilisation¶
Workflow simple : Text-to-Image (SDXL)¶
Interface node-based : chaque boîte est un "node" qui fait une opération.
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Load Model │────>│ Sampler │────>│ Save Image │
│ (SDXL Base) │ │ (KSampler) │ │ │
└──────────────┘ └──────┬───────┘ └──────────────┘
│
┌──────▼───────┐
│ Prompt │
│ (CLIP Text) │
└──────────────┘
Étapes :
- Load Checkpoint :
- Node :
CheckpointLoaderSimple -
Modèle :
sd_xl_base_1.0.safetensors -
CLIP Text Encode (Prompt) :
- Node :
CLIPTextEncode - Positive :
a beautiful landscape with mountains, dramatic lighting, photorealistic -
Negative :
blurry, low quality, text, watermark -
KSampler :
- Steps : 20-30 (qualité vs vitesse)
- CFG Scale : 7.0 (respect du prompt)
- Sampler :
euleroudpm_2m -
Scheduler :
karras -
VAE Decode :
-
Convertit latent → image
-
Save Image :
-
Sauvegarde dans
/data/comfyui/output/ -
Cliquer sur "Queue Prompt" (en bas à droite)
Workflow avancé : Text-to-Image + Refiner¶
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Load Model │────>│ KSampler │────>│ Load Refiner │────>│ Save Image │
│ (SDXL Base) │ │ (20 steps) │ │ (10 steps) │ │ │
└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘
Le Refiner améliore les détails après la génération initiale.
Configuration : - Base : 20 steps (CFG 7.0) - Refiner : 10 steps (CFG 7.0) - Résolution : 1024×1024
Workflow ControlNet : Image-to-Image guidée¶
ControlNet permet de guider la génération avec une image de référence (contours, profondeur, pose).
Exemple : Canny (contours)
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Load Image │────>│ Canny Edge │────>│ ControlNet │
│ │ │ Detection │ │ Apply │
└──────────────┘ └──────────────┘ └──────┬───────┘
│
┌──────────────┐ ┌──────────────┐ │
│ Load Model │────>│ KSampler │<───────────┘
│ (SDXL Base) │ │ │
└──────────────┘ └──────┬───────┘
│
┌──────▼───────┐
│ Save Image │
└──────────────┘
Étapes :
- Upload une image de référence
- Détection des contours (Canny)
- ControlNet guide la génération pour suivre ces contours
- Le prompt décrit ce que vous voulez générer
Cas d'usage : - Transformer un croquis en image photoréaliste - Changer le style d'une image en gardant la composition - Générer des variantes d'une image
Upscaling : Améliorer la résolution¶
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Load Image │────>│ RealESRGAN │────>│ Save Image │
│ (512×512) │ │ Upscale x4 │ │ (2048×2048) │
└──────────────┘ └──────────────┘ └──────────────┘
Modèle : RealESRGAN_x4plus.pth Résultat : Image 4× plus grande avec détails améliorés
Gestion des modèles¶
Structure des répertoires¶
/data/comfyui/models/
├── checkpoints/ # Modèles principaux (.safetensors)
│ ├── sd_xl_base_1.0.safetensors
│ ├── sd_xl_refiner_1.0.safetensors
│ └── v1-5-pruned-emaonly.safetensors
├── vae/ # VAE (améliore couleurs)
│ ├── sdxl_vae.safetensors
│ └── vae-ft-mse-840000-ema-pruned.safetensors
├── controlnet/ # ControlNet (contrôle guidé)
│ ├── controlnet-canny-sdxl-1.0.safetensors
│ └── controlnet-depth-sdxl-1.0.safetensors
├── loras/ # LoRA (ajustements rapides)
│ └── (à télécharger manuellement)
├── upscale_models/ # Upscalers
│ └── RealESRGAN_x4plus.pth
├── embeddings/ # Text embeddings
└── clip_vision/ # CLIP vision models
Ajouter des modèles manuellement¶
Depuis HuggingFace :
# Exemple : télécharger un LoRA
cd /data/comfyui/models/loras
wget https://huggingface.co/<user>/<repo>/resolve/main/<model>.safetensors
# Fixer les permissions
chown comfyui:comfyui <model>.safetensors
Depuis Civitai :
- Trouver le modèle sur https://civitai.com
- Copier le lien de téléchargement
- Télécharger dans le bon répertoire
Recharger les modèles : - Cliquer sur Refresh dans le menu (ou F5)
Modèles recommandés (à télécharger)¶
| Type | Nom | Source | Usage |
|---|---|---|---|
| LoRA | SDXL Lighting | HuggingFace | Génération rapide (4 steps) |
| LoRA | Detail Tweaker | Civitai | Améliore détails |
| Checkpoint | Juggernaut XL | Civitai | Photorealistic |
| Checkpoint | DreamShaper XL | Civitai | Artistic style |
Workflows prêts à l'emploi¶
ComfyUI inclut des workflows d'exemple :
1. SDXL Basic (text-to-image)¶
- Prompt → Image 1024×1024
- Temps : ~30s (20 steps)
2. SDXL Refiner (haute qualité)¶
- Base (20 steps) + Refiner (10 steps)
- Temps : ~45s
3. Img2Img (image-to-image)¶
- Upload image + Prompt → Variation
- Denoise strength : 0.5-0.8
4. ControlNet Canny¶
- Image de référence → Contours → Génération guidée
- Temps : ~35s
5. Upscale 4×¶
- Image 512×512 → 2048×2048
- Temps : ~10s
API et intégration¶
ComfyUI expose une API HTTP pour automatisation.
Endpoint¶
Soumettre un workflow (Python)¶
import requests
import json
# Charger un workflow JSON
with open('workflow.json', 'r') as f:
workflow = json.load(f)
# Modifier le prompt
workflow['3']['inputs']['text'] = "a beautiful sunset over the ocean"
# Soumettre
response = requests.post(
'http://192.168.1.82:8188/prompt',
json={'prompt': workflow}
)
prompt_id = response.json()['prompt_id']
print(f"Prompt submitted: {prompt_id}")
Récupérer les images générées¶
import websocket
import json
def on_message(ws, message):
data = json.loads(message)
if data['type'] == 'executed':
print(f"Image generated: {data['data']['output']}")
ws = websocket.WebSocketApp(
'ws://192.168.1.82:8188/ws',
on_message=on_message
)
ws.run_forever()
Télécharger l'image¶
# Les images sont dans /data/comfyui/output/
curl http://192.168.1.82:8188/view?filename=ComfyUI_00001_.png --output image.png
Intégration Homer¶
ComfyUI est référencé dans le dashboard Homer :
- name: "IA & Machine Learning"
items:
- name: "ComfyUI"
logo: "assets/tools/comfyui.png"
subtitle: "Node-based Stable Diffusion interface"
url: "http://192.168.1.82:8188"
tag: "gpu"
Accès depuis Homer : http://192.168.1.82:8080
Troubleshooting¶
ComfyUI ne démarre pas¶
# Vérifier les logs
journalctl -u comfyui -n 50
# Erreurs communes :
# - "CUDA out of memory" : Modèle trop gros pour VRAM
# - "No module named 'torch'" : Dépendances Python manquantes
# Redémarrer le service
systemctl restart comfyui
Modèles non détectés¶
# Vérifier que les modèles sont dans le bon répertoire
ls -lh /data/comfyui/models/checkpoints/
# Vérifier les permissions
chown -R comfyui:comfyui /data/comfyui/models/
# Relancer ComfyUI
systemctl restart comfyui
Génération très lente¶
Causes possibles :
-
CUDA non détecté :
-
Modèle trop lourd :
- Utiliser SD 1.5 au lieu de SDXL (plus rapide)
-
Réduire le nombre de steps (10-15 au lieu de 20-30)
-
GPU occupé :
Erreur "Out of Memory"¶
# SDXL nécessite ~12 GB VRAM. Avec 2× RTX 5090 (64 GB), aucun problème.
# Si l'erreur persiste :
# 1. Vérifier la VRAM disponible
nvidia-smi
# 2. Utiliser un modèle plus léger
# → SD 1.5 au lieu de SDXL
# 3. Réduire la résolution
# → 768×768 au lieu de 1024×1024
Images floues ou de mauvaise qualité¶
Solutions :
- Utiliser un VAE :
- SDXL :
sdxl_vae.safetensors -
SD 1.5 :
vae-ft-mse-840000-ema-pruned.safetensors -
Augmenter les steps :
- Minimum : 20 steps
-
Qualité : 30-40 steps
-
Améliorer le prompt :
- Ajouter des mots-clés qualité :
photorealistic, high quality, detailed, 8k -
Negative prompt :
blurry, low quality, pixelated, jpeg artifacts -
Utiliser le Refiner (SDXL) :
- Base + Refiner = meilleure qualité
Performance¶
Temps de génération (estimés)¶
| Configuration | Résolution | Steps | Temps | GPU |
|---|---|---|---|---|
| SDXL Base | 1024×1024 | 20 | ~25s | RTX 5090 |
| SDXL Base + Refiner | 1024×1024 | 20+10 | ~40s | RTX 5090 |
| SD 1.5 | 512×512 | 20 | ~8s | RTX 5090 |
| ControlNet SDXL | 1024×1024 | 20 | ~30s | RTX 5090 |
| Upscale 4× | 512→2048 | N/A | ~10s | RTX 5090 |
Optimisation¶
Générations multiples en parallèle :
ComfyUI peut utiliser les 2 GPU simultanément. Pour activer :
# Éditer le script de démarrage
sudo vim /opt/comfyui/start.sh
# Ajouter --use-multi-device-mode
python3 main.py --listen 0.0.0.0 --port 8188 --use-multi-device-mode
# Redémarrer
systemctl restart comfyui
Batch processing :
Générer plusieurs images en une seule exécution :
- Node
KSampler→ paramètrebatch_size: 4 - Génère 4 images simultanément
Maintenance¶
Mise à jour ComfyUI¶
# Arrêter le service
systemctl stop comfyui
# Mettre à jour le code
cd /opt/comfyui
sudo -u comfyui git pull origin master
# Mettre à jour les dépendances Python
pip3 install -r requirements.txt --upgrade --break-system-packages
# Redémarrer
systemctl start comfyui
Sauvegarde des modèles¶
# Sauvegarder les modèles (22.5 GB)
sudo tar czf /tmp/comfyui-models-backup-$(date +%Y%m%d).tar.gz /data/comfyui/models/
# Copier ailleurs (NAS, S3, etc.)
cp /tmp/comfyui-models-backup-*.tar.gz /mnt/nas/backups/
Sauvegarde des workflows¶
# Les workflows sont dans le navigateur (localStorage).
# Export manuel depuis l'interface :
# 1. Cliquer sur "Save" → "Export workflow"
# 2. Sauvegarder le fichier JSON
# Ou copier les outputs générés
sudo tar czf /tmp/comfyui-output-backup-$(date +%Y%m%d).tar.gz /data/comfyui/output/
Nettoyage des images générées¶
# Supprimer les images > 30 jours
find /data/comfyui/output/ -name "*.png" -mtime +30 -delete
# Vérifier l'espace disque
du -sh /data/comfyui/output/
Ressources¶
- GitHub officiel : https://github.com/comfyanonymous/ComfyUI
- Documentation : https://github.com/comfyanonymous/ComfyUI/wiki
- Workflows communautaires : https://comfyworkflows.com
- Modèles (HuggingFace) : https://huggingface.co/models?pipeline_tag=text-to-image
- Modèles (Civitai) : https://civitai.com
Résumé des commandes¶
# Service
systemctl status comfyui
systemctl restart comfyui
journalctl -u comfyui -f
# Modèles
ls -lh /data/comfyui/models/checkpoints/
ansible-playbook -i inventory/hosts playbooks/download-comfyui-models.yml
# GPU
nvidia-smi
watch -n 1 nvidia-smi
# Espace disque
du -sh /data/comfyui/
df -h /data/
# Tests
curl http://localhost:8188
bash /opt/probatiovault-ia-server/scripts/test-comfyui.sh
Différences avec Midjourney / DALL-E¶
| Fonctionnalité | ComfyUI | Midjourney | DALL-E 3 |
|---|---|---|---|
| Hébergement | Auto-hébergé (privé) | Cloud Discord | Cloud OpenAI |
| Coût | Gratuit (hors infrastructure) | $10-$60/mois | $0.04-$0.12/image |
| Données | Restent sur votre serveur | Envoyées à Midjourney | Envoyées à OpenAI |
| Modèles | Open-source (SDXL, SD 1.5) | Propriétaire | Propriétaire |
| Contrôle | Total (nodes, paramètres) | Limité (prompts) | Limité (prompts) |
| Workflows | Illimités (node-based) | Aucun | Aucun |
| API | Oui (HTTP + WebSocket) | Non | Oui (OpenAI API) |
Avantages ComfyUI : - ✅ Données privées (RGPD compliant) - ✅ Pas de coût récurrent - ✅ Contrôle total (workflows complexes) - ✅ Extensible (custom nodes)
Avantages Midjourney/DALL-E : - ✅ Qualité optimisée (modèles propriétaires) - ✅ Pas de gestion infrastructure - ✅ Interface simplifiée (prompts uniquement)