akhaliq HF staff commited on
Commit
a6b51c5
1 Parent(s): e7f513f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +6 -29
app.py CHANGED
@@ -3,7 +3,6 @@ import os
3
  from lumaai import AsyncLumaAI
4
  import asyncio
5
  import aiohttp
6
- import tempfile
7
 
8
  async def generate_video(api_key, prompt, loop=False, aspect_ratio="16:9", progress=gr.Progress()):
9
  client = AsyncLumaAI(auth_token=api_key)
@@ -61,27 +60,14 @@ async def text_to_video(api_key, prompt, loop, aspect_ratio, progress=gr.Progres
61
  except Exception as e:
62
  return None, f"An error occurred: {str(e)}"
63
 
64
- async def image_to_video(api_key, prompt, image, loop, aspect_ratio, progress=gr.Progress()):
65
  if not api_key:
66
  raise gr.Error("Please enter your Luma AI API key.")
67
 
68
- if image is None:
69
- raise gr.Error("Please upload an image.")
70
-
71
  try:
72
  client = AsyncLumaAI(auth_token=api_key)
73
 
74
- progress(0, desc="Uploading image...")
75
-
76
- # Create a temporary file to store the uploaded image
77
- with tempfile.NamedTemporaryFile(delete=False, suffix=".png") as temp_file:
78
- temp_file.write(image)
79
- temp_file_path = temp_file.name
80
-
81
- # Upload the image to Luma AI (you might need to implement this function)
82
- image_url = await upload_image_to_luma(client, temp_file_path)
83
-
84
- progress(0.1, desc="Initiating video generation from image...")
85
  generation = await client.generations.create(
86
  prompt=prompt,
87
  loop=loop,
@@ -94,7 +80,7 @@ async def image_to_video(api_key, prompt, image, loop, aspect_ratio, progress=gr
94
  }
95
  )
96
 
97
- progress(0.2, desc="Video generation started. Waiting for completion...")
98
 
99
  # Poll for completion
100
  start_time = asyncio.get_event_loop().time()
@@ -107,7 +93,7 @@ async def image_to_video(api_key, prompt, image, loop, aspect_ratio, progress=gr
107
 
108
  # Update progress based on time elapsed (assuming 60 seconds total)
109
  elapsed_time = asyncio.get_event_loop().time() - start_time
110
- progress_value = min(0.2 + (elapsed_time / 60) * 0.7, 0.9)
111
  progress(progress_value, desc="Generating video...")
112
 
113
  await asyncio.sleep(5)
@@ -127,20 +113,11 @@ async def image_to_video(api_key, prompt, image, loop, aspect_ratio, progress=gr
127
  break
128
  fd.write(chunk)
129
 
130
- # Clean up the temporary file
131
- os.unlink(temp_file_path)
132
-
133
  progress(1.0, desc="Video generation complete!")
134
  return file_name, ""
135
  except Exception as e:
136
  return None, f"An error occurred: {str(e)}"
137
 
138
- # You need to implement this function based on Luma AI's API for image uploading
139
- async def upload_image_to_luma(client, image_path):
140
- # This is a placeholder. You need to implement the actual image upload logic
141
- # using the Luma AI API. The function should return the URL of the uploaded image.
142
- raise NotImplementedError("Image upload to Luma AI is not implemented yet.")
143
-
144
  with gr.Blocks() as demo:
145
  gr.Markdown("# Luma AI Text-to-Video Demo")
146
 
@@ -164,7 +141,7 @@ with gr.Blocks() as demo:
164
 
165
  with gr.Tab("Image to Video"):
166
  img_prompt = gr.Textbox(label="Prompt")
167
- img_input = gr.Image(label="Upload Image", type="numpy")
168
  img_generate_btn = gr.Button("Generate Video from Image")
169
  img_video_output = gr.Video(label="Generated Video")
170
  img_error_output = gr.Textbox(label="Error Messages", visible=True)
@@ -175,7 +152,7 @@ with gr.Blocks() as demo:
175
 
176
  img_generate_btn.click(
177
  image_to_video,
178
- inputs=[api_key, img_prompt, img_input, img_loop, img_aspect_ratio],
179
  outputs=[img_video_output, img_error_output]
180
  )
181
 
 
3
  from lumaai import AsyncLumaAI
4
  import asyncio
5
  import aiohttp
 
6
 
7
  async def generate_video(api_key, prompt, loop=False, aspect_ratio="16:9", progress=gr.Progress()):
8
  client = AsyncLumaAI(auth_token=api_key)
 
60
  except Exception as e:
61
  return None, f"An error occurred: {str(e)}"
62
 
63
+ async def image_to_video(api_key, prompt, image_url, loop, aspect_ratio, progress=gr.Progress()):
64
  if not api_key:
65
  raise gr.Error("Please enter your Luma AI API key.")
66
 
 
 
 
67
  try:
68
  client = AsyncLumaAI(auth_token=api_key)
69
 
70
+ progress(0, desc="Initiating video generation from image...")
 
 
 
 
 
 
 
 
 
 
71
  generation = await client.generations.create(
72
  prompt=prompt,
73
  loop=loop,
 
80
  }
81
  )
82
 
83
+ progress(0.1, desc="Video generation started. Waiting for completion...")
84
 
85
  # Poll for completion
86
  start_time = asyncio.get_event_loop().time()
 
93
 
94
  # Update progress based on time elapsed (assuming 60 seconds total)
95
  elapsed_time = asyncio.get_event_loop().time() - start_time
96
+ progress_value = min(0.1 + (elapsed_time / 60) * 0.8, 0.9)
97
  progress(progress_value, desc="Generating video...")
98
 
99
  await asyncio.sleep(5)
 
113
  break
114
  fd.write(chunk)
115
 
 
 
 
116
  progress(1.0, desc="Video generation complete!")
117
  return file_name, ""
118
  except Exception as e:
119
  return None, f"An error occurred: {str(e)}"
120
 
 
 
 
 
 
 
121
  with gr.Blocks() as demo:
122
  gr.Markdown("# Luma AI Text-to-Video Demo")
123
 
 
141
 
142
  with gr.Tab("Image to Video"):
143
  img_prompt = gr.Textbox(label="Prompt")
144
+ img_url = gr.Textbox(label="Image URL")
145
  img_generate_btn = gr.Button("Generate Video from Image")
146
  img_video_output = gr.Video(label="Generated Video")
147
  img_error_output = gr.Textbox(label="Error Messages", visible=True)
 
152
 
153
  img_generate_btn.click(
154
  image_to_video,
155
+ inputs=[api_key, img_prompt, img_url, img_loop, img_aspect_ratio],
156
  outputs=[img_video_output, img_error_output]
157
  )
158