|
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() |
|
|