File size: 10,873 Bytes
c0b6d7e
 
0f0f3e0
2a651a9
c0b6d7e
d4778c5
 
 
 
 
 
 
c0b6d7e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6b0140b
 
 
 
c0b6d7e
 
bc2fb74
c0b6d7e
 
bc2fb74
 
 
c0b6d7e
 
3fce290
 
202b8a5
 
3fce290
bc2fb74
c0b6d7e
 
82b8988
 
 
bc2fb74
82b8988
202b8a5
82b8988
bc2fb74
82b8988
202b8a5
82b8988
bc2fb74
82b8988
 
 
bc2fb74
82b8988
c0b6d7e
9cb7448
c0b6d7e
 
9cb7448
c0b6d7e
 
bc2fb74
c0b6d7e
 
202b8a5
c0b6d7e
202b8a5
c0b6d7e
bc2fb74
c0b6d7e
bc2fb74
c0b6d7e
bc2fb74
 
 
 
 
 
c0b6d7e
 
a529f7a
 
ebab327
 
a529f7a
 
c0b6d7e
 
 
a529f7a
 
 
 
 
 
 
 
1ef4f73
a529f7a
 
1ef4f73
c0b6d7e
 
 
 
 
 
 
d4778c5
c0b6d7e
 
 
 
 
 
 
 
 
 
 
d4778c5
c0b6d7e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
168d548
64f5bc1
c0b6d7e
64f5bc1
c0b6d7e
 
 
 
 
 
 
 
 
 
168d548
c0b6d7e
 
 
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
import gradio as gr
import os
import torch
import modules.wdtagger

from modules.model import get_model_and_vae_options
from modules.text2img import generate_image_wrapper

# Mendapatkan daftar model dan VAE untuk dropdown
all_models, all_vaes = get_model_and_vae_options()


# Daftar model dan ControlNet
models = ["Model A", "Model B", "Model C"]
vae = ["VAE A", "VAE B", "VAE C"]
controlnet_types = ["Canny", "Depth", "Normal", "Pose"]
schedulers = ["Euler", "LMS", "DDIM"]


# Fungsi placeholder
def load_model(selected_model):
    return f"Model {selected_model} telah dimuat."

def generate_image(prompt, neg_prompt, width, height, scheduler, num_steps, num_images, cfg_scale, seed, model):
    # Logika untuk menghasilkan gambar dari teks menggunakan model
    return [f"Gambar {i+1} untuk prompt '{prompt}' dengan model '{model}'" for i in range(num_images)], {"prompt": prompt, "neg_prompt": neg_prompt}

def process_image(image, prompt, neg_prompt, model):
    # Logika untuk memproses gambar menggunakan model
    return f"Proses gambar dengan prompt '{prompt}' dan model '{model}'"

def controlnet_process(image, controlnet_type, model):
    # Logika untuk memproses gambar menggunakan ControlNet
    return f"Proses gambar dengan ControlNet '{controlnet_type}' dan model '{model}'"


def controlnet_process_func(image, controlnet_type, model):
    # Update fungsi sesuai kebutuhan
    return controlnet_process(image, controlnet_type, model)

def intpaint_func (image, controlnet_type, model):
    # Update fungsi sesuai kebutuhan
    return controlnet_process(image, controlnet_type, model)
       
def intpaint_func (image, controlnet_type, model):
    # Update fungsi sesuai kebutuhan
    return controlnet_process(image, controlnet_type, model)


