|
|
""" |
|
|
StackNet Demo - 1:1 Preview |
|
|
|
|
|
A Gradio-based demo showcasing StackNet's AI-powered media generation capabilities. |
|
|
""" |
|
|
|
|
|
import gradio as gr |
|
|
from src.ui.tabs import ( |
|
|
create_text_to_image_tab, |
|
|
create_image_to_image_tab, |
|
|
create_text_to_video_tab, |
|
|
create_image_to_video_tab, |
|
|
create_text_to_music_tab, |
|
|
create_music_to_music_tab |
|
|
) |
|
|
from src.ui.handlers import Handlers |
|
|
|
|
|
|
|
|
def create_demo(): |
|
|
"""Create the main Gradio demo application.""" |
|
|
with gr.Blocks( |
|
|
title="StackNet 1:1 Preview Demo", |
|
|
theme=gr.themes.Soft() |
|
|
) as demo: |
|
|
gr.Markdown("# StackNet 1:1 Preview Demo") |
|
|
|
|
|
|
|
|
with gr.Accordion("Settings", open=False): |
|
|
api_key = gr.Textbox( |
|
|
label="StackNet Key", |
|
|
placeholder="Enter your key (e.g., sn_xxxxx)", |
|
|
type="password" |
|
|
) |
|
|
|
|
|
tabs = {} |
|
|
|
|
|
|
|
|
with gr.Tabs(): |
|
|
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() |
|
|
|
|
|
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() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tabs["text_to_image"]["generate_btn"].click( |
|
|
fn=Handlers.generate_image, |
|
|
inputs=[ |
|
|
tabs["text_to_image"]["prompt"], |
|
|
tabs["text_to_image"]["format_type"], |
|
|
api_key |
|
|
], |
|
|
outputs=[ |
|
|
tabs["text_to_image"]["output_image"], |
|
|
tabs["text_to_image"]["output_model"], |
|
|
tabs["text_to_image"]["status"] |
|
|
], |
|
|
api_name=None |
|
|
) |
|
|
|
|
|
|
|
|
tabs["image_to_image"]["edit_btn"].click( |
|
|
fn=Handlers.edit_image, |
|
|
inputs=[ |
|
|
tabs["image_to_image"]["input_image"], |
|
|
tabs["image_to_image"]["edit_prompt"], |
|
|
tabs["image_to_image"]["strength"], |
|
|
api_key |
|
|
], |
|
|
outputs=[ |
|
|
tabs["image_to_image"]["output_image"], |
|
|
tabs["image_to_image"]["status"] |
|
|
], |
|
|
api_name=None |
|
|
) |
|
|
|
|
|
|
|
|
tabs["text_to_video"]["generate_btn"].click( |
|
|
fn=Handlers.generate_video, |
|
|
inputs=[ |
|
|
tabs["text_to_video"]["prompt"], |
|
|
tabs["text_to_video"]["duration"], |
|
|
tabs["text_to_video"]["style"], |
|
|
api_key |
|
|
], |
|
|
outputs=[ |
|
|
tabs["text_to_video"]["output_video"], |
|
|
tabs["text_to_video"]["status"] |
|
|
], |
|
|
api_name=None |
|
|
) |
|
|
|
|
|
|
|
|
tabs["image_to_video"]["animate_btn"].click( |
|
|
fn=Handlers.animate_image, |
|
|
inputs=[ |
|
|
tabs["image_to_video"]["input_image"], |
|
|
tabs["image_to_video"]["motion_prompt"], |
|
|
tabs["image_to_video"]["duration"], |
|
|
api_key |
|
|
], |
|
|
outputs=[ |
|
|
tabs["image_to_video"]["output_video"], |
|
|
tabs["image_to_video"]["status"] |
|
|
], |
|
|
api_name=None |
|
|
) |
|
|
|
|
|
|
|
|
tabs["text_to_music"]["generate_btn"].click( |
|
|
fn=Handlers.generate_music, |
|
|
inputs=[ |
|
|
tabs["text_to_music"]["prompt"], |
|
|
tabs["text_to_music"]["tags"], |
|
|
tabs["text_to_music"]["instrumental"], |
|
|
tabs["text_to_music"]["lyrics"], |
|
|
tabs["text_to_music"]["title"], |
|
|
api_key |
|
|
], |
|
|
outputs=[ |
|
|
tabs["text_to_music"]["output_audio"], |
|
|
tabs["text_to_music"]["status"] |
|
|
], |
|
|
api_name=None |
|
|
) |
|
|
|
|
|
|
|
|
tabs["music_to_music"]["cover_btn"].click( |
|
|
fn=Handlers.create_cover, |
|
|
inputs=[ |
|
|
tabs["music_to_music"]["cover_audio_input"], |
|
|
tabs["music_to_music"]["cover_style_prompt"], |
|
|
tabs["music_to_music"]["cover_tags"], |
|
|
tabs["music_to_music"]["cover_title"], |
|
|
api_key |
|
|
], |
|
|
outputs=[ |
|
|
tabs["music_to_music"]["cover_output"], |
|
|
tabs["music_to_music"]["cover_status"] |
|
|
], |
|
|
api_name=None |
|
|
) |
|
|
|
|
|
|
|
|
tabs["music_to_music"]["stems_btn"].click( |
|
|
fn=Handlers.extract_stems, |
|
|
inputs=[ |
|
|
tabs["music_to_music"]["stems_audio_input"], |
|
|
api_key |
|
|
], |
|
|
outputs=[ |
|
|
tabs["music_to_music"]["vocals_output"], |
|
|
tabs["music_to_music"]["drums_output"], |
|
|
tabs["music_to_music"]["bass_output"], |
|
|
tabs["music_to_music"]["other_output"], |
|
|
tabs["music_to_music"]["stems_status"] |
|
|
], |
|
|
api_name=None |
|
|
) |
|
|
|
|
|
return demo |
|
|
|
|
|
|
|
|
demo = create_demo() |
|
|
demo.launch() |
|
|
|