Skip to content
より良い ComfyUI ナレッジベースの構築を支援する サポーターになる

ComfyUI WanFunControlToVideoノード

ComfyUI WanFunControlToVideoノード

このノードは、AlibabaのWan Fun Controlモデルをサポートするために追加され、このコミットの後に追加されました。

  • 目的: Wan 2.1 Fun Controlモデルを使用して、ビデオ生成に必要な条件情報を準備します。

WanFunControlToVideoノードは、ビデオ生成のためのWan Fun Controlモデルをサポートするように設計されたComfyUIの追加機能であり、ビデオ作成のためにWanFun制御を利用することを目的としています。

このノードは、重要な条件情報の準備ポイントとして機能し、潜在空間の中心点を初期化し、Wan 2.1 Funモデルを使用して次のビデオ生成プロセスをガイドします。ノードの名前はその機能を明確に示しており、さまざまな入力を受け入れ、それらをWanFunフレームワーク内でビデオ生成を制御するための適切な形式に変換します。

ノードのComfyUIノード階層内での位置は、ビデオ生成パイプラインの初期段階で動作し、実際のサンプリングやビデオフレームのデコードの前に条件信号を操作することに焦点を当てていることを示しています。

WanFunControlToVideoノードの詳細分析

入力パラメータ

パラメータ名必須データ型説明デフォルト値
positiveはいCONDITIONING標準のComfyUIのポジティブ条件データで、通常は「CLIP Text Encode」ノードから取得されます。ポジティブプロンプトは、生成されるビデオの内容、主題、芸術スタイルをユーザーが想像するものを説明します。N/A
negativeはいCONDITIONING標準のComfyUIのネガティブ条件データで、通常は「CLIP Text Encode」ノードによって生成されます。ネガティブプロンプトは、ユーザーが生成されるビデオで避けたい要素、スタイル、またはアーティファクトを指定します。N/A
vaeはいVAEWan 2.1 Funモデルファミリーと互換性のあるVAE(変分オートエンコーダ)モデルが必要で、画像/ビデオデータのエンコードとデコードに使用されます。N/A
widthはいINT出力ビデオフレームの希望幅(ピクセル単位)で、デフォルト値は832、最小値は16、最大値はnodes.MAX_RESOLUTIONによって決定され、ステップサイズは16です。832
heightはいINT出力ビデオフレームの希望高さ(ピクセル単位)で、デフォルト値は480、最小値は16、最大値はnodes.MAX_RESOLUTIONによって決定され、ステップサイズは16です。480
lengthはいINT生成されるビデオの総フレーム数で、デフォルト値は81、最小値は1、最大値はnodes.MAX_RESOLUTIONによって決定され、ステップサイズは4です。81
batch_sizeはいINT一度に生成されるビデオの数で、デフォルト値は1、最小値は1、最大値は4096です。1
clip_vision_outputいいえCLIP_VISION_OUTPUT(オプション)CLIPビジョンモデルによって抽出された視覚的特徴で、視覚スタイルとコンテンツのガイダンスを可能にします。なし
start_imageいいえIMAGE(オプション)生成されるビデオの開始に影響を与える初期画像です。なし
control_videoいいえIMAGE(オプション)ユーザーが生成されるビデオの動きと潜在的な構造をガイドするために提供する前処理されたControlNet参照ビデオを提供できるようにします。なし

出力パラメータ

パラメータ名データ型説明
positiveCONDITIONINGエンコードされたstart_imageとcontrol_videoを含む、強化されたポジティブ条件データを提供します。
negativeCONDITIONING同様に強化されたネガティブ条件データを提供し、同じconcat_latent_imageを含みます。
latentLATENTキー「samples」を持つ空の潜在テンソルを含む辞書です。

ノードの例ワークフロー

Wan Fun Controlノードの例ワークフローを訪れて、ComfyUIがどのようにWan Fun Controlモデルをネイティブにサポートしているかを理解してください。

ノードソースコード

ノードソースコード、コードバージョン 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)

エンコード関数の分析

WanFunControlToVideoノードのエンコード関数は、入力パラメータを条件情報と潜在空間に変換し、次のビデオ生成モデルで使用される役割を担っています。

この関数は、最初に特定の形状を持つ空の潜在テンソル「latent」を初期化します:[batch_size, 16, ((length - 1) // 4) + 1, height // 8, width // 8]。このテンソルは、通常は利用可能なGPUであるcomfy.model_management.intermediate_device()に配置されます。次に、同じ形状の別の潜在テンソル「concat_latent」が初期化され、オプションのstart_imageおよびcontrol_video入力からのエンコード情報を格納するために使用されます。

オプションの視覚入力を処理した後、concat_latentテンソルには、start_imageおよびcontrol_video(提供されている場合)からのエンコード情報が含まれ、「concat_latent_image」キーの下で正の条件情報と負の条件情報の両方に追加されます。

最後に、関数はclip_vision_outputが提供されているかどうかを確認します。提供されている場合、それも「clip_vision_output」キーの下で正の条件と負の条件の両方に追加されます。これにより、CLIPモデルによって抽出された視覚的特徴が生成プロセスをさらに洗練させることができます。

追加のWan Fun Control関連コンテンツ

WanFun Controlは主にWan 2.1モデルファミリーで使用されます。この手法は、出力をさまざまな空間的および構造的入力を通じて調整するために広く使用されている強力な技術であるControlNetに触発されています。WanFun Controlは、これらの原則をビデオの時間的領域に拡張し、ユーザーが生成されたビデオコンテンツに対して高い影響力を持つことを可能にし、純粋にテキスト駆動の手法の限界を超えます。これは、入力ビデオから抽出された視覚情報(深度マップ、エッジ輪郭(Canny)、または人間のポーズ(OpenPose)など)を利用して、制御されたビデオの作成を促進します。

Wan 2.1モデルファミリーはWanFun Controlの基盤であり、1.3Bおよび14Bモデルを含むさまざまなパラメータのバリエーションを提供し、ユーザーが計算リソースと望ましい出力品質および複雑さのバランスを取るオプションを提供します。

WanFun Controlの基本的な概念は、参照ビデオからの視覚的手がかりを利用してAIの創造的プロセスを導くことです。ユーザーは、生成されるビデオの動きや空間的配置を具現化する「制御ビデオ」を提供でき、生成されるビデオの動き、構造、スタイルを決定するためにテキストプロンプトのみに依存するのではなくなります。これにより、特定の特徴を持つビデオをより直接的かつ直感的に作成することが可能になります。たとえば、ユーザーが歩いている人のビデオを提供すると、WanFun Controlシステムは、同じ歩行動作を行う異なる被写体の新しいビデオを生成し、被写体の外観と全体のシーンに関するテキストプロンプトに従います。この視覚データとテキスト記述を組み合わせた構造化されたビデオ生成アプローチは、より高い動きの精度、改善されたスタイライズ効果、およびより意図的な視覚変換を実現する出力をもたらします。

関連モデルとコードリポジトリ