import requests
import time
class VeoClient:
def __init__(self, api_key):
self.api_key = api_key
self.base_url = "https://platform.runblob.io"
self.headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
def generate(self, prompt, **kwargs):
response = requests.post(
f"{self.base_url}/v1/veo/generate",
headers=self.headers,
json={"prompt": prompt, **kwargs}
)
return response.json()
def generate_frame_to_frame(self, prompt, start_frame, end_frame, **kwargs):
response = requests.post(
f"{self.base_url}/v1/veo/generate",
headers=self.headers,
json={
"prompt": prompt,
"start_frame": start_frame,
"end_frame": end_frame,
"model": "veo-3-fast",
**kwargs
}
)
return response.json()
def generate_with_references(self, prompt, reference_images, **kwargs):
response = requests.post(
f"{self.base_url}/v1/veo/generate",
headers=self.headers,
json={
"prompt": prompt,
"reference_images": reference_images,
"model": "veo-3-fast",
**kwargs
}
)
return response.json()
def status(self, generation_id):
response = requests.get(
f"{self.base_url}/v1/veo/generations/{generation_id}",
headers=self.headers
)
return response.json()
def wait_for_completion(self, generation_id):
while True:
result = self.status(generation_id)
if result["status"] == "completed":
return result["video_url"]
elif result["status"] == "failed":
error = result.get("error", {})
error_msg = error.get("message", "Unknown error")
raise Exception(f"Generation failed: {error_msg}")
time.sleep(10)
# Text-to-Video
client = VeoClient("YOUR_API_KEY")
result = client.generate("A sunset over mountains")
video_url = client.wait_for_completion(result["generation_id"])
print(f"Video ready: {video_url}")
# Frame-to-Frame
result = client.generate_frame_to_frame(
"Smooth transformation",
start_frame="data:image/jpeg;base64,...",
end_frame="data:image/jpeg;base64,...",
aspect_ratio="16:9"
)
video_url = client.wait_for_completion(result["generation_id"])
# Reference Images
result = client.generate_with_references(
"Characters celebrating birthday",
reference_images=[
"data:image/jpeg;base64,...",
"data:image/jpeg;base64,..."
],
aspect_ratio="16:9"
)
video_url = client.wait_for_completion(result["generation_id"])