FAW-AI-APP / app.py
JarvisLabs's picture
Update app.py
5c45309 verified
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"))])