File size: 3,551 Bytes
6fef025
fff7b0b
f5b8400
 
6fef025
f5b8400
 
 
 
 
 
 
 
 
 
 
6fef025
f5b8400
6fef025
ddefd41
f5b8400
6fef025
f5b8400
 
6fef025
f5b8400
 
fff7b0b
6fef025
f5b8400
 
 
fff7b0b
 
 
6fef025
fff7b0b
 
 
6fef025
f5b8400
fff7b0b
 
 
 
 
3977ac5
fff7b0b
3977ac5
 
 
8f8f343
3977ac5
 
 
 
 
fff7b0b
8f8f343
fff7b0b
 
 
 
 
8f8f343
fff7b0b
 
 
 
 
8f8f343
fff7b0b
 
8f8f343
fff7b0b
654d3d1
 
fff7b0b
 
 
 
 
 
 
 
 
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
import gradio as gr
import moviepy.editor as mp
from random import randint
from all_models import models

def load_fn(models):
    global models_load
    models_load = {}
    
    for model in models:
        if model not in models_load.keys():
            try:
                m = gr.load(f'models/{model}')
            except Exception as error:
                m = gr.Interface(lambda txt: None, ['text'], ['image'])
            models_load.update({model: m})

load_fn(models)

num_models = 100
default_models = models[:num_models]

def extend_choices(choices):
    return choices + (num_models - len(choices)) * ['NA']

def update_imgbox(choices):
    choices_plus = extend_choices(choices)
    return [gr.Image(None, label=m, visible=(m != 'NA')) for m in choices_plus]

def gen_fn(model_str, prompt):
    if model_str == 'NA':
        return None
    noise = str(randint(0, 99999999999))
    img = models_load[model_str](f'{prompt} {noise}')
    return img

def create_video(images, fps=24):
    clip = mp.ImageSequenceClip(images, fps=fps)
    return clip

with gr.Blocks() as demo:
    with gr.Tab('The Dream'):
        txt_input = gr.Textbox(label='Your prompt:', lines=4).style(container=False, min_width=1200)
        gen_button = gr.Button('Generate images and create video')
        stop_button = gr.Button('Stop', variant='secondary', interactive=False)
        gen_button.click(lambda s: gr.update(interactive=True), None, stop_button)
        gr.HTML(
            """
            <div style="text-align: center; max-width: 1200px; margin: 0 auto;">
              <div>
                <body>
                <div class="center"><p style="margin-bottom: 10px; color: #000000;">Scroll down to see more images and select models.</p>
                </div>
                </body>
              </div>
            </div>
        """
        )
        with gr.Row():
            output_images = [gr.Image(label=m, min_width=480) for m in default_models]
            current_models = [gr.Textbox(m, visible=False) for m in default_models]
            output_video = gr.Video(label='Generated Video')
            
            for m, o in zip(current_models, output_images):
                gen_event = gen_button.click(gen_fn, [m, txt_input], o)
                stop_button.click(lambda s: gr.update(interactive=False), None, stop_button, cancels=[gen_event])
            
            gen_video_event = gen_button.click(lambda s: create_video([o.data for o in output_images if o.data is not None]), None, output_video)
            stop_button.click(lambda s: gr.update(interactive=False), None, stop_button, cancels=[gen_video_event])

        with gr.Accordion('Model selection'):
            model_choice = gr.CheckboxGroup(models, label=f'Choose up to {num_models} different models from the 755 available!', value=default_models, multiselect=True, max_choices=num_models, interactive=True, filterable=False)
            model_choice.change(update_imgbox, model_choice, output_images)
            model_choice.change(extend_choices, model_choice, current_models)
        
        with gr.Row():
            gr.HTML(
                """
                <div class="footer">
                <p> Based on the <a href="https://huggingface.co/spaces/derwahnsinn/TestGen">TestGen</a> Space by derwahnsinn, the <a href="https://huggingface.co/spaces/RdnUser77/SpacIO_v1">SpacIO</a> Space by RdnUser77 and Omnibus's Maximum Multiplier!
                </p>
                """
            )

    demo.queue(concurrency_count=200)
    demo.launch()