見出し画像

【ComfyUI】AnimateDiff環境を作って動画を作ってみたい!【環境構築】

■記事の対象ユーザ

1.ComfyUI環境を構築してイラストを生成している
2.ComfyUI×AnimateDiffで動画も作ってみたい
3.参考記事はメモってるけど敷居が高くて中々手が出せない・・・

この記事を書くまでの

■ようするに?
ComfyUIのAnimateDiff環境を作って、サンプル動かしてみる記事だよ

サンプルでこんな感じのができます

はじめに

記事作成にあたり参考にさせていただきました。先人ありがてぇ・・・。

ただ、Alone1Mさんの9月の記事から見ると、
新しいカスタムノード「AnimateDiff Evolved」の登場(2023/12)
新しいモーションモジュールのリリース(2023/9~12)
等があったので、その辺りをアップデートしていく感じで書いていくよ。

事前準備

1.カスタムノードのインストール

インストールしただけのComfyUIにはAnimateDiffが取り扱えないから
カスタムノードを使ってパワーアップする必要があるよ。
「Comfy UI Manager」が導入済みの前提で話をするね。

Managerを開いて
ここからカスタムノードの検索+インストールができるよ

まずはComfyUIのAnimateDiff拡張をインストールしてね

AnimateDiff Evolved  (2023/12にリリースされた新しいもの)

そして「AnimateDiff Evolved」のREADMEを読むと、他に入れるべき
推奨カスタムノードが書いてあるのでそれらもインストールするよ。

日本語翻訳してるよ

・ComfyUI_FizzNodes
・ComfyUI-Advanced-ControlNet
・ComfyUI-VideoHelperSuite
・comfyui_controlnet_aux

ComfyUI_FizzNodes
ComfyUI-Advanced-ControlNet
ComfyUI-VideoHelperSuite
comfyui_controlnet_aux

installしたら再起動しないと反映されないので
ComfyUI Managerの「RESTART」ボタンを押すか、再起動しようね。

君はボタンを押してもよいし再起動を試してもよい

2.アニメーション用モジュールの配置

2023/9時点ではAnimateDiffで使うモーションモジュールは
「AnimateDiff motion module」 だけだったみたいだけど、2024/1現在ではいくつか増えている感じなので比較のためにもそれぞれ入手してくるよ。

■ AnimateDiff motion module (2023/7 リリース)
■ AnimateDiff motion module v2 (2023/9 リリース)
■ AnimateDiff SDXL-Beta (2023/11 リリース)
■ AnimateDiff motion module v3 (2023/12 リリース)
githubのREADMEにあるLinkからckptファイルをそれぞれDLしてきてね


■ AD_Stabilized_Motion (2023/9リリース)
実験的モジュール。公式のv1ベースに調整したものらしいよ。
公式モジュールの安定化を図ったもので、安定するけど動きが減るHighバージョンと中間くらいのMidバージョンがあるよ


■ beta_testing_models (2023/9末リリース)
AD_Stabilized_Motionと同じ人が公式のv2ベースに調整したテスト版。


■ TemporalDiff (2023/10リリース)
公式のモーションモジュールを一貫性の向上を目指して調整したものらしいよ。リリース時期的にv1かv2がベースなのかな?


■ Improved Humans Motion Module (2023/10リリース)
こちらも公式のv2ベースで、主に人間の動きの一貫性向上のため調整されたものみたいです。


ダウンロードが完了したら所定の位置に配置しようね。
v2で実装されたモーションLoRAは別フォルダが用意されているよ。

モーションモジュールはこっちで
モーションLoRAはこっちね

3.xformersの無効化

Alone1Mさんが9月に追記してますが、2024/1時点でも対応されていない様子なので、起動バッチを書き換えてxformersを使わないようにするよ。
書き換えちゃうと通常使う時に戻すのが面倒だから別batとして作るね。

コピーして適当にリネーム

1行目の末尾に「--use-pytorch-cross-attention」を追記して保存するよ。

.\python_embeded\python.exe -s ComfyUI\main.py --windows-standalone-build --use-pytorch-cross-attention
pause

動かしてみる

ComfyUI-AnimateDiff-Evolvedのgithubに行くと沢山のハウツーと
配布用のワークフローがあるからそれを使ってみるね。
事前準備で入れたカスタムノードが揃っていれば読み込みでエラーはでない(はず)よ。

1.txt2img

まずは一番上にあるtxt2imgから試してみるね。

桜の下の女の子のアニメーションが出来るみたいね

