Phone_C / app.py
gaur3009's picture
Update app.py
f0d257b verified
raw
history blame
6.51 kB
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 = """
<script>
document.addEventListener('DOMContentLoaded', function () {
function speak(text) {
const synth = window.speechSynthesis;
const utterance = new SpeechSynthesisUtterance(text);
synth.speak(utterance);
}
document.addEventListener('gradio_event:output_update', (event) => {
const outputText = event.detail?.text || '';
if (outputText) {
speak(outputText);
}
});
});
</script>
"""
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)