| import os |
| import math |
| import gradio as gr |
|
|
| from Helper_functions import * |
| from Kaggle_API import API_Connection |
| from GoogleDrive_API import GoogleDrive_API |
|
|
| DEFAULT_VALUES = { |
| "input_image": None, |
| "edit_instruction": "", |
| "steps": 100, |
| "randomize_seed": "Fix Seed", |
| "seed": 1371, |
| "randomize_cfg": "Fix CFG", |
| "text_cfg_scale": 7.5, |
| "image_cfg_scale": 1.5, |
| "resolution": 512, |
| "edited_image": None |
| } |
|
|
| def generate_button_clicked(*args): |
| |
| kaggle_username = os.environ["kaggle_username"] |
| kaggle_key = os.environ["kaggle_key"] |
|
|
| input_keys = list(DEFAULT_VALUES.keys()) |
| values = dict(zip(input_keys, list(args))) |
|
|
| for key in values: |
| if values[key] is None: |
| values[key] = DEFAULT_VALUES[key] |
|
|
| if values["randomize_seed"]: |
| values["randomize_seed"] = random.randint(1, 100000) |
|
|
| if values["randomize_cfg"]: |
| values["text_cfg_scale"] = round(random.uniform(6.0, 9.0), ndigits=2) |
| values["image_cfg_scale"] = round(random.uniform(1.2, 1.8), ndigits=2) |
|
|
| |
| input_image = values["input_image"] |
| edit_instruction = values["edit_instruction"] |
| steps = values["steps"] |
| seed = values["seed"] |
| cfgtext = values["text_cfg_scale"] |
| cfgimage = values["image_cfg_scale"] |
| resolution = 2 ** int(math.log2(values["resolution"])) |
|
|
| if input_image is None: |
| raise gr.Error("Missing Input: input_image") |
| if len(edit_instruction) == 0: |
| raise gr.Error("Missing Input: edit_instruction") |
|
|
| GoogleDrive_connection = GoogleDrive_API("service_account.json") |
| api_connection = API_Connection(GoogleDrive_connection, kaggle_username, kaggle_key) |
|
|
| create_folder("local_dataset") |
|
|
| image_ID = get_random_str(4) |
|
|
| input_image_name = rf"input_image_{image_ID}.png" |
| output_image_name = rf"output_image_{image_ID}.png" |
|
|
| input_image.save(rf"local_dataset\{input_image_name}") |
|
|
| status, img = api_connection.generate_image( |
| input_image_name, edit_instruction, output_image_name, |
| steps, seed, cfgtext, cfgimage, resolution |
| ) |
| print(rf"End Time : {get_current_time()}") |
| if not status: |
| raise gr.Error(img) |
|
|
| return img |
|
|
| def reset_button_clicked(): |
| return list(DEFAULT_VALUES.values()) |
|
|
|
|
| def main(): |
| with gr.Blocks(theme="AmirMoris/GP_Themes") as demo: |
| toggle_theme = gr.Button(value="Toggle Theme") |
| with gr.Row(): |
| input_image = gr.Image(label="Input Image", type="pil", interactive=True) |
| edited_image = gr.Image( |
| label=f"Edited Image", type="pil", interactive=False |
| ) |
|
|
| with gr.Row(): |
| with gr.Column(scale=3): |
| instruction = gr.Textbox( |
| lines=1, label="Edit Instruction", interactive=True |
| ) |
| with gr.Column(scale=1, min_width=100): |
| with gr.Row(): |
| generate_button = gr.Button("Generate") |
| with gr.Row(): |
| reset_button = gr.Button("Reset") |
|
|
| with gr.Row(): |
| steps = gr.Number(value=DEFAULT_VALUES["steps"], precision=0, label="Steps", interactive=True) |
| randomize_seed = gr.Radio( |
| ["Fix Seed", "Randomize Seed"], |
| value=DEFAULT_VALUES["randomize_seed"], |
| type="index", |
| show_label=False, |
| interactive=True, |
| ) |
| seed = gr.Number(value=DEFAULT_VALUES["seed"], precision=0, label="Seed", interactive=True) |
| randomize_cfg = gr.Radio( |
| ["Fix CFG", "Randomize CFG"], |
| value=DEFAULT_VALUES["randomize_cfg"], |
| type="index", |
| show_label=False, |
| interactive=True, |
| ) |
| text_cfg_scale = gr.Number(value=DEFAULT_VALUES["text_cfg_scale"], label=f"Text CFG", interactive=True) |
| image_cfg_scale = gr.Number(value=DEFAULT_VALUES["image_cfg_scale"], label=f"Image CFG", interactive=True) |
| resolution = gr.Number(value=DEFAULT_VALUES["resolution"], label=f"Resolution", interactive=True) |
|
|
|
|
| generate_button.click( |
| fn=generate_button_clicked, |
| inputs=[ |
| input_image, |
| instruction, |
| steps, |
| randomize_seed, |
| seed, |
| randomize_cfg, |
| text_cfg_scale, |
| image_cfg_scale, |
| resolution |
| ], |
| outputs=edited_image, |
| ) |
| reset_button.click( |
| fn=reset_button_clicked, |
| outputs=[ |
| input_image, |
| instruction, |
| steps, |
| randomize_seed, |
| seed, |
| randomize_cfg, |
| text_cfg_scale, |
| image_cfg_scale, |
| resolution, |
| edited_image |
| ], |
| ) |
| toggle_theme.click( |
| None, |
| js= |
| """ |
| () => { |
| document.body.classList.toggle('dark'); |
| } |
| """, |
| ) |
|
|
| |
|
|
| demo.queue(max_size=1) |
| demo.launch(share=True) |
|
|
|
|
| if __name__ == "__main__": |
| main() |