| """ |
| 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() |
|
|