Spaces:
Sleeping
Sleeping
File size: 3,703 Bytes
06a6e91 eacc26a b6a49f0 eacc26a 06a6e91 eacc26a a361f34 eacc26a a361f34 2cde650 eacc26a 2cde650 eacc26a 2cde650 eacc26a a361f34 2cde650 eacc26a 2cde650 eacc26a 2cde650 eacc26a a361f34 06a6e91 eacc26a 06a6e91 eacc26a 06a6e91 eacc26a 2cde650 eacc26a 2cde650 eacc26a 57e4050 2cde650 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
import gradio as gr
import os
from lumaai import LumaAI
import time
import requests
def generate_video(api_key, prompt, loop=False, aspect_ratio="16:9"):
client = LumaAI(auth_token=api_key)
generation = client.generations.create(
prompt=prompt,
loop=loop,
aspect_ratio=aspect_ratio
)
# Poll for completion
while True:
status = client.generations.get(id=generation.id)
if status.status == "completed":
break
time.sleep(5)
# Download the video
video_url = status.assets.video
response = requests.get(video_url, stream=True)
file_name = f"luma_ai_generated_{generation.id}.mp4"
with open(file_name, 'wb') as file:
file.write(response.content)
return file_name
def text_to_video(api_key, prompt, loop, aspect_ratio):
if not api_key:
return "Please enter your Luma AI API key."
try:
video_path = generate_video(api_key, prompt, loop, aspect_ratio)
return video_path
except Exception as e:
return f"An error occurred: {str(e)}"
def image_to_video(api_key, prompt, image_url, loop, aspect_ratio):
if not api_key:
return "Please enter your Luma AI API key."
try:
client = LumaAI(auth_token=api_key)
generation = client.generations.create(
prompt=prompt,
loop=loop,
aspect_ratio=aspect_ratio,
keyframes={
"frame0": {
"type": "image",
"url": image_url
}
}
)
# Poll for completion
while True:
status = client.generations.get(id=generation.id)
if status.status == "completed":
break
time.sleep(5)
# Download the video
video_url = status.assets.video
response = requests.get(video_url, stream=True)
file_name = f"luma_ai_generated_{generation.id}.mp4"
with open(file_name, 'wb') as file:
file.write(response.content)
return file_name
except Exception as e:
return f"An error occurred: {str(e)}"
with gr.Blocks() as demo:
gr.Markdown("# Luma AI Text-to-Video Demo")
api_key = gr.Textbox(label="Luma AI API Key", type="password")
with gr.Tab("Text to Video"):
prompt = gr.Textbox(label="Prompt")
generate_btn = gr.Button("Generate Video")
video_output = gr.Video(label="Generated Video")
with gr.Accordion("Advanced Options", open=False):
loop = gr.Checkbox(label="Loop", value=False)
aspect_ratio = gr.Dropdown(label="Aspect Ratio", choices=["16:9", "1:1", "9:16", "4:3", "3:4"], value="16:9")
generate_btn.click(
text_to_video,
inputs=[api_key, prompt, loop, aspect_ratio],
outputs=video_output
)
with gr.Tab("Image to Video"):
img_prompt = gr.Textbox(label="Prompt")
img_url = gr.Textbox(label="Image URL")
img_generate_btn = gr.Button("Generate Video from Image")
img_video_output = gr.Video(label="Generated Video")
with gr.Accordion("Advanced Options", open=False):
img_loop = gr.Checkbox(label="Loop", value=False)
img_aspect_ratio = gr.Dropdown(label="Aspect Ratio", choices=["16:9", "1:1", "9:16", "4:3", "3:4"], value="16:9")
img_generate_btn.click(
image_to_video,
inputs=[api_key, img_prompt, img_url, img_loop, img_aspect_ratio],
outputs=img_video_output
)
demo.launch() |