Remsky's picture
Add initial project structure with Docker support and UI components
599abe6
import requests
import traceback
from typing import Optional
def upload_to_freeimage(file_path: str, status_tracker) -> str:
"""
Upload a file to freeimage.host and return the direct image URL.
Args:
file_path: Path to the file to upload
status_tracker: StatusTracker instance for progress updates
Returns:
str: Direct URL for the uploaded image
Raises:
Exception: If upload fails for any reason
"""
try:
# API endpoint
url = 'https://freeimage.host/api/1/upload'
# Read image file
with open(file_path, 'rb') as image_file:
# Prepare the files and data for upload
files = {
'source': image_file
}
data = {
'key': '6d207e02198a847aa98d0a2a901485a5' # Free API key from freeimage.host
}
status_tracker.update_message("Uploading image to CDN...", 0.05)
# Make the request
response = requests.post(url, files=files, data=data, timeout=30)
response.raise_for_status()
# Get the direct image URL from response
result = response.json()
if result.get('status_code') == 200:
image_url = result['image']['url']
status_tracker.add_step("Image uploaded to CDN", 0.08)
return image_url
else:
raise Exception(f"Upload failed: {result.get('error', 'Unknown error')}")
except requests.Timeout:
raise Exception("CDN is taking a coffee break (timeout)")
except requests.ConnectionError:
raise Exception("Can't reach CDN (is the internet on vacation?)")
except Exception as e:
print(f"CDN upload error: {str(e)}")
print(traceback.format_exc())
raise Exception(f"CDN upload failed: {str(e)}")
def get_camera_motions() -> list:
"""
Get list of available camera motions from LumaAI.
Returns:
list: List of camera motion options
"""
try:
from lumaai import LumaAI
client = LumaAI()
motions = client.generations.camera_motion.list()
return ["None"] + motions
except:
return ["None", "camera orbit left", "camera orbit right", "camera dolly in", "camera dolly out"]