Transfert de style dans ComfyUI avec IPAdapter : une image, puis deux et trois combinées

Utilisez IPAdapter Plus pour transférer le rendu d'une image de référence dans une nouvelle génération avec SD 1.5 : la configuration de base des nodes, les réglages de poids et de type de poids qui comptent, et la combinaison de deux ou trois images avec Combine Embeds.

Anton Tenitsky13 octobre 20268 min de lectureVersion vidéo plus bas

Ce guide a été traduit de l'anglais par IA et peut contenir des erreurs. Lire l'original.

Un workflow ComfyUI avec trois images de référence (une sculpture de singe, un selfie et une plage rocheuse) alimentant des encodeurs IPAdapter, avec des portraits mélangés dans la file

Un prompt de texte décrit ce qu’il faut faire. Une image de référence peut décrire à quoi cela doit ressembler. IPAdapter fournit une image au modèle en plus du prompt, si bien qu’une nouvelle génération reprend son style, ses matières ou sa pose. Ici, je prends une de mes anciennes sculptures 3D et je transfère son rendu sur un chien, puis je combine deux et trois images en un seul résultat.

IPAdapter vient de l’article IP-Adapter: Text Compatible Image Prompt Adapter for Text-to-Image Diffusion Models (Ye et al., 2023). Dans ComfyUI, il est implémenté par le pack de nodes IPAdapter Plus de Matteo (cubiq).

En bref

  • Installation : IPAdapter Plus, ComfyUI Essentials, un modèle CLIP Vision et le modèle IPAdapter pour SD 1.5, le tout via le ComfyUI Manager.
  • Une image : IPAdapter Advanced entre le checkpoint et le KSampler, avec un Unified Loader, CLIP Vision et l’image redimensionnée en 512 × 512.
  • Poids : 1,0 copie la référence ; environ 0,55 laisse entrer le prompt. Weak input empêche la référence de prendre le dessus sur le sujet.
  • Plusieurs images : un IPAdapter Encoder par image dans Combine Embeds, méthode add, puis équilibrez avec les poids des encodeurs. Jusqu’à trois images restent contrôlables.

Si vous débutez avec ComfyUI, commencez par les bases des nodes ComfyUI et le texte vers image. Le workflow terminé est un téléchargement gratuit sur mon Patreon ; chargez-le et installez les nodes manquants depuis le Manager.

Installer les nodes et les modèles

  1. Manager → Custom Nodes Manager, cherchez IPAdapter, et installez ComfyUI IPAdapter plus (celui de Matteo, version 2). Choisissez la dernière version et redémarrez.
  2. Manager → Model Manager, cherchez CLIP Vision et installez le modèle CLIP-ViT-H-14. Certaines personnes recommandent aussi un second modèle CLIP Vision listé en dessous ; il n’a jamais fonctionné pour moi.
  3. Dans le Custom Nodes Manager, installez ComfyUI Essentials. Il ajoute des nodes qui manquent au ComfyUI standard, dont Image Resize.
  4. Dans le Model Manager, cherchez IPAdapter et installez le modèle IPAdapter for Stable Diffusion 1.5. Il existe aussi des versions SDXL, mais elles sont plus lourdes et plus lentes. Pendant que vous apprenez et testez, SD 1.5 est bien plus rapide et les résultats sont plutôt bons.
  5. Cliquez sur Update All et mettez ComfyUI à jour, puis redémarrez, pour que tout soit à jour.

Les fichiers de modèles IPAdapter sont aussi sur Hugging Face, si vous préférez les télécharger à la main.

La configuration de base à une image

Partez du template de génération d’images de base. J’utilise epiCPhotoGasm, un checkpoint SD 1.5.

  1. Ajoutez IPAdapter Advanced. C’est le node principal. Son entrée model prend le modèle du checkpoint, et sa sortie MODEL va au KSampler.
  2. Depuis son entrée ipadapter, ajoutez un IPAdapter Model Loader et réglez-le sur le modèle SD 1.5 (pas le modèle de visage).
  3. Depuis son entrée clip_vision, ajoutez Load CLIP Vision avec le modèle que vous avez installé. C’est un peu déroutant, puisque les prompts passent déjà par un encodeur CLIP. Mais IPAdapter a besoin de cette étape supplémentaire pour convertir l’image sous une forme exploitable ; sans elle, cela ne marche pas.
  4. Depuis son entrée image, ajoutez Load Image. J’ai utilisé une sculpture que j’ai faite il y a quelques années.

