File size: 10,582 Bytes
c0b6d7e
 
2a651a9
c0b6d7e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6b0140b
 
 
 
c0b6d7e
 
 
 
 
 
 
 
 
 
 
3fce290
 
 
 
 
c0b6d7e
 
 
82b8988
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c0b6d7e
9cb7448
c0b6d7e
 
9cb7448
c0b6d7e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a529f7a
 
ebab327
 
a529f7a
 
c0b6d7e
 
 
a529f7a
 
 
 
 
 
 
 
1ef4f73
a529f7a
 
1ef4f73
c0b6d7e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
168d548
 
c0b6d7e
168d548
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
import gradio as gr
import os
import modules.wdtagger

# 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():
        model_dropdown = gr.Dropdown(choices=models, label="Model", value="Model B")
        vae_dropdown = gr.Dropdown(choices=vae, label="VAE", value="VAE C")
    
    # 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="Masukkan prompt teks", lines=2, elem_id="prompt-input")
                neg_prompt_input = 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():
                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=512)
                    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=512)
                    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="Hasil Gambar")
                # Output teks JSON di bawah gallery
                output_text = gr.Textbox(label="Output JSON", placeholder="Hasil dalam format JSON", lines=2)

        def update_images(prompt, neg_prompt, width, height, scheduler, num_steps, num_images, cfg_scale, seed, model):
            # Update fungsi sesuai kebutuhan
            return generate_image(prompt, neg_prompt, width, height, scheduler, num_steps, num_images, cfg_scale, seed, model)
        
        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, model_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, model_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, model_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=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=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()