"""Video generation API methods.""" from __future__ import annotations from typing import Any, Optional, Tuple from freepik_cli.api.client import FreepikClient from freepik_cli.api.models import ( VIDEO_POST_ENDPOINTS, VIDEO_STATUS_ENDPOINTS, VideoModel, get_output_urls, get_status, get_task_id, ) class VideoAPI: def __init__(self, client: FreepikClient) -> None: self._client = client def generate( self, model: VideoModel, image_b64: str, prompt: Optional[str] = None, duration: int = 5, aspect_ratio: str = "16:9", seed: Optional[int] = None, ) -> str: """Submit an image-to-video task. Returns task_id.""" payload: dict[str, Any] = { "image": image_b64, } if prompt: payload["prompt"] = prompt if duration: payload["duration"] = str(duration) if aspect_ratio: payload["aspect_ratio"] = aspect_ratio if seed is not None: payload["seed"] = seed endpoint = VIDEO_POST_ENDPOINTS[model] raw = self._client.post(endpoint, json=payload) return get_task_id(raw) def get_status(self, model: VideoModel, task_id: str) -> Tuple[str, dict[str, Any]]: """Poll status. Returns (status_str, raw_response).""" endpoint = VIDEO_STATUS_ENDPOINTS[model].format(task_id=task_id) raw = self._client.get(endpoint) return get_status(raw), raw def get_output_urls(self, raw: dict[str, Any]) -> list[str]: return get_output_urls(raw)