Appuyez sur Ctrl+Entrée pour lancer, et sur Q pour ouvrir le panneau de la file avec vos résultats à gauche.

Faire passer le prompt

Avec le prompt « dog » et le poids à 1,0, rien ne s’est passé : le résultat n’était que la sculpture. Le poids doit baisser pas mal. En dessous de 0,5, il ne fait qu’un chien ; vers 0,55, vous obtenez le transfert. Même alors, il a fallu quelques exécutions. Mettre head, face, male, female dans le prompt négatif a un peu aidé.

IPAdapter Advanced au poids 0,55, linear, avec une tête de chien sculptée sombre et deux têtes humaines sculptées dans la file
Poids 0,55, linear : une exécution sur quelques-unes donne un chien dans la matière de la sculpture.

Type de poids

  • Linear applique la référence uniformément.
  • Ease in penche vers l’image de référence : surtout le visage sculpté.
  • Ease out penche vers le prompt : juste un chien, sans rien de la référence.
  • Weak input / weak output sont assez explicites. Je voulais weak input, pour que le visage ne prenne pas le dessus sur le chien tout en transférant l’aspect et le style.
IPAdapter Advanced réglé sur weak input avec la sculpture comme référence, et des têtes de chien ressemblant à des loups faites de la même matière sombre et craquelée dans la file
Weak input : le chien garde sa forme tout en prenant la matière de la sculpture.

Nodes de soutien

Trois ajouts rendent la configuration plus claire et donnent de meilleurs résultats :

  • IPAdapter Unified Loader : connectez-lui le modèle du checkpoint, et ses sorties aux entrées model et ipadapter d’IPAdapter Advanced. Sa liste de preset (par exemple « LIGHT – SD1.5 only (low strength) ») est plus facile à comprendre que le choix de fichiers de modèle. Les presets produisent des résultats différents ; je ne peux pas dire lequel est meilleur, et j’ai tendance à utiliser de faibles forces et à faire l’essentiel du réglage dans le node Advanced.
  • Image Resize (d’Essentials) : SD 1.5 fonctionne mieux en 512 × 512.
  • Prep Image for ClipVision : entre le redimensionnement et l’entrée d’image d’IPAdapter. Il prépare l’image sous une forme qu’IPAdapter comprend mieux.
Le node IPAdapter Unified Loader avec le preset LIGHT - SD1.5 only (low strength)
Les presets du Unified Loader sont plus clairs que le choix de fichiers de modèle.

Pour des résultats plus stylisés, j’ai utilisé une image que j’ai faite il y a une dizaine d’années, avec « biker » comme prompt. Avec weak input au poids 0,55, j’ai obtenu un chouette rendu de sculpture 3D en noir et blanc. Au poids 1, linear, les résultats sont devenus vraiment stylisés. Il y a beaucoup à changer ici ; essayez, encore et encore, et vous développerez une intuition du comportement d’IPAdapter.

IPAdapter Advanced au poids 1,00, linear, avec trois portraits très stylisés d'un singe astronaute dans la file
Poids 1,0, linear : le style de la référence prend le dessus.

Combiner deux images

C’est ma façon préférée d’utiliser IPAdapter. Copiez la branche d’image (Ctrl+C, puis Ctrl+Maj+V pour coller avec les connexions) et chargez une seconde image ; j’ai utilisé un selfie. Ensuite :

  1. Remplacez IPAdapter Advanced par IPAdapter Embeds, et reconnectez le modèle et sa sortie.
  2. Ajoutez un IPAdapter Encoder pour chaque image. Connectez les entrées ipadapter et clip_vision de chaque encodeur ; on les oublie facilement.
  3. Ajoutez IPAdapter Combine Embeds. Le pos_embed de chaque encodeur va dans embed1, embed2 et ainsi de suite, et les EMBEDS combinés vont dans l’entrée positive du node Embeds.
Le node IPAdapter Combine Embeds avec deux embeds connectés et la méthode réglée sur concat
Combine Embeds accepte jusqu'à cinq embeds. La méthode décide de la façon dont ils se mélangent.

La méthode compte. Avec concat, qui met une image après l’autre, j’ai obtenu surtout du singe et peu de moi. Add fait la moyenne (average fait quelque chose de semblable), et le singe a gagné des traits plus humains. Avec add, il a aussi pris ma pose : j’étais de face et le singe regardait de côté, et le résultat a copié ma pose tout en appliquant le style et les poils du singe.

