Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
ComfyUI-MimicMotionWrapper
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
王骏浩
ComfyUI-MimicMotionWrapper
Commits
e90ac6dd
提交
e90ac6dd
authored
7月 02, 2024
作者:
kijai
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
lcm SVD as experimental option
上级
180b6eff
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
42 行增加
和
16 行删除
+42
-16
lcm_scheduler.py
lcm_scheduler.py
+0
-0
nodes.py
nodes.py
+42
-16
没有找到文件。
lcm_scheduler.py
0 → 100644
浏览文件 @
e90ac6dd
差异被折叠。
点击展开。
nodes.py
浏览文件 @
e90ac6dd
...
...
@@ -19,15 +19,18 @@ from mimicmotion.pipelines.pipeline_mimicmotion import MimicMotionPipeline
from
mimicmotion.modules.unet
import
UNetSpatioTemporalConditionModel
from
mimicmotion.modules.pose_net
import
PoseNet
from
lcm_scheduler
import
AnimateLCMSVDStochasticIterativeScheduler
class
MimicMotionModel
(
torch
.
nn
.
Module
):
def
__init__
(
self
,
base_model_path
):
def
__init__
(
self
,
base_model_path
,
lcm
=
False
):
"""construnct base model components and load pretrained svd model except pose-net
Args:
base_model_path (str): pretrained svd model path
"""
super
()
.
__init__
()
unet_subfolder
=
"unet_lcm"
if
lcm
else
"unet"
self
.
unet
=
UNetSpatioTemporalConditionModel
.
from_config
(
UNetSpatioTemporalConditionModel
.
load_config
(
base_model_path
,
subfolder
=
"unet"
,
variant
=
"fp16"
))
UNetSpatioTemporalConditionModel
.
load_config
(
base_model_path
,
subfolder
=
unet_subfolder
,
variant
=
"fp16"
))
self
.
vae
=
AutoencoderKLTemporalDecoder
.
from_pretrained
(
base_model_path
,
subfolder
=
"vae"
,
variant
=
"fp16"
)
self
.
image_encoder
=
CLIPVisionModelWithProjection
.
from_pretrained
(
...
...
@@ -55,6 +58,7 @@ class DownloadAndLoadMimicMotionModel:
],
{
"default"
:
'fp16'
}),
"lcm"
:
(
"BOOLEAN"
,
{
"default"
:
False
}),
},
}
...
...
@@ -64,7 +68,7 @@ class DownloadAndLoadMimicMotionModel:
FUNCTION
=
"loadmodel"
CATEGORY
=
"MimicMotionWrapper"
def
loadmodel
(
self
,
precision
,
model
):
def
loadmodel
(
self
,
precision
,
model
,
lcm
):
device
=
mm
.
get_torch_device
()
mm
.
soft_empty_cache
()
dtype
=
{
"bf16"
:
torch
.
bfloat16
,
"fp16"
:
torch
.
float16
,
"fp32"
:
torch
.
float32
}[
precision
]
...
...
@@ -86,27 +90,49 @@ class DownloadAndLoadMimicMotionModel:
pbar
.
update
(
1
)
svd_path
=
os
.
path
.
join
(
folder_paths
.
models_dir
,
"diffusers"
,
"stable-video-diffusion-img2vid-xt-1-1"
)
svd_lcm_path
=
os
.
path
.
join
(
folder_paths
.
models_dir
,
"diffusers"
,
"stable-video-diffusion-img2vid-xt-1-1-lcm"
,
"unet_lcm"
)
if
not
os
.
path
.
exists
(
svd_path
):
#raise ValueError(f"Please download stable-video-diffusion-img2vid-xt-1-1 to {svd_path}")
print
(
f
"Downloading SVD model to: {model_path}"
)
if
lcm
and
not
os
.
path
.
exists
(
svd_lcm_path
):
print
(
f
"Downloading AnimateLCM SVD model to: {model_path}"
)
from
huggingface_hub
import
snapshot_download
snapshot_download
(
repo_id
=
"
vdo/stable-video-diffusion-img2vid-xt-1-1
"
,
allow_patterns
=
[
f
"*.json"
,
"*
fp16
*"
],
snapshot_download
(
repo_id
=
"
Kijai/AnimateLCM-SVD-Comfy
"
,
allow_patterns
=
[
f
"*.json"
,
"*
diffusion_pytorch_model.fp16.safetensors
*"
],
local_dir
=
svd_path
,
local_dir_use_symlinks
=
False
)
else
:
if
not
os
.
path
.
exists
(
svd_path
):
print
(
f
"Downloading SVD model to: {model_path}"
)
from
huggingface_hub
import
snapshot_download
snapshot_download
(
repo_id
=
"vdo/stable-video-diffusion-img2vid-xt-1-1"
,
allow_patterns
=
[
f
"*.json"
,
"*fp16*"
],
local_dir
=
svd_path
,
local_dir_use_symlinks
=
False
)
pbar
.
update
(
1
)
mimicmotion_models
=
MimicMotionModel
(
svd_path
)
.
to
(
device
=
device
)
.
eval
()
mimicmotion_models
=
MimicMotionModel
(
svd_path
,
lcm
=
lcm
)
.
to
(
device
=
device
)
.
eval
()
mimicmotion_models
.
load_state_dict
(
comfy
.
utils
.
load_torch_file
(
model_path
),
strict
=
False
)
if
lcm
:
lcm_noise_scheduler
=
AnimateLCMSVDStochasticIterativeScheduler
(
num_train_timesteps
=
40
,
sigma_min
=
0.002
,
sigma_max
=
700.0
,
sigma_data
=
1.0
,
s_noise
=
1.0
,
rho
=
7
,
clip_denoised
=
False
,
)
scheduler
=
lcm_noise_scheduler
else
:
scheduler
=
mimicmotion_models
.
noise_scheduler
pipeline
=
MimicMotionPipeline
(
vae
=
mimicmotion_models
.
vae
,
image_encoder
=
mimicmotion_models
.
image_encoder
,
unet
=
mimicmotion_models
.
unet
,
scheduler
=
mimicmotion_models
.
noise_
scheduler
,
feature_extractor
=
mimicmotion_models
.
feature_extractor
,
pose_net
=
mimicmotion_models
.
pose_net
,
vae
=
mimicmotion_models
.
vae
,
image_encoder
=
mimicmotion_models
.
image_encoder
,
unet
=
mimicmotion_models
.
unet
,
scheduler
=
scheduler
,
feature_extractor
=
mimicmotion_models
.
feature_extractor
,
pose_net
=
mimicmotion_models
.
pose_net
,
)
pipeline
.
unet
.
to
(
dtype
)
...
...
@@ -297,7 +323,7 @@ class MimicMotionGetPoses:
ref_pose_img
=
draw_pose
(
ref_pose
,
height
,
width
,
include_body
=
include_body
,
include_hand
=
include_hand
,
include_face
=
include_face
)
ref_pose_tensor
=
torch
.
tensor
(
np
.
array
(
ref_pose_img
))
/
255
output_tensor
=
torch
.
cat
((
ref_pose_tensor
.
unsqueeze
(
0
),
output_tensor
))
output_tensor
=
output_tensor
.
permute
(
0
,
2
,
3
,
1
)
.
cpu
()
.
float
()
output_tensor
=
output_tensor
.
permute
(
0
,
2
,
3
,
1
)
.
cpu
()
.
float
()
return
output_tensor
,
output_tensor
[
1
:]
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论