| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- """
- AI视频相关的数据传输对象定义
- 定义数字人合成、视频合成API的请求和响应数据结构
- """
- from typing import List, Optional
- from decimal import Decimal
- from pydantic import BaseModel, Field
- # ==================== 数字人相关Schema ====================
- class AvatarDetectRequest(BaseModel):
- """数字人图像检测请求"""
- image_url: str = Field(..., description="人物图片URL")
- class AvatarDetectResponse(BaseModel):
- """数字人图像检测响应"""
- check_pass: bool = Field(..., description="是否通过检测")
- humanoid: bool = Field(..., description="是否为人像")
- message: Optional[str] = Field(default=None, description="检测结果说明")
- class AvatarGenerateRequest(BaseModel):
- """数字人合成请求"""
- image_url: str = Field(..., description="人物图片URL")
- audio_url: str = Field(..., description="音频文件URL(wav/mp3,<15M,<20s)")
- resolution: str = Field(default="480P", description="分辨率:480P/720P")
- # ==================== 视频合成相关Schema ====================
- class VideoGenerateRequest(BaseModel):
- """视频生成请求(统一端点)"""
- model: Optional[str] = Field(default=None, description="视频生成模型,如 wan2.6-t2v、wan2.5-t2v-preview、wan2.6-i2v 等,不传则自动选择")
- prompt: str = Field(..., description="视频描述提示词")
- first_frame_url: Optional[str] = Field(default=None, description="首帧图片URL")
- last_frame_url: Optional[str] = Field(default=None, description="尾帧图片URL(需先有首帧)")
- negative_prompt: Optional[str] = Field(default=None, description="反向提示词")
- resolution: str = Field(default="720P", description="分辨率:720P/1080P")
- duration: int = Field(default=5, description="视频时长:5/10/15秒")
- audio_url: Optional[str] = Field(default=None, description="自定义音频URL")
- audio: bool = Field(default=True, description="是否自动生成音频")
- prompt_extend: bool = Field(default=True, description="是否智能改写提示词")
- shot_type: str = Field(default="single", description="镜头类型:single/multi(仅文生视频)")
- watermark: bool = Field(default=False, description="是否添加水印")
- seed: Optional[int] = Field(default=None, description="随机种子")
- class VideoTaskResponse(BaseModel):
- """视频任务创建响应"""
- task_id: str = Field(..., description="任务ID")
- task_status: str = Field(..., description="任务状态:PENDING")
- class VideoTaskResult(BaseModel):
- """视频任务状态查询响应"""
- task_id: str = Field(..., description="任务ID")
- task_status: str = Field(..., description="任务状态:PENDING/RUNNING/SUCCEEDED/FAILED")
- video_url: Optional[str] = Field(default=None, description="视频OSS URL")
- video_duration: Optional[float] = Field(default=None, description="视频时长(秒)")
- actual_prompt: Optional[str] = Field(default=None, description="智能改写后的提示词")
- error_message: Optional[str] = Field(default=None, description="错误信息")
- # ==================== 历史记录相关Schema ====================
- class VideoHistoryItem(BaseModel):
- """视频历史记录项"""
- id: int
- task_id: str
- model_name: str
- video_type: str
- prompt: Optional[str] = None
- custom_name: Optional[str] = None
- video_url: Optional[str] = None
- video_duration: Optional[float] = None
- resolution: Optional[str] = None
- status: str
- bill: float
- created_at: str
- class VideoHistoryResponse(BaseModel):
- """视频历史记录响应"""
- items: List[VideoHistoryItem]
- total: int
- page: int
- page_size: int
- # ==================== 模型配置相关Schema ====================
- class VideoModelConfigResponse(BaseModel):
- """视频模型配置响应"""
- model_name: str
- model_id: str
- model_type: str
- supported_params: dict
- class VideoModelInfo(BaseModel):
- """视频模型信息"""
- model_id: str
- model_name: str
- description: str
- video_type: str # 'text_to_video' | 'image_to_video' | 'avatar'
- price_per_second: str
- class UpdateVideoNameRequest(BaseModel):
- """更新视频名称请求"""
- custom_name: str = Field(..., max_length=200, description="自定义名称")
|