githubからワークフローのpngファイルをダウンロードしてComfyUIに入れ
いっけぇぇ!マグナ・・・「Queue Prompt」!!

ファッ!?

エラー!!
Prompt outputs failed validation
CheckpointLoaderSimple:
- Value not in list: ckpt_name: 'cardosAnime_v20.safetensors' not in ['counterfeitV30_v30.safetensors']

なんだ、ワークフローで設定されているモデル「cardosAnime_v20」が
私の環境にないから怒られただけか・・・、驚かせやがって・・・!

モデルを自分の環境のに設定しなおして再実行・・・、あれ、終わったよね?ComfyUI上で最後まで行ったしコマンドラインの方も終わっているように見えるけど・・・

ちゃんと23.61秒で終わってるよね?

→ComfyUI上には表示されないだけでしたごめんなさい。

ちゃんとoutputに保存されてました

出来上がりがこちら

キャーすごーい

2.OpenPoseを使ったサンプル

一番下のOpenPose使ったサンプルも動かしてみるよ。

Oh…複雑

ワークフローのpngを読み込ませ・・・oops!またエラーだクソったれ!
→結構重たかったから末尾のトラブルシューティングに記載したよ。
もしここでダメだったらそちらを参照してみてね。


(エラーは解決した?続きいくね)

このワークフローではOpenPoseに使う棒人間の画像を読み込ませる必要があって、ワークフロー左側にある「Load Images (Upload)」に画像を置いてあるフォルダを指定する必要があるよ。

フォルダの中に入れる棒人間の画像だけど、公式githubにサンプルがあるからとってこようね。

!?こんなところにもtoyxyzさんが!?

この画像、アニメーションGIF形式でダウンロードされるんだけど
このワークフローに食べさせるには1枚1枚の画像に分割する必要があるよ。

なので、ScreenToGifとかのフリーソフトとかで分割しようね。

ScreenToGifだと画像を読み込ませれば、
下の画像右クリック→フォルダーを表示で分割された画像が取り出せるよ

開いたフォルダに48枚のpngが収まってるよ

画像の入ったフォルダを選択してないとこんな感じのエラーが出ているはずなので、このエラー出てたら画像のフォルダの指定方法を確認してね。

