""" Video Router - Whisk video generation """ from fastapi import APIRouter, HTTPException from models.requests import VideoGenerateRequest from models.responses import VideoResponse, ErrorResponse from services.whisk_client import WhiskClient router = APIRouter(tags=["Video"]) @router.post( "/video/generate", response_model=VideoResponse, responses={ 400: {"model": ErrorResponse}, 401: {"model": ErrorResponse}, 500: {"model": ErrorResponse} } ) async def generate_video(request: VideoGenerateRequest): """ Generate video from an image using Whisk Animate (Veo). - **prompt**: Motion description for the video - **imageBase64**: Base64 encoded source image (optional if imageGenerationId provided) - **imageGenerationId**: Existing Whisk image ID (optional if imageBase64 provided) - **cookies**: Whisk authentication cookies """ if not request.cookies: raise HTTPException(status_code=401, detail="Whisk cookies not found. Please configure settings.") try: client = WhiskClient(request.cookies) print(f"[Video API] Generating video for prompt: \"{request.prompt[:50]}...\"") result = await client.generate_video( request.imageGenerationId or "", request.prompt, request.imageBase64 ) return VideoResponse( success=True, id=result.id, url=result.url, status=result.status ) except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) except Exception as e: print(f"Video Generation API failed: {e}") raise HTTPException(status_code=500, detail=str(e))