import gradio as gr import requests from PIL import Image from io import BytesIO from tqdm import tqdm import time repo = "artificialguybr/TshirtDesignRedmond-V2" 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: return Image.open(BytesIO(response.content)) 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}") custom_css = """ body { font-family: 'Poppins', sans-serif; margin: 0; padding: 0; transition: background-color 0.3s, color 0.3s; } .light-mode { background-color: #f8f9fa; color: #333; } .dark-mode { background-color: #333; color: #f8f9fa; } .gr-markdown-container { transition: color 0.3s; } .light-mode .gr-markdown-container { color: #333; } .dark-mode .gr-markdown-container { color: #f8f9fa; } textarea, input { padding: 10px; border-radius: 8px; border: 2px solid #ccc; margin-bottom: 10px; width: 100%; } textarea.dark-mode, input.dark-mode { background-color: #444; color: #f8f9fa; border: 2px solid #555; } textarea.light-mode, input.light-mode { background-color: #fff; color: #333; } .output-image { max-width: 100%; border-radius: 12px; margin-top: 20px; } /* Neon Button Styling */ button { font-size: 1.2rem; padding: 10px 20px; border-radius: 5px; cursor: pointer; border: none; color: white; background: linear-gradient(90deg, red, orange, yellow, green, cyan, blue, violet); background-size: 400%; box-shadow: 0 0 10px rgba(255, 255, 255, 0.6), 0 0 20px rgba(255, 255, 255, 0.4), 0 0 40px rgba(255, 255, 255, 0.2); animation: neon-button 2s infinite; transition: transform 0.3s; } button:hover { transform: scale(1.1); box-shadow: 0 0 20px rgba(255, 255, 255, 0.8), 0 0 40px rgba(255, 255, 255, 0.6), 0 0 60px rgba(255, 255, 255, 0.4); } /* Neon Animation */ @keyframes neon-button { 0% { background-position: 0%; } 100% { background-position: 400%; } } /* Loading Spinner */ #loading-spinner { display: none; margin: 20px auto; border: 6px solid #f3f3f3; border-top: 6px solid #3498db; border-radius: 50%; width: 50px; height: 50px; animation: spin 1s linear infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } @media screen and (max-width: 768px) { .gradio-container { padding: 10px; } textarea, input { font-size: 0.9rem; } button { font-size: 0.9rem; } } @media screen and (min-width: 769px) { .gradio-container { padding: 20px; max-width: 1200px; margin: auto; } } """ custom_js = """ """ with gr.Blocks(css=custom_css) as interface: gr.HTML(custom_js) gr.Markdown( """ # **AI Phone Cover Designer** Create custom designs for your brand with AI. Specify color, style, and design details. """, elem_id="gr-markdown-container" ) with gr.Row(elem_id="responsive-row"): with gr.Column(scale=1, min_width=300): color_prompt = gr.Textbox(label="Color", placeholder="E.g., Red", elem_id="component-1") Back_cover_prompt = gr.Textbox(label="Mobile type", placeholder="E.g., iPhone, Samsung", elem_id="component-2") design_prompt = gr.Textbox(label="Design Details", placeholder="E.g., Bold stripes with geometric patterns", elem_id="component-3") generate_button = gr.Button("Generate Design") spinner = gr.HTML('
') with gr.Column(scale=1, min_width=300): output = gr.Image(label="Generated Design", elem_id="output-image") generate_button.click(infer, inputs=[color_prompt, Back_cover_prompt, design_prompt], outputs=output) # Launch the app interface.launch(debug=True)