Spaces:
Sleeping
Sleeping
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) |