with gr.Blocks(css="style.css") as app:
    # Dropdown untuk memilih model di luar tab dengan lebar kecil
    with gr.Row():
        checkpoint_dropdown = gr.Dropdown(choices=all_models, label="Model", value=all_models[0])
        vae_dropdown = gr.Dropdown(choices=all_vaes, label="VAE", value=all_vaes[0])

    # Tab untuk Text-to-Image
    with gr.Tab("Text-to-Image"):
        with gr.Row():
            with gr.Column(scale=1):
                prompt_input = gr.Textbox(label="Prompt", placeholder="Enter Prompt", lines=2, elem_id="prompt-input")
                neg_prompt_input = gr.Textbox(label="Negative prompt", placeholder="Enter Negative Prompt (optional)", lines=2, elem_id="neg-prompt-input")
            generate_button = gr.Button("Generate", elem_id="generate-button", scale=0.13)

        with gr.Row():
            with gr.Column():
                with gr.Row():
                    scheduler_input = gr.Dropdown(choices=schedulers, label="Sampling method", value=schedulers[0])
                    seed_input = gr.Number(label="Seed", value=-1)

                with gr.Row():
                    width_input = gr.Slider(minimum=128, maximum=2048, step=128, label="Width", value=1024)
                    batch_size = gr.Slider(minimum=1, maximum=24, step=1, label="Batch size", value=1)

                with gr.Row():
                    height_input = gr.Slider(minimum=128, maximum=2048, step=128, label="Height", value=1024)
                    batch_count = gr.Slider(minimum=1, maximum=24, step=1, label="Batch Count", value=1)

                with gr.Row():
                    num_steps_input = gr.Slider(minimum=1, maximum=100, step=1, label="Sampling steps", value=20)
                    cfg_scale_input = gr.Slider(minimum=1, maximum=20, step=1, label="CFG Scale", value=7)

                with gr.Accordion("Hires. fix", open=False):
                    use_hires = gr.Checkbox(label="Use Hires?", value=False, scale=0)
                    with gr.Row():
                        upscaler = gr.Dropdown(choices=schedulers, label="Upscaler", value=schedulers[0])
                        upscale_by = gr.Slider(minimum=1, maximum=8, step=1, label="Upscale by", value=2)
                    with gr.Row():
                        hires_steps = gr.Slider(minimum=1, maximum=50, step=1, label="Hires Steps", value=20)
                        denois_strength = gr.Slider(minimum=0, maximum=1, step=0.02, label="Denoising Strength", value=2)

            with gr.Column():
                # Gallery untuk output gambar
                output_gallery = gr.Gallery(label="Image Results")
                # Output teks JSON di bawah gallery
                output_text = gr.Textbox(label="Metadata", placeholder="Results are in Json format", lines=2)

        def update_images(prompt, neg_prompt, width, height, scheduler, num_steps, batch_size, batch_count, cfg_scale, seed, model, vae):
            # Update fungsi sesuai kebutuhan
            return generate_image_wrapper(prompt, neg_prompt, width, height, scheduler, num_steps, batch_size, batch_count, cfg_scale, seed, model, vae)

        generate_button.click(
            fn=update_images, 
            inputs=[prompt_input, neg_prompt_input, width_input, height_input, scheduler_input, num_steps_input, batch_size, batch_count, cfg_scale_input, seed_input, checkpoint_dropdown, vae_dropdown], 
            outputs=[output_gallery, output_text]
        )
        
    # Tab untuk Image-to-Image
    with gr.Tab("Image-to-Image"):
        with gr.Row():
            with gr.Column(scale=1):
                prompt_input_i2i = gr.Textbox(label="Prompt", placeholder="Masukkan prompt teks", lines=2, elem_id="prompt-input")
                neg_prompt_input_i2i = gr.Textbox(label="Neg Prompt", placeholder="Masukkan negasi prompt", lines=2, elem_id="neg-prompt-input")
            generate_button = gr.Button("Generate", elem_id="generate-button", scale=0.13)
        
        with gr.Row():
            with gr.Column():
                image_input = gr.Image(label="Unggah Gambar")
                generate_button_i2i = gr.Button("Generate")
                with gr.Row():
                    scheduler_input = gr.Dropdown(choices=schedulers, label="Sampling method", value=schedulers[0])
                    seed_input = gr.Number(label="Seed", value=-1)
                
                with gr.Row():
                    steps = gr.Slider(minimum=1, maximum=100, step=1, label="Steps", value=20)
                    cfg_scale = gr.Slider(minimum=1, maximum=24, step=1, label="CFG Scale", value=7)
                    
                with gr.Row():
                    strength = gr.Slider(minimum=0, maximum=1, step=0.1, label="Strength", value=0.6)
            
            with gr.Column():
                output_image_i2i = gr.Image(label="Hasil Gambar")
        
        def process_image_func(image, prompt, neg_prompt, model):
            # Update fungsi sesuai kebutuhan
            return process_image(image, prompt, neg_prompt, model)
        
        generate_button_i2i.click(fn=process_image_func, inputs=[image_input, prompt_input_i2i, neg_prompt_input_i2i, checkpoint_dropdown, vae_dropdown], outputs=output_image_i2i)

    # Tab untuk ControlNet
    with gr.Tab("ControlNet"):
        with gr.Row():
            with gr.Column():
                controlnet_dropdown = gr.Dropdown(choices=controlnet_types, label="Pilih Tipe ControlNet")
                controlnet_image_input = gr.Image(label="Unggah Gambar untuk ControlNet")
                controlnet_button = gr.Button("Proses dengan ControlNet")
            
            with gr.Column():
                controlnet_output_image = gr.Image(label="Hasil ControlNet")
        controlnet_button.click(fn=controlnet_process_func, inputs=[controlnet_image_input, controlnet_dropdown, checkpoint_dropdown, vae_dropdown], outputs=controlnet_output_image)

    # Tab untuk Intpainting
    with gr.Tab ("Inpainting"):
        with gr.Row():
            with gr.Column():
                image = gr.ImageMask(sources=["upload"], layers=False, transforms=[], format="png", label="base image", show_label=True)
                btn = gr.Button("Inpaint!", elem_id="run_button")
                prompt = gr.Textbox(placeholder="Your prompt (what you want in place of what is erased)", show_label=False, elem_id="prompt")
                negative_prompt = gr.Textbox(label="negative_prompt", placeholder="Your negative prompt", info="what you don't want to see in the image")
                guidance_scale = gr.Number(value=7.5, minimum=1.0, maximum=20.0, step=0.1, label="guidance_scale")
                steps = gr.Number(value=20, minimum=10, maximum=30, step=1, label="steps")
                strength = gr.Number(value=0.99, minimum=0.01, maximum=1.0, step=0.01, label="strength")
                scheduler = gr.Dropdown(label="Schedulers", choices=schedulers, value="EulerDiscreteScheduler")
            with gr.Column():
                image_out = gr.Image(label="Output", elem_id="output-img")
                   
    btn.click(fn=intpaint_func, inputs=[image, prompt, negative_prompt, guidance_scale, steps, strength, scheduler], outputs=[image_out])
    


    
    # Tab untuk Describe
    with gr.Tab("Describe"):
        with gr.Row():
            with gr.Column():
                # Components
                image = gr.Image(type="pil", image_mode="RGBA", label="Input")
                submit_button = gr.Button(value="Submit", variant="primary", size="lg")
                model_repo = gr.Dropdown(modules.wdtagger.dropdown_list, value=modules.wdtagger.dropdown_list[0], label="Model")
                general_thresh = gr.Slider(0, 1, step=modules.wdtagger.args.score_slider_step, value=modules.wdtagger.args.score_general_threshold, label="General Tags Threshold", scale=3)
                general_mcut_enabled = gr.Checkbox(value=False, label="Use MCut threshold", scale=1)
                character_thresh = gr.Slider(0, 1, step=modules.wdtagger.args.score_slider_step, value=modules.wdtagger.args.score_character_threshold, label="Character Tags Threshold", scale=3)
                character_mcut_enabled = gr.Checkbox(value=False, label="Use MCut threshold", scale=1)
                clear_button = gr.ClearButton(components=[image, model_repo, general_thresh, general_mcut_enabled, character_thresh, character_mcut_enabled], variant="secondary", size="lg")
                
            with gr.Column():
                sorted_general_strings = gr.Textbox(label="Output (string)")
                rating = gr.Label(label="Rating")
                character_res = gr.Label(label="Output (characters)")
                general_res = gr.Label(label="Output (tags)")
        
        clear_button.add([sorted_general_strings, rating, character_res, general_res])
        submit_button.click(modules.wdtagger.predictor.predict, inputs=[image, model_repo, general_thresh, general_mcut_enabled, character_thresh, character_mcut_enabled], outputs=[sorted_general_strings, rating, character_res, general_res])

# Jalankan antarmuka
app.launch()