|
import os
|
|
import time
|
|
from pathlib import Path
|
|
from loguru import logger
|
|
from datetime import datetime
|
|
|
|
from hyvideo.utils.file_utils import save_videos_grid
|
|
from hyvideo.config import parse_args
|
|
from hyvideo.inference import HunyuanVideoSampler
|
|
|
|
|
|
def main():
|
|
args = parse_args()
|
|
print(args)
|
|
models_root_path = Path(args.model_base)
|
|
if not models_root_path.exists():
|
|
raise ValueError(f"`models_root` not exists: {models_root_path}")
|
|
|
|
|
|
save_path = args.save_path if args.save_path_suffix=="" else f'{args.save_path}_{args.save_path_suffix}'
|
|
if not os.path.exists(args.save_path):
|
|
os.makedirs(save_path, exist_ok=True)
|
|
|
|
|
|
hunyuan_video_sampler = HunyuanVideoSampler.from_pretrained(models_root_path, args=args)
|
|
|
|
|
|
args = hunyuan_video_sampler.args
|
|
|
|
|
|
|
|
outputs = hunyuan_video_sampler.predict(
|
|
prompt=args.prompt,
|
|
height=args.video_size[0],
|
|
width=args.video_size[1],
|
|
video_length=args.video_length,
|
|
seed=args.seed,
|
|
negative_prompt=args.neg_prompt,
|
|
infer_steps=args.infer_steps,
|
|
guidance_scale=args.cfg_scale,
|
|
num_videos_per_prompt=args.num_videos,
|
|
flow_shift=args.flow_shift,
|
|
batch_size=args.batch_size,
|
|
embedded_guidance_scale=args.embedded_cfg_scale
|
|
)
|
|
samples = outputs['samples']
|
|
|
|
|
|
if 'LOCAL_RANK' not in os.environ or int(os.environ['LOCAL_RANK']) == 0:
|
|
for i, sample in enumerate(samples):
|
|
sample = samples[i].unsqueeze(0)
|
|
time_flag = datetime.fromtimestamp(time.time()).strftime("%Y-%m-%d-%H:%M:%S")
|
|
save_path = f"{save_path}/{time_flag}_seed{outputs['seeds'][i]}_{outputs['prompts'][i][:100].replace('/','')}.mp4"
|
|
save_videos_grid(sample, save_path, fps=24)
|
|
logger.info(f'Sample save to: {save_path}')
|
|
|
|
if __name__ == "__main__":
|
|
main()
|
|
|