lumapi2 / app.py
seawolf2357's picture
Update app.py
4eada0f verified
raw
history blame
3.31 kB
import gradio as gr
import os
from lumaai import AsyncLumaAI
import asyncio
import aiohttp
async def get_camera_motions():
api_key = os.getenv("LMGEN_KEY")
if not api_key:
raise gr.Error("LMGEN_KEY environment variable is not set.")
client = AsyncLumaAI(auth_token=api_key)
try:
motions = await client.generations.camera_motion.list()
return [str(motion) for motion in motions] # Convert each motion to a string
except Exception as e:
print(f"Error fetching camera motions: {str(e)}")
return []
# ๋‚˜๋จธ์ง€ ํ•จ์ˆ˜๋“ค (generate_video, text_to_video, image_to_video)์€ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค...
with gr.Blocks() as demo:
gr.Markdown("# Luma AI Text-to-Video Demo")
with gr.Tab("Text to Video"):
prompt = gr.Textbox(label="Prompt")
generate_btn = gr.Button("Generate Video")
video_output = gr.Video(label="Generated Video")
error_output = gr.Textbox(label="Error Messages", visible=True)
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")
camera_motion = gr.Dropdown(label="Camera Motion", choices=[])
extend_id = gr.Textbox(label="Extend Video ID (optional)")
reverse_extend_id = gr.Textbox(label="Reverse Extend Video ID (optional)")
with gr.Row():
interpolate_id1 = gr.Textbox(label="Interpolate Video ID 1 (optional)")
interpolate_id2 = gr.Textbox(label="Interpolate Video ID 2 (optional)")
generate_btn.click(
text_to_video,
inputs=[prompt, loop, aspect_ratio, camera_motion, extend_id, reverse_extend_id, interpolate_id1, interpolate_id2],
outputs=[video_output, error_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")
img_error_output = gr.Textbox(label="Error Messages", visible=True)
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_camera_motion = gr.Dropdown(label="Camera Motion", choices=[])
img_generate_btn.click(
image_to_video,
inputs=[img_prompt, img_url, img_loop, img_aspect_ratio, img_camera_motion],
outputs=[img_video_output, img_error_output]
)
async def update_camera_motions():
try:
motions = await get_camera_motions()
return {camera_motion: gr.update(choices=motions), img_camera_motion: gr.update(choices=motions)}
except Exception as e:
print(f"Error updating camera motions: {str(e)}")
return {camera_motion: gr.update(choices=[]), img_camera_motion: gr.update(choices=[])}
demo.load(update_camera_motions)
demo.queue().launch(debug=True)