import gradio as gr from gradio_imageslider import ImageSlider 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 generative_t2i(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 generative_i2i(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 gradio_process_image (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 = gr.Dropdown(choices=models, label="Model", value=models[0]) vae = gr.Dropdown(choices=vae, label="VAE", value=vae[0]) load = gr.Button("Load") # Tab untuk Text-to-Image with gr.Tab("Text-to-Image"): with gr.Row(): with gr.Column(scale=1): prompt_t2i = gr.Textbox(label="Prompt", placeholder="Enter Prompt", lines=2, elem_id="prompt-input") neg_prompt_t2i = gr.Textbox(label="Negative prompt", placeholder="Enter Negative Prompt (optional)", lines=2, elem_id="neg-prompt-input") generate_t2i = gr.Button("Generate", elem_id="generate_t2i", scale=0.13) with gr.Row(): with gr.Column(): with gr.Row(): scheduler_t2i = gr.Dropdown(choices=schedulers, label="Sampling method", value=schedulers[0]) seed_t2i = gr.Number(label="Seed", value=-1) with gr.Row(): width_t2i = gr.Slider(minimum=128, maximum=2048, step=128, label="Width", value=1024) batch_size_t2i = gr.Slider(minimum=1, maximum=24, step=1, label="Batch size", value=1) with gr.Row(): height_t2i = gr.Slider(minimum=128, maximum=2048, step=128, label="Height", value=1024) batch_count_t2i = gr.Slider(minimum=1, maximum=24, step=1, label="Batch Count", value=1) with gr.Row(): num_steps_t2i = gr.Slider(minimum=1, maximum=100, step=1, label="Sampling steps", value=20) cfg_scale_t2i = gr.Slider(minimum=1, maximum=20, step=1, label="CFG Scale", value=7) with gr.Accordion("Hires. fix", open=False): use_hires_t2i = gr.Checkbox(label="Use Hires?", value=False, scale=0) with gr.Row(): upscaler_t2i = gr.Dropdown(choices=schedulers, label="Upscaler", value=schedulers[0]) upscale_by_t2i = gr.Slider(minimum=1, maximum=8, step=1, label="Upscale by", value=2) with gr.Row(): hires_steps_t2i = gr.Slider(minimum=1, maximum=50, step=1, label="Hires Steps", value=20) denois_strength_t2i = gr.Slider(minimum=0, maximum=1, step=0.02, label="Denoising Strength", value=2) with gr.Column(): # Gallery untuk output gambar output_gallery_t2i = gr.Gallery(label="Image Results") # Output teks JSON di bawah gallery output_text_t2i = gr.Textbox(label="Metadata", placeholder="Results are in Json format", lines=2) generate_t2i.click( fn=generative_t2i, inputs=[prompt_t2i, neg_prompt_t2i, width_t2i, height_t2i, scheduler_t2i, num_steps_t2i, batch_size_t2i, batch_count_t2i, cfg_scale_t2i, seed_t2i, use_hires_t2i, upscaler_t2i, upscale_by_t2i, hires_steps_t2i, denois_strength_t2i], outputs=[output_gallery_t2i, output_text_t2i] ) # 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") generate_button_i2i.click(fn=generative_i2i, inputs=[image_input, scheduler_input, seed_input, steps, cfg_scale, strength], 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], 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]) # Tab untuk Upscale with gr.Tab("Upscale"): with gr.Row(): with gr.Column(): input_image = gr.Image(type="pil", label="Input Image") run_button = gr.Button("Enhance Image") with gr.Row(): scheduler_name = gr.Dropdown(choices=["DDIM", "DPM++ 3M SDE Karras", "DPM++ 3M Karras"], value="DDIM", label="Scheduler") with gr.Row(): resolution = gr.Slider(minimum=128, maximum=2048, value=1024, step=128, label="Resolution") num_inference_steps = gr.Slider(minimum=1, maximum=50, value=20, step=1, label="Number of Inference Steps") with gr.Row(): hdr = gr.Slider(minimum=0, maximum=1, value=0, step=0.1, label="HDR Effect") guidance_scale = gr.Slider(minimum=0, maximum=20, value=6, step=0.5, label="Guidance Scale") with gr.Row(): strength = gr.Slider(minimum=0, maximum=1, value=0.2, step=0.01, label="Strength") controlnet_strength = gr.Slider(minimum=0.0, maximum=2.0, value=0.75, step=0.05, label="ControlNet Strength") with gr.Column(): output_slider = ImageSlider(label="Before / After", type="numpy") run_button.click(fn=gradio_process_image, inputs=[input_image, resolution, num_inference_steps, strength, hdr, guidance_scale, controlnet_strength, scheduler_name], outputs=output_slider) # Tab untuk Settings with gr.Tab("Settings"): with gr.Row(): gr.Markdown("Settings") # Jalankan antarmuka app.launch()