import apiClient from "../client" export interface GenerateCoverTitleConfig { text?: string font?: string font_size?: number font_color?: string position?: string bold?: boolean italic?: boolean stroke?: boolean | { enabled?: boolean; width?: number; color?: string } shadow?: | boolean | { enabled?: boolean; offset_x?: number; offset_y?: number; blur?: number; color?: string } line_height?: number margin_top?: number max_chars_per_line?: number background?: { enabled?: boolean; color?: string; padding?: number; radius?: number } line_overrides?: Array> cover_title_config?: Record pos_x?: number pos_y?: number } export interface GenerateCoverRequest { /** * 封面源视频标识(二选一): * - generated_video_id:确认生成任务产出的最终视频 ID * - video_url:最终视频 URL(兜底) * 后端根据此标识定位最终成片文件并抽帧,MediaKit 选帧逻辑不变 */ generated_video_id?: string video_url?: string cover_type?: "ai_frame" | "manual" | "upload" | "ai_regenerate" frame_time?: number /** 标题样式,用于在封面上叠加标题文字 */ title_config?: GenerateCoverTitleConfig } export interface GenerateCoverResponse { plan_id: string cover: { scheme?: string asset_id?: string frame_time?: number image_url?: string thumbnail_url?: string [key: string]: unknown } } /** AI 生成封面 — 从最终成片中抽帧(MediaKit 选帧) */ export async function generateCover( templateId: string, data: GenerateCoverRequest, ): Promise { const response = await apiClient.post("/generation/generate-cover", data, { timeout: 300000, params: { template_id: templateId }, }) return response.data }