Skip to content
Aidez à Construire une Meilleure Base de Connaissances ComfyUI Devenir Parrain
Aucun article pour le moment. Revenez plus tard !

Noeud ComfyUI WanFunControlToVideo

Noeud ComfyUI WanFunControlToVideo

Ce noeud a été ajouté pour prendre en charge le modèle Wan Fun Control d’Alibaba pour la génération vidéo, et a été ajouté après ce commit.

  • Objectif : Préparer les informations conditionnelles nécessaires à la génération vidéo, en utilisant le modèle Wan 2.1 Fun Control.

Le noeud WanFunControlToVideo est un ajout à ComfyUI conçu pour prendre en charge les modèles Wan Fun Control pour la génération vidéo, visant à utiliser le contrôle WanFun pour la création vidéo.

Ce noeud sert de point de préparation pour les informations conditionnelles essentielles et initialise le point central de l’espace latent, guidant le processus de génération vidéo ultérieur en utilisant le modèle Wan 2.1 Fun. Le nom du noeud indique clairement sa fonction : il accepte diverses entrées et les convertit en un format adapté pour contrôler la génération vidéo dans le cadre de WanFun.

La position du noeud dans la hiérarchie des noeuds ComfyUI indique qu’il opère aux premières étapes du pipeline de génération vidéo, se concentrant sur la manipulation des signaux conditionnels avant l’échantillonnage ou le décodage réel des cadres vidéo.

Analyse détaillée du noeud WanFunControlToVideo

Paramètres d’entrée

Nom du paramètreRequisType de donnéesDescriptionValeur par défaut
positifOuiCONDITIONINGDonnées conditionnelles positives standard de ComfyUI, généralement provenant d’un noeud “CLIP Text Encode”. L’invite positive décrit le contenu, le sujet et le style artistique que l’utilisateur envisage pour la vidéo générée.N/A
négatifOuiCONDITIONINGDonnées conditionnelles négatives standard de ComfyUI, généralement générées par un noeud “CLIP Text Encode”. L’invite négative spécifie les éléments, styles ou artefacts que l’utilisateur souhaite éviter dans la vidéo générée.N/A
vaeOuiVAENécessite un modèle VAE (Autoencodeur Variationnel) compatible avec la famille de modèles Wan 2.1 Fun, utilisé pour encoder et décoder des données image/vidéo.N/A
largeurOuiINTLa largeur souhaitée des cadres vidéo de sortie en pixels, avec une valeur par défaut de 832, une valeur minimale de 16, une valeur maximale déterminée par nodes.MAX_RESOLUTION, et un pas de 16.832
hauteurOuiINTLa hauteur souhaitée des cadres vidéo de sortie en pixels, avec une valeur par défaut de 480, une valeur minimale de 16, une valeur maximale déterminée par nodes.MAX_RESOLUTION, et un pas de 16.480
longueurOuiINTLe nombre total de cadres dans la vidéo générée, avec une valeur par défaut de 81, une valeur minimale de 1, une valeur maximale déterminée par nodes.MAX_RESOLUTION, et un pas de 4.81
taille_du_lotOuiINTLe nombre de vidéos générées dans un seul lot, avec une valeur par défaut de 1, une valeur minimale de 1, et une valeur maximale de 4096.1
clip_vision_outputNonCLIP_VISION_OUTPUT(Optionnel) Caractéristiques visuelles extraites par un modèle de vision CLIP, permettant une guidance de style et de contenu visuel.Aucun
start_imageNonIMAGE(Optionnel) Une image initiale qui influence le début de la vidéo générée.Aucun
control_videoNonIMAGE(Optionnel) Permet aux utilisateurs de fournir une vidéo de référence prétraitée par ControlNet qui guidera le mouvement et la structure potentielle de la vidéo générée.Aucun

Paramètres de sortie

Nom du paramètreType de donnéesDescription
positifCONDITIONINGFournit des données conditionnelles positives améliorées, y compris l’image start_image et control_video encodées.
négatifCONDITIONINGFournit des données conditionnelles négatives qui ont également été améliorées, contenant la même concat_latent_image.
latentLATENTUn dictionnaire contenant un tenseur latent vide avec la clé “samples”.

Exemple de flux de travail du noeud

Veuillez visiter Exemple de flux de travail du noeud Wan Fun Control pour comprendre comment ComfyUI prend en charge nativement les modèles Wan Fun Control.

Code source du noeud

Code source du noeud, version du code 3661c833bcc41b788a7c9f0e7bc48524f8ee5f82

