mr-dee's picture
Update app.py
569ae5c verified
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()