admin08077 commited on
Commit
2a650cd
·
verified ·
1 Parent(s): e176905

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +37 -67
app.py CHANGED
@@ -1,77 +1,47 @@
1
  import os
2
- import google-genai as genai
3
- import gradio as gr
4
- import base64
5
  import time
6
- import requests
7
-
8
- # Set up your API key
9
- genai.configure(api_key=os.getenv("GEMINI_API_KEY", "your-api-key-here"))
10
-
11
- # Helper to encode image
12
- def encode_image(image_path):
13
- with open(image_path, "rb") as f:
14
- return base64.b64encode(f.read()).decode("utf-8")
15
-
16
- # Polling for operation
17
- def poll_operation(op_name):
18
- while True:
19
- op = genai.get_operation(name=op_name)
20
- if op.get("done"):
21
- return op
22
- time.sleep(2)
23
-
24
- # Main generation function
25
- def generate_video(prompt, image):
26
- if not prompt or image is None:
27
- return "Prompt and image are required.", None
28
-
29
- image_b64 = encode_image(image)
30
-
31
- model = genai.GenerativeModel("veo-2.0-generate-001") # Use correct model name
32
- try:
33
- op = model.generate_videos(
34
- prompt=prompt,
35
- image={
36
- "imageBytes": image_b64,
37
- "mimeType": "image/png"
38
- },
39
- config={
40
- "numberOfVideos": 1
41
- }
42
- )
43
-
44
- op_result = poll_operation(op["name"])
45
- videos = op_result["response"].get("generatedVideos", [])
46
-
47
- if not videos:
48
- return "No video returned", None
49
-
50
- video_url = videos[0]["video"]["uri"]
51
- video_data = requests.get(video_url).content
52
-
53
- output_path = "generated_video.mp4"
54
- with open(output_path, "wb") as f:
55
- f.write(video_data)
56
-
57
- return "Video generated successfully.", output_path
58
-
59
- except Exception as e:
60
- return f"Error: {str(e)}", None
61
 
62
- # Gradio UI
63
  with gr.Blocks() as demo:
64
- gr.Markdown("## 🎬 Gemini Veo Video Generator")
65
- prompt_input = gr.Textbox(label="Prompt")
66
- image_input = gr.Image(type="filepath", label="Upload an Image")
67
  generate_btn = gr.Button("Generate Video")
68
- status = gr.Textbox(label="Status")
69
  video_output = gr.Video(label="Generated Video")
 
70
 
71
- def run(prompt, image):
72
- msg, path = generate_video(prompt, image)
73
- return msg, path
 
 
74
 
75
- generate_btn.click(fn=run, inputs=[prompt_input, image_input], outputs=[status, video_output])
76
 
77
  demo.launch()
 
1
  import os
 
 
 
2
  import time
3
+ import gradio as gr
4
+ from google import genai
5
+
6
+ # Initialize client with API key from env var
7
+ client = genai.Client()
8
+
9
+ def generate_video(prompt):
10
+ operation = client.models.generate_videos(
11
+ model="veo-3.0-generate-preview",
12
+ prompt=prompt,
13
+ )
14
+
15
+ while not operation.done:
16
+ print("Waiting for video generation to complete...")
17
+ time.sleep(10)
18
+ operation = client.operations.get(operation)
19
+
20
+ generated_video = operation.response.generated_videos[0]
21
+ # Download video bytes
22
+ video_file = client.files.download(file=generated_video.video)
23
+
24
+ # Save locally
25
+ video_path = "dialogue_example.mp4"
26
+ with open(video_path, "wb") as f:
27
+ f.write(video_file)
28
+
29
+ return video_path
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
 
 
31
  with gr.Blocks() as demo:
32
+ gr.Markdown("# Gemini Veo Video Generator")
33
+ prompt_input = gr.Textbox(label="Video Prompt", value="""A close up of two people staring at a cryptic drawing on a wall, torchlight flickering.
34
+ A man murmurs, 'This must be it. That's the secret code.' The woman looks at him and whispering excitedly, 'What did you find?'""")
35
  generate_btn = gr.Button("Generate Video")
 
36
  video_output = gr.Video(label="Generated Video")
37
+ status = gr.Textbox(label="Status")
38
 
39
+ def on_generate(prompt):
40
+ status.update("Generating video, please wait...")
41
+ video_path = generate_video(prompt)
42
+ status.update("Generation complete!")
43
+ return video_path, "Generation complete!"
44
 
45
+ generate_btn.click(on_generate, inputs=prompt_input, outputs=[video_output, status])
46
 
47
  demo.launch()