Spaces:
Running
on
Zero
Running
on
Zero
import os, argparse | |
import sys | |
import gradio as gr | |
from scripts.gradio.i2v_test_application import Image2Video | |
import spaces | |
sys.path.insert(1, os.path.join(sys.path[0], 'lvdm')) | |
i2v_examples_interp_512 = [ | |
['prompts/512_interp/74906_1462_frame1.png', 'walking man', 50, 7.5, 1.0, 10, 123, 'prompts/512_interp/74906_1462_frame3.png'], | |
['prompts/512_interp/Japan_v2_2_062266_s2_frame1.png', '', 50, 7.5, 1.0, 10, 789, 'prompts/512_interp/Japan_v2_2_062266_s2_frame3.png'], | |
['prompts/512_interp/Japan_v2_3_119235_s2_frame1.png', 'an anime scene', 50, 7.5, 1.0, 10, 123, 'prompts/512_interp/Japan_v2_3_119235_s2_frame3.png'], | |
] | |
article = r""" | |
If ToonCrafter is helpful, please help to ⭐ the <a href='https://github.com/ToonCrafter/ToonCrafter' target='_blank'>Github Repo</a>. This is very important to open-source projects. Thanks! [![GitHub Stars](https://img.shields.io/github/stars/ToonCrafter/ToonCrafter?style=social)](https://github.com/ToonCrafter/ToonCrafter) | |
""" | |
logo = r""" | |
<center><img src='https://doubiiu.github.io/projects/ToonCrafter/static/logo2.png' alt='ToonCrafter logo' style="width:280px; margin-bottom:2px"></center> | |
""" | |
title = r""" | |
<h1 align="center">ToonCrafter: Generative Cartoon Interpolation</h1> | |
""" | |
def dynamicrafter_demo(result_dir='./tmp/', res=512): | |
if res == 1024: | |
resolution = '576_1024' | |
css = """#input_img {max-width: 1024px !important} #output_vid {max-width: 1024px; max-height:576px}""" | |
elif res == 512: | |
resolution = '320_512' | |
css = """#input_img {max-width: 512px !important} #output_vid {max-width: 512px; max-height: 320px} #input_img2 {max-width: 512px !important} #output_vid {max-width: 512px; max-height: 320px}""" | |
elif res == 256: | |
resolution = '256_256' | |
css = """#input_img {max-width: 256px !important} #output_vid {max-width: 256px; max-height: 256px}""" | |
else: | |
raise NotImplementedError(f"Unsupported resolution: {res}") | |
image2video = Image2Video(result_dir, resolution=resolution) | |
image2video.get_image = spaces.GPU(image2video.get_image, duration=120) | |
with gr.Blocks(analytics_enabled=False, css=css) as dynamicrafter_iface: | |
gr.Markdown(logo) | |
gr.Markdown(title) | |
gr.Markdown(article) | |
with gr.Tab(label='ToonCrafter_320x512'): | |
with gr.Column(): | |
with gr.Row(): | |
with gr.Column(): | |
with gr.Row(): | |
i2v_input_image = gr.Image(label="Input Image1",elem_id="input_img") | |
with gr.Row(): | |
i2v_input_text = gr.Text(label='Prompts') | |
with gr.Row(): | |
i2v_seed = gr.Slider(label='Random Seed', minimum=0, maximum=50000, step=1, value=123) | |
i2v_eta = gr.Slider(minimum=0.0, maximum=1.0, step=0.1, label='ETA', value=1.0, elem_id="i2v_eta") | |
i2v_cfg_scale = gr.Slider(minimum=1.0, maximum=15.0, step=0.5, label='CFG Scale', value=7.5, elem_id="i2v_cfg_scale") | |
with gr.Row(): | |
i2v_steps = gr.Slider(minimum=1, maximum=60, step=1, elem_id="i2v_steps", label="Sampling steps", value=50) | |
i2v_motion = gr.Slider(minimum=5, maximum=30, step=1, elem_id="i2v_motion", label="FPS", value=10) | |
i2v_end_btn = gr.Button("Generate") | |
with gr.Column(): | |
with gr.Row(): | |
i2v_input_image2 = gr.Image(label="Input Image2",elem_id="input_img2") | |
with gr.Row(): | |
i2v_output_video = gr.Video(label="Generated Video",elem_id="output_vid",autoplay=True,show_share_button=True) | |
gr.Examples(examples=i2v_examples_interp_512, | |
inputs=[i2v_input_image, i2v_input_text, i2v_steps, i2v_cfg_scale, i2v_eta, i2v_motion, i2v_seed, i2v_input_image2], | |
outputs=[i2v_output_video], | |
fn = image2video.get_image, | |
cache_examples="lazy", | |
) | |
i2v_end_btn.click(inputs=[i2v_input_image, i2v_input_text, i2v_steps, i2v_cfg_scale, i2v_eta, i2v_motion, i2v_seed, i2v_input_image2], | |
outputs=[i2v_output_video], | |
fn = image2video.get_image | |
) | |
return dynamicrafter_iface | |
def get_parser(): | |
parser = argparse.ArgumentParser() | |
return parser | |
if __name__ == "__main__": | |
parser = get_parser() | |
args = parser.parse_args() | |
result_dir = os.path.join('./', 'results') | |
dynamicrafter_iface = dynamicrafter_demo(result_dir) | |
#dynamicrafter_iface.queue(max_size=12) | |
dynamicrafter_iface.launch() | |
# dynamicrafter_iface.launch(server_name='0.0.0.0', server_port=80, max_threads=1) |