tomasz-svd / ui.py
webnowa's picture
Create ui.py
6e1020d verified
Raw
History Blame Contribute Delete
3.68 kB
# ui.py
# Gradio UI dla tomasz-svd (Etap 1–4)
import base64
from io import BytesIO
import gradio as gr
from PIL import Image
from core import (
ui_generate,
generate_script,
generate_music,
convert_to_mp3,
generate_video_from_b64,
)
def build_ui():
with gr.Blocks() as demo:
gr.Markdown("# tomasz-svd — AutoAd Studio (Etap 1–4)")
# TAB 1
with gr.Tab("1. Analiza domeny"):
domain_in = gr.Textbox(label="Domena", placeholder="example.com")
btn = gr.Button("Analizuj")
out_html = gr.HTML()
auto_prompt = gr.Textbox(label="Auto prompt", lines=4)
brand_domain = gr.Textbox(label="Domena (czysta)")
brand_text = gr.Textbox(label="Tekst (skrót)", lines=6)
images_state = gr.State([])
gallery = gr.Gallery(label="Obrazy (podgląd)")
def _ui_generate(domain):
html, prompt, dom, txt, imgs = ui_generate(domain)
pil_list = []
for b in imgs:
try:
img_data = base64.b64decode(b.split(",")[1])
pil_list.append(Image.open(BytesIO(img_data)))
except:
pass
return html, prompt, dom, txt, imgs, pil_list
btn.click(
_ui_generate,
inputs=domain_in,
outputs=[out_html, auto_prompt, brand_domain, brand_text, images_state, gallery]
)
# TAB 2
with gr.Tab("2. Scenariusz (LLM)"):
length = gr.Slider(5, 60, value=15, step=5, label="Długość")
style = gr.Dropdown(
["energetyczny TikTok", "premium elegancki", "luźny młodzieżowy", "poważny biznesowy"],
value="energetyczny TikTok",
label="Styl"
)
btn2 = gr.Button("Generuj scenariusz")
script_out = gr.Code(label="JSON")
btn2.click(
generate_script,
inputs=[auto_prompt, brand_domain, brand_text, length, style],
outputs=script_out
)
# TAB 3
with gr.Tab("3. Audio (MusicGen + FFmpeg)"):
music_prompt = gr.Textbox(label="Prompt muzyczny", value="energetic modern ad music")
duration = gr.Slider(5, 30, value=15, step=1, label="Długość muzyki")
btn3 = gr.Button("Generuj muzykę")
audio_out = gr.Audio(label="Muzyka", type="filepath")
def _gen_audio(p, d):
wav = generate_music(p, d)
mp3 = convert_to_mp3(wav)
return mp3
btn3.click(_gen_audio, inputs=[music_prompt, duration], outputs=audio_out)
# TAB 4
with gr.Tab("4. Wideo (FFmpeg CPU)"):
gr.Markdown("Generowanie finalnego wideo MP4 z obrazów (Etap 1), scenariusza (Etap 2) i muzyki (Etap 3).")
audio_in = gr.Audio(label="Muzyka z Etapu 3", type="filepath")
btn4 = gr.Button("Generuj wideo")
video_out = gr.Video(label="Finalne wideo MP4")
def _gen_video(imgs_b64, script, audio_path):
if not imgs_b64 or not script or not audio_path:
return None
return generate_video_from_b64(imgs_b64, script, audio_path)
btn4.click(
_gen_video,
inputs=[images_state, script_out, audio_in],
outputs=video_out
)
return demo
if __name__ == "__main__":
ui = build_ui()
ui.launch(server_name="0.0.0.0", server_port=7860, share=False)