Vous aimez ce nœud ? Offre-moi un café !
Commencer? Téléchargez le flux de travail de test ci-dessous et voyez comment il fonctionne.
Des problèmes ? Accédez à la journalisation et au débogage
Idées sur la façon d'améliorer les nœuds (ou rapports de bugs) - soulever un problème
Prise sans vergogne pour mes autres nœuds -> Consultez Image Picker pour une autre façon de rendre certains flux de travail plus fluides. Et laissez une étoile si vous aimez quelque chose !
Ce flux de travail utilise les cinq nœuds et peut être utilisé pour tester (et comprendre !) les nœuds. Vous ne le construiriez pas comme ça, c'est juste un exemple... | Voici une image avec le flux de travail dans |
---|---|
Ou le workflow en json
Il existe certaines situations auxquelles les nœuds UE ne peuvent pas faire face actuellement. En voici quelques-uns que je connais et des solutions de contournement possibles.
Les nœuds personnalisés pythonsssss sont excellents, mais leur utilisation avec les nœuds UE présente certaines limites. En particulier, vous ne pouvez pas alimenter la sortie d'un nœud de texte prédéfini directement dans un nœud UE (voir #154).
Les nœuds UE fonctionnent principalement avec des nœuds de groupe. Mais il y a quelques choses importantes à noter :
5.0 (6 août 2024)
4.9 (2 mai 2024)
4.8 (18 mars 2024)
send to unmatched
4.7 (1er mars 2024)
Anything Everywhere?
nœuds4.6
Anything Everywhere?
nœud4.5
convert to real links
4.4
Anything Everywhere?
nœud avec entrées (ne fonctionne que si le lien provient d'un nœud qui est une simple source de chaîne)4.3
4.2
4.1.2
4.1.1
4.1
Les nœuds v1 ont été entièrement supprimés. Si vous en utilisiez un, vous pouvez simplement le remplacer par un nœud Anything Everywhere
.
Utilisez Comfy Manager. Si vous voulez vraiment le faire manuellement, clonez simplement ce référentiel dans votre répertoire custom_nodes.
Le nœud Anything Everywhere
a une seule entrée, initialement intitulée « n'importe quoi ». Connectez-y n'importe quoi (directement - pas via une redirection) et le nom de l'entrée change pour correspondre au type d'entrée. Déconnectez-vous et cela revient à « n’importe quoi ».
Lorsque vous exécutez l'invite, toute entrée non connectée, n'importe où dans le flux de travail, qui correspond à ce type, agira comme si elle était connectée à la même entrée.
Pour visualiser à quoi il est connecté, cliquez avec le bouton droit sur le canevas d'arrière-plan et sélectionnez Toggle UE Link Visibility
.
Ce nœud ajoute deux widgets - title_regex et input_regex. Il n’enverra qu’aux entrées qui correspondent. Ainsi, dans l'exemple, title_regex est « Aperçu », donc l'image est envoyée au nœud Aperçu de l'image mais pas au nœud Enregistrer l'image. Notez que vous pouvez renommer les titres des nœuds et des entrées, ce qui peut aider !
(À partir de la version 4.6, vous pouvez également spécifier une expression régulière de groupe pour faire correspondre uniquement les entrées sur les nœuds qui se trouvent dans des groupes qui correspondent à l'expression régulière.)
Les correspondances sont des expressions régulières et non des correspondances de chaînes. La plupart des chaînes simples fonctionneront (correspondant à n'importe quelle partie du titre ou du nom de l'entrée), mais certains caractères ont des significations particulières (y compris diverses sortes de crochets, ^, $, / et . en particulier), alors évitez-les si vous ne l'êtes pas. enclin aux regex.
L'utilisation de regex signifie que vous pouvez utiliser ^prompt
pour faire correspondre prompt
au début du titre uniquement, pour éviter de correspondre à negative_prompt
.
Regex 101 - ^
signifie « le début », $
signifie « la fin », .
correspond à n'importe quel caractère, .*
correspond à tout ce qui a n'importe quelle longueur (y compris zéro). Pour plus que cela, visitez regex101 (la version que vous souhaitez est ECMAScript, même si cela n'a probablement pas d'importance).
Sorte de.
Étant donné que l'expression régulière doit être connue avant que le flux de travail ne soit soumis (afin de calculer les liens), vous ne pouvez pas transmettre de chaîne dans Anything Everywhere?
nœud et attendez-vous à ce qu’il fonctionne. La seule chose qui est prise en charge est si l'entrée provient directement d'un nœud qui la définit avec un widget de chaîne. Le nœud Simple String
inclus dans ce pack fonctionnera.
Cela fonctionne | Ce n'est pas le cas. Et cela ne le sera jamais. |
---|---|
Seed Everywhere se connecte à n'importe quelle entrée INT non connectée avec seed
dans le nom de l'entrée (seed, noise_seed, etc.), et possède la fonctionnalité control_after_generate. Ainsi, si vous convertissez les widgets de départ en entrées, vous pouvez utiliser la même graine partout.
En réalité, seulement trois nœuds Anything Everywhere
regroupés ensemble. Conçu pour les sorties de Checkpoint Loader.
Prompt Everywhere a deux entrées. Ils seront envoyés avec des règles de correspondance d'expressions régulières de (^prompt|^positive)
et neg
respectivement. Ceux-ci doivent correspondre aux différentes versions de noms utilisés pour les invites et les invites ou conditionnements négatifs.
cordes | conditionnements |
---|---|
Les nœuds UE ne fonctionnent pas avec les primitives et les COMBO (le type de données utilisé pour les listes déroulantes, qui sont également un type de primitive dans Comfy). Il est peu probable qu’ils le fassent un jour.
Si vous souhaitez utiliser UE pour contrôler l'échantillonneur ou le sigma, vous pouvez le faire avec les nœuds SamplerCustom
intégrés :
Pour en savoir plus, voir cette discussion
Faites un clic droit sur un nœud et vous pouvez le configurer pour rejeter les liens UE
Si vous souhaitez voir les liens UE, vous pouvez les activer et les désactiver en cliquant avec le bouton droit sur le canevas. Pour un contrôle plus précis, le menu des paramètres principal propose des options pour afficher les liens lorsque la souris se déplace sur le nœud à l'une ou l'autre extrémité, ou lorsque l'un de ces nœuds est sélectionné.
Les liens peuvent être animés pour les distinguer des liens normaux. Cette animation peut prendre la forme de points mobiles, d'une lueur pulsée, ou les deux. Cela peut avoir un impact sur les performances dans certains cas. Notez que l'animation par impulsion nécessite moins de traitement que les points en mouvement. Contrôlez cela dans le menu des paramètres principaux.
Par défaut, les animations se désactivent lorsque le flux de travail est en cours d'exécution pour minimiser l'impact sur le CPU/GPU - vous pouvez également modifier cela dans les paramètres.
Si vous souhaitez partager un workflow sans avoir besoin de nœuds UE, ou enregistrer une version API d'un workflow, vous pouvez remplacer les liens virtuels créés par les nœuds UE par des liens réels (et supprimer les nœuds UE).
Cela peut être fait pour un seul nœud en cliquant dessus avec le bouton droit et en sélectionnant Convert to real links
, ou pour tous les nœuds UE d'un flux de travail en cliquant avec le bouton droit sur l'arrière-plan et en sélectionnant Convert all UEs to real links
.
Maj-cliquez sur un nœud de sortie et faites glisser puis relâchez pour obtenir un menu de création automatique. Cela remplace le comportement par défaut (qui vous donne un champ de recherche), vous pouvez donc le désactiver avec le paramètre Anything Everywhere replace search
.
Les nœuds UE peuvent être limités pour envoyer uniquement aux nœuds de la même couleur, ou uniquement aux nœuds qui ne sont pas de la même couleur.
Ils peuvent également être limités à l'envoi uniquement aux nœuds du même groupe (n'importe quel groupe en commun), ou uniquement aux nœuds qui ne font pas partie du même groupe.
Cliquez avec le bouton droit sur le nœud et sélectionnez Group restrictions
ou Color restrictions
. Les nœuds UE qui sont restreints (dans l’un ou dans les deux sens) ont un cercle vert dans le coin supérieur gauche.
Les nœuds Highway de Trung 0246 sont un moyen plutôt intéressant de transmettre des données. Vous pouvez les cibler avec un Anything Everywhere?
nœud en utilisant un input_regex
qui correspond au nom de l'entrée non connectée avec le « + », comme ceci :
C'est nouveau, alors veuillez signaler tout problème !
Par défaut, les flux de travail sont vérifiés pour les boucles avant d'être soumis (car l'UE peut les introduire et une boucle entraîne un mauvais résultat Python). Si une boucle est détectée, vous recevrez un avertissement JavaScript vous indiquant les identifiants de nœud impliqués. Cependant, surtout si d'autres nœuds personnalisés sont impliqués, il est possible que la vérification manque une boucle ou en signale une qui n'est pas réelle.
Si vous recevez un avertissement et ne pensez pas qu'il y a une boucle (après avoir vérifié les identifiants de nœuds répertoriés !), vous pouvez désactiver la vérification des boucles dans le menu des paramètres principaux. Si quelque chose signalé comme boucle fonctionne correctement, veuillez soulever un problème et inclure le flux de travail dans le rapport (enregistrez le json et compressez-le, car GitHub n'accepte pas les fichiers .json). De même si une boucle n'est pas attrapée.
J'ai écrit du code pour le backend principal de Comfy afin d'attraper les boucles, peut-être qu'il sera inclus - PR pour ComfyUI - ou peut-être qu'ils ont un autre plan.
S'il y a plus d'un nœud émetteur qui correspond à une entrée, la règle de base est que le nœud le plus spécifique gagne. L'ordre des priorités est le suivant :
Anything Everywhere?
Seed Everywhere
et Prompts Everywhere
Anything Everywhere
Anything Everywhere3
Pour les nœuds de même heure, ceux avec des restrictions de couleur et des restrictions de groupe sont prioritaires (couleur+groupe > couleur > groupe > aucun).
Si deux nœuds avec la même priorité correspondent, aucun ne se connectera - mieux vaut échouer rapidement que d'avoir un résultat ambigu. S'il y a des correspondances ambiguës, vous pouvez les afficher en utilisant Show UE broadcast clashes
(clic droit sur l'arrière-plan - l'option n'apparaît qu'en cas de conflits).
Les nœuds qui n'ont qu'une seule sortie peuvent également obtenir une zone de texte indiquant exactement ce qui est passé par le nœud. Vous devez l'activer si vous le souhaitez - c'est dans les paramètres principaux, « Détails du nœud Anything Everywhere ».
La console JavaScript (appuyez sur f12 dans certains navigateurs) contient des informations de journalisation sur ce qui est connecté. Vous pouvez modifier le niveau de détail en recherchant le fichier [comfy_install]/custom_nodes/cg-use-everywhere/js/use_everywhre_utilities.js
et en haut en trouvant ce bit :
static ERROR = 0 ; // actual errors
static PROBLEM = 1 ; // things that stop the workflow working
static INFORMATION = 2 ; // record of good things
static DETAIL = 3 ; // details
static LEVEL = Logger . PROBLEM ;
static TRACE = false ; // most of the method calls
Changez le LEVEL
en Logger.INFORMATION
pour plus, ou Logger.DETAIL
pour encore plus ; définissez TRACE
sur true
pour d'autres informations de débogage.
Si vous rencontrez un problème, appuyer sur f12 pour voir la console JavaScript peut souvent aider. Les étapes suivantes sont très utiles pour rédiger un bon rapport de bug :
L'autre chose qui vaut la peine d'être essayée est d'effacer tout le javascript du nœud personnalisé à partir duquel il est copié au démarrage de ComfyUI :
core
. Quitter core
(c'est des trucs ComfyUI)Si vous trouvez un bug, veuillez soulever un problème - si vous pouvez inclure le flux de travail, c'est d'une grande aide (vous devrez l'enregistrer au format .txt ou compresser le fichier .json, car GitHub n'accepte pas .json) .
Contourner et désactiver les nœuds fonctionne, mais avec un problème. Si vous avez un nœud UE qui correspond ( Anything Everywhere?
et Prompt Everywhere
) et que vous contournez le nœud auquel il correspond, le lien ne sera pas établi. Donc
Si vous utilisez un ? nœud à envoyer à un nœud... | ...et contourne le destinataire, il ne se connecte pas |
---|---|
Il est peu probable que cela soit résolu, mais cela devrait être assez facile à éviter !