Contexte technique
Lors de l'utilisation de ComfyUI avec des nœuds personnalisés comme SeedVR2 Video Upscaler, une erreur Python de type TypeError peut survenir lors de l'exécution. Le message d'erreur typique est :
TypeError: SeedVR2.execute() got an unexpected keyword argument 'extra_args'
Ce problème résulte d'une incompatibilité entre les mises à jour du noyau de ComfyUI et le code des plugins tiers. ComfyUI évolue fréquemment pour introduire de nouvelles fonctionnalités, comme le support de configurations avancées, ce qui modifie les appels de fonctions.
Analyse de l'erreur
Le message unexpected keyword argument indique qu'une fonction reçoit un paramètre nommé non défini dans sa signature. Dans ComfyUI, le moteur d'exécution (execution.py) passe désormais un dictionnaire extra_args aux méthodes execute des nœuds, pour transmettre des contextes supplémentaires tels que les paramètres d'échantillonnage.
Les nœuds personnalisés plus anciens définissent souvent execute avec une liste de paramètres fixe, sans prévoir cette extensibilité. Par exemple :
def execute(self, image_data, model_ref, seed_val, target_res, cfg_weight, batch_num, vram_save, temporal_shift, verbose_mode, custom_config=None):
# Logique interne
pass
Lorsque ComfyUI appelle cette fonction avec extra_args={...}, Python déclenche une erreur car le paramètre n'est pas reconnu.
Localisation du fichier fautif
La pile d'rereurs (Traceback) identifie le fichier problématique. Par exemple :
File "/chemin/vers/custom_nodes/VotrePlugin/src/interfaces/comfyui_node.py", line 106, in execute
result = fonction_traitement(**inputs)
Le fichier comfyui_node.py ou équivalent contient la méthode execute à modifier.
Solution universelle : utilisation de **kwargs
La correction repose sur le mécanisme Python des arguments de mots-clés variables (**kwargs). En ajoutant **kwargs à la fin de la liste des paramètres, la fonction accepte tout paramètre supplémentaire sans erreur, les encapsulant dans un dictionnaire.
Étapes de modification
Étape 1 : Ouvrir le fichier cible
Accédez au fichier Python du nœud, par exemple custom_nodes/MonPlugin/src/interfaces/comfyui_node.py, avec un éditeur de texte.
Étape 2 : Repérer la méthode execute
Recherchez la définition de def execute. Vous pourriez trouver :
# Avant modification : paramètres statiques
def execute(self, image_data, model_ref, seed_val, target_res, cfg_weight, batch_num, vram_save, temporal_shift, verbose_mode, custom_config=None):
# Code interne inchangé
traitement_images()
return result
Étape 3 : Ajouter **kwargs
Modifiez la signature en insérant **kwargs après le dernier paramètre, en supprimant toute valeur par défaut associée à ce paramètre si nécessaire. Assurez-vous qu'une virgule sépare les éléments.
# Après modification : acceptation des arguments supplémentaires
def execute(self, image_data, model_ref, seed_val, target_res, cfg_weight, batch_num, vram_save, temporal_shift, verbose_mode, custom_config, **kwargs):
# La logique interne reste identique
# kwargs peut contenir {'extra_args': {...}} mais n'est pas utilisé ici
traitement_images()
return result
Notes importantes :
- Ne pas ajouter
=Noneà**kwargs, car cela provoquerait une syntaxe incorrecte. - Le corps de la fonction peut ignorer
kwargss'il n'est pas nécessaire pour la logique métier.
Étape 4 : Sauvegarde et redémarrage
Enregistrez le fichier, fermez complètement l'instance de ComfyUI, puis relancez-le. Les modifications Python ne sont chargées qu'au démarrage.
Validation
Après redémarrage, exécutez à nouveau le workflow. Si l'erreur unexpected keyword argument disparaît et que le processus avance, la correction est réussie. D'autres erreurs (comme un modèle manquant) peuvent survenir indépendamment de cette solusion.
Cette approche garantit une compatibilité ascendante pour les nœuds personnalisés face aux évolutions de ComfyUI. La pratique recommandée consiste à inclure systématiquement **kwargs dans les signatures des méthodes execute pour anticiper les changements futurs du noyau.