【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」が導入済みの前提で話をするね。
まずはComfyUIのAnimateDiff拡張をインストールしてね
そして「AnimateDiff Evolved」のREADMEを読むと、他に入れるべき
推奨カスタムノードが書いてあるのでそれらもインストールするよ。
・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は別フォルダが用意されているよ。
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上で最後まで行ったしコマンドラインの方も終わっているように見えるけど・・・
→ComfyUI上には表示されないだけでしたごめんなさい。
出来上がりがこちら
2.OpenPoseを使ったサンプル
一番下のOpenPose使ったサンプルも動かしてみるよ。
ワークフローのpngを読み込ませ・・・oops!またエラーだクソったれ!
→結構重たかったから末尾のトラブルシューティングに記載したよ。
もしここでダメだったらそちらを参照してみてね。
(エラーは解決した?続きいくね)
このワークフローではOpenPoseに使う棒人間の画像を読み込ませる必要があって、ワークフロー左側にある「Load Images (Upload)」に画像を置いてあるフォルダを指定する必要があるよ。
フォルダの中に入れる棒人間の画像だけど、公式githubにサンプルがあるからとってこようね。
この画像、アニメーションGIF形式でダウンロードされるんだけど
このワークフローに食べさせるには1枚1枚の画像に分割する必要があるよ。
なので、ScreenToGifとかのフリーソフトとかで分割しようね。
ScreenToGifだと画像を読み込ませれば、
下の画像右クリック→フォルダーを表示で分割された画像が取り出せるよ
画像の入ったフォルダを選択してないとこんな感じのエラーが出ているはずなので、このエラー出てたら画像のフォルダの指定方法を確認してね。
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モデルが違うからかサンプル通りにはいかないね。残念
アップスケール後はサイズの問題なのかアップロードに失敗したので
アップスケール前だけです・・・。
アップスケール後はロックブー〇かよってくらい肩から顔が沢山出てきてホラーだったので見せられないのが不幸中の幸い。
3.ウチの子で
サンプルだけじゃつまらないのでウチの子でも1枚作ってみるね。
1.で使ったワークフローのプロンプトだけいじってみるよ。
出来上がりはこちら。
おわりに
先人の知恵の上で作業するのでもっとスムーズにいけるかと思いましたが
思った以上に試すのにカロリーを消費してしまったね・・・。
ともかく最初の1歩は踏み出せたと思うので、ここからgithubの説明の読み込みや先人のNoteとかを漁ってAnimateDiffノウハウを得ていきたいですね。
トラブルシューティング
OpenPoseを使ったサンプルのワークフローを読み込んだ際に
なんと!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が見つかったよ
再度公式からダウンロードしてくるよ。
新しく取ってきた方に「3.xformersの無効化」で作ったbatと
・\ComfyUI\custom_nodes
・\ComfyUI\models
の両ディレクトリを古い方からコピーしてくるよ
コピーが終わって起動してみたら、また複数のカスタムノードが
インポートエラー吐いたので焦ったけど、もう一回再起動したら解消されたよ(怖ぁ!)
ただし 「Load Images (Upload)」は一回削除して追加し直すよう言われた。その通りしたら解消したよ。
directoryは「choose folder to upload」で選んだフォルダのパスが出るだけだからOpenPoseに使う棒人間画像を置いたフォルダを選ぼうね。
この記事が気に入ったらサポートをしてみませんか?