import gradio as gr import requests import os 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 {color_prompt} colored {Phone_type_prompt} back cover featuring a bold {design_prompt} design on the front. 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 = { # "Authorization": f"Bearer {token}" # Uncomment and use your Hugging Face API token } payload = { "inputs": full_prompt, "parameters": { "negative_prompt": "(worst quality, low quality, normal quality, lowres, low details, oversaturated, undersaturated, overexposed, underexposed, grayscale, bw, bad photo, bad photography, bad art:1.4), (watermark, signature, text font, username, error, logo, words, letters, digits, autograph, trademark, name:1.2), (blur, blurry, grainy), morbid, ugly, asymmetrical, mutated malformed, mutilated, poorly lit, bad shadow, draft, cropped, out of frame, cut off, censored, jpeg artifacts, out of focus, glitch, duplicate, (airbrushed, cartoon, anime, semi-realistic, cgi, render, blender, digital art, manga, amateur:1.3), (3D ,3D Game, 3D Game Scene, 3D Character:1.1), (bad hands, bad anatomy, bad body, bad face, bad teeth, bad arms, bad legs, deformities:1.3)", "num_inference_steps": 30, "scheduler": "DPMSolverMultistepScheduler" }, } error_count = 0 pbar = tqdm(total=None, desc="Loading model") while True: print("Sending request to API...") response = requests.post(api_url, headers=headers, json=payload) print("API response status code:", response.status_code) if response.status_code == 200: print("Image generation successful!") 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: print("API Error:", response.status_code) raise Exception(f"API Error: {response.status_code}") # Light and Dark Mode CSS 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; } button { font-size: 1.2rem; padding: 10px 20px; border-radius: 5px; cursor: pointer; transition: 0.3s all; } button.light-mode { background-color: #007bff; color: #fff; } button.dark-mode { background-color: #444; color: #fff; } textarea { padding: 10px; border-radius: 8px; transition: 0.3s; } textarea.light-mode { background-color: #fff; color: #333; border: 2px solid #ccc; } textarea.dark-mode { background-color: #444; color: #f8f9fa; border: 2px solid #555; } .output-image { max-width: 100%; border-radius: 12px; border: 2px solid #007bff; margin-top: 20px; } """ # JavaScript to Toggle Modes custom_js = """ """ # Create the Gradio interface 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. """ ) with gr.Row(): with gr.Column(): 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") with gr.Column(): 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)