Spaces:
Runtime error
Runtime error
| import torch | |
| from huggingface_hub import hf_hub_download | |
| from pathlib import Path | |
| import os | |
| from videogen_hub import MODEL_PATH | |
| class VideoCrafter2(): | |
| def __init__(self, device="cuda"): | |
| """ | |
| 1. Download the pretrained model and put it inside MODEL_PATH/videocrafter2 | |
| 2. Create Pipeline | |
| Args: | |
| device: 'cuda' or 'cpu' the device to use the model | |
| """ | |
| from videogen_hub.pipelines.videocrafter.inference import VideoCrafterPipeline | |
| model_path = hf_hub_download(repo_id="VideoCrafter/VideoCrafter2", | |
| filename="model.ckpt", | |
| local_dir=os.path.join(MODEL_PATH, "videocrafter2")) | |
| config_path = str(Path(__file__).parent.parent.absolute()) | |
| config_path = os.path.join(config_path, 'pipelines/videocrafter/inference_t2v_512_v2.0.yaml') | |
| arg_list = ['--mode', 'base', | |
| '--ckpt_path', model_path, | |
| '--config', config_path, | |
| '--n_samples', '1', | |
| '--bs', '1', | |
| '--unconditional_guidance_scale', '12.0', | |
| '--ddim_steps', '50', | |
| '--ddim_eta', '1.0', | |
| '--fps', '8'] | |
| self.pipeline = VideoCrafterPipeline(arg_list, device, 0, 1) | |
| def infer_one_video(self, | |
| prompt: str = None, | |
| size: list = [320, 512], | |
| seconds: int = 2, | |
| fps: int = 8, | |
| seed: int = 42): | |
| """ | |
| Generates a single video based on the provided prompt and parameters. | |
| Args: | |
| prompt (str, optional): The text prompt to generate the video from. Defaults to None. | |
| size (list, optional): The size of the video as [height, width]. Defaults to [320, 512]. | |
| seconds (int, optional): The duration of the video in seconds. Defaults to 2. | |
| fps (int, optional): The frames per second of the video. Defaults to 8. | |
| seed (int, optional): The seed for random number generation. Defaults to 42. | |
| Returns: | |
| torch.Tensor: The generated video as a tensor, the shape being [num_frames, 3, height, width] | |
| """ | |
| torch.manual_seed(seed) | |
| video = self.pipeline.run_inference(prompt, | |
| video_length=seconds * fps, | |
| height=size[0], | |
| width=size[1]) | |
| return video.squeeze(0, 1).cpu().permute(1, 0, 2, 3) | |