import { post } from './request'; import { ProjectTypeEnum } from './enums'; import { ApiResponse } from './common'; // 场景/分镜头数据结构 export interface Scene { id: string; name: string; description: string; plot: string; dialogue: string; narration: string; imageUrl?: string; } // 角色数据结构 export interface Character { id: string; name: string; description: string; personality: string; appearance: string; voice: string; avatar?: string; fullBodyImage?: string; audioSample?: string; styles?: string[]; currentStyle?: number; } // 剧本到分镜头提示词模型 export interface ScenePrompts { scenes: Scene[]; // 分场景列表 characters?: Character[]; // 角色列表 summary?: string; // 剧情概要 scene?: string; // 场景描述 atmosphere?: string; // 氛围描述 episode_id?: number; // 剧集ID total_shots?: string; // 总镜头数 } // 剧本转分镜头请求接口 export interface ScriptToSceneRequest { script: string; episode_id: number; script_id: number; project_type: ProjectTypeEnum.SCRIPT_TO_VIDEO; } // 视频转分镜头请求接口 export interface VideoToSceneRequest { video_url: string; episode_id: number; script_id: number; project_type: ProjectTypeEnum.VIDEO_TO_VIDEO; } // 转换分镜头请求类型 export type ConvertScenePromptRequest = ScriptToSceneRequest | VideoToSceneRequest; // 转换分镜头响应接口 export type ConvertScenePromptResponse = ApiResponse; /** * 将剧本或视频转换为分镜头提示词 * @param request - 请求参数,根据 project_type 自动判断是剧本还是视频模式 * @returns Promise */ export const convertScenePrompt = async ( request: ConvertScenePromptRequest ): Promise => { return post('/video_flow/convert-scene-prompts', request); }; /** * 剧本转分镜头提示词 * @param script - 剧本内容 * @returns Promise */ export const convertScriptToScene = async ( script: string, episode_id: number, script_id: number ): Promise => { return convertScenePrompt({ script, episode_id, script_id, project_type: ProjectTypeEnum.SCRIPT_TO_VIDEO }); }; /** * 视频转分镜头提示词 * @param video_url - 视频链接 * @returns Promise */ export const convertVideoToScene = async ( video_url: string, episode_id: number, script_id: number ): Promise => { return convertScenePrompt({ video_url, episode_id, script_id, project_type: ProjectTypeEnum.VIDEO_TO_VIDEO }); };