03-Orchestration - Multi-modèles & Workflows

← Image Advanced | ↑ Image | → Image Applications

Ce module couvre l’orchestration de plusieurs modèles, les workflows complexes, et l’optimisation de performance.

Dans le cadre du fil rouge contenu visuel éducatif : en production, un seul modèle ne suffit pas. 03-1 compare les modèles pour choisir le meilleur selon le contexte. 03-2 assemble des pipelines (génération, édition, upscaling). 03-3 optimise les performances pour le déploiement. 03-4 rejoue un workflow trouvé dans les métadonnées d’une image : un VLM in-graph qui écrit le prompt de character design depuis une image de référence.

Vue d’overview

Statistique Valeur
Notebooks 4
Kernel Python 3
Durée estimée ~3-5h
GPU requis Variable

Notebooks

# Notebook Contenu Service VRAM
1 03-1-Multi-Model-Comparison Comparaison multi-modèles Mixed Variable
2 03-2-Workflow-Orchestration Orchestration de workflows ComfyUI Variable
3 03-3-Performance-Optimization Optimisation performance ComfyUI Variable
4 03-4-VLM-Character-Design-Workflow Boucle VLM in-graph (workflow embarqué dans un PNG) ComfyUI (Krea 2) 24 Go

Prérequis

Docker Services

cd docker-configurations/services/comfyui-qwen
docker-compose up -d

Accès : http://localhost:8188

Dépendances

pip install -r requirements.txt
pip install -r requirements-comfyui.txt

Progression recommandée

  1. 03-1-Multi-Model-Comparison - Comparatif des modèles pour choisir le bon
  2. 03-2-Workflow-Orchestration - Création de workflows complexes
  3. 03-3-Performance-Optimization - Optimisation des performances
  4. 03-4-VLM-Character-Design-Workflow - Forensics d’un workflow embarqué + boucle VLM in-graph

Concepts clés

Multi-Model Comparison

  • Critères : Qualité, vitesse, ressources, contrôle
  • Modèles comparés : SDXL Lightning-4step (Forge), Z-Image/Lumina-2 (ComfyUI)
  • Métriques : PSNR, SSIM, temps de génération, coût

Workflow Orchestration

  • Patterns : Chaines de traitement, parallélisation, batch processing
  • Outils : ComfyUI, Python asyncio, multiprocessing
  • Cas d’usage : Production batch, pipelines automatisés

Le notebook 03-2-Workflow-Orchestration illustre concrètement ces patterns à partir du même prompt — chaque pipeline exécute une chaîne ComfyUI différente et expose ses sorties :

Pipeline séquentiel (génération → style → upscaling) — un coucher de soleil sur montagnes passe par trois étapes successives : Qwen produit l’image initiale (1024×1024), un node de style applique le rendu painterly, puis un upscaler double la résolution à 2048×2048. La même scène gagne en détail au fil des étapes sans perdre la composition d’origine :

Pipeline séquentiel ComfyUI en 3 étapes (Generated / Styled / Upscaled) sur la même scène coucher de soleil sur montagnes enneigées — composition préservée aux 3 étapes, seule la définition/lumière varie

