/** * 视频流程项目相关的TypeScript类型定义 * 包含角色、场景、服装、音乐等完整的数据结构 */ /** * 角色性别枚举 */ export enum Gender { MALE = 'male', FEMALE = 'female' } /** * 角色种族枚举 */ export enum Race { WESTERN = 'Western', ASIAN = 'Asian', AFRICAN = 'African', LATINO = 'Latino', MIDDLE_EASTERN = 'Middle Eastern', MIXED = 'Mixed' } /** * 角色类型枚举 */ export enum RoleType { PROTAGONIST = 'Protagonist', ANTAGONIST = 'Antagonist', SUPPORTING = 'Supporting', BACKGROUND = 'Background' } /** * 项目状态枚举 */ export enum ProjectStatus { COMPLETED = 'COMPLETED', IN_PROGRESS = 'IN_PROGRESS', PENDING = 'PENDING', FAILED = 'FAILED' } /** * 项目步骤枚举 */ export enum ProjectStep { INIT = 'INIT', SKETCH = 'SKETCH', CHARACTER = 'CHARACTER', SHOT_SKETCH = 'SHOT_SKETCH', VIDEO = 'VIDEO', FINAL = 'FINAL' } /** * 项目模式枚举 */ export enum ProjectMode { AUTOMATIC = 'automatic', MANUAL = 'manual', HYBRID = 'hybrid' } /** * 分辨率枚举 */ export enum Resolution { P720 = '720p', P1080 = '1080p', P4K = '4K' } /** * 语言枚举 */ export enum Language { EN = 'en', ZH = 'zh', JA = 'ja', KO = 'ko' } /** * 草图提示JSON结构接口 */ export interface SketchPromptJson { /** 草图名称 */ sketch_name: string; /** 草图描述 */ sketch_description: string; /** 核心氛围 */ core_atmosphere: string; } /** * 草图数据项 */ export interface SketchData { /** 草图名称 */ sketch_name: string; /** 图片ID */ image_id: string; /** 提示词 */ prompt: string; /** 提示词JSON */ prompt_json: SketchPromptJson; /** 图片路径 */ image_path: string; } /** * 草图响应数据接口 */ export interface SketchResponse { /** 总数 */ total_count: number; /** 草图数据列表 */ data: SketchData[]; /** 任务状态 */ task_status: string; } /** * 角色响应数据接口 */ export interface CharacterResponse { /** 角色图片路径 */ image_path: string; /** 角色名称 */ character_name: string; /** 角色描述 */ character_description: string; } /** * 角色数据接口 */ export interface CharacterData { /** 角色数据列表 */ data: CharacterResponse[]; /** 总数 */ total_count: number; /** 任务状态 */ task_status: string; } /** * 镜头草图提示JSON结构接口 */ export interface ShotSketchPromptJson { /** 镜头类型 */ shot_type: string; /** 帧描述 */ frame_description: string; /** 关键动作 */ key_action: string; /** 氛围 */ atmosphere: string; /** 摄影蓝图构图 */ cinematography_blueprint_composition: string; /** 摄影蓝图镜头运动 */ cinematography_blueprint_camera_motion: string; /** 对话表演台词 */ dialogue_performance_line?: any; /** 对话表演语言 */ dialogue_performance_language?: any; /** 对话表演表达 */ dialogue_performance_delivery?: any; /** 对话表演说话者 */ dialogue_performance_speaker?: any; } /** * 镜头草图数据项 */ export interface ShotSketchData { /** 图片ID */ image_id: string; /** 描述 */ description: string; /** 提示词JSON */ prompt_json: ShotSketchPromptJson; /** 图片URL */ url: string; } /** * 镜头草图响应数据接口 */ export interface ShotSketchResponse { /** 镜头草图数据列表 */ data: ShotSketchData[]; /** 总数 */ total_count: number; /** 任务状态 */ task_status: string; } /** * 主要角色列表项 */ export interface MasterCharacterListItem { /** 角色ID */ id: string; /** 角色名称 */ name: string; /** 角色描述 */ description: string; } /** * 主要服装列表项 */ export interface MasterWardrobeListItem { /** 所属角色 */ belongs_to: string; /** 服装描述 */ description: string; } /** * 主要场景列表项 */ export interface MasterSceneListItem { /** 场景名称 */ name: string; /** 场景描述 */ description: string; } /** * 视频提示JSON结构接口 */ export interface VideoPromptJson { /** 导演指令 */ directors_directive: string; /** 叙事提示 */ narrative_prompt: string; /** 对话语言 */ dialogue_language: string; /** 整体项目风格 */ overall_project_style: string; /** 主要角色列表 */ master_character_list: MasterCharacterListItem[]; /** 主要服装列表 */ master_wardrobe_list: MasterWardrobeListItem[]; /** 主要场景列表 */ master_scene_list: MasterSceneListItem[]; /** 核心氛围 */ core_atmosphere: string; } /** * 视频数据项 */ export interface VideoData { /** 视频ID */ video_id: string; /** 描述 */ description: string; /** 提示词JSON */ prompt_json: VideoPromptJson; /** 视频名称前缀 */ video_name_prefix: string; /** 视频URL列表 */ urls: string[]; /** 视频状态 */ video_status: number; } /** * 视频响应数据接口 */ export interface VideoResponse { /** 视频数据列表 */ data: VideoData[]; /** 总数 */ total_count: number; /** 全局ID */ guid: string; /** 项目ID */ project_id: string; /** 任务状态 */ task_status: string; } /** * 音乐数据接口 */ export interface MusicData { [key: string]: any; } /** * 最终视频接口 */ export interface FinalVideo { /** 最终视频URL */ video: string; } /** * 多语言视频接口 */ export interface MultilingualVideo { [key: string]: any; } /** * 项目内容数据接口 */ export interface ProjectContentData { /** 草图数据 */ sketch: SketchResponse; /** 角色数据 */ character: CharacterData; /** 镜头草图数据 */ shot_sketch: ShotSketchResponse; /** 视频数据 */ video: VideoResponse; /** 音乐数据 */ music: MusicData; /** 粗剪视频 */ final_simple_video: FinalVideo; /** 最终视频 */ final_video: FinalVideo; /** 多语言视频 */ multilingual_video: MultilingualVideo; } /** * 视频流程项目 - 完整的接口返回值类型 */ export interface VideoFlowProjectResponse { /** 项目名称 */ name: string; /** 项目ID */ project_id: string; /** 项目模式 */ mode: string; /** 分辨率 */ resolution: string; /** 语言 */ language: string; /** 原始文本 */ original_text: string; /** 生成的脚本 */ generated_script: string; /** 项目状态 */ status: string; /** 项目标题 */ title: string; /** 项目类型 */ genre: string; /** 项目标签 */ tags: string[]; /** 项目步骤 */ step: string; /** 最后消息 */ last_message: string; /** 项目内容 */ data: ProjectContentData; /** 最终简单视频 */ final_simple_video: string; /** 最终视频 */ final_video: string; } /** * 新角色列表项接口 */ export interface NewCharacterItem { /** 角色名称 */ character_name: string; /** 角色描述 */ character_description: string; /** 角色类型 */ role: string; /** 图片路径 */ image_path: string; /** 语音ID */ voice_id: string; /** 语音URL */ voice_url: string; /** 语音描述 */ voice_desc: string; /** 简介 */ brief: string; /** 性别 */ gender: string; /** 体型年龄 */ physique_age: string; /** 关键视觉锚点 */ key_visual_anchors: string; /** 发型 */ hairstyle: string; /** 默认表情 */ default_demeanor: string; /** 种族 */ race: string; } /** * 新角色列表响应接口 */ export interface NewCharacterListResponse { /** 角色列表 */ data: NewCharacterItem[]; } /** * 项目角色列表请求参数 */ export interface CharacterListByProjectRequest { /** 项目ID */ project_id: string; /** 每个角色最多提取的高亮关键词数量 */ max_keywords?: number; } /** * 项目角色列表项(含高亮关键词) */ export interface CharacterListByProjectItem { /** 角色名称 */ character_name: string; /** 角色自然语言描述 */ character_description: string; /** 角色类型/作用 */ role?: string; /** 角色图片URL */ image_path?: string; /** 角色语音ID */ voice_id?: string; /** 角色语音音频URL */ voice_url?: string; /** 角色语音描述 */ voice_desc?: string; /** 角色简要说明/摘要 */ brief?: string; /** 性别 */ gender?: string; /** 体格与年龄描述 */ physique_age?: string; /** 关键视觉锚点 */ key_visual_anchors?: string; /** 发型描述 */ hairstyle?: string; /** 默认行为/性格 */ default_demeanor?: string; /** 种族/人种 */ race?: string; /** 从角色描述提取的高亮关键词/短语 */ highlights: string[]; } /** * 项目角色列表响应 */ export interface CharacterListByProjectWithHighlightResponse { /** 项目ID */ project_id: string; /** 角色列表 */ characters: CharacterListByProjectItem[]; } /** * 角色更新和重新生成请求参数 */ export interface CharacterUpdateAndRegenerateRequest { /** 项目ID */ project_id: string; /** 角色名称 */ character_name: string; /** 新的角色描述 */ character_description: string; /** 返回的高亮关键词数量上限 */ max_keywords?: number; } /** * 角色更新和重新生成响应 */ export interface CharacterUpdateAndRegenerateResponse { /** 角色名称 */ character_name: string; /** 角色描述(已更新) */ character_description: string; /** 重新生成产物的图片地址 */ image_url?: string; /** 从角色描述提取的高亮关键词/短语 */ highlights: string[]; } /** * 角色描述生成请求接口 */ export interface CharacterGenerateDescriptionRequest { /** 前端提供的原始文字描述 */ original_text: string; /** 优化类型 */ optimization_type?: string; /** 风格偏好 */ style_preference?: string; } /** * 角色描述生成响应接口 */ export interface CharacterGenerateDescriptionResponse { /** 原始文本 */ original_text: string; /** 优化后的角色描述 */ optimized_description: string; /** 提取的关键词 */ keywords: string[]; /** 优化类型 */ optimization_type: string; /** 风格偏好 */ style_preference: string; }/** * 边界框坐标信息 * @description 描述检测到的人物在图片中的位置和尺寸 */ export interface BoundingBox { /** X坐标(像素) */ x: number; /** Y坐标(像素) */ y: number; /** 宽度(像素) */ width: number; /** 高度(像素) */ height: number; } /** * 匹配的人物信息 * @description 从图片中识别出的与已知角色匹配的人物信息 */ export interface MatchedPerson { /** 人物名 */ person_id: string; /**x坐标 小数百分比形式 */ x: number; /**y坐标 小数百分比形式 */ y: number; /**宽度 小数百分比形式 */ width: number; /**高度 小数百分比形式 */ height: number; } /** * 角色识别响应结果 * @description API返回的角色识别完整响应 */ export interface RecognitionResult { /** 响应状态码 */ code: number; /** 响应消息 */ message: string; /** 识别结果数据 */ data: MatchedPerson[]; } /** * 使用的角色信息 * @description 在识别过程中使用的已知角色信息 */ export interface CharacterUsed { /** 角色名称 */ character_name: string; /** 角色C-ID */ c_id: string; /** 角色描述 */ character_description: string; /** 角色图片路径 */ image_path: string; /** 角色头像 */ avatar: string; } /** * 角色识别API响应类型 * @description 完整的角色识别API响应结构 */ export interface RoleRecognitionResponse { /** 项目ID */ project_id: string; /** 视频ID */ video_id: string; /** 目标图片URL */ target_image_url: string; /** 已知人物数量 */ known_persons_count: number; /** 识别结果 */ recognition_result: RecognitionResult; /** 使用的角色列表 */ characters_used: CharacterUsed[]; } export interface RoleResponse { data: { /** 角色描述 */ character_description: string; /** 角色名称 */ character_name: string; /** 高亮关键词 */ highlights: string[]; /** 角色图片地址 */ image_path: string; /** 角色图片地址 */ image_url: string; }[]; /**缓存 */ character_draft: string; } export interface RealRoleResponse { system_characters: []; project_characters: RoleResponse[]; } export interface Role { name: string; url: string; status: number; type: string; } interface Scene { url: string; script: string; status: number; type: string; } interface ShotSketch { url: string; script: string; status: number; type: string; } export interface ShotVideo { video_id: string; urls: string[]; video_status: number; type: string; } // 执行loading文字映射 export const LOADING_TEXT_MAP = { initializing: 'initializing...', script: 'Generating script...', getSketchStatus: 'Getting sketch status...', sketch: (count: number, total: number) => `Generating sketch ${count}/${total}...`, character: 'Getting character status...', newCharacter: (count: number, total: number) => `Drawing character ${count}/${total}...`, getShotSketchStatus: 'Getting shot sketch status...', shotSketch: (count: number, total: number) => `Generating shot sketch ${count}/${total}...`, getVideoStatus: 'Getting video status...', video: (count: number, total: number) => `Generating video ${count}/${total}...`, audio: 'Generating background audio...', postProduction: (step: string) => `Post-production: ${step}...`, final: 'Generating final product...', complete: 'Task completed' } as const; export type Status = 'IN_PROGRESS' | 'COMPLETED' | 'FAILED'; export type Stage = 'script' | 'character' | 'scene' | 'shot_sketch' | 'video' | 'final_video'; // 添加 TaskObject 接口 export interface TaskObject { title: string; // 标题 tags?: any[]; // 主题 currentStage: Stage; // 当前阶段 status: Status; // 状态 roles: { data: Role[]; total_count: number; }; // 角色 scenes: { data: Scene[]; total_count: number; }; // 场景 videos: { data: ShotVideo[]; total_count: number; }; // 视频 final: { url: string; note: string; }; // 剪辑视频 }