hwonder's picture
Add example prompt buttons to Text to Image tab
a95c3ea
"""
Gradio Tab Definitions
Defines all 6 tabs for the StackNetdemo application.
"""
import gradio as gr
def create_text_to_music_tab():
"""Create the Text to Music tab components."""
with gr.Column():
gr.Markdown("### Generate original music from a text description")
prompt = gr.Textbox(
label="Describe your music",
placeholder="e.g., upbeat jazz with piano and saxophone, cheerful summer vibes",
lines=3
)
with gr.Row():
tags = gr.Textbox(
label="Genre/Style Tags",
placeholder="jazz, piano, instrumental",
scale=2
)
instrumental = gr.Checkbox(
label="Instrumental Only",
value=False,
scale=1
)
lyrics = gr.Textbox(
label="Lyrics (optional)",
placeholder="Write your lyrics here...",
lines=4,
visible=True
)
title = gr.Textbox(
label="Song Title (optional)",
placeholder="My Song"
)
generate_btn = gr.Button("Generate Music", variant="primary", size="lg")
status = gr.Textbox(label="Status", interactive=False, visible=False)
output_audio = gr.Audio(label="Generated Music", type="filepath")
# Toggle lyrics visibility based on instrumental checkbox
instrumental.change(
fn=lambda x: gr.update(visible=not x),
inputs=[instrumental],
outputs=[lyrics],
api_name=None
)
return {
"prompt": prompt,
"tags": tags,
"instrumental": instrumental,
"lyrics": lyrics,
"title": title,
"generate_btn": generate_btn,
"status": status,
"output_audio": output_audio
}
def create_music_to_music_tab():
"""Create the Music to Music tab with sub-tabs for Cover and Stems."""
with gr.Tabs() as sub_tabs:
# Cover Song Sub-tab
with gr.Tab("Create Cover"):
with gr.Column():
gr.Markdown("### Create music from reference audio (Diffusion)")
cover_audio_input = gr.Audio(
label="Upload Audio",
type="filepath"
)
cover_style_prompt = gr.Textbox(
label="Style Direction",
placeholder="e.g., rock version with electric guitar, female vocalist",
lines=2
)
cover_tags = gr.Textbox(
label="Style Tags",
placeholder="rock, electric guitar"
)
cover_title = gr.Textbox(
label="Title (optional)",
placeholder="My Song"
)
cover_btn = gr.Button("Create", variant="primary", size="lg")
cover_status = gr.Textbox(label="Status", interactive=False, visible=False)
cover_output = gr.Audio(label="Song", type="filepath")
# Extract Stems Sub-tab
with gr.Tab("Extract Stems"):
with gr.Column():
gr.Markdown("### Separate audio into individual stems")
stems_audio_input = gr.Audio(
label="Upload Audio",
type="filepath"
)
stems_btn = gr.Button("Extract Stems", variant="primary", size="lg")
stems_status = gr.Textbox(label="Status", interactive=False, visible=False)
gr.Markdown("**Extracted Stems:**")
with gr.Row():
vocals_output = gr.Audio(label="Vocals", type="filepath")
drums_output = gr.Audio(label="Drums", type="filepath")
with gr.Row():
bass_output = gr.Audio(label="Bass", type="filepath")
other_output = gr.Audio(label="Other", type="filepath")
return {
# Cover components
"cover_audio_input": cover_audio_input,
"cover_style_prompt": cover_style_prompt,
"cover_tags": cover_tags,
"cover_title": cover_title,
"cover_btn": cover_btn,
"cover_status": cover_status,
"cover_output": cover_output,
# Stems components
"stems_audio_input": stems_audio_input,
"stems_btn": stems_btn,
"stems_status": stems_status,
"vocals_output": vocals_output,
"drums_output": drums_output,
"bass_output": bass_output,
"other_output": other_output
}
def create_text_to_image_tab():
"""Create the Text to Image tab components."""
with gr.Column():
gr.Markdown("### Generate images from a text description")
prompt = gr.Textbox(
label="Describe your image",
placeholder="e.g., a serene mountain landscape at sunset with snow-capped peaks",
lines=3
)
# Example prompt buttons
with gr.Row():
example1_btn = gr.Button("Example 1", size="sm")
example2_btn = gr.Button("Example 2", size="sm")
example3_btn = gr.Button("Example 3", size="sm")
example4_btn = gr.Button("Example 4", size="sm")
format_type = gr.Dropdown(
label="Format",
choices=["image", "multi", "3d"],
value="image"
)
generate_btn = gr.Button("Generate", variant="primary", size="lg")
status = gr.Textbox(label="Status", interactive=False, visible=False)
# Image output (for image and multi formats)
output_image = gr.Image(label="Generated Image", type="filepath", visible=True)
# 3D Model output (for 3d format)
output_model = gr.Model3D(label="Generated 3D Model", visible=False)
# Toggle output visibility based on format selection
format_type.change(
fn=lambda fmt: (
gr.update(visible=(fmt != "3d")),
gr.update(visible=(fmt == "3d"))
),
inputs=[format_type],
outputs=[output_image, output_model],
api_name=None
)
# Example prompts
example_prompts = [
"An Adorable Alien Rambutan with large round eyes wearing acid-etched armor, in the style of a Pixar character design, soft studio lighting, highly detailed fur texture, whimsical expression, floating in a cosmic fruit bowl surrounded by stardust, 8k resolution, cinematic composition",
"panning photo of a red 1989 two-door Mercedes-Benz 450 SLC driving at high speed along a coastal highway, golden hour lighting, motion blur on wheels and background, sharp focus on car body, Mediterranean Sea visible in background, professional automotive photography",
"A high-contrast flash photograph captured on Fuji Superia X-Tra 400 film showing an elderly woman in a floral housedress washing a bright yellow Lamborghini Countach in her suburban driveway, garden hose in hand, curlers in hair, bemused expression, mundane meets extraordinary",
'{"subject": "great horned owl", "setting": "ancient library at midnight", "style": "Dutch Golden Age painting", "lighting": "single candle illumination with dramatic chiaroscuro", "details": "owl perched on stack of leather-bound books, spectacles on beak, quill pen nearby", "mood": "scholarly and mysterious", "technical": "oil painting texture, visible brushstrokes, museum quality"}'
]
# Wire up example buttons
example1_btn.click(
fn=lambda: example_prompts[0],
inputs=[],
outputs=[prompt],
api_name=None
)
example2_btn.click(
fn=lambda: example_prompts[1],
inputs=[],
outputs=[prompt],
api_name=None
)
example3_btn.click(
fn=lambda: example_prompts[2],
inputs=[],
outputs=[prompt],
api_name=None
)
example4_btn.click(
fn=lambda: example_prompts[3],
inputs=[],
outputs=[prompt],
api_name=None
)
return {
"prompt": prompt,
"format_type": format_type,
"generate_btn": generate_btn,
"status": status,
"output_image": output_image,
"output_model": output_model
}
def create_image_to_image_tab():
"""Create the Image to Image tab components."""
with gr.Column():
gr.Markdown("### Transform or edit an existing image")
with gr.Row():
input_image = gr.Image(
label="Upload Image",
type="filepath",
scale=1
)
with gr.Column(scale=1):
edit_prompt = gr.Textbox(
label="Edit Instructions",
placeholder="e.g., add dramatic sunset lighting, make it look like a painting",
lines=3
)
strength = gr.Slider(
label="Edit Strength",
minimum=0.1,
maximum=1.0,
value=0.5,
step=0.1
)
edit_btn = gr.Button("Transform Image", variant="primary", size="lg")
status = gr.Textbox(label="Status", interactive=False, visible=False)
output_image = gr.Image(label="Transformed Image", type="filepath")
return {
"input_image": input_image,
"edit_prompt": edit_prompt,
"strength": strength,
"edit_btn": edit_btn,
"status": status,
"output_image": output_image
}
def create_text_to_video_tab():
"""Create the Text to Video tab components."""
with gr.Column():
gr.Markdown("### Generate videos from a text description")
prompt = gr.Textbox(
label="Describe your video",
placeholder="e.g., a drone shot flying over a tropical beach at golden hour",
lines=3
)
with gr.Row():
duration = gr.Slider(
label="Duration (seconds)",
minimum=3,
maximum=30,
value=10,
step=1,
scale=1
)
style = gr.Dropdown(
label="Style",
choices=["Cinematic", "Animation", "Documentary", "Abstract"],
value="Cinematic",
scale=1
)
generate_btn = gr.Button("Generate Video", variant="primary", size="lg")
status = gr.Textbox(label="Status", interactive=False, visible=False)
output_video = gr.Video(label="Generated Video")
return {
"prompt": prompt,
"duration": duration,
"style": style,
"generate_btn": generate_btn,
"status": status,
"output_video": output_video
}
def create_image_to_video_tab():
"""Create the Image to Video tab components."""
with gr.Column():
gr.Markdown("### Animate a static image into video")
with gr.Row():
input_image = gr.Image(
label="Upload Image",
type="filepath",
scale=1
)
with gr.Column(scale=1):
motion_prompt = gr.Textbox(
label="Motion Description",
placeholder="e.g., gentle zoom in, clouds moving slowly, water rippling",
lines=3
)
duration = gr.Slider(
label="Duration (seconds)",
minimum=3,
maximum=15,
value=5,
step=1
)
animate_btn = gr.Button("Animate Image", variant="primary", size="lg")
status = gr.Textbox(label="Status", interactive=False, visible=False)
output_video = gr.Video(label="Animated Video")
return {
"input_image": input_image,
"motion_prompt": motion_prompt,
"duration": duration,
"animate_btn": animate_btn,
"status": status,
"output_video": output_video
}
def create_all_tabs():
"""Create all tabs and return component references."""
tabs = {}
with gr.Tab("Text to Music", id="text-to-music"):
tabs["text_to_music"] = create_text_to_music_tab()
with gr.Tab("Music to Music", id="music-to-music"):
tabs["music_to_music"] = create_music_to_music_tab()
with gr.Tab("Text to Image", id="text-to-image"):
tabs["text_to_image"] = create_text_to_image_tab()
with gr.Tab("Image to Image", id="image-to-image"):
tabs["image_to_image"] = create_image_to_image_tab()
with gr.Tab("Text to Video", id="text-to-video"):
tabs["text_to_video"] = create_text_to_video_tab()
with gr.Tab("Image to Video", id="image-to-video"):
tabs["image_to_video"] = create_image_to_video_tab()
return tabs