import gradio as gr from gen_tab import create_gen_tab from train_tab import create_train_tab from virtualtryon_tab import create_virtualtryon_tab from faceswap_tab import create_faceswap_tab from ipadapter_tab import create_ipadaptor_tab from relighting_tab import gen_relighting_tab from controlnetmockup_tab import create_cnmu_tab #from mail_tab import create_mail_tab from PIL import Image from pattern_ip_adapter import sam_zest_tab from dotenv import load_dotenv, find_dotenv import os from src.utils import convert_to_pil from datetime import datetime gallery_list=[] # Ensure the base folder for storing images exists base_dir = "gallery_images" os.makedirs(base_dir, exist_ok=True) # Function to convert and save the image to a dated folder, and update the gallery def update_gallery_local(img): if img is None: return gallery_list print(type(img), len(gallery_list)) try: # Convert the image to PIL if needed img = convert_to_pil(img) except: print("Error with converting to PIL") print(type(img),img) return gallery_list # Get the current date and create a folder for it current_date = datetime.now().strftime("%Y-%m-%d") date_folder = os.path.join(base_dir, current_date) os.makedirs(date_folder, exist_ok=True) # Generate a unique filename for the image img_filename = f"generated_image_{len(gallery_list)}.png" img_path = os.path.join(date_folder, img_filename) # Save the image to the date folder img.save(img_path) # Add the file path to the gallery list gallery_list.append(img_path) # Return the updated gallery list with image paths return gallery_list def update_gallery(img): try: print(type(img),print(len(gallery_list))) img=convert_to_pil(img) gallery_list.append(img) except: print("Error with saving image to gallery") #img=Image.open(img) #gallery_list.append(img) return gallery_list theme= gr.themes.Soft( primary_hue=gr.themes.colors.emerald, secondary_hue=gr.themes.colors.green) css = """ .gradio-container img { display: block; width: 100%; height: auto; object-fit: cover; border-radius: 10px; } .gradio-container p { margin: 0; font-size: 16px; font-weight: bold; } .gen-btn { background-color: green; color: white; } .gradio-container .gr-button { width: 100%; background-color: green; border: 1px solid #ddd; padding: 10px; border-radius: 10px; } .output_image { display: block; margin-left: auto; margin-right: auto; width: 100%; height: auto; } .gradio-container .gr-button:hover { background-color: #f0f0f0; } """ _ = load_dotenv(find_dotenv()) with gr.Blocks(theme=theme,css=css) as demo: with gr.Tabs() as tabs: gen_out,move_to_vto,move_to_ip,move_to_cnmk,move_to_relight = create_gen_tab() #input_ip,output_ip,move_to_cnmk_fm_ip,move_to_relight_fm_ip=create_ipadaptor_tab() input_vto,output_vto,move_to_cnmk_fm_try,move_to_relight_fm_try=create_virtualtryon_tab() #input_zest,output_zest=sam_zest_tab() #input_fs,output_fs=create_faceswap_tab() input_cnmu,output_cnmu,move_to_relight_fm_try=create_cnmu_tab() input_rl,output_rl=gen_relighting_tab() #create_tinput_iprain_tab() #Move to Buttons move_to_vto.click(lambda x:x, inputs=gen_out,outputs=input_vto) move_to_cnmk.click(lambda x:x,inputs=gen_out,outputs=input_cnmu) #move_to_fs.click(lambda x:x, inputs=gen_out,outputs=input_fs) #move_to_ip.click(lambda x:x, inputs=gen_out,outputs=input_ip) move_to_relight.click(lambda x:x, inputs=gen_out,outputs=input_rl) #Move to Buttons from Ip Adapter #move_to_cnmk_fm_ip.click(lambda x:x,inputs=output_ip,outputs=input_cnmu) #move_to_relight_fm_ip.click(lambda x:x,inputs=output_ip,outputs=input_rl) #Move to Buttons from Virtual Try On move_to_cnmk_fm_try.click(lambda x:x,inputs=output_vto,outputs=input_cnmu) move_to_relight_fm_try.click(lambda x:x,inputs=output_vto,outputs=input_rl) #Move to Button From Control Net Mockup move_to_relight_fm_try.click(lambda x:x,inputs=output_cnmu,outputs=input_rl) #Gallery image_gallery = gr.Gallery(label="Generated Images Gallery",type="path",elem_id="output_image") #Gallery updates get all outputs gen_out.change(update_gallery_local,inputs=gen_out,outputs=image_gallery) output_vto.change(update_gallery_local,inputs=output_vto,outputs=image_gallery) #output_fs.change(update_gallery,inputs=output_fs,outputs=image_gallery) #output_ip.change(update_gallery_local,inputs=output_ip,outputs=image_gallery) output_cnmu.change(update_gallery_local,inputs=output_cnmu,outputs=image_gallery) output_rl.change(update_gallery_local,inputs=output_rl,outputs=image_gallery) #output_zest.change(update_gallery,inputs=output_zest,outputs=image_gallery) demo.launch(share=True,show_error=True,debug=True) #,auth=[("username", "password"),(os.getenv("APP_USER"),os.getenv("APP_PW"))])