class WanFunControlToVideo:
    @classmethod
    def INPUT_TYPES(s):
        return {"required": {"positive": ("CONDITIONING", ),
                             "negative": ("CONDITIONING", ),
                             "vae": ("VAE", ),
                             "width": ("INT", {"default": 832, "min": 16, "max": nodes.MAX_RESOLUTION, "step": 16}),
                             "height": ("INT", {"default": 480, "min": 16, "max": nodes.MAX_RESOLUTION, "step": 16}),
                             "length": ("INT", {"default": 81, "min": 1, "max": nodes.MAX_RESOLUTION, "step": 4}),
                             "batch_size": ("INT", {"default": 1, "min": 1, "max": 4096}),
                },
                "optional": {"clip_vision_output": ("CLIP_VISION_OUTPUT", ),
                             "start_image": ("IMAGE", ),
                             "control_video": ("IMAGE", ),
                }}
 
    RETURN_TYPES = ("CONDITIONING", "CONDITIONING", "LATENT")
    RETURN_NAMES = ("positive", "negative", "latent")
    FUNCTION = "encode"
 
    CATEGORY = "conditioning/video_models"
 
    def encode(self, positive, negative, vae, width, height, length, batch_size, start_image=None, clip_vision_output=None, control_video=None):
        latent = torch.zeros([batch_size, 16, ((length - 1) // 4) + 1, height // 8, width // 8], device=comfy.model_management.intermediate_device())
        concat_latent = torch.zeros([batch_size, 16, ((length - 1) // 4) + 1, height // 8, width // 8], device=comfy.model_management.intermediate_device())
        concat_latent = comfy.latent_formats.Wan21().process_out(concat_latent)
        concat_latent = concat_latent.repeat(1, 2, 1, 1, 1)
 
        if start_image is not None:
            start_image = comfy.utils.common_upscale(start_image[:length].movedim(-1, 1), width, height, "bilinear", "center").movedim(1, -1)
            concat_latent_image = vae.encode(start_image[:, :, :, :3])
            concat_latent[:,16:,:concat_latent_image.shape[2]] = concat_latent_image[:,:,:concat_latent.shape[2]]
 
        if control_video is not None:
            control_video = comfy.utils.common_upscale(control_video[:length].movedim(-1, 1), width, height, "bilinear", "center").movedim(1, -1)
            concat_latent_image = vae.encode(control_video[:, :, :, :3])
            concat_latent[:,:16,:concat_latent_image.shape[2]] = concat_latent_image[:,:,:concat_latent.shape[2]]
 
        positive = node_helpers.conditioning_set_values(positive, {"concat_latent_image": concat_latent})
        negative = node_helpers.conditioning_set_values(negative, {"concat_latent_image": concat_latent})
 
        if clip_vision_output is not None:
            positive = node_helpers.conditioning_set_values(positive, {"clip_vision_output": clip_vision_output})
            negative = node_helpers.conditioning_set_values(negative, {"clip_vision_output": clip_vision_output})
 
        out_latent = {}
        out_latent["samples"] = latent
        return (positive, negative, out_latent)

Analyse de la fonction encode

La fonction encode dans le nœud WanFunControlToVideo est responsable de la conversion des paramètres d’entrée en informations de conditionnement et en espace latent qui seront utilisées par les modèles de génération vidéo suivants.

La fonction commence par initialiser un tenseur latent vide nommé latent avec une forme spécifique : [batch_size, 16, ((length - 1) // 4) + 1, height // 8, width // 8]. Ce tenseur est placé sur comfy.model_management.intermediate_device(), généralement le GPU disponible. Ensuite, un autre tenseur latent concat_latent est initialisé avec la même forme que latent, utilisé pour stocker les informations codées des entrées optionnelles start_image et control_video.

Après avoir traité les entrées visuelles optionnelles, le tenseur concat_latent contient maintenant les informations codées de start_image et control_video (si fourni) et est ajouté aux informations de conditionnement positives et négatives sous la clé “concat_latent_image” en utilisant la fonction node_helpers.conditioning_set_values.

Enfin, la fonction vérifie si clip_vision_output est fourni. Si c’est le cas, il est également ajouté aux conditionnements positifs et négatifs sous la clé “clip_vision_output”. Cela permet aux caractéristiques visuelles extraites par le modèle CLIP de peaufiner davantage le processus de génération.

Contenu supplémentaire lié à Wan Fun Control

WanFun Control est principalement utilisé avec la famille de modèles Wan 2.1. La méthode s’inspire de ControlNet, une technique puissante largement utilisée dans la génération d’images pour moduler la sortie à travers diverses entrées spatiales et structurelles. WanFun Control étend ces principes au domaine temporel de la vidéo, permettant aux utilisateurs d’obtenir un haut degré d’influence sur le contenu vidéo généré, dépassant les limitations des méthodes uniquement basées sur du texte. Il utilise des informations visuelles extraites des vidéos d’entrée (telles que des cartes de profondeur, des contours de bord (Canny) ou des poses humaines (OpenPose)) pour faciliter la création de vidéos contrôlées.

La famille de modèles Wan 2.1 est la base de WanFun Control, offrant différentes variantes de paramètres, y compris les modèles 1.3B et 14B, fournissant aux utilisateurs des options pour équilibrer les ressources informatiques avec la qualité et la complexité de sortie souhaitées.

Le concept de base de WanFun Control consiste à utiliser des indices visuels d’une vidéo de référence pour guider le processus créatif de l’IA. Les utilisateurs peuvent fournir une “vidéo de contrôle” qui incarne le mouvement ou l’agencement spatial souhaité, plutôt que de se fier uniquement aux invites textuelles pour déterminer le mouvement, la structure et le style de la vidéo générée. Cela permet de créer des vidéos avec des caractéristiques spécifiques de manière plus directe et intuitive. Par exemple, un utilisateur peut fournir une vidéo d’une personne marchant, et le système WanFun Control générera une nouvelle vidéo d’un sujet différent effectuant le même mouvement de marche, tout en respectant l’invite textuelle concernant l’apparence du sujet et la scène générale. Cette approche structurée de la génération vidéo, combinant des données visuelles avec des descriptions textuelles, conduit à des sorties avec une précision de mouvement plus élevée, des effets de stylisation améliorés et la capacité d’atteindre des transformations visuelles plus intentionnelles.

Modèles et dépôts de code associés