File size: 4,501 Bytes
5c42955 957256e 5c42955 ba92228 5c42955 ba92228 5c42955 ba92228 5c42955 957256e 5c42955 957256e 5c42955 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
"""
StackNet Demo
"""
import gradio as gr
# Test import of our modules
try:
from src.ui.tabs import create_all_tabs
from src.ui.handlers import Handlers
MODULES_OK = True
except Exception as e:
MODULES_OK = False
IMPORT_ERROR = str(e)
def create_demo():
with gr.Blocks(title="StackNet Demo") as demo:
gr.Markdown("# StackNet Demo 1:1 Preview")
if not MODULES_OK:
gr.Markdown(f"**Import Error:** {IMPORT_ERROR}")
return demo
with gr.Accordion("Settings", open=True):
api_key = gr.Textbox(
label="StackNet Key",
placeholder="Enter your key to enable generation...",
type="password",
value=""
)
with gr.Tabs():
tabs = create_all_tabs()
# Collect all buttons to disable when no API key
all_buttons = [
tabs["text_to_music"]["generate_btn"],
tabs["music_to_music"]["cover_btn"],
tabs["music_to_music"]["stems_btn"],
tabs["text_to_image"]["generate_btn"],
tabs["image_to_image"]["edit_btn"],
tabs["text_to_video"]["generate_btn"],
tabs["image_to_video"]["animate_btn"],
]
def update_buttons(key):
enabled = bool(key and key.strip())
return [gr.update(interactive=enabled) for _ in all_buttons]
api_key.change(
fn=update_buttons,
inputs=[api_key],
outputs=all_buttons
)
# Initially disable all buttons
demo.load(
fn=lambda: [gr.update(interactive=False) for _ in all_buttons],
outputs=all_buttons
)
# Text to Music
ttm = tabs["text_to_music"]
ttm["generate_btn"].click(
fn=Handlers.generate_music,
inputs=[
ttm["prompt"],
ttm["tags"],
ttm["instrumental"],
ttm["lyrics"],
ttm["title"],
api_key
],
outputs=[ttm["output_audio"], ttm["status"]]
)
# Music to Music - Cover
mtm = tabs["music_to_music"]
mtm["cover_btn"].click(
fn=Handlers.create_cover,
inputs=[
mtm["cover_audio_input"],
mtm["cover_style_prompt"],
mtm["cover_tags"],
mtm["cover_title"],
api_key
],
outputs=[mtm["cover_output"], mtm["cover_status"]]
)
# Music to Music - Stems
mtm["stems_btn"].click(
fn=Handlers.extract_stems,
inputs=[mtm["stems_audio_input"], api_key],
outputs=[
mtm["vocals_output"],
mtm["drums_output"],
mtm["bass_output"],
mtm["other_output"],
mtm["stems_status"]
]
)
# Text to Image
tti = tabs["text_to_image"]
tti["generate_btn"].click(
fn=Handlers.generate_image,
inputs=[
tti["prompt"],
tti["style"],
tti["aspect_ratio"],
api_key
],
outputs=[tti["output_image"], tti["status"]]
)
# Image to Image
iti = tabs["image_to_image"]
iti["edit_btn"].click(
fn=Handlers.edit_image,
inputs=[
iti["input_image"],
iti["edit_prompt"],
iti["strength"],
api_key
],
outputs=[iti["output_image"], iti["status"]]
)
# Text to Video
ttv = tabs["text_to_video"]
ttv["generate_btn"].click(
fn=Handlers.generate_video,
inputs=[
ttv["prompt"],
ttv["duration"],
ttv["style"],
api_key
],
outputs=[ttv["output_video"], ttv["status"]]
)
# Image to Video
itv = tabs["image_to_video"]
itv["animate_btn"].click(
fn=Handlers.animate_image,
inputs=[
itv["input_image"],
itv["motion_prompt"],
itv["duration"],
api_key
],
outputs=[itv["output_video"], itv["status"]]
)
return demo
demo = create_demo()
if __name__ == "__main__":
demo.launch()
|