Spaces:
Running
on
Zero
Running
on
Zero
| import spaces | |
| import os | |
| import sys | |
| import shutil | |
| import uuid | |
| import subprocess | |
| import gradio as gr | |
| import shutil | |
| from glob import glob | |
| from huggingface_hub import snapshot_download, hf_hub_download | |
| # Download models | |
| os.makedirs("pretrained_weights", exist_ok=True) | |
| # List of subdirectories to create inside "checkpoints" | |
| subfolders = [ | |
| "stable-video-diffusion-img2vid-xt" | |
| ] | |
| # Create each subdirectory | |
| for subfolder in subfolders: | |
| os.makedirs(os.path.join("pretrained_weights", subfolder), exist_ok=True) | |
| snapshot_download( | |
| repo_id = "stabilityai/stable-video-diffusion-img2vid-xt", | |
| local_dir = "./pretrained_weights/stable-video-diffusion-img2vid-xt" | |
| ) | |
| snapshot_download( | |
| repo_id = "Yhmeng1106/anidoc", | |
| local_dir = "./pretrained_weights" | |
| ) | |
| hf_hub_download( | |
| repo_id = "facebook/cotracker", | |
| filename = "cotracker2.pth", | |
| local_dir = "./pretrained_weights" | |
| ) | |
| def generate(control_sequence, ref_image, progress=gr.Progress(track_tqdm=True)): | |
| control_image = control_sequence # "data_test/sample4.mp4" | |
| ref_image = ref_image # "data_test/sample4.png" | |
| unique_id = str(uuid.uuid4()) | |
| output_dir = f"results_{unique_id}" | |
| try: | |
| # Run the inference command | |
| subprocess.run( | |
| [ | |
| "python", "scripts_infer/anidoc_inference.py", | |
| "--all_sketch", | |
| "--matching", | |
| "--tracking", | |
| "--control_image", f"{control_image}", | |
| "--ref_image", f"{ref_image}", | |
| "--output_dir", f"{output_dir}", | |
| "--max_point", "10", | |
| ], | |
| check=True | |
| ) | |
| # Search for the mp4 file in a subfolder of output_dir | |
| output_video = glob(os.path.join(output_dir,"*.mp4")) | |
| print(output_video) | |
| if output_video: | |
| output_video_path = output_video[0] # Get the first match | |
| else: | |
| output_video_path = None | |
| print(output_video_path) | |
| return output_video_path | |
| except subprocess.CalledProcessError as e: | |
| raise gr.Error(f"Error during inference: {str(e)}") | |
| css=""" | |
| div#col-container{ | |
| margin: 0 auto; | |
| max-width: 982px; | |
| } | |
| """ | |
| with gr.Blocks(css=css) as demo: | |
| with gr.Column(elem_id="col-container"): | |
| gr.Markdown("# AniDoc: Animation Creation Made Easier") | |
| gr.Markdown("AniDoc colorizes a sequence of sketches based on a character design reference with high fidelity, even when the sketches significantly differ in pose and scale.") | |
| gr.HTML(""" | |
| <div style="display:flex;column-gap:4px;"> | |
| <a href="https://github.com/yihao-meng/AniDoc"> | |
| <img src='https://img.shields.io/badge/GitHub-Repo-blue'> | |
| </a> | |
| <a href="https://yihao-meng.github.io/AniDoc_demo/"> | |
| <img src='https://img.shields.io/badge/Project-Page-green'> | |
| </a> | |
| <a href="https://arxiv.org/pdf/2412.14173"> | |
| <img src='https://img.shields.io/badge/ArXiv-Paper-red'> | |
| </a> | |
| <a href="https://huggingface.co/spaces/fffiloni/AniDoc?duplicate=true"> | |
| <img src="https://huggingface.co/datasets/huggingface/badges/resolve/main/duplicate-this-space-sm.svg" alt="Duplicate this Space"> | |
| </a> | |
| <a href="https://huggingface.co/fffiloni"> | |
| <img src="https://huggingface.co/datasets/huggingface/badges/resolve/main/follow-me-on-HF-sm-dark.svg" alt="Follow me on HF"> | |
| </a> | |
| </div> | |
| """) | |
| with gr.Row(): | |
| with gr.Column(): | |
| control_sequence = gr.Video(label="Control Sequence", format="mp4") | |
| ref_image = gr.Image(label="Reference Image", type="filepath") | |
| submit_btn = gr.Button("Submit") | |
| with gr.Column(): | |
| video_result = gr.Video(label="Result") | |
| gr.Examples( | |
| examples = [ | |
| ["data_test/sample1.mp4", "custom_examples/sample1.png"], | |
| ["data_test/sample2.mp4", "custom_examples/sample2.png"], | |
| ["data_test/sample3.mp4", "custom_examples/sample3.png"], | |
| ["data_test/sample4.mp4", "custom_examples/sample4.png"] | |
| ], | |
| inputs = [control_sequence, ref_image] | |
| ) | |
| submit_btn.click( | |
| fn = generate, | |
| inputs = [control_sequence, ref_image], | |
| outputs = [video_result] | |
| ) | |
| demo.queue().launch(ssr_mode=False, show_api=False, show_error=True) | |