Résolution de l'erreur 'unexpected keyword argument 'extra_args'' pour les nœuds personnalisés dans ComfyUI

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 kwargs s'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.

Étiquettes: ComfyUI Python TypeError kwargs SeedVR2

Publié le 14 juin à 22h44