Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| from .api_utils import get_camera_motions | |
| from pathlib import Path | |
| def create_header(): | |
| """Create the header with title and API settings in 3 columns.""" | |
| with gr.Row(): | |
| # Title column | |
| with gr.Column(scale=1): | |
| gr.Markdown( | |
| """ | |
| # 🎬 LumaAI Video Generator | |
| ### Transform your prompts into mesmerizing videos | |
| """ | |
| ) | |
| # API info column | |
| with gr.Column(scale=1): | |
| gr.Markdown("Get an API key from [LumaAI Dream Machine](https://lumalabs.ai/dream-machine/api)") | |
| gr.Markdown("*$0.0032 USD/megapixel: 720p, 5 sec video is around $0.4 USD*") | |
| # Empty column for symmetry | |
| with gr.Column(scale=1): | |
| pass | |
| def create_main_interface(generate_fn): | |
| """Create the main interface with input and output columns.""" | |
| with gr.Row(): | |
| # Input column | |
| with gr.Column(scale=1): | |
| api_key = gr.Textbox( | |
| label="LumaAI API Key", | |
| placeholder="Enter a LumaAI API key", | |
| type="password", | |
| autofocus=True, | |
| show_label=False, | |
| container=False, | |
| scale=1 | |
| ) | |
| with gr.Row(): | |
| prompt = gr.Textbox( | |
| label="Prompt", | |
| placeholder="Describe your video scene here...", | |
| lines=3, | |
| value="Dreamlike scene transforms into circuitry" | |
| ) | |
| camera_motion = gr.Dropdown( | |
| choices=get_camera_motions(), | |
| label="Camera Motion", | |
| value="None" | |
| ) | |
| loop_video = gr.Checkbox( | |
| label="Loop Video", | |
| value=False, | |
| info="Enable video looping" | |
| ) | |
| generate_btn = gr.Button("🚀 Generate Video", variant="primary", size="lg") | |
| clear_btn = gr.Button("🗑️ Clear Placeholders", size="sm", variant="huggingface") | |
| # Output column | |
| with gr.Column(scale=1): | |
| video_output = gr.Video( | |
| label="Generated Video", | |
| show_label=True, | |
| width="100%", | |
| height="400px", | |
| value="TestVideo.mp4" | |
| ) | |
| with gr.Accordion("🖼️ Starting Image [Optional]", open=True): | |
| image_input = gr.Image( | |
| label="Starting Image (will be resized to 512x512)", | |
| type="pil", | |
| value="TestImage.png" | |
| ) | |
| # Set up event handlers | |
| def clear_all(): | |
| return ["", None, None] # Clear prompt, image, and video | |
| clear_btn.click( | |
| fn=clear_all, | |
| inputs=[], | |
| outputs=[prompt, image_input, video_output] | |
| ) | |
| generate_btn.click( | |
| fn=generate_fn, | |
| inputs=[api_key, prompt, camera_motion, loop_video, image_input], | |
| outputs=video_output, | |
| api_name=False | |
| ) | |
| def create_interface(generate_fn): | |
| """Create the complete interface.""" | |
| with gr.Blocks(theme=gr.themes.Monochrome()) as interface: | |
| create_header() | |
| create_main_interface(generate_fn) | |
| return interface | |