Comparaison multi-modèles en parallèle — le même prompt « A futuristic city with flying cars and neon lights… » est soumis simultanément à 3 invocations Qwen Image-Edit à seeds distinctes (42 / 43 / 44) pour éviter le cache-hit _GENERATED_CACHE[prompt[:120] + "|" + str(seed)] qui auparavant rejouait 1 seule image 3 fois (issue #9347, fix c.988 sur cell[9], étendu à cell[13] par c.988-ter-bis). Les 3 steps parallèles démontrent ainsi une variation par seed d’un même modèle — choix reflété honnêtement par les labels seed-based de l’asset archivé (c.988-ter-bis : plain seed-based labels, pas cosmétiques model-names-avec-caveat). L’asset archivé est cette fois composé de 3 vrais rendus Qwen produits via ComfyUI (peer po-2023:CoursIA, messages msg-20260805T205931-dbp9er + msg-20260805T214336-swgcfo, sources dans D:/Dev/.genai-stack-real-renders-9347/) — la re-exécution locale ComfyUI 3×370s excède la fenêtre worker 30 min (RECOVERABLE-MACHINE honorée : le worker GenAI stack est la bonne machine pour ce livrable). Le comportement pipeline est correct : seeds distincts ⇒ images distinctes ⇒ 3 compositions cyberpunk distinctes vérifiées par vision QA MiniMax M3 :

Triptyque côte-à-côte de 3 rendus RÉELS Qwen Image-Edit (seeds 42 / 43 / 44, timeguard >1s respecté, std(luminance) 24.6 / 18.8 / 22.1 = écart max ~24% du std moyen = discriminant sur vrai rendu) sur le même prompt « A futuristic city with flying cars and neon lights, cyberpunk, night, detailed » — labels honnêtes seed-based ‘Qwen seed=42/43/44’ (c.988-ter-bis, peer feedback msg-20260805T214336-swgcfo : plain seed-based > cosmétiques QWEN/FLUX/SD35+caveat — relire en 1 coup d’œil dit ce que c’est réellement, sans besoin de disclosure) — illustre la variation par seed d’un même modèle, 3 compositions cyberpunk distinctes (palette bleu-magenta / bleu / magenta-purple, 2-1-1 hover-cars) — fix architectural seed=N distinct par caller conservé dans le code cell[9] et cell[13]” width=“840”/>
</p>
<p><strong>Pipeline conditionnel</strong> — un score de qualité seuille les tentatives successives : tant que la sortie est sous le seuil (ligne rouge pointillée à 0.75), le pipeline re-tente automatiquement avec un seed différent (seed=42, 43, 44 — incrémenté à chaque tentative pour que le cache <code>prompt+seed</code> ne rejoue pas la même image). L’histogramme montre l’évolution du score sur trois tentatives — sous le seuil mais dans une bande stable qui permet d’arbitrer entre relancer et accepter :</p>
<p align= Diagramme en barres matplotlib du score qualité (3 tentatives) d'un pipeline conditionnel — 3 barres orange à hauteurs distinctes (~0.55, ~0.59, ~0.57, scores d'un run Qwen Image réel seeds 42/43/44), ligne pointillée rouge à 0.75 (seuil) que le pipeline cherche à franchir en relançant

Note (issue #9346). Avant le fix seed=42 + attempt de cell-11, les 3 tentatives partageaient seed=42 : _GENERATED_CACHE rejouait la même image et la barre « Évolution » était plate. Le PNG img3-workflow3.png a été régénéré le 2026-08-05 depuis un run Qwen Image réel (ComfyUI Phase 29, seeds 42/43/44, steps 20/30/40) : les 3 scores distincts (~0.55, ~0.59, ~0.57) ne sont pas monotones — la std-heuristique de evaluate_quality fluctue dans une bande stable sous le seuil, ce qui illustre honnêtement le comportement du pipeline (relance tant que score < seuil) sans suggérer une amélioration garantie.

Variations stylistiques — un même prompt (chalet de montagne sous la neige) est exécuté sur SD35 avec trois styles distincts : photoréaliste, aquarelle, anime. Le pipeline ne change pas la géométrie de la scène, seulement l’apparence — c’est l’usage classique des conditioning nodes de ComfyUI :

Variations stylistiques SD35 sur un même prompt (chalet en rondins de bois dans montagnes enneigées) — 3 styles : photoréaliste (rendu photographique chaud), aquarelle (couleurs pastel, contours fondus), anime (couleurs saturées, contours marqués, ambiance manga)

Provenance et poids de chaque figure : assets/readme/MANIFEST.md.

Performance Optimization

  • Techniques : Quantization, caching, hardware acceleration
  • Stratégies : Progressive enhancement, early stopping
  • Monitoring : Profiling, resource tracking

VLM in-graph (03-4)

  • Forensics : un PNG ComfyUI embarque son workflow (chunks tEXt : format API + format UI)
  • Boucle agentic : un VLM examine une image de référence et écrit le prompt de génération, dans le graphe
  • Séparation design / style : le prompt VLM porte l’identité du personnage, le LoRA porte le rendu — deux canaux composables

Triptyque démontrant la séparation design/style du pipeline VLM in-graph — une référence (robot photoréaliste) devient une character sheet blueprint (avec LoRA banjiesock_Krea2) puis le même personnage en rendu neutre (sans LoRA), même seed : le design vit dans le prompt VLM, le style vit dans le LoRA

Architecture

Input → Model Selection → Processing → Output
    ↓           ↓            ↓          ↓
  Benchmark   Router      Pipeline  Validation

Ressources

Retour au sommet