...
| Codeblock | ||||||
|---|---|---|---|---|---|---|
| ||||||
import time
import requests
# FH Münster LiteLLM Server
API_BASE = "https://litellm.fh-muenster.de"
API_KEY = "sk-..." # Hier Ihren LiteLLM API Schlüssen einfügen
def check_for_budget_error(response):
"""Prüft ob das Budget überschritten wurde"""
try:
result = response.json()
error = result.get("error", {})
if error.get("type") == "budget_exceeded" or "ExceededBudget" in error.get("message", ""):
return True, error.get("message")
except:
pass
return False, None
def generate_and_download_video(prompt, reference_image_path=None):
headers = {
"Authorization": f"Bearer {API_KEY}"
}
# Step 1: Generate video
print("Starting video generation...")
if reference_image_path:
with open(reference_image_path, "rb") as f:
files = {
"input_reference": f
}
data = {
"model": "NOT-EU-vertex/veo-3.1-generate-preview", # Modell auswählen
"prompt": prompt
}
response = requests.post(
f"{API_BASE}/v1/videos",
headers=headers,
data=data,
files=files
)
else:
data = {
"model": "NOT-EU-vertex/veo-3.1-generate-preview", # Modell ohne Referenzbild
"prompt": prompt
}
response = requests.post(
f"{API_BASE}/v1/videos",
headers=headers,
data=data
)
print(f"Response status: {response.status_code}")
# Check for budget exceeded
budget_exceeded, error_msg = check_for_budget_error(response)
if budget_exceeded:
print("\n" + "="*50)
print("FEHLER: BUDGET ÜBERSCHRITTEN!")
print(error_msg)
print("="*50)
return None
print(f"Response: {response.text}")
result = response.json()
video_id = result.get("id")
if not video_id:
print("Error: No video ID received")
return None
print(f"Video ID: {video_id}")
# Step 2: Poll for completion
print("Waiting for video processing...")
max_attempts = 60
attempt = 0
while attempt < max_attempts:
try:
# Check status
status_response = requests.get(
f"{API_BASE}/v1/videos/{video_id}",
headers=headers
)
# Check for budget exceeded
budget_exceeded, error_msg = check_for_budget_error(status_response)
if budget_exceeded:
print("\n" + "="*50)
print("FEHLER: BUDGET ÜBERSCHRITTEN!")
print(error_msg)
print("="*50)
return None
print(f"Status response: {status_response.status_code}")
if status_response.status_code == 200:
status_data = status_response.json()
status = status_data.get("status")
print(f"Attempt {attempt + 1}: Status = {status}")
if status == "completed":
print("Video completed! Downloading...")
# Try to get content
content_response = requests.get(
f"{API_BASE}/v1/videos/{video_id}/content",
headers=headers
)
# Check for budget exceeded
budget_exceeded, error_msg = check_for_budget_error(content_response)
if budget_exceeded:
print("\n" + "="*50)
print("FEHLER: BUDGET ÜBERSCHRITTEN!")
print(error_msg)
print("="*50)
return None
if content_response.status_code == 200:
filename = f"video_{video_id[:20]}.mp4"
with open(filename, "wb") as f:
f.write(content_response.content)
print(f"Video saved: {filename}")
return filename
else:
print(f"Content download failed: {content_response.status_code}")
print(f"Response: {content_response.text}")
# Maybe the video URL is in the status response?
print(f"Full status data: {status_data}")
return None
elif status == "failed":
print(f"Video generation failed: {status_data}")
return None
except Exception as e:
print(f"Attempt {attempt + 1}: Error - {e}")
time.sleep(10)
attempt += 1
print("Timeout: Video generation took too long")
return None
if __name__ == "__main__":
result = generate_and_download_video(
prompt="Make the dog in the reference image bark", # Geben Sie hier Ihren Prompt ein
reference_image_path="C:/Users/mm123456/Desktop/Veo/reference2.png" # Pfad zum Referenzbild
)
if result:
print(f"Success! Video saved as: {result}")
else:
print("Failed to generate video") |
...