Le node IPAdapter Embeds au poids 0,56 avec des portraits mélangés qui associent le visage d'un homme au style d'un singe sculpté
Deux images mélangées avec add : des traits humains, le style de la sculpture.

Équilibrez avec les poids des encodeurs. Réglez l’encodeur de mon visage sur 2 et il prend le dessus. Réglez celui du singe sur 3 et le singe devient plus fort et prend aussi la pose, en tournant en vue de trois quarts.

Deux nodes IPAdapter Encoder avec des poids de 3,00 et 2,00, et des portraits dans la file qui penchent vers l'une ou l'autre image
Poids d'encodeur 3 et 2 : le plus élevé domine.

À ce stade, le prompt (« biker ») a été complètement ignoré ; seules les images embarquées comptaient. Baisser le poids d’IPAdapter a ramené un motard avec un fond rouge et des vêtements de motard, mais sans rapport avec aucune des deux images. Cela devient imprévisible et difficile à contrôler. Je préfère ne pas utiliser de prompt du tout et laisser les images servir de garde-fous ; les résultats sont plus prévisibles.

Combiner trois images

Trois images peuvent encore être combinées et contrôlées ; au-delà de trois, cela devient délicat. Ma troisième image était un recadrage du pack de photos white marine cliffs and sand sur Fotoref, dont je suis cofondateur.

  • Recadrez la référence en carré, 512 × 512. Une image rectangulaire est écrasée par le redimensionnement, ce qui porte un effet laid jusque dans le résultat.
  • Connectez le positive embed, l’ipadapter et le clip_vision de son encodeur.
  • J’ai utilisé des poids d’encodeur de 1, 1,5 et 2.
Trois images de référence, une sculpture de singe, un selfie et des rochers blancs sur une plage, alimentant des encodeurs aux poids 1, 1,5 et 2, et les portraits mélangés dans la file
Trois images : des rochers du paysage, des lunettes du selfie, la pose de trois quarts du singe.

Toutes les exécutions n’étaient pas bonnes, mais j’ai aimé ce qui est passé : des rochers du paysage, mes lunettes (devenues des lunettes de soleil), la position du visage en trois quarts du singe, et une tête dégarnie. Certaines exécutions ont pris un aspect argile, qui je pense vient plus des falaises que du singe.

J’ai aussi essayé le modèle DreamShaper, qui a donné un rendu légèrement plus stylisé. Dans tous les cas, il faut lancer des variations jusqu’à obtenir quelque chose qui vous plaise.

Prochaines étapes

Pour concentrer IPAdapter sur une partie de l’image, combinez-le avec un masque ; voir masquer n’importe quoi avec Florence 2. Pour affiner des résultats comme ceux-ci, voir l’upscaling IA gratuit avec SD 1.5. Pour un style que le modèle apprend de façon permanente, entraînez un LoRA.

Voir la version vidéo (9:32)

Tout ce qui précède est aussi dans la vidéo, si vous préférez suivre à l’écran. La vidéo est en anglais.

Questions fréquentes

Pourquoi IPAdapter ignore-t-il mon prompt ?

Au poids 1,0, l'image de référence domine. Baissez le poids : dans ce test, le prompt n'a commencé à se voir qu'autour de 0,55, et en dessous de 0,5 la référence avait presque disparu. Quand vous combinez plusieurs images avec Combine Embeds, le prompt est largement ignoré.

Quelle méthode de combinaison utiliser pour deux images ?

Concat met les images l'une après l'autre et l'une tend à dominer. Add (ou average) les mélange ; dans mon test, il a aussi pris la pose de la seconde image. Équilibrez ensuite avec les poids des encodeurs.

Combien d'images IPAdapter peut-il combiner ?

Trois restent contrôlables. Au-delà de trois, cela devient délicat.

Faut-il utiliser les modèles IPAdapter SD 1.5 ou SDXL ?

Des modèles SDXL existent, mais ils sont plus lourds et plus lents. Pour apprendre et tester des workflows, SD 1.5 est bien plus rapide et les résultats sont bons.

Anton Tenitsky est artiste 3D avec plus de 15 ans d'expérience en infographie, qui a travaillé avec Nickelodeon, Gameloft, Marvel Rivals et de nombreux autres clients. En savoir plus sur moi

Guides associés