| import gradio as gr |
| from huggingface_hub import hf_hub_download, snapshot_download |
| import subprocess |
| import tempfile |
| import shutil |
| import os |
| import spaces |
| import importlib |
| from transformers import T5ForConditionalGeneration, T5Tokenizer |
| import os |
|
|
| def download_t5_model(model_id, save_directory): |
| |
| if not os.path.exists(save_directory): |
| os.makedirs(save_directory) |
| snapshot_download(repo_id="DeepFloyd/t5-v1_1-xxl",local_dir=save_directory, local_dir_use_symlinks=False) |
|
|
| |
| model_id = "DeepFloyd/t5-v1_1-xxl" |
| save_directory = "pretrained_models/t5_ckpts/t5-v1_1-xxl" |
|
|
| |
| download_t5_model(model_id, save_directory) |
|
|
| def download_model(repo_id, model_name): |
| model_path = hf_hub_download(repo_id=repo_id, filename=model_name) |
| return model_path |
|
|
| import glob |
|
|
| subprocess.run('pip install flash-attn --no-build-isolation', env={'FLASH_ATTENTION_SKIP_CUDA_BUILD': "TRUE"}, shell=True) |
| repo_id = "hpcai-tech/Open-Sora" |
|
|
| |
| model_name = "OpenSora-v1-HQ-16x512x512.pth" |
| config_mapping = { |
| "OpenSora-v1-16x256x256.pth": "configs/opensora/inference/16x256x256.py", |
| "OpenSora-v1-HQ-16x256x256.pth": "configs/opensora/inference/16x512x512.py", |
| "OpenSora-v1-HQ-16x512x512.pth": "configs/opensora/inference/64x512x512.py" |
| } |
|
|
| config_path = config_mapping[model_name] |
| ckpt_path = download_model(repo_id, model_name) |
|
|
| @spaces.GPU(duration=200) |
| def run_inference(prompt_text): |
|
|
| |
| prompt_file = tempfile.NamedTemporaryFile(delete=False, suffix=".txt", mode='w') |
| prompt_file.write(prompt_text) |
| prompt_file.close() |
|
|
| with open(config_path, 'r') as file: |
| config_content = file.read() |
| config_content = config_content.replace('prompt_path = "./assets/texts/t2v_samples.txt"', f'prompt_path = "{prompt_file.name}"') |
| |
| with tempfile.NamedTemporaryFile('w', delete=False, suffix='.py') as temp_file: |
| temp_file.write(config_content) |
| temp_config_path = temp_file.name |
|
|
| cmd = [ |
| "torchrun", "--standalone", "--nproc_per_node", "1", |
| "scripts/inference.py", temp_config_path, |
| "--ckpt-path", ckpt_path |
| ] |
| subprocess.run(cmd) |
|
|
| save_dir = "./outputs/samples/" |
| list_of_files = glob.glob(f'{save_dir}/*') |
| if list_of_files: |
| latest_file = max(list_of_files, key=os.path.getctime) |
| return latest_file |
| else: |
| print("No files found in the output directory.") |
| return None |
|
|
| |
| os.remove(temp_file.name) |
| os.remove(prompt_file.name) |
|
|
| def main(): |
| with gr.Blocks() as demo: |
| with gr.Row(): |
| with gr.Column(): |
| gr.HTML( |
| """ |
| <h1 style='text-align: center'> |
| Open-Sora: Democratizing Efficient Video Production for All |
| </h1> |
| """ |
| ) |
| gr.HTML( |
| """ |
| <h3 style='text-align: center'> |
| Follow me for more! |
| <a href='https://twitter.com/kadirnar_ai' target='_blank'>Twitter</a> | <a href='https://github.com/kadirnar' target='_blank'>Github</a> | <a href='https://www.linkedin.com/in/kadir-nar/' target='_blank'>Linkedin</a> |
| </h3> |
| """ |
| ) |
|
|
| with gr.Row(): |
| with gr.Column(): |
| prompt_text = gr.Textbox(show_label=False, placeholder="Enter prompt text here", lines=4) |
| submit_button = gr.Button("Run Inference") |
|
|
| with gr.Column(): |
| output_video = gr.Video() |
|
|
| submit_button.click( |
| fn=run_inference, |
| inputs=[prompt_text], |
| outputs=output_video |
| ) |
| gr.Examples( |
| examples=[ |
| [ |
| "A serene underwater scene featuring a sea turtle swimming through a coral reef. The turtle, with its greenish-brown shell, is the main focus of the video, swimming gracefully towards the right side of the frame. The coral reef, teeming with life, is visible in the background, providing a vibrant and colorful backdrop to the turtle's journey. Several small fish, darting around the turtle, add a sense of movement and dynamism to the scene. The video is shot from a slightly elevated angle, providing a comprehensive view of the turtle's surroundings. The overall style of the video is calm and peaceful, capturing the beauty and tranquility of the underwater world.", |
| ], |
| ], |
| fn=run_inference, |
| inputs=[prompt_text,], |
| outputs=[output_video], |
| cache_examples=True, |
| ) |
|
|
| demo.launch(debug=True) |
|
|
| if __name__ == "__main__": |
| main() |
|
|