import gradio as gr import requests from PIL import Image from io import BytesIO from tqdm import tqdm import time import os repo = "artificialguybr/TshirtDesignRedmond-V2" # Generate design based on prompts def infer(color_prompt, phone_type_prompt, design_prompt): prompt = ( f"A single vertical {color_prompt} colored {phone_type_prompt} back cover featuring a bold {design_prompt} design on the front, hanging on the plain wall. The soft light and shadows, creating a striking contrast against the minimal background, evoking modern sophistication." ) full_prompt = f"{prompt}" print("Generating image with prompt:", full_prompt) api_url = f"https://api-inference.huggingface.co/models/{repo}" headers = {} payload = { "inputs": full_prompt, "parameters": { "negative_prompt": "(worst quality, low quality, lowres, oversaturated, grayscale, bad photo:1.4)", "num_inference_steps": 30, "scheduler": "DPMSolverMultistepScheduler", }, } error_count = 0 pbar = tqdm(total=None, desc="Loading model") while True: response = requests.post(api_url, headers=headers, json=payload) if response.status_code == 200: speech_text = f"Your design is generated with the color '{color_prompt}', mobile type '{phone_type_prompt}', and design '{design_prompt}'." return Image.open(BytesIO(response.content)), speech_text elif response.status_code == 503: time.sleep(1) pbar.update(1) elif response.status_code == 500 and error_count < 5: time.sleep(1) error_count += 1 else: raise Exception(f"API Error: {response.status_code}") # Function to save the design def save_design(image): file_path = "saved_design.png" image.save(file_path) return f"Design saved as {file_path}!" # Custom CSS for animations custom_css = """ body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; margin: 0; padding: 0; overflow: hidden; } body::before { content: ""; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(-45deg, #ff9a9e, #fad0c4, #fbc2eb, #8fd3f4); background-size: 400% 400%; z-index: -1; animation: gradientShift 15s ease infinite; } @keyframes gradientShift { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } } .carousel { display: flex; overflow-x: auto; scroll-behavior: smooth; } .carousel .image-container { display: inline-block; text-align: center; margin: 0 10px; } .carousel img { max-height: 200px; border-radius: 10px; transition: transform 0.3s; } .carousel img:hover { transform: scale(1.1); } .carousel .caption { margin-top: 5px; font-size: 14px; color: #333; } """ # JavaScript for text-to-speech custom_js = """ """ def load_gallery_images(): folder_path = "New folder (4)" # Ensure this path is correct images = [] if not os.path.exists(folder_path): return images for filename in os.listdir(folder_path): if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.webp')): img_path = os.path.abspath(os.path.join(folder_path, filename)) images.append(img_path) # Append only the file paths return images gallery_images = load_gallery_images() with gr.Blocks(css=custom_css) as interface: gr.HTML(custom_js) gr.Markdown("# **AI Phone Cover Designer**") gr.Markdown("Create custom phone covers with AI. Save your designs for future use.") with gr.Tabs(): with gr.Tab("Home"): gr.Markdown("Welcome to the **AI Phone Cover Designer**! Use the 'Design' tab to start creating custom designs.") gr.Markdown("### Gallery") if gallery_images: gr.Gallery(value=gallery_images, label="Design Gallery", columns=2, height="auto") else: gr.Markdown("No images found in the gallery folder.") with gr.Tab("Design"): with gr.Row(): with gr.Column(scale=1): color_prompt = gr.Textbox(label="Color", placeholder="E.g., Red") phone_type_prompt = gr.Textbox(label="Mobile type", placeholder="E.g., iPhone, Samsung") design_prompt = gr.Textbox(label="Design Details", placeholder="E.g., Bold stripes with geometric patterns") chatbot = gr.Chatbot() generate_button = gr.Button("Generate Design") save_button = gr.Button("Save Design") with gr.Column(scale=1): output_image = gr.Image(label="Generated Design") output_message = gr.Textbox(label="AI Assistant Message", interactive=False) generate_button.click( infer, inputs=[color_prompt, phone_type_prompt, design_prompt], outputs=[output_image, output_message], ) save_button.click( save_design, inputs=[output_image], outputs=output_message, ) with gr.Tab("About"): gr.Markdown(""" ## About AI Phone Cover Maker The **AI Phone Cover Maker** is a cutting-edge tool designed to help users create personalized phone cover designs quickly and easily. Powered by AI, it uses advanced image generation techniques to craft unique, high-quality designs for any mobile device. ### Features: - Create custom designs using simple prompts. - Generate designs for various phone models. - Save your designs for future use. Start designing today and bring your creative ideas to life! """) interface.launch(debug=True)