Spaces:
Build error
Build error
| # 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) | |