ERROR:root:!!! Exception during processing !!!
ERROR:root:Traceback (most recent call last):
  File "I:\tools\ComfyUI_windows_portable_nvidia_cu121_or_cpu\ComfyUI_windows_portable\ComfyUI\execution.py", line 153, in recursive_execute
    output_data, output_ui = get_output_data(obj, input_data_all)
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "I:\tools\ComfyUI_windows_portable_nvidia_cu121_or_cpu\ComfyUI_windows_portable\ComfyUI\execution.py", line 83, in get_output_data
    return_values = map_node_over_list(obj, input_data_all, obj.FUNCTION, allow_interrupt=True)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "I:\tools\ComfyUI_windows_portable_nvidia_cu121_or_cpu\ComfyUI_windows_portable\ComfyUI\execution.py", line 76, in map_node_over_list
    results.append(getattr(obj, func)(**slice_dict(input_data_all, i)))
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "I:\tools\ComfyUI_windows_portable_nvidia_cu121_or_cpu\ComfyUI_windows_portable\ComfyUI\custom_nodes\ComfyUI-VideoHelperSuite\videohelpersuite\load_images_nodes.py", line 109, in load_images
    return load_images(directory, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "I:\tools\ComfyUI_windows_portable_nvidia_cu121_or_cpu\ComfyUI_windows_portable\ComfyUI\custom_nodes\ComfyUI-VideoHelperSuite\videohelpersuite\load_images_nodes.py", line 44, in load_images
    raise FileNotFoundError(f"No files in directory '{directory}'.")
FileNotFoundError: No files in directory 'I:\tools\ComfyUI_windows_portable_nvidia_cu121_or_cpu\ComfyUI_windows_portable\ComfyUI\input\test'.

Prompt executed in 0.00 seconds

このワークフローでは動画作成とアップスケールもしてるから
結構時間がかかるよ。
ちなみに、私のRTX3080環境だとおよそ10~15分だったよ。

出来上がりはこちら。使ってるモデルと、ControlNetモデルが違うからかサンプル通りにはいかないね。残念

今、肩から何か・・・バ〇オ2のG2かな?

アップスケール後はサイズの問題なのかアップロードに失敗したので
アップスケール前だけです・・・。
アップスケール後はロックブー〇かよってくらい肩から顔が沢山出てきてホラーだったので見せられないのが不幸中の幸い。

3.ウチの子で

サンプルだけじゃつまらないのでウチの子でも1枚作ってみるね。
1.で使ったワークフローのプロンプトだけいじってみるよ。

出来上がりはこちら。

横顔とメガネ直し以外はポーズ指定なし

おわりに

先人の知恵の上で作業するのでもっとスムーズにいけるかと思いましたが
思った以上に試すのにカロリーを消費してしまったね・・・。

ともかく最初の1歩は踏み出せたと思うので、ここからgithubの説明の読み込みや先人のNoteとかを漁ってAnimateDiffノウハウを得ていきたいですね。

またノウハウ蓄積したら記事にするかもね!

トラブルシューティング

OpenPoseを使ったサンプルのワークフローを読み込んだ際に

oops!

なんと!ControlNetLoaderAdvancedが定義されてないと申すか!

ComfyUI Managerで確認してみると

ほんまや、インポート失敗してる

コンソールを確認すると「disable_weight_init」が定義されてないみたい。

Traceback (most recent call last):
  File "I:\tools\new_ComfyUI_windows_portable_nvidia_cu121_or_cpu\ComfyUI_windows_portable\ComfyUI\nodes.py", line 1800, in load_custom_node
    module_spec.loader.exec_module(module)
  File "<frozen importlib._bootstrap_external>", line 940, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "I:\tools\new_ComfyUI_windows_portable_nvidia_cu121_or_cpu\ComfyUI_windows_portable\ComfyUI\custom_nodes\ComfyUI-Advanced-ControlNet\__init__.py", line 1, in <module>
    from .control.nodes import NODE_CLASS_MAPPINGS, NODE_DISPLAY_NAME_MAPPINGS
  File "I:\tools\new_ComfyUI_windows_portable_nvidia_cu121_or_cpu\ComfyUI_windows_portable\ComfyUI\custom_nodes\ComfyUI-Advanced-ControlNet\control\nodes.py", line 6, in <module>
    from .control import load_controlnet, convert_to_advanced, is_advanced_controlnet
  File "I:\tools\new_ComfyUI_windows_portable_nvidia_cu121_or_cpu\ComfyUI_windows_portable\ComfyUI\custom_nodes\ComfyUI-Advanced-ControlNet\control\control.py", line 12, in <module>
    from .control_sparsectrl import SparseControlNet, SparseCtrlMotionWrapper, SparseMethod, SparseSettings, SparseSpreadMethod, PreprocSparseRGBWrapper
  File "I:\tools\new_ComfyUI_windows_portable_nvidia_cu121_or_cpu\ComfyUI_windows_portable\ComfyUI\custom_nodes\ComfyUI-Advanced-ControlNet\control\control_sparsectrl.py", line 30, in <module>
    from .utils import TimestepKeyframeGroup, disable_weight_init_clean_groupnorm, prepare_mask_batch
  File "I:\tools\new_ComfyUI_windows_portable_nvidia_cu121_or_cpu\ComfyUI_windows_portable\ComfyUI\custom_nodes\ComfyUI-Advanced-ControlNet\control\utils.py", line 228, in <module>
    class disable_weight_init_clean_groupnorm(comfy.ops.disable_weight_init):
                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: module 'comfy.ops' has no attribute 'disable_weight_init'

Cannot import I:\tools\new_ComfyUI_windows_portable_nvidia_cu121_or_cpu\ComfyUI_windows_portable\ComfyUI\custom_nodes\ComfyUI-Advanced-ControlNet module for custom nodes: module 'comfy.ops' has no attribute 'disable_weight_init'

さっそく調べてみるとgithubのissueが見つかったよ

ComfyUIが2023/12(かな?)に更新されたことで起きてるみたいね

再度公式からダウンロードしてくるよ。

新しく取ってきた方に「3.xformersの無効化」で作ったbatと
・\ComfyUI\custom_nodes
・\ComfyUI\models
の両ディレクトリを古い方からコピーしてくるよ

コピーが終わって起動してみたら、また複数のカスタムノードが
インポートエラー吐いたので焦ったけど、もう一回再起動したら解消されたよ(怖ぁ!)

ただし 「Load Images (Upload)」は一回削除して追加し直すよう言われた。その通りしたら解消したよ。

なんでだろ
ここから追加して設定合わせておこうね
←削除したノード、再作成したノード→

directoryは「choose folder to upload」で選んだフォルダのパスが出るだけだからOpenPoseに使う棒人間画像を置いたフォルダを選ぼうね。

この記事が気に入ったらサポートをしてみませんか?