|
from diffsynth import ModelManager, SDVideoPipeline, ControlNetConfigUnit, VideoData, save_video, save_frames |
|
from diffsynth.extensions.RIFE import RIFESmoother |
|
import torch |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
model_manager = ModelManager(torch_dtype=torch.float16, device="cuda") |
|
model_manager.load_textual_inversions("models/textual_inversion") |
|
model_manager.load_models([ |
|
"models/stable_diffusion/flat2DAnimerge_v45Sharp.safetensors", |
|
"models/AnimateDiff/mm_sd_v15_v2.ckpt", |
|
"models/ControlNet/control_v11p_sd15_lineart.pth", |
|
"models/ControlNet/control_v11f1e_sd15_tile.pth", |
|
"models/RIFE/flownet.pkl" |
|
]) |
|
pipe = SDVideoPipeline.from_model_manager( |
|
model_manager, |
|
[ |
|
ControlNetConfigUnit( |
|
processor_id="lineart", |
|
model_path="models/ControlNet/control_v11p_sd15_lineart.pth", |
|
scale=0.5 |
|
), |
|
ControlNetConfigUnit( |
|
processor_id="tile", |
|
model_path="models/ControlNet/control_v11f1e_sd15_tile.pth", |
|
scale=0.5 |
|
) |
|
] |
|
) |
|
smoother = RIFESmoother.from_model_manager(model_manager) |
|
|
|
|
|
|
|
video = VideoData( |
|
video_file="data/bilibili_videos/៸៸᳐_⩊_៸៸᳐ 66 微笑调查队🌻/៸៸᳐_⩊_៸៸᳐ 66 微笑调查队🌻 - 1.66 微笑调查队🌻(Av278681824,P1).mp4", |
|
height=1024, width=1024) |
|
input_video = [video[i] for i in range(40*60, 41*60)] |
|
|
|
|
|
torch.manual_seed(0) |
|
output_video = pipe( |
|
prompt="best quality, perfect anime illustration, light, a girl is dancing, smile, solo", |
|
negative_prompt="verybadimagenegative_v1.3", |
|
cfg_scale=3, clip_skip=2, |
|
controlnet_frames=input_video, num_frames=len(input_video), |
|
num_inference_steps=10, height=1024, width=1024, |
|
animatediff_batch_size=32, animatediff_stride=16, |
|
vram_limit_level=0, |
|
) |
|
output_video = smoother(output_video) |
|
|
|
|
|
save_video(output_video, "output_video.mp4", fps=60) |
|
|