Spaces:
Running
Running
| import gradio as gr | |
| import os | |
| from lumaai import LumaAI | |
| import requests | |
| import time | |
| def generate_video(api_key, prompt, start_image_url=None, resolution="540p", duration="5s"): | |
| # Initialize Luma AI client | |
| client = LumaAI(auth_token=api_key) | |
| try: | |
| # Prepare generation parameters | |
| generation_params = { | |
| "prompt": prompt, | |
| "model": "ray-2", | |
| "resolution": resolution, | |
| "duration": duration | |
| } | |
| # Add keyframe if start image URL is provided | |
| if start_image_url is not None: | |
| generation_params["keyframes"] = { | |
| "frame0": { | |
| "type": "image", | |
| "url": start_image_url | |
| } | |
| } | |
| # Create generation request | |
| generation = client.generations.create(**generation_params) | |
| # Poll for completion | |
| while True: | |
| generation = client.generations.get(id=generation.id) | |
| if generation.state == "completed": | |
| break | |
| elif generation.state == "failed": | |
| raise RuntimeError(f"Generation failed: {generation.failure_reason}") | |
| time.sleep(3) | |
| # Download the video | |
| video_url = generation.assets.video | |
| response = requests.get(video_url, stream=True) | |
| temp_path = f"temp_{generation.id}.mp4" | |
| with open(temp_path, 'wb') as file: | |
| file.write(response.content) | |
| return temp_path | |
| except Exception as e: | |
| return str(e) | |
| # Create Gradio interface using Interface instead of Blocks | |
| app = gr.Interface( | |
| fn=generate_video, | |
| inputs=[ | |
| gr.Textbox(label="Luma AI API Key", type="password"), | |
| gr.Textbox(label="Prompt", placeholder="Enter your video prompt here..."), | |
| gr.Textbox(label="Start Image URL (Optional)", placeholder="Enter image URL..."), | |
| gr.Dropdown(choices=["540p", "720p"], value="540p", label="Resolution"), | |
| gr.Dropdown(choices=["5s", "9s"], value="5s", label="Duration") | |
| ], | |
| outputs=gr.Video(label="Generated Video"), | |
| title="Luma AI Video Generation", | |
| description="Generate videos using Luma AI's Ray-2 model. Optionally provide a starting image URL to influence the initial frame." | |
| ) | |
| app.launch() | |