Trier automatiquement les images par rapport d'aspect dans ComfyUI (un interrupteur booléen, de deux façons)

Détectez si chaque image d'un dossier est en paysage ou en portrait et dimensionnez le workflow en conséquence, sans aucun modèle d'IA. Deux versions : un image switch facile à suivre et un number switch plus rapide.

Anton Tenitsky13 octobre 20265 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.

Le node Image Aspect Ratio alimentant un node If else et un affichage montrant 0 pour une image en portrait

Quand vous faites passer tout un dossier d’images dans un workflow, certaines sont en paysage et d’autres en portrait. Redimensionnez-les toutes à une seule forme et la moitié sera écrasée. La solution est un petit morceau de logique qui vérifie l’orientation de chaque image et choisit la bonne taille : un interrupteur booléen, allumé ou éteint, A ou B.

En tant qu’artiste, les booléens étaient un concept nouveau pour moi et il m’a fallu un moment pour les comprendre, ce guide explique donc tout depuis zéro. Il n’utilise aucun modèle d’IA ; c’est de la logique pure, qui fait partie de mon pipeline automatisé de la 3D au concept art plus vaste. Je montre deux versions : une qui commute des images (plus facile à suivre) et une qui commute des nombres (plus rapide).

Une grille de captures d'accessoires de science-fiction, certains larges et d'autres hauts, à côté du workflow de tri
L'entrée : des captures d'accessoires de mon pack de science-fiction, certaines larges, d'autres hautes.

En bref

  • Image Aspect Ratio (WAS Node Suite) renvoie 1 pour le paysage, 0 pour le portrait.
  • Faites-le passer par un node If/else ; le switch ne l’accepte pas directement.
  • Version 1 : redimensionnez chaque image dans les deux sens et laissez un Image Input Switch choisir la bonne.
  • Version 2 : ne commutez que les nombres de largeur et de hauteur, avec deux Number Input Switches. Plus rapide, et celle que j’utilise.
  • Les images carrées ne sont pas gérées ; si toutes les vôtres sont carrées, vous n’en avez pas besoin.

Le départ commun : détecter l’orientation

Les deux versions commencent de la même façon.

  1. Load Image Batch (de la WAS Node Suite) pointe vers un dossier, en mode incremental image, pour que chaque exécution charge l’image suivante et boucle indéfiniment. Pour les tests, j’ai utilisé un dossier de seulement trois images, afin de pouvoir défiler rapidement.
  2. Image Aspect Ratio (également WAS) lit l’image et renvoie is_landscape_bool : 1 si l’image est en paysage, 0 si elle est en portrait. C’est le booléen.
  3. Un node Display Any (de rgthree) affiche la valeur : 1 ou 0. Il ne sert qu’au dépannage, et à montrer aux autres comment cela fonctionne.
  4. Un node If/else transmet la valeur. Vous ne pouvez pas connecter la sortie du rapport d’aspect directement à l’entrée booléenne d’un switch ; passer par If/else le fait fonctionner.
Le node Image Aspect Ratio dont la sortie is_landscape_bool est connectée à un node If else et à un node Display Any affichant 0
Une image en portrait : l'affichage montre 0. Une image en paysage montre 1.
Le node Image Aspect Ratio et sa note explicative dans le workflow
La note dans le workflow : 1 pour le paysage, 0 pour le portrait ; les carrés n'ont pas besoin de switch.

Version 1 : commuter entre des images

La façon la plus facile de voir ce qui se passe.

  1. Redimensionnez chaque image entrante deux fois : une fois à une taille paysage et une fois, de force, à une taille portrait. Utilisez des tailles qui conviennent à Flux et SDXL.
  2. Connectez les deux à un Image Input Switch (WAS) : celle en paysage à image_a, celle en portrait à image_b, et le booléen au switch.
  3. Si le booléen vaut 1 (paysage), le switch renvoie l’image A ; si 0 (portrait), l’image B.
Le node Image Input Switch avec les entrées image_a, image_b et boolean
L'Image Input Switch : vrai choisit l'image A (paysage), faux choisit l'image B (portrait).

Un aperçu après le switch confirme que vous avez obtenu la bonne forme et la bonne taille.

Un aperçu d'une capture en paysage d'un pistolet de science-fiction après le switch
Un accessoire large, un pistolet, passe en paysage…
Un aperçu d'une capture en portrait d'un couteau après le switch
…et un haut, un couteau, en portrait.

La même astuce fonctionne en dehors de la génération d’images. Vous voulez trier des milliers de photos dans un dossier paysage et un dossier portrait ? C’est ce switch avec deux nodes de sauvegarde.

Le hic : chaque image est redimensionnée deux fois et les deux copies sont conservées en mémoire. Cela coûte du temps à chaque exécution, et c’est pourquoi j’ai construit la version 2.

Version 2 : commuter entre des nombres

Au lieu de commuter des images, ne commutez que les tailles. Rien d’inutile n’est gardé en mémoire. Cette version a sa propre courte vidéo : partie 2.

  1. Deux nodes Constant Number contiennent les tailles : 1920 pour le côté long et 1088 pour le côté court.
  2. Deux Number Input Switches (WAS), un pour la largeur et un pour la hauteur, tous deux pilotés par le même booléen.
  3. Paysage (1) : le switch de largeur choisit le nombre A (1920) et le switch de hauteur choisit 1088. Portrait (0) : ils choisissent l’inverse, 1088 de large et 1920 de haut.
  4. La largeur et la hauteur choisies vont au redimensionnement de l’image et continuent dans le reste du workflow.
Deux nodes Constant Number réglés sur 1088 pour le côté court et 1920 pour le côté long
Les deux tailles, 1088 et 1920, entre lesquelles les number switches choisissent.

C’est plus difficile à lire que commuter des images, mais c’est durable, cela ne casse pas, et l’aperçu à la fin montre toujours si cela fonctionne. Cela vous permet de faire passer n’importe quel nombre d’images, redimensionnées à la plus grande taille que SDXL ou Flux gèrent bien dans chaque orientation.

Au-delà des images

Un interrupteur booléen est une brique pour n’importe quoi dans ComfyUI. Vous pouvez commuter selon du texte que vous saisissez, une description ou un prompt. Une fois que le déclic se fait, cela ouvre beaucoup d’automatisation. Si vous connaissez une façon plus efficace de faire cela, j’aimerais l’entendre dans les commentaires de la vidéo.

Ce switch fait partie d’un plus gros pack de workflows sur mon Patreon, avec la configuration de profondeur dans laquelle il s’insère. Cette configuration est expliquée dans du croquis à l’art sur un GPU de 4 Go.

Voir la version vidéo (4:50)

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

Comment ComfyUI sait-il si une image est en paysage ou en portrait ?

Le node Image Aspect Ratio de la WAS Node Suite renvoie un booléen : 1 (vrai) pour le paysage, 0 (faux) pour le portrait. Vous utilisez cette valeur pour commuter entre des images ou des nombres.

Pourquoi ai-je besoin du node If/else ?

La sortie du rapport d'aspect ne peut pas être branchée directement à l'entrée booléenne du switch. La faire passer par un node If/else la convertit en une valeur que le switch accepte.

Et les images carrées ?

Cette configuration ne les gère pas. Si vos images sont carrées, vous n'avez pas besoin du switch.

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