File size: 6,519 Bytes
75f2d00
 
 
4ee9945
0757c55
 
3ab49e3
75f2d00
1e5bda6
 
 
 
 
 
 
 
 
 
32619a4
1e5bda6
 
75f2d00
 
0757c55
75f2d00
4a341a4
32619a4
4ee9945
 
1e5bda6
 
75f2d00
1e5bda6
 
 
 
 
 
 
8cdb359
1e5bda6
 
 
 
 
fe42b63
1e5bda6
 
 
 
 
 
4a341a4
75f2d00
 
1e5bda6
75f2d00
 
1e5bda6
 
 
 
 
 
fe42b63
 
 
1e5bda6
 
 
 
 
 
8cdb359
8531aba
32619a4
 
 
1e5bda6
 
 
fe42b63
 
 
1e5bda6
 
32619a4
fe42b63
1e5bda6
fe42b63
1e5bda6
32619a4
fe42b63
1e5bda6
 
 
75f2d00
 
 
 
 
8531aba
0757c55
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import os
import sys
import gradio as gr
# from demo_test import Text2Video, VideoControl
from videocrafter_test import Text2Video
from videocontrol_test import VideoControl
sys.path.insert(1, os.path.join(sys.path[0], 'lvdm'))

t2v_examples = [
    ['an elephant is walking under the sea, 4K, high definition',50,'origin',1,15,1,],
    ['an astronaut riding a horse in outer space',25,'origin',1,15,1,],
    ['a monkey is playing a piano',25,'vangogh',1,15,1,],
    ['A fire is burning on a candle',25,'frozen',1,15,1,],
    ['a horse is drinking in the river',25,'yourname',1,15,1,],
    ['Robot dancing in times square',25,'coco',1,15,1,],                    
]

control_examples = [
    ['input/flamingo.mp4', 'An ostrich walking in the desert, photorealistic, 4k', 0, 50, 15, 1, 16, 256]
]

def videocrafter_demo(result_dir='./tmp/'):
    text2video = Text2Video(result_dir)
    videocontrol = VideoControl(result_dir)
    with gr.Blocks(analytics_enabled=False) as videocrafter_iface:
        gr.Markdown("<div align='center'> <h2> VideoCrafter: A Toolkit for Text-to-Video Generation and Editing </span> </h2> \
                     <a style='font-size:18px;color: #000000' href='https://github.com/VideoCrafter/VideoCrafter'> Github </div>")
        
        gr.Markdown("<b> You may duplicate the space and upgrade to GPU in settings for better performance and faster inference without waiting in the queue. <a style='display:inline-block' href='https://huggingface.co/spaces/VideoCrafter/VideoCrafter?duplicate=true'> <img src='https://bit.ly/3gLdBN6' alt='Duplicate Space'></a> </b>")
        #######t2v#######
        with gr.Tab(label="Text2Video"):
            with gr.Column():
                with gr.Row().style(equal_height=False):
                    with gr.Column():
                        input_text = gr.Text(label='Prompts')
                        model_choices=['origin','vangogh','frozen','yourname', 'coco']
                        with gr.Row():
                            model_index = gr.Dropdown(label='Models', elem_id=f"model", choices=model_choices, value=model_choices[0], type="index",interactive=True)
                        with gr.Row():
                            steps = gr.Slider(minimum=1, maximum=60, step=1, elem_id=f"steps", label="Sampling steps", value=50)
                            eta = gr.Slider(minimum=0.0, maximum=1.0, step=0.1, label='ETA', value=1.0, elem_id="eta")
                        with gr.Row():
                            lora_scale = gr.Slider(minimum=0.0, maximum=2.0, step=0.1, label='Lora Scale', value=1.0, elem_id="lora_scale")
                            cfg_scale = gr.Slider(minimum=1.0, maximum=30.0, step=0.5, label='CFG Scale', value=15.0, elem_id="cfg_scale")
                        send_btn = gr.Button("Send")
                    with gr.Tab(label='result'):
                        output_video_1 =  gr.Video().style(width=384)
                gr.Examples(examples=t2v_examples,
                            inputs=[input_text,steps,model_index,eta,cfg_scale,lora_scale],
                            outputs=[output_video_1],
                            fn=text2video.get_prompt,
                            cache_examples=False)
                        #cache_examples=os.getenv('SYSTEM') == 'spaces')
            send_btn.click(
                fn=text2video.get_prompt, 
                inputs=[input_text,steps,model_index,eta,cfg_scale,lora_scale,],
                outputs=[output_video_1],
            )
        #######videocontrol######
        with gr.Tab(label='VideoControl'):
            with gr.Column():
                with gr.Row():
                    # with gr.Tab(label='input'):
                    with gr.Column():
                        with gr.Row():
                            vc_input_video = gr.Video(label="Input Video").style(width=256)
                            vc_origin_video = gr.Video(label='Center-cropped Video').style(width=256)
                        with gr.Row():
                            vc_input_text = gr.Text(label='Prompts')
                        with gr.Row():
                            vc_eta = gr.Slider(minimum=0.0, maximum=1.0, step=0.1, label='ETA', value=1.0, elem_id="vc_eta")
                            vc_cfg_scale = gr.Slider(minimum=1.0, maximum=30.0, step=0.5, label='CFG Scale', value=15.0, elem_id="vc_cfg_scale")
                        with gr.Row():
                            vc_steps = gr.Slider(minimum=1, maximum=60, step=1, elem_id="vc_steps", label="Sampling steps", value=50)
                            frame_stride = gr.Slider(minimum=0 , maximum=100, step=1, label='Frame Stride', value=0, elem_id="vc_frame_stride")
                        with gr.Row():
                            resolution = gr.Slider(minimum=128 , maximum=512, step=8, label='Long Side Resolution', value=256, elem_id="vc_resolution")
                            video_frames = gr.Slider(minimum=8 , maximum=64, step=1, label='Video Frame Num', value=16, elem_id="vc_video_frames")
                        vc_end_btn = gr.Button("Send")
                    with gr.Tab(label='Result'):
                        vc_output_info = gr.Text(label='Info')
                        with gr.Row():
                            vc_depth_video = gr.Video(label="Depth Video").style(width=256)
                            vc_output_video = gr.Video(label="Generated Video").style(width=256)

                gr.Examples(examples=control_examples,
                            inputs=[vc_input_video, vc_input_text, frame_stride, vc_steps, vc_cfg_scale, vc_eta, video_frames, resolution],
                            outputs=[vc_output_info, vc_origin_video, vc_depth_video, vc_output_video],
                            fn = videocontrol.get_video,
                            cache_examples=os.getenv('SYSTEM') == 'spaces',
                )
            vc_end_btn.click(inputs=[vc_input_video, vc_input_text, frame_stride, vc_steps, vc_cfg_scale, vc_eta, video_frames, resolution],
                            outputs=[vc_output_info, vc_origin_video, vc_depth_video, vc_output_video],
                            fn = videocontrol.get_video
            )

    return videocrafter_iface

if __name__ == "__main__":
    result_dir = os.path.join('./', 'results')
    videocrafter_iface = videocrafter_demo(result_dir)
    videocrafter_iface.queue(concurrency_count=1, max_size=10)
    videocrafter_iface.launch()
    # videocrafter_iface.launch(server_name='0.0.0.0', server_port=80)