Compare commits
5
Commits
main
...
feat/motion_lora
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c6438891a4 | ||
|
|
617913f889 | ||
|
|
103ff66a95 | ||
|
|
5ee2c3d48a | ||
|
|
d5d42f8f3e |
@@ -11,6 +11,48 @@
|
|||||||
- Community modules: [manshoety/AD_Stabilized_Motion](https://huggingface.co/manshoety/AD_Stabilized_Motion) | [CiaraRowles/TemporalDiff](https://huggingface.co/CiaraRowles/TemporalDiff)
|
- Community modules: [manshoety/AD_Stabilized_Motion](https://huggingface.co/manshoety/AD_Stabilized_Motion) | [CiaraRowles/TemporalDiff](https://huggingface.co/CiaraRowles/TemporalDiff)
|
||||||
- AnimateDiff v2 [mm_sd_v15_v2.ckpt](https://huggingface.co/guoyww/animatediff/blob/main/mm_sd_v15_v2.ckpt)
|
- AnimateDiff v2 [mm_sd_v15_v2.ckpt](https://huggingface.co/guoyww/animatediff/blob/main/mm_sd_v15_v2.ckpt)
|
||||||
|
|
||||||
|
## Update 2023/09/25
|
||||||
|
|
||||||
|
#### **Motion LoRA** is now supported!
|
||||||
|
|
||||||
|
Download [motion LoRAs](https://huggingface.co/guoyww/animatediff/tree/main) and put them under `comfyui-animatediff/loras/` folder.
|
||||||
|
|
||||||
|
Note: LoRAs only work with **AnimateDiff v2** [mm_sd_v15_v2.ckpt](https://huggingface.co/guoyww/animatediff/blob/main/mm_sd_v15_v2.ckpt) module.
|
||||||
|
|
||||||
|
#### New node: `AnimateDiffLoraLoader`
|
||||||
|
|
||||||
|
<img width="370" alt="image" src="https://github.com/ArtVentureX/comfyui-animatediff/assets/133728487/7a9f62f7-702e-48a4-934c-bbfe1e23aff2">
|
||||||
|
|
||||||
|
Example workflow:
|
||||||
|
<img width="1280" alt="image" src="https://github.com/ArtVentureX/comfyui-animatediff/assets/133728487/93e7550f-4648-4482-9961-6cece5132dc9">
|
||||||
|
|
||||||
|
Workflow: [lora.json](https://github.com/ArtVentureX/comfyui-animatediff/blob/main/workflows/lora.json)
|
||||||
|
|
||||||
|
Samples:
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<img width="512" alt="image" src="https://github.com/ArtVentureX/comfyui-animatediff/assets/133728487/2c5aa25e-0682-481f-8842-066c5b988864">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<img width="512" alt="image" src="https://github.com/ArtVentureX/comfyui-animatediff/assets/133728487/adfbad45-3ba5-42e3-9bee-d2b83f43989c">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<img width="512" alt="image" src="https://github.com/ArtVentureX/comfyui-animatediff/assets/133728487/8e484c74-c691-4d1c-9514-719dbfe3a0b5">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<img width="512" alt="image" src="https://github.com/ArtVentureX/comfyui-animatediff/assets/133728487/4921a335-9207-4a7b-9d66-61a5d76e3179">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
## Update 2023/09/21
|
## Update 2023/09/21
|
||||||
|
|
||||||
#### **Sliding Window** is now available!
|
#### **Sliding Window** is now available!
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
import hashlib
|
import hashlib
|
||||||
|
import torch
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
|
||||||
import folder_paths
|
import folder_paths
|
||||||
@@ -11,6 +12,7 @@ from .motion_module import MotionWrapper
|
|||||||
|
|
||||||
|
|
||||||
motion_modules: Dict[str, MotionWrapper] = {}
|
motion_modules: Dict[str, MotionWrapper] = {}
|
||||||
|
motion_loras: Dict[str, Dict[str, torch.Tensor]] = {}
|
||||||
|
|
||||||
|
|
||||||
folder_paths.folder_names_and_paths["AnimateDiff"] = (
|
folder_paths.folder_names_and_paths["AnimateDiff"] = (
|
||||||
@@ -20,19 +22,34 @@ folder_paths.folder_names_and_paths["AnimateDiff"] = (
|
|||||||
],
|
],
|
||||||
folder_paths.supported_pt_extensions,
|
folder_paths.supported_pt_extensions,
|
||||||
)
|
)
|
||||||
|
folder_paths.folder_names_and_paths["AnimateDiffLora"] = (
|
||||||
|
[
|
||||||
|
os.path.join(folder_paths.models_dir, "AnimateDiffLora"),
|
||||||
|
os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "loras"),
|
||||||
|
],
|
||||||
|
folder_paths.supported_pt_extensions,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_available_models():
|
def get_available_models():
|
||||||
return folder_paths.get_filename_list("AnimateDiff")
|
return folder_paths.get_filename_list("AnimateDiff")
|
||||||
|
|
||||||
|
|
||||||
|
def get_available_loras():
|
||||||
|
return folder_paths.get_filename_list("AnimateDiffLora")
|
||||||
|
|
||||||
|
|
||||||
def get_model_path(model_name):
|
def get_model_path(model_name):
|
||||||
return folder_paths.get_full_path("AnimateDiff", model_name)
|
return folder_paths.get_full_path("AnimateDiff", model_name)
|
||||||
|
|
||||||
|
|
||||||
|
def get_lora_path(lora_name):
|
||||||
|
return folder_paths.get_full_path("AnimateDiffLora", lora_name)
|
||||||
|
|
||||||
|
|
||||||
def get_model_hash(file_path):
|
def get_model_hash(file_path):
|
||||||
with open(file_path, "rb") as f:
|
with open(file_path, "rb") as f:
|
||||||
bytes = f.read() # read entire file as bytes
|
bytes = f.read(1024 * 1024) # read entire file as bytes
|
||||||
return hashlib.sha256(bytes).hexdigest()
|
return hashlib.sha256(bytes).hexdigest()
|
||||||
|
|
||||||
|
|
||||||
@@ -54,3 +71,30 @@ def load_motion_module(model_name: str):
|
|||||||
motion_modules[model_hash] = motion_module
|
motion_modules[model_hash] = motion_module
|
||||||
|
|
||||||
return motion_modules[model_hash]
|
return motion_modules[model_hash]
|
||||||
|
|
||||||
|
|
||||||
|
def load_lora(lora_name: str):
|
||||||
|
lora_path = get_lora_path(lora_name)
|
||||||
|
lora_hash = get_model_hash(lora_path)
|
||||||
|
if lora_hash not in motion_modules:
|
||||||
|
logger.info(f"Loading lora {lora_name}")
|
||||||
|
state_dict = load_torch_file(lora_path)
|
||||||
|
updated_state_dict: Dict[str, torch.Tensor] = {}
|
||||||
|
|
||||||
|
for key in state_dict:
|
||||||
|
# only process lora down key
|
||||||
|
if "up." in key:
|
||||||
|
continue
|
||||||
|
|
||||||
|
up_key = key.replace(".down.", ".up.")
|
||||||
|
model_key = key.replace("processor.", "").replace("_lora", "").replace("down.", "").replace("up.", "")
|
||||||
|
model_key = model_key.replace("to_out.", "to_out.0.")
|
||||||
|
combined_key = ".".join(model_key.split(".")[:-1])
|
||||||
|
|
||||||
|
weight_down = state_dict[key]
|
||||||
|
weight_up = state_dict[up_key]
|
||||||
|
updated_state_dict[combined_key] = torch.mm(weight_up, weight_down).to("cpu")
|
||||||
|
|
||||||
|
motion_loras[lora_hash] = updated_state_dict
|
||||||
|
|
||||||
|
return motion_loras[lora_hash]
|
||||||
|
|||||||
+84
-2
@@ -3,16 +3,18 @@ import json
|
|||||||
import torch
|
import torch
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import hashlib
|
import hashlib
|
||||||
from typing import List
|
from typing import List, Dict, Tuple
|
||||||
from torch import Tensor
|
from torch import Tensor
|
||||||
from PIL import Image, ImageSequence
|
from PIL import Image, ImageSequence
|
||||||
from PIL.PngImagePlugin import PngInfo
|
from PIL.PngImagePlugin import PngInfo
|
||||||
|
|
||||||
import folder_paths
|
import folder_paths
|
||||||
|
|
||||||
from .model_utils import get_available_models, load_motion_module
|
from .motion_module import MotionWrapper
|
||||||
|
from .model_utils import get_available_models, load_motion_module, get_available_loras, load_lora
|
||||||
from .utils import pil2tensor, ensure_opencv
|
from .utils import pil2tensor, ensure_opencv
|
||||||
from .sampler import AnimateDiffSampler, AnimateDiffSlidingWindowOptions
|
from .sampler import AnimateDiffSampler, AnimateDiffSlidingWindowOptions
|
||||||
|
from .logger import logger
|
||||||
|
|
||||||
|
|
||||||
SLIDING_CONTEXT_LENGTH = 16
|
SLIDING_CONTEXT_LENGTH = 16
|
||||||
@@ -28,21 +30,99 @@ class AnimateDiffModuleLoader:
|
|||||||
"required": {
|
"required": {
|
||||||
"model_name": (get_available_models(),),
|
"model_name": (get_available_models(),),
|
||||||
},
|
},
|
||||||
|
"optional": {
|
||||||
|
"lora_stack": ("MOTION_LORA_STACK",),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
RETURN_TYPES = ("MOTION_MODULE",)
|
RETURN_TYPES = ("MOTION_MODULE",)
|
||||||
CATEGORY = "Animate Diff"
|
CATEGORY = "Animate Diff"
|
||||||
FUNCTION = "load_motion_module"
|
FUNCTION = "load_motion_module"
|
||||||
|
|
||||||
|
def inject_loras(self, motion_module: MotionWrapper, lora_stack: List[Tuple[Dict[str, Tensor], float]]):
|
||||||
|
for lora in lora_stack:
|
||||||
|
(state_dict, alpha) = lora
|
||||||
|
|
||||||
|
for key in state_dict:
|
||||||
|
layer_infos = key.split(".")
|
||||||
|
|
||||||
|
curr_layer = motion_module
|
||||||
|
while len(layer_infos) > 0:
|
||||||
|
temp_name = layer_infos.pop(0)
|
||||||
|
curr_layer = curr_layer.__getattr__(temp_name)
|
||||||
|
|
||||||
|
curr_layer.weight.data += alpha * state_dict[key].to(curr_layer.weight.data.device)
|
||||||
|
|
||||||
|
def eject_loras(self, motion_module: MotionWrapper, lora_stack: List[Tuple[float, Dict[str, Tensor]]]):
|
||||||
|
lora_stack.reverse() # should not matter but just in case
|
||||||
|
for lora in lora_stack:
|
||||||
|
(state_dict, alpha) = lora
|
||||||
|
|
||||||
|
for key in state_dict:
|
||||||
|
layer_infos = key.split(".")
|
||||||
|
|
||||||
|
curr_layer = motion_module
|
||||||
|
while len(layer_infos) > 0:
|
||||||
|
temp_name = layer_infos.pop(0)
|
||||||
|
curr_layer = curr_layer.__getattr__(temp_name)
|
||||||
|
|
||||||
|
curr_layer.weight.data -= alpha * state_dict[key].to(curr_layer.weight.data.device)
|
||||||
|
|
||||||
def load_motion_module(
|
def load_motion_module(
|
||||||
self,
|
self,
|
||||||
model_name: str,
|
model_name: str,
|
||||||
|
lora_stack: List = None,
|
||||||
):
|
):
|
||||||
motion_module = load_motion_module(model_name)
|
motion_module = load_motion_module(model_name)
|
||||||
|
|
||||||
|
# inject loras
|
||||||
|
if motion_module.is_v2:
|
||||||
|
if hasattr(motion_module, "lora_stack") and isinstance(motion_module.lora_stack, list):
|
||||||
|
self.eject_loras(motion_module, motion_module.lora_stack)
|
||||||
|
delattr(motion_module, "lora_stack")
|
||||||
|
|
||||||
|
if isinstance(lora_stack, list):
|
||||||
|
self.inject_loras(motion_module, lora_stack)
|
||||||
|
setattr(motion_module, "lora_stack", lora_stack)
|
||||||
|
|
||||||
|
elif isinstance(lora_stack, list):
|
||||||
|
logger.warning("LoRA is provided but only motion module v2 is supported.")
|
||||||
|
|
||||||
return (motion_module,)
|
return (motion_module,)
|
||||||
|
|
||||||
|
|
||||||
|
class AnimateDiffLoraLoader:
|
||||||
|
@classmethod
|
||||||
|
def INPUT_TYPES(s):
|
||||||
|
return {
|
||||||
|
"required": {
|
||||||
|
"lora_name": (get_available_loras(),),
|
||||||
|
"alpha": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}),
|
||||||
|
},
|
||||||
|
"optional": {
|
||||||
|
"lora_stack": ("MOTION_LORA_STACK",),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
RETURN_TYPES = ("MOTION_LORA_STACK",)
|
||||||
|
CATEGORY = "Animate Diff"
|
||||||
|
FUNCTION = "load_lora"
|
||||||
|
|
||||||
|
def load_lora(
|
||||||
|
self,
|
||||||
|
lora_name: str,
|
||||||
|
alpha: float,
|
||||||
|
lora_stack: List = None,
|
||||||
|
):
|
||||||
|
if not lora_stack:
|
||||||
|
lora_stack = []
|
||||||
|
|
||||||
|
lora = load_lora(lora_name)
|
||||||
|
lora_stack.append((lora, alpha))
|
||||||
|
|
||||||
|
return (lora_stack,)
|
||||||
|
|
||||||
|
|
||||||
class AnimateDiffCombine:
|
class AnimateDiffCombine:
|
||||||
@classmethod
|
@classmethod
|
||||||
def INPUT_TYPES(s):
|
def INPUT_TYPES(s):
|
||||||
@@ -324,6 +404,7 @@ class ImageChunking:
|
|||||||
|
|
||||||
NODE_CLASS_MAPPINGS = {
|
NODE_CLASS_MAPPINGS = {
|
||||||
"AnimateDiffModuleLoader": AnimateDiffModuleLoader,
|
"AnimateDiffModuleLoader": AnimateDiffModuleLoader,
|
||||||
|
"AnimateDiffLoraLoader": AnimateDiffLoraLoader,
|
||||||
"AnimateDiffCombine": AnimateDiffCombine,
|
"AnimateDiffCombine": AnimateDiffCombine,
|
||||||
"AnimateDiffSampler": AnimateDiffSampler,
|
"AnimateDiffSampler": AnimateDiffSampler,
|
||||||
"AnimateDiffSlidingWindowOptions": AnimateDiffSlidingWindowOptions,
|
"AnimateDiffSlidingWindowOptions": AnimateDiffSlidingWindowOptions,
|
||||||
@@ -332,6 +413,7 @@ NODE_CLASS_MAPPINGS = {
|
|||||||
}
|
}
|
||||||
NODE_DISPLAY_NAME_MAPPINGS = {
|
NODE_DISPLAY_NAME_MAPPINGS = {
|
||||||
"AnimateDiffModuleLoader": "Animate Diff Module Loader",
|
"AnimateDiffModuleLoader": "Animate Diff Module Loader",
|
||||||
|
"AnimateDiffLoraLoader": "Animate Diff Lora Loader",
|
||||||
"AnimateDiffSampler": "Animate Diff Sampler",
|
"AnimateDiffSampler": "Animate Diff Sampler",
|
||||||
"AnimateDiffSlidingWindowOptions": "Sliding Window Options",
|
"AnimateDiffSlidingWindowOptions": "Sliding Window Options",
|
||||||
"AnimateDiffCombine": "Animate Diff Combine",
|
"AnimateDiffCombine": "Animate Diff Combine",
|
||||||
|
|||||||
@@ -0,0 +1,515 @@
|
|||||||
|
{
|
||||||
|
"last_node_id": 21,
|
||||||
|
"last_link_id": 38,
|
||||||
|
"nodes": [
|
||||||
|
{
|
||||||
|
"id": 6,
|
||||||
|
"type": "CLIPTextEncode",
|
||||||
|
"pos": [
|
||||||
|
415,
|
||||||
|
186
|
||||||
|
],
|
||||||
|
"size": {
|
||||||
|
"0": 422.84503173828125,
|
||||||
|
"1": 164.31304931640625
|
||||||
|
},
|
||||||
|
"flags": {},
|
||||||
|
"order": 4,
|
||||||
|
"mode": 0,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"name": "clip",
|
||||||
|
"type": "CLIP",
|
||||||
|
"link": 3
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "CONDITIONING",
|
||||||
|
"type": "CONDITIONING",
|
||||||
|
"links": [
|
||||||
|
29
|
||||||
|
],
|
||||||
|
"slot_index": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"Node name for S&R": "CLIPTextEncode"
|
||||||
|
},
|
||||||
|
"widgets_values": [
|
||||||
|
"photo of coastline, rocks, storm weather, wind, waves, lightning, 8k uhd, dslr, soft lighting, high quality, film grain, Fujifilm XT3"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 8,
|
||||||
|
"type": "VAEDecode",
|
||||||
|
"pos": [
|
||||||
|
1253,
|
||||||
|
191
|
||||||
|
],
|
||||||
|
"size": {
|
||||||
|
"0": 210,
|
||||||
|
"1": 46
|
||||||
|
},
|
||||||
|
"flags": {},
|
||||||
|
"order": 8,
|
||||||
|
"mode": 0,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"name": "samples",
|
||||||
|
"type": "LATENT",
|
||||||
|
"link": 28
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "vae",
|
||||||
|
"type": "VAE",
|
||||||
|
"link": 20
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "IMAGE",
|
||||||
|
"type": "IMAGE",
|
||||||
|
"links": [
|
||||||
|
19
|
||||||
|
],
|
||||||
|
"slot_index": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"Node name for S&R": "VAEDecode"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 12,
|
||||||
|
"type": "AnimateDiffCombine",
|
||||||
|
"pos": [
|
||||||
|
1254,
|
||||||
|
290
|
||||||
|
],
|
||||||
|
"size": [
|
||||||
|
315,
|
||||||
|
507
|
||||||
|
],
|
||||||
|
"flags": {},
|
||||||
|
"order": 9,
|
||||||
|
"mode": 0,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"name": "images",
|
||||||
|
"type": "IMAGE",
|
||||||
|
"link": 19
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"Node name for S&R": "AnimateDiffCombine"
|
||||||
|
},
|
||||||
|
"widgets_values": [
|
||||||
|
8,
|
||||||
|
0,
|
||||||
|
false,
|
||||||
|
"AnimateDiff",
|
||||||
|
"image/gif",
|
||||||
|
false,
|
||||||
|
"/view?filename=AnimateDiff_00003_.gif&subfolder=&type=temp&format=image%2Fgif"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 7,
|
||||||
|
"type": "CLIPTextEncode",
|
||||||
|
"pos": [
|
||||||
|
413,
|
||||||
|
389
|
||||||
|
],
|
||||||
|
"size": {
|
||||||
|
"0": 425.27801513671875,
|
||||||
|
"1": 180.6060791015625
|
||||||
|
},
|
||||||
|
"flags": {},
|
||||||
|
"order": 5,
|
||||||
|
"mode": 0,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"name": "clip",
|
||||||
|
"type": "CLIP",
|
||||||
|
"link": 5
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "CONDITIONING",
|
||||||
|
"type": "CONDITIONING",
|
||||||
|
"links": [
|
||||||
|
30
|
||||||
|
],
|
||||||
|
"slot_index": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"Node name for S&R": "CLIPTextEncode"
|
||||||
|
},
|
||||||
|
"widgets_values": [
|
||||||
|
"blur, haze, deformed iris, deformed pupils, semi-realistic, cgi, 3d, render, sketch, cartoon, drawing, anime, mutated hands and fingers, deformed, distorted, disfigured, poorly drawn, bad anatomy, wrong anatomy, extra limb, missing limb, floating limbs, disconnected limbs, mutation, mutated, ugly, disgusting, amputation"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 20,
|
||||||
|
"type": "EmptyLatentImage",
|
||||||
|
"pos": [
|
||||||
|
522,
|
||||||
|
621
|
||||||
|
],
|
||||||
|
"size": {
|
||||||
|
"0": 315,
|
||||||
|
"1": 106
|
||||||
|
},
|
||||||
|
"flags": {},
|
||||||
|
"order": 0,
|
||||||
|
"mode": 0,
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "LATENT",
|
||||||
|
"type": "LATENT",
|
||||||
|
"links": [
|
||||||
|
35
|
||||||
|
],
|
||||||
|
"shape": 3,
|
||||||
|
"slot_index": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"Node name for S&R": "EmptyLatentImage"
|
||||||
|
},
|
||||||
|
"widgets_values": [
|
||||||
|
512,
|
||||||
|
512,
|
||||||
|
1
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 13,
|
||||||
|
"type": "VAELoader",
|
||||||
|
"pos": [
|
||||||
|
28,
|
||||||
|
223
|
||||||
|
],
|
||||||
|
"size": {
|
||||||
|
"0": 315,
|
||||||
|
"1": 58
|
||||||
|
},
|
||||||
|
"flags": {},
|
||||||
|
"order": 1,
|
||||||
|
"mode": 0,
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "VAE",
|
||||||
|
"type": "VAE",
|
||||||
|
"links": [
|
||||||
|
20
|
||||||
|
],
|
||||||
|
"shape": 3,
|
||||||
|
"slot_index": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"Node name for S&R": "VAELoader"
|
||||||
|
},
|
||||||
|
"widgets_values": [
|
||||||
|
"vae-ft-mse-840000-ema-pruned.safetensors"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 15,
|
||||||
|
"type": "AnimateDiffSampler",
|
||||||
|
"pos": [
|
||||||
|
882,
|
||||||
|
192
|
||||||
|
],
|
||||||
|
"size": {
|
||||||
|
"0": 315,
|
||||||
|
"1": 350
|
||||||
|
},
|
||||||
|
"flags": {},
|
||||||
|
"order": 7,
|
||||||
|
"mode": 0,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"name": "motion_module",
|
||||||
|
"type": "MOTION_MODULE",
|
||||||
|
"link": 24,
|
||||||
|
"slot_index": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "model",
|
||||||
|
"type": "MODEL",
|
||||||
|
"link": 25,
|
||||||
|
"slot_index": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "positive",
|
||||||
|
"type": "CONDITIONING",
|
||||||
|
"link": 29
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "negative",
|
||||||
|
"type": "CONDITIONING",
|
||||||
|
"link": 30
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "latent_image",
|
||||||
|
"type": "LATENT",
|
||||||
|
"link": 35
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "sliding_window_opts",
|
||||||
|
"type": "SLIDING_WINDOW_OPTS",
|
||||||
|
"link": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "LATENT",
|
||||||
|
"type": "LATENT",
|
||||||
|
"links": [
|
||||||
|
28
|
||||||
|
],
|
||||||
|
"shape": 3,
|
||||||
|
"slot_index": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"Node name for S&R": "AnimateDiffSampler"
|
||||||
|
},
|
||||||
|
"widgets_values": [
|
||||||
|
"default",
|
||||||
|
14,
|
||||||
|
45987230,
|
||||||
|
"fixed",
|
||||||
|
25,
|
||||||
|
7.5,
|
||||||
|
"ddim",
|
||||||
|
"ddim_uniform",
|
||||||
|
1
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 16,
|
||||||
|
"type": "AnimateDiffModuleLoader",
|
||||||
|
"pos": [
|
||||||
|
27,
|
||||||
|
345
|
||||||
|
],
|
||||||
|
"size": {
|
||||||
|
"0": 315,
|
||||||
|
"1": 58
|
||||||
|
},
|
||||||
|
"flags": {},
|
||||||
|
"order": 6,
|
||||||
|
"mode": 0,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"name": "lora_stack",
|
||||||
|
"type": "MOTION_LORA_STACK",
|
||||||
|
"link": 38,
|
||||||
|
"slot_index": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "MOTION_MODULE",
|
||||||
|
"type": "MOTION_MODULE",
|
||||||
|
"links": [
|
||||||
|
24
|
||||||
|
],
|
||||||
|
"shape": 3
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"Node name for S&R": "AnimateDiffModuleLoader"
|
||||||
|
},
|
||||||
|
"widgets_values": [
|
||||||
|
"mm_sd_v15_v2.ckpt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 21,
|
||||||
|
"type": "AnimateDiffLoraLoader",
|
||||||
|
"pos": [
|
||||||
|
-317,
|
||||||
|
350
|
||||||
|
],
|
||||||
|
"size": [
|
||||||
|
310,
|
||||||
|
80
|
||||||
|
],
|
||||||
|
"flags": {},
|
||||||
|
"order": 3,
|
||||||
|
"mode": 0,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"name": "lora_stack",
|
||||||
|
"type": "MOTION_LORA_STACK",
|
||||||
|
"link": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "MOTION_LORA_STACK",
|
||||||
|
"type": "MOTION_LORA_STACK",
|
||||||
|
"links": [
|
||||||
|
38
|
||||||
|
],
|
||||||
|
"shape": 3,
|
||||||
|
"slot_index": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"Node name for S&R": "AnimateDiffLoraLoader"
|
||||||
|
},
|
||||||
|
"widgets_values": [
|
||||||
|
"v2_lora_ZoomIn.ckpt",
|
||||||
|
1
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 4,
|
||||||
|
"type": "CheckpointLoaderSimple",
|
||||||
|
"pos": [
|
||||||
|
28,
|
||||||
|
457
|
||||||
|
],
|
||||||
|
"size": {
|
||||||
|
"0": 315,
|
||||||
|
"1": 98
|
||||||
|
},
|
||||||
|
"flags": {},
|
||||||
|
"order": 2,
|
||||||
|
"mode": 0,
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "MODEL",
|
||||||
|
"type": "MODEL",
|
||||||
|
"links": [
|
||||||
|
25
|
||||||
|
],
|
||||||
|
"slot_index": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "CLIP",
|
||||||
|
"type": "CLIP",
|
||||||
|
"links": [
|
||||||
|
3,
|
||||||
|
5
|
||||||
|
],
|
||||||
|
"slot_index": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "VAE",
|
||||||
|
"type": "VAE",
|
||||||
|
"links": [],
|
||||||
|
"slot_index": 2
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"Node name for S&R": "CheckpointLoaderSimple"
|
||||||
|
},
|
||||||
|
"widgets_values": [
|
||||||
|
"RealisticVision_v20.safetensors"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"links": [
|
||||||
|
[
|
||||||
|
3,
|
||||||
|
4,
|
||||||
|
1,
|
||||||
|
6,
|
||||||
|
0,
|
||||||
|
"CLIP"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
5,
|
||||||
|
4,
|
||||||
|
1,
|
||||||
|
7,
|
||||||
|
0,
|
||||||
|
"CLIP"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
19,
|
||||||
|
8,
|
||||||
|
0,
|
||||||
|
12,
|
||||||
|
0,
|
||||||
|
"IMAGE"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
20,
|
||||||
|
13,
|
||||||
|
0,
|
||||||
|
8,
|
||||||
|
1,
|
||||||
|
"VAE"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
24,
|
||||||
|
16,
|
||||||
|
0,
|
||||||
|
15,
|
||||||
|
0,
|
||||||
|
"MOTION_MODULE"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
25,
|
||||||
|
4,
|
||||||
|
0,
|
||||||
|
15,
|
||||||
|
1,
|
||||||
|
"MODEL"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
28,
|
||||||
|
15,
|
||||||
|
0,
|
||||||
|
8,
|
||||||
|
0,
|
||||||
|
"LATENT"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
29,
|
||||||
|
6,
|
||||||
|
0,
|
||||||
|
15,
|
||||||
|
2,
|
||||||
|
"CONDITIONING"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
30,
|
||||||
|
7,
|
||||||
|
0,
|
||||||
|
15,
|
||||||
|
3,
|
||||||
|
"CONDITIONING"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
35,
|
||||||
|
20,
|
||||||
|
0,
|
||||||
|
15,
|
||||||
|
4,
|
||||||
|
"LATENT"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
38,
|
||||||
|
21,
|
||||||
|
0,
|
||||||
|
16,
|
||||||
|
0,
|
||||||
|
"MOTION_LORA_STACK"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"groups": [],
|
||||||
|
"config": {},
|
||||||
|
"extra": {},
|
||||||
|
"version": 0.4
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user