vishalvarkhede's picture
Upload folder using huggingface_hub
fbb9523 verified
Raw
History Blame Contribute Delete
8.45 kB
# Final `UI.py`
"""Modern Gradio UI for DALL·E Text-to-Image Generator."""
from __future__ import annotations
import gradio as gr
from app import clear_history, generate_image
# -------------------------------------------------------------------
# Example Prompts
# -------------------------------------------------------------------
EXAMPLE_PROMPTS = [
"A futuristic cyberpunk city at night with neon lights",
"Ultra realistic samurai standing in rain",
"Fantasy floating island above clouds",
"Luxury gaming room with RGB lighting",
"Astronaut riding horse on Mars",
]
# -------------------------------------------------------------------
# Custom CSS
# -------------------------------------------------------------------
CUSTOM_CSS = """
body {
background: #020617;
}
.gradio-container {
max-width: 1450px !important;
margin: auto !important;
background:
radial-gradient(circle at top left, rgba(59,130,246,0.18), transparent 25%),
radial-gradient(circle at bottom right, rgba(168,85,247,0.18), transparent 25%),
#020617 !important;
color: white !important;
font-family: Inter, sans-serif !important;
}
/* Hero Section */
.hero-section {
background: linear-gradient(135deg, #111827, #1e293b, #0f172a);
border-radius: 28px;
padding: 45px;
margin-bottom: 20px;
text-align: center;
border: 1px solid rgba(255,255,255,0.08);
box-shadow: 0 12px 50px rgba(0,0,0,0.45);
}
.hero-section h1 {
font-size: 3rem;
font-weight: 900;
}
.hero-section p {
color: #cbd5e1;
font-size: 1.1rem;
}
/* Creator */
.creator-name {
color: #c084fc;
font-size: 1.2rem;
font-weight: 700;
margin-top: 20px;
}
.creator-role {
color: #94a3b8;
font-size: 0.95rem;
}
/* Glass Panels */
.glass-panel {
background: rgba(15,23,42,0.78) !important;
border: 1px solid rgba(255,255,255,0.08);
backdrop-filter: blur(18px);
border-radius: 24px !important;
padding: 22px !important;
box-shadow: 0 8px 30px rgba(0,0,0,0.4);
}
/* Textbox */
textarea {
background: rgba(255,255,255,0.06) !important;
color: white !important;
border-radius: 16px !important;
border: 1px solid rgba(255,255,255,0.12) !important;
}
/* Buttons */
button {
border-radius: 14px !important;
transition: all 0.25s ease !important;
}
button:hover {
transform: translateY(-2px);
}
/* Generate Button */
.generate-btn {
background: linear-gradient(135deg, #7c3aed, #2563eb) !important;
color: white !important;
border: none !important;
height: 55px !important;
font-size: 1rem !important;
font-weight: 700 !important;
}
/* Image */
.image-output {
border-radius: 24px !important;
overflow: hidden;
}
/* Footer */
.footer {
text-align: center;
margin-top: 18px;
color: #94a3b8;
font-size: 0.9rem;
}
"""
# -------------------------------------------------------------------
# Theme
# -------------------------------------------------------------------
THEME = gr.themes.Soft(
primary_hue="violet",
secondary_hue="blue",
neutral_hue="slate",
)
# -------------------------------------------------------------------
# Build UI
# -------------------------------------------------------------------
def build_demo():
with gr.Blocks(
title="DALL·E AI Generator",
theme=THEME,
css=CUSTOM_CSS,
) as demo:
# -----------------------------------------------------------
# Hero Section
# -----------------------------------------------------------
gr.HTML(
"""
<div class="hero-section">
<h1>🎨 DALL·E AI Image Generator</h1>
<p>
Generate stunning AI artwork using OpenAI.
</p>
<div class="creator-name">
🤖 Built By Vishal Varkhede
</div>
<div class="creator-role">
AI Engineer • Data Analyst • Azure Databricks Developer
</div>
</div>
"""
)
# -----------------------------------------------------------
# Main Layout
# -----------------------------------------------------------
with gr.Row(equal_height=True):
# Sidebar
with gr.Column(scale=3, elem_classes="glass-panel"):
gr.Markdown("## ⚙️ Settings")
prompt_input = gr.Textbox(
label="Prompt",
placeholder="Describe your image...",
lines=5,
)
size_dropdown = gr.Dropdown(
choices=[
"1024x1024",
"1024x1792",
"1792x1024",
],
value="1024x1024",
label="Image Size",
)
quality_dropdown = gr.Dropdown(
choices=[
"low",
"medium",
"high",
],
value="high",
label="Quality",
)
style_dropdown = gr.Dropdown(
choices=[
"vivid",
"natural",
],
value="vivid",
label="Style",
)
generate_button = gr.Button(
"🚀 Generate Image",
elem_classes="generate-btn",
)
clear_button = gr.Button(
"🗑️ Clear History"
)
gr.Markdown("---")
gr.Markdown("## ✨ Example Prompts")
for example in EXAMPLE_PROMPTS:
example_button = gr.Button(
example,
size="sm",
)
example_button.click(
lambda x=example: x,
outputs=prompt_input,
)
# Main Content
with gr.Column(scale=7, elem_classes="glass-panel"):
gr.Markdown("## 🖼️ Generated Image")
image_output = gr.Image(
type="filepath",
height=600,
interactive=False,
show_download_button=True,
elem_classes="image-output",
)
status_output = gr.Markdown(
"Generate an image using the controls."
)
gr.Markdown("## 🕘 Prompt History")
history_output = gr.JSON(
label="Recent Prompts",
)
# Footer
gr.HTML(
"""
<div class="footer">
Built with ❤️ using Gradio + OpenAI
</div>
"""
)
# Generate Action
generate_button.click(
fn=generate_image,
inputs=[
prompt_input,
size_dropdown,
quality_dropdown,
style_dropdown,
],
outputs=[
image_output,
history_output,
status_output,
],
show_progress=True,
)
# Submit on Enter
prompt_input.submit(
fn=generate_image,
inputs=[
prompt_input,
size_dropdown,
quality_dropdown,
style_dropdown,
],
outputs=[
image_output,
history_output,
status_output,
],
show_progress=True,
)
# Clear History
clear_button.click(
fn=clear_history,
outputs=history_output,
)
return demo